gendesign/data/sql/58_schema_cad_quarters.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

37 lines
1.9 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.

-- Cad-quarter polygons (NSPD) + obj_id ↔ cad_quarter mapping.
--
-- Purpose: связать domrf_kn_objects (lat/lon) и rosreestr_deals (quarter_cad_number)
-- через PostGIS spatial-join. Это даёт per-ЖК аппроксимацию rosreestr-сделок
-- (распределение пропорционально flat_count внутри квартала).
--
-- Source: NSPD nspd.gov.ru thematicSearchId=1 (кадастровые кварталы).
-- Coverage: ~674 кварталов в ЕКБ с ДДУ-сделками на квартиры (см. 58_fetch_cad_quarters_nspd.py).
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE TABLE IF NOT EXISTS cad_quarters_geom (
cad_number TEXT PRIMARY KEY,
geom geometry(MultiPolygon, 4326) NOT NULL,
raw_props jsonb,
fetched_at timestamptz NOT NULL DEFAULT NOW(),
source TEXT NOT NULL DEFAULT 'nspd'
);
CREATE INDEX IF NOT EXISTS cad_quarters_geom_gist
ON cad_quarters_geom USING GIST (geom);
-- На domrf_kn_objects добавляем cad_quarter (заполняется backfill-скриптом
-- 59_backfill_obj_cad_quarter.sql через ST_Contains по lat/lon).
ALTER TABLE domrf_kn_objects
ADD COLUMN IF NOT EXISTS cad_quarter TEXT;
CREATE INDEX IF NOT EXISTS domrf_kn_objects_cad_quarter_idx
ON domrf_kn_objects(cad_quarter);
COMMENT ON TABLE cad_quarters_geom IS
'Кадастровые кварталы РФ (полигоны NSPD). Используется для spatial-join '
'rosreestr_deals (по quarter_cad_number) → domrf_kn_objects (по lat/lon → ST_Contains).';
COMMENT ON COLUMN domrf_kn_objects.cad_quarter IS
'Кадастровый квартал, в который попадают координаты ЖК. Заполняется '
'59_backfill_obj_cad_quarter.sql через ST_Contains(cad_quarters_geom.geom, lat/lon).';