feat(tradein/matching): fias_exact tier + estimate fias persist + suggest fias_id contract #2184

Merged
lekss361 merged 1 commit from feat/tradein-fias-tier-matching into main 2026-07-02 17:56:13 +00:00
Owner

Summary

ФИАС (houses.house_fias_id, наполнен DaData-backfill'ом 2026-07-02 у 5 122 домов, UUID-неймспейс = ГАР OBJECTGUID) становится first-class ключом матчинга:

  • Tier 0.5 fias_exact в match_or_create_house и match_house_readonly (между cadastral и source+ext_id): lower(house_fias_id) = lower(:fias), confidence 0.95. Параметр additive-optional — все существующие callers обратносовместимы.
  • Миграция 159_houses_fias_idx.sql: идемпотентный partial index houses_fias_lower_idx ON houses (lower(house_fias_id)) WHERE house_fias_id IS NOT NULL.
  • estimator: fias из DaData clean прокидывается в match_house_readonly; после успешного матча — fill-null persist house_fias_id в houses (SAVEPOINT, семантика backfill-скрипта) — справочник наполняется сам по мере оценок; target_fias_id из request используется первым.
  • suggest→fias контракт: SuggestItem.fias_id (только house-level кандидаты DaData-тира, fias_level 8/9), request-поле TradeInEstimateInput.target_fias_id — фронт подключается отдельным PR: выбранный в автокомплите дом матчится детерминированно, без clean-вызова и квоты.

Test plan

  • Новые: fias_exact tier ×2, readonly ×2, suggest-контракт ×6 — green
  • Полный pytest tradein-backend: 2859 passed, 4 skipped, 1 failed — test_search_api::test_search_cache_hit pre-existing env-артефакт (401 без auth-заголовка, воспроизводится на немодифицированном main-коде, search API не трогался)
  • ruff + pre-commit green

Связано: DaData suggest-backfill 2026-07-02 (fias 6→5122, ГАР-join +524, ревизия 25 canon-расхождений), PR #2173 (estimator, зона аналогов — не пересекается).

## Summary ФИАС (`houses.house_fias_id`, наполнен DaData-backfill'ом 2026-07-02 у 5 122 домов, UUID-неймспейс = ГАР OBJECTGUID) становится first-class ключом матчинга: - **Tier 0.5 `fias_exact`** в `match_or_create_house` и `match_house_readonly` (между cadastral и source+ext_id): `lower(house_fias_id) = lower(:fias)`, confidence 0.95. Параметр additive-optional — все существующие callers обратносовместимы. - **Миграция `159_houses_fias_idx.sql`**: идемпотентный partial index `houses_fias_lower_idx ON houses (lower(house_fias_id)) WHERE house_fias_id IS NOT NULL`. - **estimator**: fias из DaData clean прокидывается в match_house_readonly; после успешного матча — fill-null persist `house_fias_id` в houses (SAVEPOINT, семантика backfill-скрипта) — справочник наполняется сам по мере оценок; `target_fias_id` из request используется первым. - **suggest→fias контракт**: `SuggestItem.fias_id` (только house-level кандидаты DaData-тира, fias_level 8/9), request-поле `TradeInEstimateInput.target_fias_id` — фронт подключается отдельным PR: выбранный в автокомплите дом матчится детерминированно, без clean-вызова и квоты. ## Test plan - [x] Новые: fias_exact tier ×2, readonly ×2, suggest-контракт ×6 — green - [x] Полный pytest tradein-backend: 2859 passed, 4 skipped, 1 failed — `test_search_api::test_search_cache_hit` pre-existing env-артефакт (401 без auth-заголовка, воспроизводится на немодифицированном main-коде, search API не трогался) - [x] ruff + pre-commit green Связано: DaData suggest-backfill 2026-07-02 (fias 6→5122, ГАР-join +524, ревизия 25 canon-расхождений), PR #2173 (estimator, зона аналогов — не пересекается).
lekss361 added 1 commit 2026-07-02 17:50:38 +00:00
feat(tradein/matching): fias_exact tier + estimate fias persist + suggest fias_id contract
All checks were successful
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
67a852caf1
lekss361 merged commit d87ebcc30e into main 2026-07-02 17:56:13 +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#2184
No description provided.