gendesign/tradein-mvp/backend/data/sql/272_houses_region_code.sql
bot-backend 27fdd55aae
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
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 4m32s
feat(tradein/matching): region_code у houses — вывод, а не выдумка (#3051 п.4)
Миграция 272: колонка + бэкфилл ТОЛЬКО по bbox региона 66 (значения
байт-в-байт из реестра, синхронизацию держит тест). Карантин NULL:
620 домов без geom, 23 порченых (ЕКБ-адреса с чужими координатами —
«Вильгельма де Геннина» на Байкале, «Крауля» под Москвой, «Учителей» в
Таллине, с живыми ссылками листингов) — им регион не присваивается,
включая 3 дома с координатами в bbox Москвы (порча, не переезд). NOT NULL
из постановки — отдельной миграцией, когда карантин опустеет.

Запись: новый дом наследует регион РАЗВЁРТКИ (base.py → контракт →
адаптер → matching), только если координаты не противоречат; координаты
другого региона → NULL-карантин + warning. Вне-bbox координаты при живой
развёртке наследуют её регион (адрес и развёртка согласны, координатам
веры нет) — семантика закреплена тестом, чтобы смена была осознанной.

Матчинг-запросы НЕ тронуты — гард по региону это #3052.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 13:51:48 +05:00

37 lines
2.6 KiB
PL/PgSQL
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.

-- 272_houses_region_code.sql
-- #3051 п.4: region_code у houses — вывод, а не выдумка.
--
-- Правило вывода на бэкфилле: регион присваивается ТОЛЬКО дому, чья геометрия
-- лежит в генеральном bbox региона 66 (вся сегодняшняя база — екатеринбургская,
-- региона-77 сбора не существует). Всё прочее — NULL, то есть КАРАНТИН:
-- * 620 домов без geom — регион невыводим до гео-обогащения;
-- * ~20 «чужаков» — ЕКБ-адреса с испорченным геокодом («Вильгельма де
-- Геннина» на Байкале, «Учителей» в Таллине; замер 27.08) — присвоить им
-- регион по координатам значило бы узаконить порчу;
-- * 3 дома с координатами в bbox Москвы — ТОЖЕ порченые ЕКБ («Крауля, гп 1»,
-- «Академика Ландау») — потому 77 на бэкфилле не присваивается ВООБЩЕ.
--
-- NOT NULL из постановки задачи НЕ ставится этой миграцией: карантин должен
-- сначала опустеть (гео-обогащение 620 + починка 23 порченых) — иначе
-- ограничение заставило бы выдумывать значения. Ставится отдельной миграцией
-- по факту пустого карантина.
--
-- bbox 66 — байт-в-байт bbox_region из app/services/regions.py (реестр #3051);
-- синхронизацию значений держит tests/test_3051_houses_region_code.py.
-- Идемпотентно: повторный прогон обновит 0 строк.
BEGIN;
SET LOCAL lock_timeout = '5s';
ALTER TABLE houses ADD COLUMN IF NOT EXISTS region_code smallint;
COMMENT ON COLUMN houses.region_code IS
'#3051: регион дома (66=Свердловская, 77=Москва). NULL = карантин: регион '
'невыводим (нет geom / координаты противоречат происхождению). Источник '
'правил — app/services/regions.py.';
UPDATE houses
SET region_code = 66
WHERE region_code IS NULL
AND geom IS NOT NULL
AND ST_Y(geom) BETWEEN 55.8 AND 62.2
AND ST_X(geom) BETWEEN 56.7 AND 66.6;
COMMIT;