gendesign/data/sql/59_backfill_obj_cad_quarter.sql
lekss361 25b73035a1 sprint1: nspd scraper industrialization, per-bucket elasticity, cadastre cross-check, sentry releases
- NSPD-skraper переехал в backend/app/services/scrapers/nspd_kn.py +
  Celery task scrape_nspd_region (beat: 20-е февраля/мая/авг/нояб).
  Redis lock 3h, WAF auto-retry, heartbeat в nspd_scrape_runs.
- Recommend_mix Tier 3: per-bucket elasticity через регрессию по
  «доминирующему bucket» каждого ЖК. Weighted-elasticity для inverse-mode.
  UI показывает разброс эластичностей и переключение regression/fallback.
- Cadastre vs market cross-check: spatial-join cad_buildings →
  ekb_districts_geom; cadastre_vs_market_pct в scope, аномалии
  (>+50% / <-30%) подсвечены в UI.
- Sentry release tracking (#4): IMAGE_TAG → backend/.env.runtime →
  sentry_sdk.init(release=...). Compose v2 env_file optional path.

Schemas: 63_schema_nspd_runs.sql (cad_buildings + nspd_scrape_runs/log
формализуют то, что уже жило в проде через 61_import_nspd_batch.py),
64_v_zk_rosreestr_velocity.sql (refresh с cad_buildings).
2026-04-30 21:51:19 +03:00

27 lines
1.2 KiB
SQL
Raw Permalink 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.

-- Backfill domrf_kn_objects.cad_quarter через ST_Contains spatial-join.
--
-- Логика: каждый ЖК с lat/lon → найти cad-квартал, в полигон которого попадает
-- точка. Если ЖК на границе двух кварталов — берём первый (ST_Contains
-- однозначен, ST_Intersects дал бы пересечения).
--
-- Запускать ПОСЛЕ 58_fetch_cad_quarters_nspd.py.
UPDATE domrf_kn_objects o
SET cad_quarter = cq.cad_number
FROM cad_quarters_geom cq
WHERE o.region_cd = 66
AND o.latitude IS NOT NULL
AND o.longitude IS NOT NULL
AND ST_Contains(
cq.geom,
ST_SetSRID(ST_MakePoint(o.longitude, o.latitude), 4326)
)
AND (o.cad_quarter IS NULL OR o.cad_quarter <> cq.cad_number);
-- Контрольные цифры: сколько ЖК привязано / без привязки.
SELECT
COUNT(*) FILTER (WHERE cad_quarter IS NOT NULL) AS with_cad,
COUNT(*) FILTER (WHERE cad_quarter IS NULL) AS without_cad,
COUNT(DISTINCT cad_quarter) AS unique_quarters_used
FROM domrf_kn_objects
WHERE region_cd = 66 AND district_name IS NOT NULL;