(high) ConceptVariantsResult: плотность (FAR) подписана как 'м²/га' — неверная единица и занижение в ~10000× #1410

Closed
opened 2026-06-15 05:53:41 +00:00 by bot-backend · 1 comment
Collaborator

Severity: high · Категория: report · Файл: frontend/src/components/concept/ConceptVariantsResult.tsx:111-112,160-164

ConceptVariantsResult.tsx:111-112 (headline-bar) и :160-164 (KpiCard label='Плотность' unit='м²/га', value=teap.density.toLocaleString('ru-RU')). Бэкенд возвращает teap.density как FAR = GFA / site_area_sqm — безразмерный коэффициент (teap.py:11 docstring 'плотность застройки = FAR = GFA / площадь участка', :81 density = total_floor_area / site_area_sqm, :91 round(density,3), лог :95 'FAR=%.2f'). Фронт выводит этот FAR (порядка 0.5–3.0) под единицей 'м²/га'. Реальная плотность в м²/га = FAR × 10000, поэтому показанное число занижено в ~10000 раз И единица неверна: FAR=2.5 рендерится клиенту как '2,5 м²/га' вместо ~25 000 м²/га. Импакт: финдиректор девелопера читает абсурдно низкую плотность в клиентской концепции застройки; данные/подпись рассинхронизированы (CSV-экспорт ConceptExportButtons.tsx:51 выгружает то же сырое число под лейблом 'Плотность' без единицы; PDF-экспортёр density вовсе не печатает). Как чинить: либо подписать KpiCard и headline как 'Плотность (FAR)' / 'коэф. застройки' без единицы 'м²/га', либо в UI домножать на 10000 и оставлять 'м²/га' (но тогда синхронизировать с CSV/контрактом). Предпочтительно — лейбл 'FAR' без единицы, т.к. бэкенд и PDF маркируют поле именно как FAR.

Почему баг: FAR=2.5 будет показан клиенту как '2,5 м²/га'. Реальная плотность в м²/га = FAR×10000 = 25 000 м²/га. То есть и единица неверна, и число занижено в 10 000 раз. Это финансово-значимый показатель в клиентской концепции застройки: финдиректор читает '2,5 м²/га' как абсурдно низкую плотность. Бэкенд явно документирует поле как FAR (teap.py docstring строка 11, лог 'FAR=%.2f' строка 95), а CSV-экспорт (ConceptExportButtons.tsx:51 'Плотность') выгружает то же сырое число без единицы — рассинхрон данные/подпись.

Как чинить: Либо подписать показатель как безразмерный FAR/коэффициент плотности ('Плотность застройки (FAR)', без 'м²/га'), либо при отображении в 'м²/га' умножать на 10000. Согласовать с CSV-экспортом и headline-bar.


deep-audit «армия ботов 2» · verify+harden, confidence 0.92 · unit U77

**Severity:** high · **Категория:** report · **Файл:** `frontend/src/components/concept/ConceptVariantsResult.tsx:111-112,160-164` ConceptVariantsResult.tsx:111-112 (headline-bar) и :160-164 (KpiCard label='Плотность' unit='м²/га', value=teap.density.toLocaleString('ru-RU')). Бэкенд возвращает teap.density как FAR = GFA / site_area_sqm — безразмерный коэффициент (teap.py:11 docstring 'плотность застройки = FAR = GFA / площадь участка', :81 density = total_floor_area / site_area_sqm, :91 round(density,3), лог :95 'FAR=%.2f'). Фронт выводит этот FAR (порядка 0.5–3.0) под единицей 'м²/га'. Реальная плотность в м²/га = FAR × 10000, поэтому показанное число занижено в ~10000 раз И единица неверна: FAR=2.5 рендерится клиенту как '2,5 м²/га' вместо ~25 000 м²/га. Импакт: финдиректор девелопера читает абсурдно низкую плотность в клиентской концепции застройки; данные/подпись рассинхронизированы (CSV-экспорт ConceptExportButtons.tsx:51 выгружает то же сырое число под лейблом 'Плотность' без единицы; PDF-экспортёр density вовсе не печатает). Как чинить: либо подписать KpiCard и headline как 'Плотность (FAR)' / 'коэф. застройки' без единицы 'м²/га', либо в UI домножать на 10000 и оставлять 'м²/га' (но тогда синхронизировать с CSV/контрактом). Предпочтительно — лейбл 'FAR' без единицы, т.к. бэкенд и PDF маркируют поле именно как FAR. **Почему баг:** FAR=2.5 будет показан клиенту как '2,5 м²/га'. Реальная плотность в м²/га = FAR×10000 = 25 000 м²/га. То есть и единица неверна, и число занижено в 10 000 раз. Это финансово-значимый показатель в клиентской концепции застройки: финдиректор читает '2,5 м²/га' как абсурдно низкую плотность. Бэкенд явно документирует поле как FAR (teap.py docstring строка 11, лог 'FAR=%.2f' строка 95), а CSV-экспорт (ConceptExportButtons.tsx:51 'Плотность') выгружает то же сырое число без единицы — рассинхрон данные/подпись. **Как чинить:** Либо подписать показатель как безразмерный FAR/коэффициент плотности ('Плотность застройки (FAR)', без 'м²/га'), либо при отображении в 'м²/га' умножать на 10000. Согласовать с CSV-экспортом и headline-bar. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.92 · unit U77</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:53:41 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:00 +00:00
Owner

🔍 week ревью 1 — верификация (НЕ ПОДТВЕРЖДЕНО)

Текущее состояние кода: frontend/src/app/concept/page.tsx:1-21 (TODO-заглушка), backend/app/services/generative/teap.py:1-6 (только docstring, нет вычислений), backend/app/services/generative/geometry.py:13-35 (generate_stub отдаёт density=0.0).

Корень: Цитируемого кода нет в текущем дереве. Файл frontend/src/components/concept/ConceptVariantsResult.tsx отсутствует (git ls-files frontend/src/components/concept/ пусто; единственный concept-файл — app/concept/page.tsx, это страница-заглушка с тремя «TODO Stage 1a/1b/1c»). teap.py в issue цитируется со строками 11/81/91/95 (docstring FAR, density = total_floor_area / site_area_sqm, round(density,3), лог FAR=%.2f) — но реальный teap.py сейчас 6 строк, без вычисления плотности. ConceptExportButtons.tsx тоже не существует. То есть фича Generative Design/TEAP ещё не реализована во фронте — рендера KpiCard label='Плотность' unit='м²/га' нет, баг не воспроизводится.

Что править:

  • Сейчас править нечего. Когда TEAP-рендер будет реализован (Stage 1c) — заложить корректную подпись: лейбл «Плотность застройки (FAR)» без единицы м²/га (бэкенд маркирует поле как FAR), синхронно в KpiCard / headline / CSV-экспорте.
  • Рекомендуется переклассифицировать issue: «спецификация на будущую реализацию», а не bug в текущем коде.

Что посмотреть:

  • Код: backend/app/schemas/concept.py (TEAP.density — поле существует в схеме), backend/app/services/generative/teap.py + geometry.py (текущие заглушки), будущий concept-результат во фронте.
  • Vault: domains/ui/components/Component_SiteFinder_Page.md (site-finder, не concept); специфичной заметки по TEAP/density не найдено.
**🔍 week ревью 1 — верификация (НЕ ПОДТВЕРЖДЕНО)** **Текущее состояние кода:** `frontend/src/app/concept/page.tsx:1-21` (TODO-заглушка), `backend/app/services/generative/teap.py:1-6` (только docstring, нет вычислений), `backend/app/services/generative/geometry.py:13-35` (`generate_stub` отдаёт `density=0.0`). **Корень:** Цитируемого кода нет в текущем дереве. Файл `frontend/src/components/concept/ConceptVariantsResult.tsx` отсутствует (`git ls-files frontend/src/components/concept/` пусто; единственный concept-файл — `app/concept/page.tsx`, это страница-заглушка с тремя «TODO Stage 1a/1b/1c»). `teap.py` в issue цитируется со строками 11/81/91/95 (docstring FAR, `density = total_floor_area / site_area_sqm`, `round(density,3)`, лог `FAR=%.2f`) — но реальный `teap.py` сейчас 6 строк, без вычисления плотности. `ConceptExportButtons.tsx` тоже не существует. То есть фича Generative Design/TEAP ещё не реализована во фронте — рендера `KpiCard label='Плотность' unit='м²/га'` нет, баг не воспроизводится. **Что править:** - Сейчас править нечего. Когда TEAP-рендер будет реализован (Stage 1c) — заложить корректную подпись: лейбл «Плотность застройки (FAR)» без единицы `м²/га` (бэкенд маркирует поле как FAR), синхронно в KpiCard / headline / CSV-экспорте. - Рекомендуется переклассифицировать issue: «спецификация на будущую реализацию», а не bug в текущем коде. **Что посмотреть:** - Код: `backend/app/schemas/concept.py` (`TEAP.density` — поле существует в схеме), `backend/app/services/generative/teap.py` + `geometry.py` (текущие заглушки), будущий concept-результат во фронте. - Vault: `domains/ui/components/Component_SiteFinder_Page.md` (site-finder, не concept); специфичной заметки по TEAP/density не найдено.
Sign in to join this conversation.
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#1410
No description provided.