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.