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
Миграция 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>
37 lines
2.6 KiB
PL/PgSQL
37 lines
2.6 KiB
PL/PgSQL
-- 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;
|