gendesign/backend/app/workers
Light1YT ea42d29a4a feat(site-finder): live CBR key-rate scraper → macro_indicator (#945 PR B)
Site Finder v2 / GG-форсайт. Deterministic, no LLM. Fills the key_rate series
(empty after PR A) into macro_indicator from the live CBR source.

- services/scrapers/cbr_macro.py: fetch_key_rate via CBR SOAP DailyInfoWebServ
  KeyRateXML(fromDate, ToDate) (POST soap+xml; ToDate capital-T + dateTime
  suffix required — flat GET returns empty). Pure parse_key_rate_xml (TZ-safe
  date, empty/malformed → []). Live-verified: 85 rows, current rate 14.5%.
- workers/tasks/cbr_macro_sync.py: upsert (key_rate, rf, daily, %) into
  macro_indicator ON CONFLICT DO UPDATE; SAVEPOINT per row; fetch-fail → raise.
- beat: cbr-macro-sync-weekly (Mon 05:30 МСК, Europe/Moscow tz).
- 15 tests (pure parse + mocked upsert). No migration (table from #963 PR A).
2026-06-03 00:05:25 +05:00
..
tasks feat(site-finder): live CBR key-rate scraper → macro_indicator (#945 PR B) 2026-06-03 00:05:25 +05:00
__init__.py init 2026-04-25 13:45:19 +03:00
beat_schedule.py feat(site-finder): live CBR key-rate scraper → macro_indicator (#945 PR B) 2026-06-03 00:05:25 +05:00
celery_app.py feat(site-finder): live CBR key-rate scraper → macro_indicator (#945 PR B) 2026-06-03 00:05:25 +05:00
lifecycle.py refactor(workers): split celery_app.py god-object into 3 modules (#135) 2026-05-15 00:09:38 +03:00