gendesign/backend/app/services/site_finder
Light1YT d9c2157d02
All checks were successful
CI / changes (push) Successful in 6s
CI / changes (pull_request) Successful in 5s
Deploy / changes (push) Successful in 6s
Deploy / build-backend (push) Successful in 1m34s
Deploy / build-frontend (push) Has been skipped
Deploy / build-worker (push) Successful in 2m57s
CI / backend-tests (push) Successful in 5m43s
Deploy / deploy (push) Successful in 1m9s
CI / backend-tests (pull_request) Successful in 5m56s
feat(site_finder): velocity coverage gap-fill via spatial+name fallback (#968 949-A)
For competitors missing from objective_complex_mapping, bridge to objective
velocity: nearest objective-bearing complex within 200m whose name tolerantly
matches → complex_id → objective_lots.project_name → objective_corpus_room_month.
Prod-measured: 148 → 329 mapped competitors (2.2×), validated by EXPLAIN+execute.

- nearest_cx CTE UNION'd into mapped (gap-fill only; primary 148 byte-identical,
  no double-count — UNION dedups, DISTINCT ON = one complex per competitor)
- candidates restricted to complexes WITH objective_lots.project_name (data-bearing):
  naive nearest-any gave +37; data-bearing nearest gives +181 (the real win)
- empty-comm_name guard avoids LIKE '%%' spatial-only leak
- velocity.py unchanged (its has_mapping coverage-gate is a separate concern);
  parcel.py unchanged (relevance_weight already satisfies DoD)

Blast radius narrow: affects relevance_weight (via stage_at_horizon) for
newly-mapped competitors; §22 market-pulse velocity (velocity.py) untouched.
deep-code-reviewer ⚠️ minor (approved); review items addressed. Part of EPIC #949.
2026-06-06 22:05:15 +05:00
..
__init__.py init 2026-04-25 13:45:19 +03:00
best_layouts.py fix(sf-21b): weighted AVG in _INLINE_VELOCITY_SQL (best_layouts.py) 2026-05-17 16:56:22 +03:00
cadastre_fetch.py fix(analyze): cad_exists_in_db must require non-NULL geometry 2026-06-03 19:59:59 +05:00
competitors.py feat(site_finder): velocity coverage gap-fill via spatial+name fallback (#968 949-A) 2026-06-06 22:05:15 +05:00
custom_pois.py feat(#254): user_custom_pois — backend schema + CRUD + scoring integration 2026-05-17 09:34:33 +03:00
district_resolver.py feat(forecast): resolve admin district -> micro set in §9.x market/supply/sales filters 2026-06-05 07:03:37 +05:00
filters.py init 2026-04-25 13:45:19 +03:00
future_supply.py feat(forecasting): §9.x→§22 orchestrator + fix supply-side district resolution (3a) 2026-06-05 08:21:04 +05:00
gate_verdict.py feat(#29,#232): wire cad_parcels.permitted_use in analyze + cad_zouit fallback (G2+G3) 2026-05-17 08:17:22 +03:00
layout_signature.py fix(sf-08): add euro-1/euro-2 room_bucket for small-format rooms=2 flats 2026-05-17 14:38:48 +03:00
layout_velocity_refresh.py feat(analytics): mv_layout_velocity MV + refresh helper (#113 PR B) (#194) 2026-05-16 08:26:59 +00:00
macro.py fix(#945): indicator-aware default region in macro reader + document debt data-quality 2026-06-04 11:49:41 +05:00
market_metrics.py feat(forecast): resolve admin district -> micro set in §9.x market/supply/sales filters 2026-06-05 07:03:37 +05:00
noise_loader.py feat(site-finder): isochrones UI + networks VKH + OSM substations 2026-05-11 21:48:21 +03:00
parser.py init 2026-04-25 13:45:19 +03:00
poi_loader.py feat(site-finder): v3.1 — cad_parcels_geom, analyze fallback, POI lat/lon, OSM expand 2026-05-11 19:52:19 +03:00
poi_score.py feat(sf-b6): GET /parcels/{cad}/poi-score — weighted top-7 (#333) 2026-05-17 21:11:25 +00:00
pzz_loader.py fix(pzz_loader): replace bare db.rollback() with SAVEPOINT per-row (#124) 2026-05-14 23:29:23 +03:00
quarter_dump_lookup.py fix(#234): address re-review nits — Settings singleton + docstring sync 2026-05-17 09:31:43 +03:00
quarter_price_index_refresh.py feat(db): quarter_price_index FDW foreign table + monthly refresh (Refs #762) (#797) 2026-05-30 17:16:28 +00:00
quarter_price_refresh.py feat(analytics): mv_quarter_price_per_m2 MV + refresh helper (#33 D1 PR A) (#209) 2026-05-16 11:12:01 +00:00
scorer.py init 2026-04-25 13:45:19 +03:00
supply_layers.py feat(forecast): resolve admin district -> micro set in §9.x market/supply/sales filters 2026-06-05 07:03:37 +05:00
velocity.py fix(sf-17): rosreestr velocity fallback via cad_quarter (~100% EKB coverage) 2026-05-17 16:50:19 +03:00
weight_profiles.py feat(#114): seed 3 default weight presets + include_system API param 2026-05-16 22:49:56 +03:00