gendesign/backend/app/api/v1
lekss361 630a5bbd77 fix(sf): exclude NULL competitors from aggregate calculations (velocity, market_avg, top_sellers)
ЖК без маппинга в Objective (Желдорипотека, Эфес и пр.) остаются в
competitor list для карты, но исключаются из aggregate-метрик.

Добавлен блок market_pulse в ответ /analyze:
- market_avg_price_per_m2: AVG(avg_price_per_m2_rub) по non-null competitors
- avg_velocity_m2: monthly_velocity_sqm из compute_velocity (уже non-null by design)
- market_data_coverage_pct / coverage_pct: priced_count / total * 100
- top_sellers: топ-5 ЖК по units_sold среди priced
- competitors_total / competitors_with_price: для UI badge

competitor list (20 ЖК) не изменён.
2026-05-17 23:41:09 +03:00
..
__init__.py init 2026-04-25 13:45:19 +03:00
admin_cadastre.py feat(cadastre): bulk_harvest worker + grid-walker + admin API (#168 PR3/5) (#171) 2026-05-15 13:31:32 +03:00
admin_etl.py feat(etl): fuzzy matcher v2 — pruned threshold 0.85→0.80 for objective mapping coverage 2026-05-17 16:28:20 +03:00
admin_jobs.py refactor(admin): extract _check_token into shared AdminTokenAuth dep (#133) 2026-05-14 23:45:44 +03:00
admin_leads.py refactor(admin): extract _check_token into shared AdminTokenAuth dep (#133) 2026-05-14 23:45:44 +03:00
admin_scrape.py feat(#104): add POST /admin/scrape/ekburg-permits for manual trigger 2026-05-17 08:13:32 +03:00
admin_weight_profiles.py feat(#114): seed 3 default weight presets + include_system API param 2026-05-16 22:49:56 +03:00
analytics.py feat(22k): object page — full exposure 9 blocks (sales/quartirography/metro/photos/docs/specs/checks) (#310) 2026-05-17 15:56:39 +00:00
concepts.py init 2026-04-25 13:45:19 +03:00
custom_pois.py feat(#254): user_custom_pois — backend schema + CRUD + scoring integration 2026-05-17 09:34:33 +03:00
parcels.py fix(sf): exclude NULL competitors from aggregate calculations (velocity, market_avg, top_sellers) 2026-05-17 23:41:09 +03:00
photos.py fix ui 2026-04-27 20:42:18 +03:00
trade_in.py feat(trade-in): TI-2 PDF export 4-page + frontend enable button (#319) 2026-05-17 17:16:48 +00:00