feat(db): схема gas_grs_outlet_points — форма 6 Екатеринбурггаза (#2119 B2, PR-1/4) #2246

Merged
bot-backend merged 1 commit from feat/gas-outlet-schema into main 2026-07-03 02:15:51 +00:00

1 commit

Author SHA1 Message Date
07f9f7c943 feat(db): gas_grs_outlet_points — точки выхода ГРС форма 6 (#2119 B2 PR-1/4)
All checks were successful
CI / changes (pull_request) Successful in 9s
CI Trade-In / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 1m51s
CI / backend-tests (pull_request) Successful in 14m12s
Миграция 184: адресные точки выхода газораспределительной сети (форма 6
приказа ФАС №960, раскрытие АО «Екатеринбурггаз», ~1037 строк/мес).

- grs_name_norm нормализуется как в gas_grs_capacity (181) → JOIN «точка
  выхода → свободная мощность ГРС» без FK (источники разные: ГТЕ vs ЕКгаз).
- Размерность млн. м³/МЕСЯЦ (НЕ тыс. м³/ч как в 181) — отражено в COMMENT.
- «0.000*» = требуется гидрорасчёт: free_capacity_mln_m3 NULL +
  free_capacity_needs_calc TRUE (не путать с настоящим 0).
- is_forecast разводит факт («за <месяц>») и прогноз («на <месяц>») одного
  period_month; логический UNIQUE(grs_name_norm, outlet_name, period_month,
  is_forecast) — все 4 колонки NOT NULL, обычный UNIQUE (без NULLS NOT DISTINCT).
- Индексы: GIST(geom), btree(grs_name_norm), btree(period_month DESC).
- geom NULL до PR-3 (геокод DaData) и навсегда у ~81% строк без адреса.

Идемпотентно (IF NOT EXISTS), BEGIN/COMMIT. Провалидировано dry-run в
ephemeral postgis/postgis:16-3.4 (prod-образ): двойной прогон,
fact+forecast coexist, ON CONFLICT upsert, отклонение дубля.

PR-план #2119 B2: PR-1 schema (этот) · PR-2 лоадер · PR-3 геокод · PR-4 §3.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 06:59:48 +05:00