166 lines
8.1 KiB
SQL
166 lines
8.1 KiB
SQL
-- 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)
|
||
);
|