- 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).
37 lines
1.9 KiB
SQL
37 lines
1.9 KiB
SQL
-- 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).';
|