feat(permits): Celery beat monthly + analyze recent_permits (#105 Phase 4+5) #213

Merged
lekss361 merged 2 commits from feat/105-beat-and-analyze into main 2026-05-16 12:23:53 +00:00

2 commits

Author SHA1 Message Date
lekss361
3abaf047a9 fix(parcels): remove non-existent units_count column from permits query (#105 PR #213 fixup)
🔴 Critical from review-bot: column units_count doesn't exist в
ekburg_construction_permits (mock tests прошли т.к. db.execute мокается;
на проде psycopg.errors.UndefinedColumn для каждого /analyze).

Removes (7 refs):
- SQL SELECT не выбирает units_count
- dict build, PermitsSummary.rve_total_units
- RecentPermit.units_count Pydantic field
- PermitsSummary.rve_total_units field
- 2 fixture rows assertions

🟡 Dedupe _quarter_prefix → reuse existing _quarter_cad (computed
ранее для market_price block).

Tests adjusted, ruff clean.
2026-05-16 15:14:46 +03:00
lekss361
7eb686bd7d feat(permits): Celery beat monthly + analyze recent_permits (#105 Phase 4+5)
Closes #105 (Phase 3 geocoding — отдельный issue).

Phase 4: 'ekburg-permits-monthly' crontab(0 2 1 * *) → tasks.refresh_all
Phase 5: /analyze returns engineering.recent_permits_in_quarter +
permits_summary (rns/rve counts/area/units, by_developer top-3)

Filter: quarter prefix (3-segment cadastral match). Spatial 500m radius —
после Phase 3 geocoding.

Tests: test_analyze_recent_permits.py (3 mock), comment updates на
inline_weights/market_price (shifted execute ordering).
2026-05-16 15:03:01 +03:00