feat(tradein): estimator deals tier (PR M, #564 Phase 3) #600

Merged
Light1YT merged 1 commit from feat/tradein-estimator-deals-tier into main 2026-05-27 12:40:10 +00:00
Owner

Summary

Закрывает финальную фазу #564. Estimator теперь возвращает tier classification для каждой rosreestr-сделки в actual_deals output.

Changes

  • schemas/trade_in.py: AnalogLot.tier: str | None (T0_per_house / T1_per_street)
  • services/estimator.py:
    • Stale NOTE 2026-05-24 заменён actual docs (importer уже фильтрует doc_type='ДКП' через PR-A)
    • _deal_to_analog computes tier через kadastr_num heuristic
    • _fetch_deals SQL include kadastr_num

Reality check

Open dataset Росреестра имеет kadastr_num=NULL для всех 49,791 ДКП → все классифицируются T1_per_street. Поле зарезервировано на случай ЕГРН direct feed в будущем.

Tests

  • services/ pytest 19/19 pass
  • ruff clean
  • No schema migrations (только Pydantic model + SQL column add к SELECT)

Closes #564.

## Summary Закрывает финальную фазу #564. Estimator теперь возвращает tier classification для каждой rosreestr-сделки в `actual_deals` output. ## Changes - `schemas/trade_in.py`: `AnalogLot.tier: str | None` (T0_per_house / T1_per_street) - `services/estimator.py`: * Stale NOTE 2026-05-24 заменён actual docs (importer уже фильтрует doc_type='ДКП' через PR-A) * `_deal_to_analog` computes tier через kadastr_num heuristic * `_fetch_deals` SQL include `kadastr_num` ## Reality check Open dataset Росреестра имеет `kadastr_num=NULL` для всех 49,791 ДКП → все классифицируются T1_per_street. Поле зарезервировано на случай ЕГРН direct feed в будущем. ## Tests - services/ pytest 19/19 pass - ruff clean - No schema migrations (только Pydantic model + SQL column add к SELECT) Closes #564.
Light1YT added 1 commit 2026-05-27 12:40:08 +00:00
Remove stale NOTE 2026-05-24 + add tier field на AnalogLot.

- schemas/trade_in.py: AnalogLot добавлено поле `tier: str | None`
  ('T0_per_house' / 'T1_per_street' — для rosreestr deals)
- services/estimator.py:
  * _deal_to_analog: compute tier via kadastr_num heuristic
    ('66:41:0204016:10' → T0; '66:41:...:0' OR NULL → T1)
  * estimate_quality docstring: replaced устаревший NOTE с corrected
    explanation что importer (PR-A 2026-05-24) уже фильтрует doc_type='ДКП'
    и deals идут в actual_deals output
  * _fetch_deals SQL: include kadastr_num в SELECT (для tier classify)

Observation: open dataset Росреестра (current state) имеет
kadastr_num=NULL для всех 49,791 ДКП-сделок → все классифицируются
как T1_per_street. Поле зарезервировано на случай будущего ЕГРН
direct feed.

Tests: ruff clean, services/ pytest 19/19 pass.

Closes #564 Phase 3.
Light1YT merged commit 64e0d6f4e7 into main 2026-05-27 12:40:10 +00:00
Light1YT deleted branch feat/tradein-estimator-deals-tier 2026-05-27 12:40:10 +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#600
No description provided.