3-я итерация: старый header-per-column парсер давал rows=0. Реальная структура
(снята с прода): caption → asof «по состоянию на DD.MM.YYYY» → header-строка
(детект «наименование»+«проектн») → суб-заголовки/нумерация → регионы-разделители
(single-cell) → data full n=13 / continuation n=7 (доп. выход ГРС со сдвигом).
- Фиксированные индекс-карты full/continuation; gate по текущему региону
(«свердлов»); «(выход №N)» → output_name, числовой «(5)» остаётся в имени;
«(96 %)» → 96.0 (знак/ноль сохраняются); уведомление → upgrade_due через « · »;
объём по действующим ТУ → raw (без миграции); asof пишется в upsert.
- Тест-fixture повторяет реальную разметку (вкл. нумерацию и суб-заголовки),
27 тестов зелёные. Ревью ✅ APPROVE.
|
||
|---|---|---|
| .. | ||
| analysis_runs | ||
| analytics | ||
| cadastre | ||
| chat | ||
| etl | ||
| exporters | ||
| forecasting | ||
| generative | ||
| llm | ||
| photos | ||
| scrapers | ||
| site_finder | ||
| __init__.py | ||
| analytics_queries.py | ||
| analytics_refresh.py | ||
| forecast_request_cache.py | ||
| insights.py | ||
| job_settings.py | ||
| objective_etl.py | ||
| objective_sync_config.py | ||
| own_projects.py | ||
| weather_cache.py | ||