feat(site-finder): газ — свободная мощность ГРС + пометка ЕЭСК в §3 (#2119 Фаза B1)
Газовая вертикаль точек подключения:
- Миграция 181: gas_grs_capacity (ГРС с выходами; UNIQUE NULLS NOT DISTINCT
на (grs_name_norm, output_name) — грабли #140).
- gazprom_grs_loader: bs4-парсер инлайн HTML-таблицы «техническая возможность»
ГТЕ (~316 ГРС; гео-блок → RUN-ON-PROD): header-driven маппинг колонок,
rowspan forward-fill имени (допущение col-0 задокументировано), числа через
общий parse_reserve_number, SAVEPOINT per-row, unknown-колонки → raw jsonb.
- Celery sync_gas_grs_capacity + beat вт 05:00 MSK.
- Endpoint connection-capacity: gas.city_grs (городские ГРС Свердловск/
Екатеринбург, агрегация по выходам) + gas.total_free_th_m3_h; graceful при
отсутствии таблицы (schema-first окно). reserve_note у ПС ЕЭСК без
опубликованного резерва: «Резерв — по запросу в АО «ЕЭСК» (город)».
- Схемы GasGrsRow/GasCapacityBlock/reserve_note аддитивны; api-types +31/-0.
- Фронт: блок «ГАЗ» в карточке резервов (по-ГРС «свободно X из Y тыс. м³/ч»,
бейджи резерв/исчерпана, расшивка, N выходов, суммарная строка) + серая
reserve_note-строка в попапе ЦП. Числа через toFiniteNumber.
57 backend-тестов зелёные; deep-review ✅ APPROVE (2 minor-нота учтены).