-- 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;
