fix(report): человеческий язык в Разделе 6 — дефицит/затоварка, 6.2/6.3/6.5 (#1963) #1988

Merged
bot-backend merged 1 commit from fix/report-microcopy-1963 into main 2026-06-27 12:59:28 +00:00
Collaborator

Батч 5 аудита (эпик #1953). Микрокопия-онли (значения существующих reason-строк + рендер уже присутствующих rationale/notes); матка скоринга/прогноза НЕ тронута, схема не менялась. code-reviewer APPROVE.

Починено в ОБОИХ семействах Раздела 6 (live light-отчёт Section6Forecast/analysis-блоки + ptica-кокпит), т.к. аудит называл артефакты обоих.

Фиксы

  1. Дефицит/затоварка легенда (Section6Forecast): DeficitLegend (−1 затоварка / 0 баланс / +1 острый дефицит + actionable); MOI → «Мес. предложения (MOI)» с пояснением «сколько месяцев район распродаёт предложение текущим темпом».
  2. 6.2 collapse-reason (scenarios.py _COLLAPSE_REASON_LOW_BETA — источник правды): dev-нотация «β rate-sensitivity не прошёл gate (n≥30 ∧ R²≥0.1...)» → человеческий RU. Заголовок «Почему один сценарий, а не три» в ScenariosBlock + ptica ScenarioCards. Убран дублирующий pre-chart reason.
  3. 6.3 Уверенность: рендер confidence.rationale + правило weakest-link («скорее завысим недоверие, чем недооценим риск») + note каждого фактора; FACTOR_RU += confounded_window/advisory_cap (оба семейства); _coverage_factor note переписан (без «domrf↔objective»); новый _history_factor с «на что влияет» + связь с 6.2.
  4. 6.5 Прозрачность: «Вес»→«Оценка»; вердикт по overall (vs 0.5); «Риск избытка предложения»→«Запас по предложению» (инвертирован); §-ссылки → tooltip (stripSectionRefs); 0.00-скоры показывают причину inline; 6 спец-индексов — по 1 строке «что это + куда лучше» (SPECIAL_INDEX_DESC).

Качество

  • ruff ; backend pytest (confidence/scenarios/report_assembler) 169 passed; tsc clean; next lint clean; frontend vitest 76 passed (+ новый forecast-helpers-stripRefs.test.ts ×4).
  • Без изменения схемы → api-types.ts не тронут. Forbidden-файлы (ForecastChart/NspdRegulationCard/Section1/parcels.py median) не задеты.

Closes #1963.

Батч 5 аудита (эпик #1953). Микрокопия-онли (значения существующих reason-строк + рендер уже присутствующих rationale/notes); матка скоринга/прогноза НЕ тронута, схема не менялась. code-reviewer ✅ APPROVE. Починено в ОБОИХ семействах Раздела 6 (live light-отчёт `Section6Forecast`/analysis-блоки + ptica-кокпит), т.к. аудит называл артефакты обоих. ## Фиксы 1. **Дефицит/затоварка легенда** (`Section6Forecast`): `DeficitLegend` (−1 затоварка / 0 баланс / +1 острый дефицит + actionable); MOI → «Мес. предложения (MOI)» с пояснением «сколько месяцев район распродаёт предложение текущим темпом». 2. **6.2 collapse-reason** (`scenarios.py` `_COLLAPSE_REASON_LOW_BETA` — источник правды): dev-нотация «β rate-sensitivity не прошёл gate (n≥30 ∧ R²≥0.1...)» → человеческий RU. Заголовок «Почему один сценарий, а не три» в `ScenariosBlock` + ptica `ScenarioCards`. Убран дублирующий pre-chart reason. 3. **6.3 Уверенность**: рендер `confidence.rationale` + правило weakest-link («скорее завысим недоверие, чем недооценим риск») + `note` каждого фактора; `FACTOR_RU` += `confounded_window`/`advisory_cap` (оба семейства); `_coverage_factor` note переписан (без «domrf↔objective»); новый `_history_factor` с «на что влияет» + связь с 6.2. 4. **6.5 Прозрачность**: «Вес»→«Оценка»; вердикт по overall (vs 0.5); «Риск избытка предложения»→«Запас по предложению» (инвертирован); §-ссылки → tooltip (`stripSectionRefs`); 0.00-скоры показывают причину inline; 6 спец-индексов — по 1 строке «что это + куда лучше» (`SPECIAL_INDEX_DESC`). ## Качество - ruff ✅; backend pytest (confidence/scenarios/report_assembler) **169 passed**; tsc clean; next lint clean; frontend vitest **76 passed** (+ новый `forecast-helpers-stripRefs.test.ts` ×4). - Без изменения схемы → api-types.ts не тронут. Forbidden-файлы (ForecastChart/NspdRegulationCard/Section1/parcels.py median) не задеты. Closes #1963.
bot-backend added 1 commit 2026-06-27 12:44:02 +00:00
fix(report): human RU microcopy in Site Finder Section 6 (#1963)
All checks were successful
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Successful in 1m4s
CI / openapi-codegen-check (pull_request) Successful in 1m54s
CI / backend-tests (pull_request) Successful in 13m50s
e82761964d
Replace dev-jargon with plain RU across the §22 forecast report (6.2/6.3/6.5
+ deficit/затоварка legend). Source of truth = backend reason strings + the
frontend RU maps; text/render-only, no scoring/forecast math touched.

Backend (source of truth):
- scenarios.py _COLLAPSE_REASON_LOW_BETA: «β rate-sensitivity не прошёл gate …»
  → «чувствительность к ставке не оценена на коротком ряде ЕКБ → один базовый
  сценарий вместо трёх».
- confidence_engine.py _coverage_factor: drop «domrf↔objective» jargon, say it
  affects будущее предложение/конкуренцию. New _history_factor: «глубина истории
  N мес» + на что влияет + связь с 6.2 (короткий ряд → один сценарий).

Frontend (both Section-6 families — live analysis page + ptica cockpit):
- Deficit legend: −1 затоварка / 0 баланс / +1 острый дефицит + actionable
  трактовка; MOI tied to «сколько месяцев район распродаёт предложение».
- 6.2 heading «Почему один сценарий, а не три» over the collapse reason.
- 6.3 render confidence.rationale + weakest-link rule («скорее завысим
  недоверие, чем недооценим риск»); FACTOR_RU gains confounded_window/
  advisory_cap; factor notes shown.
- 6.5 «Вес»→«Оценка»; overall verdict vs 0.5; «Риск избытка предложения»→
  «Запас по предложению»; §-refs moved from reason into tooltip; 6 special-
  index 1-line «что это + куда лучше» descriptions; 0.00-score reasons shown.

Tests: confidence_engine (history/coverage notes), stripSectionRefs vitest.

Refs #1963
bot-backend merged commit ef51bb8b62 into main 2026-06-27 12:59:28 +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#1988
No description provided.