fix(ptica): «Риск: Низкий» больше не выглядит вердиктом (#2934) #2939

Merged
bot-backend merged 1 commit from fix/2934-risk-placeholder-honesty into main 2026-08-19 15:53:21 +00:00
Collaborator

Что видел пользователь

В hero-панели инвест-скора строка «Риск: Низкий», покрашенная в зелёный. Пометка «предв.» лежала только в атрибуте title — на экране её нет, на печати тем более.

Откуда берётся значение:

export function adaptRiskGauge(a: ParcelAnalysis): PticaGauge {
  const build = adaptBuildabilityGauge(a);
  const value = build.value == null ? null : 100 - build.value;

Это обратная застраиваемость. К природным опасностям — затоплению, оползням, карсту — отношения не имеет вовсе. Функция сама помечена isReal: false, а её докстринг говорит прямо: PLACEHOLDER ("предв.") until the real risk model is wired.

Зелёное «Низкий» читается как «рисков нет», при том что источники природного риска пусты: cad_risk_zones 0 строк, слои risk_* НСПД 0 объектов на 669 дампов (замер 19.08).

Правка следует соглашению самого файла

Рядом, в той же функции adaptInvestScore, potentialTone всегда "none" с комментарием «stays muted until the financial model surfaces a real value». То есть приглушать плейсхолдеры здесь уже принято — цвет получал только риск.

  1. riskTone"none".
  2. Подпись «предв.» рендерится видимым текстом через styles.fieldCaption — тем же приёмом, что score.caption строкой выше.

Ни формула, ни название строки не тронуты: переименование «Риск» → «Правовой риск застройки» — продуктовое решение, не моё.

Проверка

тест origin/main с правкой
адаптер: riskTone не красит плейсхолдер красный: expected 'good' to be 'none' зелёный
рендер: «предв.» видно красный: Unable to find an element with the text: предв. зелёный
контроль: «Потенциал» приглушён как и раньше зелёный зелёный

Оба теста несут предусловие: участок с gate_verdict. Без него застраиваемость null, тон был бы "none" по совсем другой причине, и проверка прошла бы вхолостую — зелёная и на неисправленном коде. Первая версия теста именно на это и напоролась (expected null not to be null).

tsc --noEmit: rc=0
vitest run: 35 файлов, 275 тестов, rc=0 — перепрогнано после того, как pre-commit прогнал prettier, а не до.

Что из #2934 остаётся

Это 2 записи из 12 (плюс 3 закрыты в #2935). Дальше: зелёная плашка «Риски не обнаружены» в NspdRiskZonesBlock (маршрут /legacy/site-finder), «н/д» вместо «0» в тумблере слоёв карты, удаление risks.geology_risk_label, и смена источника flood_zone.

Refs #2934

## Что видел пользователь В hero-панели инвест-скора строка **«Риск: Низкий»**, покрашенная в зелёный. Пометка «предв.» лежала только в атрибуте `title` — на экране её нет, на печати тем более. Откуда берётся значение: ```ts export function adaptRiskGauge(a: ParcelAnalysis): PticaGauge { const build = adaptBuildabilityGauge(a); const value = build.value == null ? null : 100 - build.value; ``` Это **обратная застраиваемость**. К природным опасностям — затоплению, оползням, карсту — отношения не имеет вовсе. Функция сама помечена `isReal: false`, а её докстринг говорит прямо: `PLACEHOLDER ("предв.") until the real risk model is wired`. Зелёное «Низкий» читается как «рисков нет», при том что источники природного риска пусты: `cad_risk_zones` 0 строк, слои `risk_*` НСПД 0 объектов на 669 дампов (замер 19.08). ## Правка следует соглашению самого файла Рядом, в той же функции `adaptInvestScore`, `potentialTone` **всегда** `"none"` с комментарием «stays muted until the financial model surfaces a real value». То есть приглушать плейсхолдеры здесь уже принято — цвет получал только риск. 1. `riskTone` → `"none"`. 2. Подпись «предв.» рендерится видимым текстом через `styles.fieldCaption` — тем же приёмом, что `score.caption` строкой выше. Ни формула, ни название строки не тронуты: переименование «Риск» → «Правовой риск застройки» — продуктовое решение, не моё. ## Проверка | тест | `origin/main` | с правкой | |---|---|---| | адаптер: `riskTone` не красит плейсхолдер | **красный**: `expected 'good' to be 'none'` | зелёный | | рендер: «предв.» видно | **красный**: `Unable to find an element with the text: предв.` | зелёный | | контроль: «Потенциал» приглушён как и раньше | зелёный | зелёный | Оба теста несут **предусловие**: участок с `gate_verdict`. Без него застраиваемость `null`, тон был бы `"none"` по совсем другой причине, и проверка прошла бы вхолостую — зелёная и на неисправленном коде. Первая версия теста именно на это и напоролась (`expected null not to be null`). `tsc --noEmit`: rc=0 `vitest run`: 35 файлов, 275 тестов, rc=0 — перепрогнано **после** того, как pre-commit прогнал prettier, а не до. ## Что из #2934 остаётся Это 2 записи из 12 (плюс 3 закрыты в #2935). Дальше: зелёная плашка «Риски не обнаружены» в `NspdRiskZonesBlock` (маршрут `/legacy/site-finder`), «н/д» вместо «0» в тумблере слоёв карты, удаление `risks.geology_risk_label`, и смена источника `flood_zone`. Refs #2934
bot-backend added 1 commit 2026-08-19 15:48:23 +00:00
fix(ptica): «Риск: Низкий» больше не выглядит вердиктом (#2934)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 1m2s
CI / openapi-codegen-check (pull_request) Successful in 1m59s
6e02104bc5
adaptRiskGauge считает риск как `100 - buildability` — это обратная
застраиваемость, к природным опасностям (затопление, оползни, карст) отношения
не имеющая. Сама функция помечена isReal: false и в докстринге названа
PLACEHOLDER «until the real risk model is wired».

В интерфейсе это выглядело как вердикт: значение «Низкий» красилось зелёным
(riskTone: "good"), а пометка «предв.» лежала ТОЛЬКО в атрибуте title — на экране
её не видно, на печати тем более.

Читалось это как «рисков нет», при том что источники природного риска пусты:
cad_risk_zones 0 строк, слои risk_* НСПД 0 объектов на 669 дампов (замер 19.08).

Две правки, обе согласованы с соглашением этого же файла:
1. riskTone → "none". Ровно так уже приглушён potentialTone: пока значение не
   настоящее, цвета-вердикта у него нет.
2. Подпись «предв.» рендерится видимым текстом через styles.fieldCaption — тот же
   приём, что у score.caption рядом.

Тесты двусторонние:
* адаптер — на origin/main `expected 'good' to be 'none'`;
* рендер   — на origin/main `Unable to find an element with the text: предв.`.

Оба несут предусловие: участок с gate_verdict, иначе застраиваемость null, тон был
бы "none" по другой причине и проверка прошла бы вхолостую.

tsc --noEmit: rc=0
vitest run: 35 файлов, 275 тестов, rc=0 (перепрогнано после prettier)

Refs #2934
bot-backend merged commit 1afa34c5a6 into main 2026-08-19 15:53:21 +00:00
bot-backend deleted branch fix/2934-risk-placeholder-honesty 2026-08-19 15:53:22 +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#2939
No description provided.