gendesign/backend/app
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
..
api fix(sf): exclude NULL competitors from aggregate calculations (velocity, market_avg, top_sellers) 2026-05-17 23:41:09 +03:00
core fix(infra): wire GlitchTip DSNs (build-arg + env_file) + reject sentry.io promote 2026-05-16 21:48:28 +03:00
models feat(jobs): centralized job_settings API + DB-driven beat schedule 2026-05-11 15:38:13 +03:00
observability feat(backend): sentry-sdk init для FastAPI + Celery (#204 backend) (#207) 2026-05-16 15:09:16 +00:00
schemas feat(trade-in): TI-1 mock /trade-in/estimate endpoint + Pydantic + SQL migration (#316) 2026-05-17 16:45:06 +00:00
scrapers Merge pull request 'feat(#263 sub-A): cad_* overlay schemas + cadastre territorial_zones (ПЗЗ)' (#265) from feat/263-sub-a-cad-nspd-overlay-schemas-and-pzz into main 2026-05-17 07:50:08 +00:00
services fix(stealth): bump Semaphore 6->8 for higher concurrency in gather 2026-05-17 23:04:51 +03:00
workers fix(scrape-objective): stream-parse lots_pf via ijson to avoid OOM (#315) 2026-05-17 16:37:30 +00:00
__init__.py init 2026-04-25 13:45:19 +03:00
main.py feat(trade-in): TI-1 mock /trade-in/estimate endpoint + Pydantic + SQL migration (#316) 2026-05-17 16:45:06 +00:00