All checks were successful
CI / changes (pull_request) Successful in 7s
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 51s
houses.year_built is only 38% filled and material_walls 0%. The existing ГИС-ЖКХ loader already populates houses.zhkh_year (70%) but never copies it into year_built — that's the core gap. Adds a ДОМ.РФ капремонт open-data loader (КР1.1 house registry + КР1.2 constructive elements, region 66) into a new domrf_kapremont staging table, then backfills houses.year_built/material_walls/ total_floors via COALESCE(existing, domrf, zhkh_year) — folding in the already-loaded ЖКХ year so houses without a ДОМ.РФ match still benefit — and propagates houses.year_built into listings.year_built for still-NULL rows so the estimator's year_built cohort filter runs on real years across all sources (avito 0%→~36-52% once linked houses gain a year). Supersedes the parked cohort-exclusion PR #2474.
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;
|