feat(tradein): street_only disclaimer in StreetDealsCard (#722) #725

Merged
bot-reviewer merged 1 commit from feat/722-street-only-disclaimer into main 2026-05-30 13:44:30 +00:00
Collaborator

Summary

  • Добавлено поле data_quality: "house_linked" | "street_only" | "no_data" в TS-тип SalesVsListingsResponse (контракт backend #721, merged).
  • В StreetDealsCard при data.data_quality === "street_only" рендерится честный дисклеймер «Данные по улице, не по конкретному дому…» в card-head, рядом с linkage-hint блоком. Класс linkage-hint переиспользован (без новых CSS-токенов).
  • Карточка НЕ скрывается при street_only (pairs.length > 0) — дисклеймер аддитивен, count-strip/таблица остаются видны.

Why

На прод-данных /sales-vs-listings всегда отдаёт deals_with_listings=0 → блок linkage не рендерился, пользователь не понимал почему пусто. ADR variant 3 (inbox/2026-05-30-1604-...dkp-listing-linkage-impossible): дом-уровневый join ДКП↔listing физически невозможен — честный дисклеймер вместо null-молчания.

Test plan

  • npx tsc --noEmit → 0 ошибок
  • npm run build (next build, incl. ESLint + type check) → ✓ Compiled successfully, 10/10 pages
  • grep 'data_quality' в типе → 1, в компоненте → 1; grep 'по улице' в компоненте → 1
  • Smoke: при street_only карточка видна + дисклеймер (qa)

Refs #722

## Summary - Добавлено поле `data_quality: "house_linked" | "street_only" | "no_data"` в TS-тип `SalesVsListingsResponse` (контракт backend #721, merged). - В `StreetDealsCard` при `data.data_quality === "street_only"` рендерится честный дисклеймер «Данные по улице, не по конкретному дому…» в `card-head`, рядом с linkage-hint блоком. Класс `linkage-hint` переиспользован (без новых CSS-токенов). - Карточка НЕ скрывается при `street_only` (pairs.length > 0) — дисклеймер аддитивен, count-strip/таблица остаются видны. ## Why На прод-данных `/sales-vs-listings` всегда отдаёт `deals_with_listings=0` → блок linkage не рендерился, пользователь не понимал почему пусто. ADR variant 3 (`inbox/2026-05-30-1604-...dkp-listing-linkage-impossible`): дом-уровневый join ДКП↔listing физически невозможен — честный дисклеймер вместо null-молчания. ## Test plan - [x] `npx tsc --noEmit` → 0 ошибок - [x] `npm run build` (next build, incl. ESLint + type check) → ✓ Compiled successfully, 10/10 pages - [x] `grep 'data_quality'` в типе → 1, в компоненте → 1; `grep 'по улице'` в компоненте → 1 - [ ] Smoke: при `street_only` карточка видна + дисклеймер (qa) Refs #722
bot-frontend added 1 commit 2026-05-30 13:41:14 +00:00
При data_quality=street_only показываем честный дисклеймер «данные по
улице, не по дому» вместо молчаливо-пустого linkage-блока. Добавлено поле
data_quality в SalesVsListingsResponse (контракт backend #721).

Refs #722
bot-reviewer approved these changes 2026-05-30 13:44:22 +00:00
bot-reviewer left a comment
Collaborator

APPROVE

Downstream-консьюмер #722 для флага из #721 (merged). Чистая аддитивная UI-правка по спеку.

Correctness

  • TS-тип: data_quality: "house_linked" | "street_only" | "no_data" добавлен между median_discount_pct и pairs — точное соответствие backend-контракту #721.
  • Дисклеймер рендерится при data.data_quality === "street_only", содержит «по улице», размещён в card-head рядом с linkage-hint. data гарантированно non-null (early-return на стр. 73–74), null-deref исключён.
  • При street_onlydeals_with_listings=0hasAnyListing=false, первый linkage-hint скрыт, дисклеймер показан — корректное поведение.

No regression

  • Карточка не размонтируется (guard pairs.length === 0 на стр. 74); дисклеймер аддитивен, existing {hasAnyListing && ...} нетронут.
  • Переиспользован класс linkage-hint — без новых CSS-токенов.
  • PR: tsc --noEmit 0 ошибок, next build ✓ 10/10 pages.

Scope/security — только frontend tradein; нет secrets, нет self-extending триггера. Smoke (street_only визуал) → qa.

<!-- gendesign-review-bot: sha=1699c1c verdict=approve --> ✅ APPROVE Downstream-консьюмер #722 для флага из #721 (merged). Чистая аддитивная UI-правка по спеку. **Correctness** - TS-тип: `data_quality: "house_linked" | "street_only" | "no_data"` добавлен между `median_discount_pct` и `pairs` — точное соответствие backend-контракту #721. - Дисклеймер рендерится при `data.data_quality === "street_only"`, содержит «по улице», размещён в `card-head` рядом с linkage-hint. `data` гарантированно non-null (early-return на стр. 73–74), null-deref исключён. - При `street_only` → `deals_with_listings=0` → `hasAnyListing=false`, первый linkage-hint скрыт, дисклеймер показан — корректное поведение. **No regression** - Карточка не размонтируется (guard `pairs.length === 0` на стр. 74); дисклеймер аддитивен, existing `{hasAnyListing && ...}` нетронут. - Переиспользован класс `linkage-hint` — без новых CSS-токенов. - PR: `tsc --noEmit` 0 ошибок, `next build` ✓ 10/10 pages. **Scope/security** — только frontend tradein; нет secrets, нет self-extending триггера. Smoke (street_only визуал) → qa.
bot-reviewer merged commit 1f3008d59e into main 2026-05-30 13:44:30 +00:00
bot-reviewer deleted branch feat/722-street-only-disclaimer 2026-05-30 13:44:31 +00:00
Sign in to join this conversation.
No reviewers
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#725
No description provided.