(low) site-finder-api.ts by-bbox адаптер: parcel с area_m2 === null приземляется в area_ha=0 → «0.00 га» как факт и тихое попадание в площадные фильтры #1421

Closed
opened 2026-06-15 05:53:53 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: data-integrity · Файл: frontend/src/lib/site-finder-api.ts:208-219

site-finder-api.ts:212 — адаптер by-bbox: area_ha: p.area_m2 != null ? p.area_m2 / 10000 : 0. Участок с неизвестной площадью (backend отдаёт area_m2=null) получает валидное число 0 вместо признака «нет данных». Последствия: (1) ParcelDrawer.tsx:198 и EntryMap.tsx:109,132 (тултип/попап) рендерят parcel.area_ha.toFixed(2) → «0.00 га» как достоверную площадь; (2) RecentParcels.tsx:193 тернарник parcel.area_ha ? ... — 0 falsy → строка площади полностью скрыта, т.е. поведение между экранами рассинхронизировано; (3) applyFilters (site-finder-api.ts:124-125) p.area_ha < min / > max — фильтр «до 0.5 га» (max:0.5, MapFilterBar.tsx:68) ВКЛЮЧАЕТ такие участки (0 ≤ 0.5), а «от 3 га» их выкидывает — площадь неизвестна, но участок тихо фильтруется как нулевой. Импакт: искажение факта в карточке участка (государственная аналитика показывает «0.00 га» при отсутствии данных) + неверное участие в площадных фильтрах. Затрагивает только live-путь (в MOCK_PARCELS_BBOX area_m2 не применяется — фикстура уже в форме ParcelBboxItem). Фикс: сделать area_ha опционально null и рендерить «— га»/скрывать при отсутствии, не включать парцелы с неизвестной площадью в площадные фильтры.

Почему баг: 0 — не «нет данных», а валидное число площади, которое и показывается, и участвует в фильтрации min_area/max_area (applyFilters: p.area_ha < min / > max). Неизвестная площадь выдаётся клиенту как достоверный «0.00 га» (искажение факта в карточке участка) и тихо попадает/выпадает из площадных фильтров. В RecentParcels тернарник area_ha ? ... к тому же полностью прячет строку площади для таких участков (0 — falsy), т.е. поведение между экранами рассинхронизировано.

Как чинить: Хранить area_ha как number | null (null при отсутствии area_m2) и во всех рендерах показывать «— га» при null; исключать парцелы с неизвестной площадью из min/max-area фильтрации вместо трактовки их как 0.


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

**Severity:** low · **Категория:** data-integrity · **Файл:** `frontend/src/lib/site-finder-api.ts:208-219` site-finder-api.ts:212 — адаптер by-bbox: `area_ha: p.area_m2 != null ? p.area_m2 / 10000 : 0`. Участок с неизвестной площадью (backend отдаёт area_m2=null) получает валидное число 0 вместо признака «нет данных». Последствия: (1) ParcelDrawer.tsx:198 и EntryMap.tsx:109,132 (тултип/попап) рендерят `parcel.area_ha.toFixed(2)` → «0.00 га» как достоверную площадь; (2) RecentParcels.tsx:193 тернарник `parcel.area_ha ? ...` — 0 falsy → строка площади полностью скрыта, т.е. поведение между экранами рассинхронизировано; (3) applyFilters (site-finder-api.ts:124-125) `p.area_ha < min` / `> max` — фильтр «до 0.5 га» (max:0.5, MapFilterBar.tsx:68) ВКЛЮЧАЕТ такие участки (0 ≤ 0.5), а «от 3 га» их выкидывает — площадь неизвестна, но участок тихо фильтруется как нулевой. Импакт: искажение факта в карточке участка (государственная аналитика показывает «0.00 га» при отсутствии данных) + неверное участие в площадных фильтрах. Затрагивает только live-путь (в MOCK_PARCELS_BBOX area_m2 не применяется — фикстура уже в форме ParcelBboxItem). Фикс: сделать area_ha опционально null и рендерить «— га»/скрывать при отсутствии, не включать парцелы с неизвестной площадью в площадные фильтры. **Почему баг:** 0 — не «нет данных», а валидное число площади, которое и показывается, и участвует в фильтрации min_area/max_area (applyFilters: p.area_ha < min / > max). Неизвестная площадь выдаётся клиенту как достоверный «0.00 га» (искажение факта в карточке участка) и тихо попадает/выпадает из площадных фильтров. В RecentParcels тернарник `area_ha ? ...` к тому же полностью прячет строку площади для таких участков (0 — falsy), т.е. поведение между экранами рассинхронизировано. **Как чинить:** Хранить area_ha как number | null (null при отсутствии area_m2) и во всех рендерах показывать «— га» при null; исключать парцелы с неизвестной площадью из min/max-area фильтрации вместо трактовки их как 0. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.78 · unit U81</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:53:53 +00:00
bot-backend added the
scope/frontend
label 2026-06-15 11:02:02 +00:00
Sign in to join this conversation.
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#1421
No description provided.