feat(ptica): wire real КСИТ/height/zone/density into cockpit (frontend of #1843) #1849

Merged
bot-backend merged 1 commit from feat/ptica-real-ksit-frontend into main 2026-06-20 19:05:40 +00:00
Collaborator

Фронт-часть оживления КСИТ (бэкенд — #1847). Читает реальный ПЗЗ-регламент из nspd_zoning в ПТИЦА-cockpit.

Что оживает

  • Градостроительство (карточка + drawer): КСИТ ← max_far, предельная высота ← max_height_m, этажность ← max_floors, коэф. застройки ← max_building_pct (%), зона ← regulation_zone_index (человеческое «Ж-2») / fallback zone_code.
  • Плотность/Ёмкость (Градостроительство + drawer «Ёмкость»): density = площадь × max_far (реальная ёмкость); пятно = площадь × max_building_pct/100; продаваемая — честная оценка (caption «без вычета МОП/паркинга»).
  • 3D-масса: maxFar = nspd_zoning.max_far ?? 3.5 (finite/>0 guard), caption «регламент НСПД» когда реальный.

Defensive (важно)

Бэкенд #1847 ещё не задеплоен → поля null/отсутствуют. Каждое чтение nspd_zoning?.<field> + != null → те же «—»-плейсхолдеры, что и сейчас. Cockpit визуально не меняется, пока #1847 не выкатится, потом авто-зажигается. Никаких NaN/«null м²».

Качество

max_building_pct — percent 0..100 (сверено с backend-парсером + тестами). КСИТ-density гейтится на обоих операндах (нет NaN при отсутствии площади). TS strict без any, NspdZoning +7 optional полей. tsc/lint/prettier . code-reviewer APPROVE (адверсариально по NaN-в-недеплой-стейте + unit % — оба верны), 2 копи-нита закрыты.

Связано: backend #1847, #1843 (Route 2), ПТИЦА #1831-1835. Post-deploy QA (rule 7) на участке с реальным max_far.

**Фронт-часть оживления КСИТ** (бэкенд — #1847). Читает реальный ПЗЗ-регламент из `nspd_zoning` в ПТИЦА-cockpit. ## Что оживает - **Градостроительство** (карточка + drawer): КСИТ ← `max_far`, предельная высота ← `max_height_m`, этажность ← `max_floors`, коэф. застройки ← `max_building_pct` (%), зона ← `regulation_zone_index` (человеческое «Ж-2») / fallback `zone_code`. - **Плотность/Ёмкость** (Градостроительство + drawer «Ёмкость»): density = площадь × `max_far` (реальная ёмкость); пятно = площадь × `max_building_pct`/100; продаваемая — честная оценка (caption «без вычета МОП/паркинга»). - **3D-масса**: `maxFar = nspd_zoning.max_far ?? 3.5` (finite/>0 guard), caption «регламент НСПД» когда реальный. ## Defensive (важно) Бэкенд #1847 ещё не задеплоен → поля null/отсутствуют. Каждое чтение `nspd_zoning?.<field>` + `!= null` → те же «—»-плейсхолдеры, что и сейчас. **Cockpit визуально не меняется, пока #1847 не выкатится, потом авто-зажигается.** Никаких NaN/«null м²». ## Качество `max_building_pct` — percent 0..100 (сверено с backend-парсером + тестами). КСИТ-density гейтится на обоих операндах (нет NaN при отсутствии площади). TS strict без `any`, NspdZoning +7 optional полей. tsc/lint/prettier ✅. **code-reviewer ✅ APPROVE** (адверсариально по NaN-в-недеплой-стейте + unit % — оба верны), 2 копи-нита закрыты. Связано: backend #1847, #1843 (Route 2), ПТИЦА #1831-1835. Post-deploy QA (rule 7) на участке с реальным max_far.
bot-backend added 1 commit 2026-06-20 18:33:45 +00:00
feat(ptica): wire real ПЗЗ regulation (КСИТ/height/zone/density) into cockpit
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 51s
CI / openapi-codegen-check (pull_request) Successful in 1m46s
167fcbace2
Read nspd_zoning.{max_far,max_height_m,max_floors,max_building_pct,
regulation_zone_index,regulation_source} (backend PR #1847) into the urban
scan-card, urban/buildability/potential drawers and the 3D massing КСИТ-target.
Defensive: every read is optional-chained + != null guarded → identical "—"
placeholders when fields absent, so the cockpit is unchanged until #1847 deploys,
then auto-lights-up. КСИТ density = area × max_far; пятно = area × max_building_pct
(percent 0..100, verified vs backend parser); sellable labeled estimate. 3D maxFar
= nspd_zoning.max_far ?? 3.5 (finite/>0 guarded). NspdZoning type +7 optional fields.
TS strict, no any.
bot-backend merged commit 7866479653 into main 2026-06-20 19:05:40 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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#1849
No description provided.