[SF-v2 #952] 952-B: Индексы дефицит/затоварка + MAI §7.9 (рыночная ставка) #981

Closed
opened 2026-06-02 19:23:03 +00:00 by lekss361 · 3 comments
Owner

Часть EPIC #952 (Site Finder v2 / GG-форсайт). Декомпозиция критпути — ground-truth (прод-БД + код) + web-research, 2026-06-02.

Scope: Deficit = forecast demand − supply per horizon; overstock — инверсия. Mortgage Affordability Index §7.9. ⚠️ MAI считать по РЫНОЧНОЙ ставке (domrf market / 945-C), НЕ по mortgage_rate_weighted 7.83% (субсидированная).

Файлы: new backend/app/services/forecasting/indices.py

DoD:

  • 3 индекса per horizon; MAI читает macro_indicator рыночную ставку

Зависит от: 952-A, 951-A
Effort: M

**Часть EPIC #952 (Site Finder v2 / GG-форсайт).** Декомпозиция критпути — ground-truth (прод-БД + код) + web-research, 2026-06-02. **Scope:** Deficit = forecast demand − supply per horizon; overstock — инверсия. Mortgage Affordability Index §7.9. ⚠️ MAI считать по РЫНОЧНОЙ ставке (domrf market / 945-C), НЕ по mortgage_rate_weighted 7.83% (субсидированная). **Файлы:** new backend/app/services/forecasting/indices.py **DoD:** - 3 индекса per horizon; MAI читает macro_indicator рыночную ставку **Зависит от:** 952-A, 951-A **Effort:** M
lekss361 added this to the Site Finder v2 — Foresight (GG-форсайт) milestone 2026-06-02 19:23:07 +00:00
lekss361 added the
analytics
GG-форсайт
scope/backend
site-finder
labels 2026-06-02 19:23:07 +00:00
Author
Owner

🔴 GG-critical (стратегсессия 2026-06-01)

ГГ привёл это как главный практический вывод системы (00:21:23):

«Может быть, там через год нам система скажет, что через год на Визе будет затоварка дикая. Или наоборот… скорее всего там будет большой дефицит… Или наоборот, он скажет тебе: как можно быстрее выводите в продажу объект комфорт-класса.»

→ Индексы дефицита/затоварки на горизонт = тот самый сигнал «выходить срочно vs ждать». MAI добавляет ставочную доступность (ГГ: «через год будет хуже»). priority/critical. ⚠️ MAI — по рыночной ставке, не субсидированной (см. тело).

## 🔴 GG-critical (стратегсессия 2026-06-01) ГГ привёл это как главный практический вывод системы (00:21:23): > «Может быть, там через год нам система скажет, что **через год на Визе будет затоварка дикая. Или наоборот… скорее всего там будет большой дефицит**… Или наоборот, он скажет тебе: как можно быстрее выводите в продажу объект комфорт-класса.» → Индексы дефицита/затоварки на горизонт = тот самый сигнал «выходить срочно vs ждать». MAI добавляет ставочную доступность (ГГ: «через год будет хуже»). **priority/critical**. ⚠️ MAI — по рыночной ставке, не субсидированной (см. тело).
lekss361 reopened this issue 2026-06-03 17:59:41 +00:00
Author
Owner

🟠 Reopen — DoD-нарушение: MAI считается по СУБСИДИРОВАННОЙ ставке (DoD явно требует рыночную). Валидация #1013.

Прямое нарушение DoD. Тело задачи: «⚠️ MAI считать по РЫНОЧНОЙ ставке (domrf market / 945-C), НЕ по mortgage_rate_weighted 7.83% (субсидированная)».
Поставлено #1013 backend/app/services/forecasting/affordability.py: rate_kind всегда 'subsidized', payment_to_income всегда None (дохода нет), confidence всегда 'low'. → MAI считается именно по субсидированной ставке — то, что DoD прямо запрещал. (Аннуитет-формула как таковая корректна и zero-div-safe, но источник ставки неверный.)

🟠 Доп. (MEDIUM, design): сегментные оси инертны в ранкере «что строить». compute_market_metrics и compute_future_supply_pressure принимают только district+premise_kind, не obj_class/room_bucket/price_bucket (market_metrics.py:329, future_supply.py:285). → по всему гриду (15 ячеек класс×комнатность) base_pace и projected_supply идентичны для каждой ячейки; ячейки различаются только §9.4/§9.5 множителями. Ранкер не может упорядочить «студии vs 2-комнатные» по реальному сегментному спросу/предложению — подрывает суть §9.7.

Fix: (1) MAI читать рыночную ставку из macro_indicator (945-C / domrf market), как требует DoD; (2) пробросить сегментные оси в §9.2/§9.3 запросы либо явно задокументировать district-грейн как ограничение.

Логика сортировки ранкера (_rank_key: −deficit, −confidence, key) корректна и стабильна.

🟠 **Reopen — DoD-нарушение: MAI считается по СУБСИДИРОВАННОЙ ставке (DoD явно требует рыночную).** Валидация #1013. **Прямое нарушение DoD.** Тело задачи: «⚠️ MAI считать по **РЫНОЧНОЙ** ставке (domrf market / 945-C), **НЕ** по mortgage_rate_weighted 7.83% (субсидированная)». Поставлено #1013 `backend/app/services/forecasting/affordability.py`: `rate_kind` **всегда `'subsidized'`**, `payment_to_income` всегда None (дохода нет), `confidence` всегда `'low'`. → MAI считается именно по субсидированной ставке — то, что DoD прямо запрещал. (Аннуитет-формула как таковая корректна и zero-div-safe, но источник ставки неверный.) 🟠 Доп. (MEDIUM, design): сегментные оси инертны в ранкере «что строить». `compute_market_metrics` и `compute_future_supply_pressure` принимают только `district`+`premise_kind`, **не** `obj_class`/`room_bucket`/`price_bucket` (`market_metrics.py:329`, `future_supply.py:285`). → по всему гриду (15 ячеек класс×комнатность) `base_pace` и `projected_supply` **идентичны для каждой ячейки**; ячейки различаются только §9.4/§9.5 множителями. Ранкер не может упорядочить «студии vs 2-комнатные» по реальному сегментному спросу/предложению — подрывает суть §9.7. **Fix:** (1) MAI читать рыночную ставку из `macro_indicator` (945-C / domrf market), как требует DoD; (2) пробросить сегментные оси в §9.2/§9.3 запросы либо явно задокументировать district-грейн как ограничение. _Логика сортировки ранкера (`_rank_key`: −deficit, −confidence, key) корректна и стабильна._
Collaborator

FIXED (PR #1038). MAI switched from subsidized weighted rate (~7.83%) to CBR key rate as market borrowing-cost proxy (macro_indicator key_rate/rf — prod-confirmed latest 14.5% @2026-06-02), rate_kind='key_rate_proxy'; absent->market_unavailable (no silent subsidy fallback). Income (#946) still missing -> confidence low. Closing on test+prod-premise verify; reopen if disagrees.

FIXED (PR #1038). MAI switched from subsidized weighted rate (~7.83%) to CBR key rate as market borrowing-cost proxy (macro_indicator key_rate/rf — prod-confirmed latest 14.5% @2026-06-02), rate_kind='key_rate_proxy'; absent->market_unavailable (no silent subsidy fallback). Income (#946) still missing -> confidence low. Closing on test+prod-premise verify; reopen if disagrees.
Sign in to join this conversation.
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#981
No description provided.