fix(recommend): cad_buildings.floors is INTEGER, not TEXT

PROD 500 on /api/v1/analytics/recommend/mix:
  psycopg.errors.UndefinedFunction: operator does not exist: integer ~ unknown
  LINE 19: AND ((cb.floors ~ '^[0-9]+$' AND cb.f...

_district_cadastre_baseline use regex \ on cb.floors. Schema is INTEGER
(verified information_schema), so the regex defence against text values
('1-2', '2-3' etc) is misplaced — simplify to floors >= 3 with NULL safety
via OR purpose ILIKE '%многокв%' fallback.
This commit is contained in:
lekss361 2026-05-16 18:29:35 +03:00
parent 277499684b
commit fbb76812f4

View file

@ -1349,10 +1349,9 @@ def _district_cadastre_baseline(db: Session, *, district_name: str) -> dict[str,
WHERE cb.cost_value IS NOT NULL
AND cb.area IS NOT NULL
AND cb.area >= 100
-- floors хранится как TEXT (встречаются '1-2', '2-3')
-- считаем только чистые числа 3, либо purpose-fallback.
AND ((cb.floors ~ '^[0-9]+$' AND cb.floors::int >= 3)
OR cb.purpose ILIKE '%многокв%')
-- floors INTEGER (Rosreestr ETL приводит к int); NULL = unknown.
-- Считаем МКД если floors 3 или purpose содержит «многокв».
AND (cb.floors >= 3 OR cb.purpose ILIKE '%многокв%')
AND (cb.cost_value / NULLIF(cb.area, 0))
BETWEEN 5000 AND 500000
)