feat(site-finder): backfill ЕКБ зон-регламента — разблокировать видимость финмодели (#1881) #1889

Merged
bot-backend merged 2 commits from feat/zone-regulation-backfill into main 2026-06-23 21:27:58 +00:00
Collaborator

Summary

Главный лимит видимости финмодели (эпик #1881): financial_estimate фаерит только при разрезолвленном НСПД-регламенте (max_far), который резолвится лениво при анализе → zone_regulation_cache всего 33 зоны → у большинства участков financial_estimate=None («—» в кокпите). Backfill проактивно кэширует ВСЕ террзоны ЕКБ (~100-120) → любой участок в известной зоне сразу получает регламент и финмодель.

Изменения (6 файлов, +495)

  • backfill_ekb_zone_regulations (zone_regulation.py): WFS-перечисление террзон (features_in_bbox 'territorial_zone') → dedup по urban_index (предпочитает фичу с геометрией) → representative_point (внутри полигона) → zone_regulation_atupsert. Идемпотентно (cached-skip перед fetch), per-zone try/except (сбой не рушит batch), rate_delay, limit.
  • Celery task backfill_zone_regulations + регистрация в celery_app include + admin POST /api/v1/admin/scrape/zone-regulations/backfill (паттерн objective sync-our).
  • Ленивый refresh_zone_regulations/get_or_fetch/upsert НЕ тронуты (additive).

Test plan

  • +9 тестов (dedup, idempotency cached-skip, per-zone error isolation, centroid-inside, limit); mypy/ruff clean; reuse upsert (psycopg3 ок)
  • task зарегистрирован в celery include (verify: tasks.backfill_zone_regulations.backfill_zone_regulations)
  • code-reviewer (поймал незарегистрированный task — был бы NotRegistered, dead-on-arrival — исправлено)
  • прод-прогон backfill — отдельный шаг после deploy (как Objective sync): POST .../zone-regulations/backfill → закэширует ~70-90 новых зон (~5 мин) → financial_estimate станет виден для большинства участков

Идемпотентность / безопасность

cached-skip перед любым geoportal-вызовом; per-zone isolation (begin_nested + commit на зону); rate_delay вежливость; bounded loop. Повторный прогон = enumerate + skip.

Refs #1881

🤖 Generated with Claude Code

## Summary **Главный лимит видимости финмодели** (эпик #1881): `financial_estimate` фаерит только при разрезолвленном НСПД-регламенте (`max_far`), который резолвится **лениво** при анализе → `zone_regulation_cache` всего 33 зоны → у большинства участков `financial_estimate=None` («—» в кокпите). Backfill проактивно кэширует **ВСЕ террзоны ЕКБ (~100-120)** → любой участок в известной зоне сразу получает регламент и финмодель. ## Изменения (6 файлов, +495) - `backfill_ekb_zone_regulations` (`zone_regulation.py`): WFS-перечисление террзон (`features_in_bbox 'territorial_zone'`) → dedup по `urban_index` (предпочитает фичу с геометрией) → `representative_point` (внутри полигона) → `zone_regulation_at` → `upsert`. **Идемпотентно** (cached-skip перед fetch), **per-zone try/except** (сбой не рушит batch), rate_delay, limit. - Celery task `backfill_zone_regulations` + **регистрация в `celery_app` include** + admin `POST /api/v1/admin/scrape/zone-regulations/backfill` (паттерн objective sync-our). - Ленивый `refresh_zone_regulations`/`get_or_fetch`/`upsert` НЕ тронуты (additive). ## Test plan - [x] +9 тестов (dedup, idempotency cached-skip, per-zone error isolation, centroid-inside, limit); mypy/ruff clean; reuse upsert (psycopg3 ок) - [x] task зарегистрирован в celery include (verify: `tasks.backfill_zone_regulations.backfill_zone_regulations`) - [x] code-reviewer ✅ (поймал незарегистрированный task — был бы NotRegistered, dead-on-arrival — исправлено) - [ ] **прод-прогон backfill** — отдельный шаг после deploy (как Objective sync): `POST .../zone-regulations/backfill` → закэширует ~70-90 новых зон (~5 мин) → financial_estimate станет виден для большинства участков ## Идемпотентность / безопасность cached-skip перед любым geoportal-вызовом; per-zone isolation (begin_nested + commit на зону); rate_delay вежливость; bounded loop. Повторный прогон = enumerate + skip. Refs #1881 🤖 Generated with [Claude Code](https://claude.com/claude-code)
bot-backend added 1 commit 2026-06-23 21:12:02 +00:00
feat(site-finder): backfill ЕКБ зон-регламента — разблокировать видимость финмодели (#1881)
Some checks failed
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Failing after 1m48s
CI / backend-tests (pull_request) Successful in 9m56s
2ff34b1500
financial_estimate (эпик #1881) фаерит только при разрезолвленном НСПД-регламенте
(max_far), а он резолвится ЛЕНИВО при анализе участка → zone_regulation_cache всего
33 зоны → у большинства участков financial_estimate=None («—» в кокпите). Backfill
проактивно кэширует ВСЕ террзоны ЕКБ (~100-120) → ЛЮБОй участок в известной зоне
сразу получает регламент и финмодель.

- backfill_ekb_zone_regulations (zone_regulation.py): WFS-перечисление террзон ЕКБ
  (features_in_bbox 'territorial_zone') → dedup по urban_index (предпочёт фичу с
  геометрией) → representative_point (внутри полигона, не centroid) → zone_regulation_at
  → upsert. ИДЕМПОТЕНТНО (cached skip перед fetch), per-zone try/except (один сбой не
  рушит batch), rate_delay вежливость к геопорталу, limit для частичного прогона.
- Celery task backfill_zone_regulations + регистрация в celery_app include +
  admin POST /api/v1/admin/scrape/zone-regulations/backfill (паттерн objective sync-our).
- Ленивый refresh_zone_regulations / get_or_fetch / upsert НЕ тронуты (additive путь).
- +9 тестов (dedup, idempotency cached-skip, per-zone error isolation, centroid-inside,
  limit). mypy/ruff clean.

Прод-прогон backfill — отдельный шаг после deploy (как Objective sync), не на deploy.
Code-review поймал незарегистрированный task (был бы NotRegistered) — исправлено.

Refs #1881
Light1YT added 1 commit 2026-06-23 21:17:11 +00:00
chore(api-types): regen после нового admin-endpoint backfill (#1881)
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Successful in 1m6s
CI / openapi-codegen-check (pull_request) Successful in 2m0s
CI / backend-tests (pull_request) Successful in 10m12s
c972eebce6
openapi-codegen-check: новый POST /admin/scrape/zone-regulations/backfill +
TriggerZoneRegulationsBackfillRequest добавили path/schema в OpenAPI →
api-types.ts должен байт-в-байт совпадать с генератором.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
bot-backend merged commit cb7df4657a into main 2026-06-23 21:27:58 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1889
No description provided.