kn-API не возвращает wall_type, energy_eff, ceiling_height_m, parking_*,
playground_*, finishing_variants_count, has_*, scores и др. Эти поля доступны
только на SSR catalog странице /сервисы/каталог-новостроек/объект/{id} в
__NEXT_DATA__ JSON блоке (Next.js).
- backend/app/services/scrapers/domrf_catalog_object.py — fetch HTML через
BrowserSession (WAF bypass), extract __NEXT_DATA__, parse 25+ fields, COALESCE
UPDATE (не перетирает kn-API данные)
- backend/app/workers/tasks/scrape_kn_catalog_objects.py — Celery task, atomic
SELECT (obj_id + snapshot_date одним запросом, без race с kn-scraper)
- backend/app/workers/beat_schedule.py — Tuesday 04:00 UTC, batch 300/run
- data/sql/118_22d_catalog_object_scraped_at.sql — catalog_scraped_at TIMESTAMP
+ index NULLS FIRST для "missing/stale first" selection
- backend/tests/services/scrapers/test_domrf_catalog_object.py — 41 tests pass
obj_checks 6 чекбоксов "Проверено на наш.дом.рф" — отдельная investigation
(на странице только общий isChecked flag).
После Sub-PR B (#260, merged 8ebcd15) переключения search_by_quarter на
grid-walk dispatch — beat schedule безопасно re-enable'ить:
- harvest_quarter возвращает полноценные dumps (territorial_zones + ЗОУИТ +
risk zones + engineering structures) вместо 0-3 features
- per-instance semaphore (PR #260) защищает от cross-loop binding bug
- soft/hard time_limit 600/900s — задача успевает завершиться
Schedule: Mon 01:00 UTC (04:00 МСК), batch_size=50 ограничивает WAF burst,
max_age_days=90 для регулярного refresh + новые quarters (fetched_at IS NULL).
Полный ЕКБ back-fill (11k+ quarters в cad_quarters_geom) займёт несколько
недель при batch_size=50/week; в production будет ускорено manual trigger
admin endpoint'ом если нужно.
Closes#231.
PKK6 ArcGIS sync для pzz_zones_ekb (0 rows live) — задача и admin endpoint
уже существуют, но beat schedule отсутствовал. Schedule: 1st of month, 03:00 МСК.
Closes#233