gendesign/tradein-mvp/backend/app
Light1YT 8591efc42f feat(tradein): estimator deals tier classification (PR M / #564 Phase 3)
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.
2026-05-27 17:36:46 +05:00
..
api feat(tradein): sales-vs-listings endpoint (PR K, foundation #564) (#597) 2026-05-27 11:55:44 +00:00
core feat(tradein): persistent infra для backfill scripts (PR F) (#592) 2026-05-27 06:59:54 +00:00
schemas feat(tradein): estimator deals tier classification (PR M / #564 Phase 3) 2026-05-27 17:36:46 +05:00
services feat(tradein): estimator deals tier classification (PR M / #564 Phase 3) 2026-05-27 17:36:46 +05:00
tasks feat(tradein): persistent infra для backfill scripts (PR F) (#592) 2026-05-27 06:59:54 +00:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
main.py feat(rbac): role-based access control via X-Authenticated-User middleware (#585) 2026-05-26 06:18:40 +00:00