fix(riasurt): renumber migration 163→167 + guard quarterly harvest behind flag (#108 review)

This commit is contained in:
bot-backend 2026-06-17 22:45:23 +03:00
parent 31e316e04e
commit ddf4873874
3 changed files with 18 additions and 1 deletions

View file

@ -198,6 +198,15 @@ class Settings(BaseSettings):
# Override через env ENABLE_RIASURT_GATE=true. # Override через env ENABLE_RIASURT_GATE=true.
enable_riasurt_gate: bool = False enable_riasurt_gate: bool = False
# РИАСУРТ Свердл harvest kill-switch (#108 review): ежеквартальный beat
# `harvest_all_riasurt_sverdl` прогоняет grid-walk по MO_BBOXES. Эти bbox — ПЛЕЙСХОЛДЕРЫ
# (грубые ±6 км вокруг центров МО), реальные административные границы резолвятся post-deploy.
# По умолчанию OFF, иначе beat на следующем тике дёргает WMS с мусорными bbox.
# Включать ТОЛЬКО после замены MO_BBOXES на реальные границы. Override через
# env ENABLE_RIASURT_HARVEST=true. Single-MO harvest_riasurt_sverdl_for_mo не гейтится
# (callable вручную для smoke-тестирования конкретного bbox).
enable_riasurt_harvest: bool = False
# ── LLM infrastructure (#960) ──────────────────────────────────────────── # ── LLM infrastructure (#960) ────────────────────────────────────────────
# ОПЦИОНАЛЬНЫЙ слой поверх детерминированного движка. Forecasting НИКОГДА не # ОПЦИОНАЛЬНЫЙ слой поверх детерминированного движка. Forecasting НИКОГДА не
# зависит от LLM — при любом сбое/выключенности возвращается детерминированный # зависит от LLM — при любом сбое/выключенности возвращается детерминированный

View file

@ -33,6 +33,7 @@ from typing import Any
from sqlalchemy import text from sqlalchemy import text
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from app.core.config import settings
from app.core.db import SessionLocal from app.core.db import SessionLocal
from app.services.scrapers.nspd_client import ( from app.services.scrapers.nspd_client import (
RIASURT_SVERDL_LAYERS, RIASURT_SVERDL_LAYERS,
@ -234,6 +235,13 @@ def harvest_all_riasurt_sverdl(layers: list[int] | None = None) -> dict[str, int
Returns: Returns:
{'mo': N, 'features': M} обработано МО / суммарно записано фич. {'mo': N, 'features': M} обработано МО / суммарно записано фич.
""" """
if not settings.enable_riasurt_harvest:
logger.warning(
"RIASURT harvest disabled — set ENABLE_RIASURT_HARVEST=true after configuring "
"real MO_BBOXES (#108)"
)
return {"mo": 0, "features": 0}
n_mo = 0 n_mo = 0
n_features = 0 n_features = 0
for mo_name, bbox in MO_BBOXES.items(): for mo_name, bbox in MO_BBOXES.items():

View file

@ -1,4 +1,4 @@
-- 163_riasurt_sverdl.sql -- 167_riasurt_sverdl.sql
-- РИАСУРТ Свердл (folderId 1224) — 14-слойный harvest по агломерации ЕКБ (#108). -- РИАСУРТ Свердл (folderId 1224) — 14-слойный harvest по агломерации ЕКБ (#108).
-- Источник: NSPD aeggis/v4 WMS, региональный каталог РИАСУРТ Свердл. Покрывает ОКРАИНЫ -- Источник: NSPD aeggis/v4 WMS, региональный каталог РИАСУРТ Свердл. Покрывает ОКРАИНЫ
-- агломерации ЕКБ (Берёзовский, В.Пышма, Среднеуральск, Арамиль, Сысерть), НЕ ЕКБ-сити -- агломерации ЕКБ (Берёзовский, В.Пышма, Среднеуральск, Арамиль, Сысерть), НЕ ЕКБ-сити