All checks were successful
Deploy Trade-In / changes (push) Successful in 12s
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / test (push) Successful in 45s
Deploy Trade-In / build-backend (push) Successful in 1m1s
Deploy Trade-In / deploy (push) Successful in 2m46s
67 lines
4.7 KiB
PL/PgSQL
67 lines
4.7 KiB
PL/PgSQL
-- 176_domrf_kapremont.sql
|
||
--
|
||
-- CONTEXT: issue #2013 — houses.year_built заполнен только на 38%, houses.material_walls
|
||
-- на 0%. Существующий ГИС-ЖКХ loader (app/tasks/zhkh_flats_load.py, мигр. 146/149)
|
||
-- заполняет houses.zhkh_year (70% = 5002/7128) и houses.zhkh_floors (70%), НО НИКОГДА
|
||
-- не копирует их в houses.year_built/total_floors — это основной пробел. material_walls
|
||
-- вообще ни разу не заполнялся никаким источником (0%). Estimator
|
||
-- (app/services/estimator.py) фильтрует когорту по `year_built BETWEEN ...` — реальные
|
||
-- годы напрямую двигают точность оценки. Это REAL fix для #2013 (взамен запаркованного
|
||
-- когорт-исключения PR #2474).
|
||
--
|
||
-- Источник: ДОМ.РФ капремонт open data (free, no auth), region 66 (Свердловская обл.):
|
||
-- КР1.1 house registry (export/190) — zip → CSV. mkd_code, houseguid (ФИАС GUID дома),
|
||
-- address, commission_year (год ввода, int), total_sq, number_floors_max.
|
||
-- КР1.2 constructive elements (export/275) — zip → CSV, LONG FORMAT (строка на
|
||
-- конструктивный элемент на mkd_code); wall_material заполнен только на строке
|
||
-- элемента «фасад».
|
||
-- listings→houses линковка через listings.house_id_fk (avito 52.5% linked, year_built
|
||
-- 0% на avito → backfill поднимет до ~36-52% через houses.year_built propagation).
|
||
--
|
||
-- WHAT:
|
||
-- Таблица domrf_kapremont — staging-приёмник КР1.1+КР1.2 (region 66), ключ mkd_code.
|
||
-- Заполняется отдельным loader'ом (app/services/domrf_kapremont_loader.py,
|
||
-- app/tasks/domrf_kapremont_load.py). Backfill houses.year_built/material_walls/
|
||
-- total_floors и propagation listings.year_built — отдельный код-путь той же таски,
|
||
-- НЕ в этой миграции (только схема здесь, никакого DML над houses/listings).
|
||
--
|
||
-- DEPENDENCIES (existing prod objects): houses (gar_house_guid, house_fias_id,
|
||
-- zhkh_house_guid, zhkh_year, zhkh_floors, year_built, material_walls, total_floors —
|
||
-- все уже существуют: мигр. 009/010/070/146/149/152), listings (house_id_fk, year_built —
|
||
-- мигр. 002/130).
|
||
--
|
||
-- SAFETY / IDEMPOTENCY: только CREATE TABLE/INDEX IF NOT EXISTS + COMMENT. Повторный
|
||
-- прогон — no-op. Деплой-раннер гонит файл через psql -v ON_ERROR_STOP=on БЕЗ
|
||
-- --single-transaction → транзакцию открывает САМ файл (BEGIN/COMMIT ниже), как 143/149.
|
||
--
|
||
-- NB по нумерации: последний занятый = 175 (ls data/sql | grep '^17[0-9]'); следующий
|
||
-- свободный sequential = 176.
|
||
--
|
||
-- Deploy order: после 175_scrape_schedules_seed_domclick_detail_backfill.sql.
|
||
|
||
BEGIN;
|
||
|
||
CREATE TABLE IF NOT EXISTS domrf_kapremont (
|
||
mkd_code text PRIMARY KEY, -- ДОМ.РФ код МКД (КР1.1/КР1.2 join-ключ)
|
||
houseguid text, -- ФИАС GUID дома (КР1.1 houseguid)
|
||
address text,
|
||
commission_year smallint, -- год ввода в эксплуатацию (КР1.1 commission_year)
|
||
number_floors_max int, -- этажность (КР1.1 number_floors_max)
|
||
total_sq numeric(10, 2), -- общая площадь дома, м² (КР1.1 total_sq)
|
||
wall_material text, -- материал стен (КР1.2, строка «фасад»; wall_material)
|
||
loaded_at timestamptz NOT NULL DEFAULT now()
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS domrf_kapremont_houseguid_idx
|
||
ON domrf_kapremont (houseguid)
|
||
WHERE houseguid IS NOT NULL;
|
||
|
||
COMMENT ON TABLE domrf_kapremont IS
|
||
'ДОМ.РФ капремонт open data (КР1.1 house registry export/190 + КР1.2 constructive '
|
||
'elements export/275), region 66 (Свердловская обл.). Ключ mkd_code. houseguid — ФИАС '
|
||
'GUID дома, матчится к houses через COALESCE(gar_house_guid, house_fias_id, '
|
||
'zhkh_house_guid) (app/services/domrf_kapremont_loader.py). wall_material берётся из '
|
||
'КР1.2 со строки конструктивного элемента «фасад» (единственная строка на mkd_code, '
|
||
'где это поле непустое). Заполняется app/tasks/domrf_kapremont_load.py (issue #2013).';
|
||
|
||
COMMIT;
|