gendesign/backend/app/api/v1
lekss361 a6e95b65c2 fix(site-finder): X1 logic bugs from PR #87 re-review
1. score_top_3_negatives — rewrite to unambiguously "most-negative first" via
   explicit `sorted(negatives, key=contribution)[:3]` (ascending sort). Раньше
   использовался trick `[-3:][::-1]` на desc-sorted — давал тот же результат
   для N>=3 negatives, но неинтуитивно читать.
2. _compute_confidence(recent_deals_count) — guard `int(... or 0)` через
   try/except (ValueError, TypeError). Защищает от non-numeric строки в
   external/legacy market_trend payload.
3. Style: `import datetime as _dt` перенесён из function-scope в module-level.

Per auto-review on d0fa8a3.
2026-05-12 07:56:03 +03:00
..
__init__.py init 2026-04-25 13:45:19 +03:00
admin_jobs.py feat(jobs): centralized job_settings API + DB-driven beat schedule 2026-05-11 15:38:13 +03:00
admin_leads.py fix(sqlalchemy): убрать :name::type — psycopg3 их не парсит, ломает Phase A INSERT в kn_scrape_runs (run_region_sweep крашится сразу с ProgrammingError, task_received записан, но run_id никогда не создаётся). 4 места: domrf_kn.py (resume INSERT, new run INSERT, snapshot UPDATE) + admin_leads.py (date_to filter). Заменено на CAST(:name AS type). 2026-04-28 23:37:03 +03:00
admin_scrape.py feat(site-finder): ПЗЗ territorial zones from Rosreestr PKK6 + zoning in analyze 2026-05-11 21:51:51 +03:00
analytics.py feat(api,analytics): bulk geo backfill + complex_buildings query 2026-05-11 15:56:17 +03:00
concepts.py init 2026-04-25 13:45:19 +03:00
parcels.py fix(site-finder): X1 logic bugs from PR #87 re-review 2026-05-12 07:56:03 +03:00
photos.py fix ui 2026-04-27 20:42:18 +03:00