gendesign/data/sql/31_schema_domrf_full.sql
2026-04-26 22:30:52 +03:00

166 lines
8.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- DOM.RF analytics, normalized schema for scraper output (data/raw/domrf_full/*).
-- Snapshot date stamped per scrape; idempotent UPSERT loaders.
-- ── 1. Launch (запуски + ввод в эксплуатацию) ────────────────────────────────
-- Topology: page returns top-N entities (developers/regions/areas/fo) with launch (app)
-- and commissioning (rnv) values. Single table covers all 4 dimensions via dim_type.
CREATE TABLE IF NOT EXISTS domrf_launch_top (
snapshot_date DATE NOT NULL,
rep_year INT NOT NULL,
calc_type TEXT NOT NULL, -- 'SQUARE' (м²) | 'HOUSES' (шт) | 'FLATS' (шт)
dim_type TEXT NOT NULL, -- 'developer' | 'region' | 'area' | 'fo'
metric_type TEXT NOT NULL, -- 'app' (запуски) | 'rnv' (ввод)
entity_id TEXT NOT NULL, -- '6072_0' (developer) | '50' (region) | 'Москва' (area)
entity_name TEXT NOT NULL,
value NUMERIC NOT NULL,
PRIMARY KEY (snapshot_date, rep_year, calc_type, dim_type, metric_type, entity_id)
);
CREATE INDEX IF NOT EXISTS idx_launch_top_dim ON domrf_launch_top (dim_type, metric_type, value DESC);
-- Объёмы по классам жилья
CREATE TABLE IF NOT EXISTS domrf_launch_obj_class (
snapshot_date DATE NOT NULL,
rep_year INT NOT NULL,
calc_type TEXT NOT NULL,
obj_class_cd INT NOT NULL, -- 1=Типовой, 2=Комфорт, 3=Бизнес, 4=Элитный
obj_class_desc TEXT NOT NULL,
app_value NUMERIC,
rnv_value NUMERIC,
PRIMARY KEY (snapshot_date, rep_year, calc_type, obj_class_cd)
);
-- Time series: год × месяц → запуски/вводы
CREATE TABLE IF NOT EXISTS domrf_launch_monthly (
snapshot_date DATE NOT NULL,
calc_type TEXT NOT NULL,
rep_year INT NOT NULL,
rep_month INT NOT NULL, -- 1..12
app_value NUMERIC,
rnv_value NUMERIC,
PRIMARY KEY (snapshot_date, calc_type, rep_year, rep_month)
);
-- ── 2. Реализация / распроданность-стройготовность (sold_ready) ──────────────
CREATE TABLE IF NOT EXISTS domrf_sold_ready_index (
snapshot_date DATE NOT NULL,
rep_year INT NOT NULL,
rep_month INT NOT NULL,
square_sum NUMERIC, -- всего стр. площади РФ, м²
sold_perc NUMERIC, -- % проданного
sold_sum NUMERIC, -- проданная площадь, м²
sold_ready_perc NUMERIC, -- "распроданность ÷ готовность"
ready_perc NUMERIC, -- % готовности
PRIMARY KEY (snapshot_date, rep_year, rep_month)
);
-- Reality breakdowns: foChart / regionChart / cityChart / devChart …
CREATE TABLE IF NOT EXISTS domrf_sold_ready_breakdown (
snapshot_date DATE NOT NULL,
rep_year INT NOT NULL,
rep_month INT NOT NULL,
chart_type TEXT NOT NULL, -- 'foChart' | 'regionChart' | 'cityChart' | 'devChart' | ...
entity_key TEXT NOT NULL, -- название/код
square_sum NUMERIC,
sold_perc NUMERIC,
ready_perc NUMERIC,
sold_ready_perc NUMERIC,
fo_cd INT,
extra JSONB, -- backup для прочих полей
PRIMARY KEY (snapshot_date, rep_year, rep_month, chart_type, entity_key)
);
-- Динамика: chartType × год × месяц → значение
CREATE TABLE IF NOT EXISTS domrf_sold_ready_dynamics (
snapshot_date DATE NOT NULL,
dynamic_chart_type TEXT NOT NULL, -- 'squareSumChart' | 'soldPercChart' | 'readyPercChart' | 'soldReadyPercChart'
rep_year INT NOT NULL,
rep_month INT NOT NULL,
value NUMERIC,
PRIMARY KEY (snapshot_date, dynamic_chart_type, rep_year, rep_month)
);
-- ── 3. Share construction (долевое стр-во / project finance) ────────────────
-- /аналитика/api/project/finance/dashboard returns rows per region/FO/RF.
CREATE TABLE IF NOT EXISTS domrf_project_finance (
snapshot_date DATE NOT NULL,
report_date DATE,
subject_type TEXT, -- 'rf' | 'fo' | 'region'
subject_name TEXT,
region_cd INT,
fo_cd INT,
fo_desc TEXT,
rns_cnt INT, -- разрешения на стр-во
dev_cnt INT, -- застройщики
liv_sq_amt NUMERIC, -- жилая площадь м²
guaranty_escrow_rns_cnt INT, -- эскроу разрешения
guaranty_escrow_dev_cnt INT,
guaranty_escrow_liv_sq_amt NUMERIC,
guaranty_zosg_rns_cnt INT,
guaranty_zosg_dev_cnt INT,
guaranty_zosg_liv_sq_amt NUMERIC,
guaranty_rns_cnt INT, -- всего по 214-ФЗ
guaranty_dev_cnt INT,
guaranty_liv_sq_amt NUMERIC,
nonguaranty_rns_cnt INT, -- ПП №480
nonguaranty_dev_cnt INT,
nonguaranty_liv_sq_amt NUMERIC,
extra JSONB,
id BIGSERIAL PRIMARY KEY
);
CREATE UNIQUE INDEX IF NOT EXISTS uq_project_finance_snap
ON domrf_project_finance (snapshot_date, COALESCE(subject_type, ''), COALESCE(subject_name, ''));
-- ── 4. Ввод жилья (commissioning building_summary) ──────────────────────────
CREATE TABLE IF NOT EXISTS domrf_commissioning (
snapshot_date DATE NOT NULL,
region_id INT NOT NULL,
region_name TEXT NOT NULL,
region_type TEXT, -- 'rf' | 'fo' | 'region'
reporting_period DATE NOT NULL,
rep_year INT,
accumulated_fact_area NUMERIC,
accumulated_fact_area_multifamily NUMERIC,
accumulated_fact_area_private NUMERIC,
accumulated_fact_area_change NUMERIC,
accumulated_fact_area_change_share NUMERIC,
extra JSONB,
PRIMARY KEY (snapshot_date, region_id, reporting_period)
);
-- ── 5. Mortgage stats ───────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS domrf_mortgage_dashboard (
snapshot_date DATE NOT NULL PRIMARY KEY,
total_credit_count INT,
total_credit_count_delta_pct NUMERIC,
primary_credit_count INT,
primary_credit_count_delta_pct NUMERIC,
secondary_credit_count INT,
secondary_credit_count_delta_pct NUMERIC,
total_credit_amount NUMERIC,
total_credit_amount_delta_pct NUMERIC,
primary_credit_amount NUMERIC,
primary_credit_amount_delta_pct NUMERIC,
secondary_credit_amount NUMERIC,
secondary_credit_amount_delta_pct NUMERIC,
total_credit_avg_rate NUMERIC,
total_credit_avg_rate_delta NUMERIC,
primary_credit_avg_rate NUMERIC,
primary_credit_avg_rate_delta NUMERIC,
secondary_credit_avg_rate NUMERIC,
secondary_credit_avg_rate_delta NUMERIC,
extra JSONB
);
CREATE TABLE IF NOT EXISTS domrf_mortgage_details (
snapshot_date DATE NOT NULL,
currency TEXT NOT NULL,
credit_amount_avg NUMERIC,
credit_amount_avg_delta_pct NUMERIC,
credit_avg_period NUMERIC,
credit_avg_period_delta_pct NUMERIC,
credit_debts_amount NUMERIC,
credit_debts_amount_delta_pct NUMERIC,
credit_debts_overdue_percent NUMERIC,
credit_debts_overdue_percent_delta NUMERIC,
PRIMARY KEY (snapshot_date, currency)
);