Demand: «Индикатор цен ДДУ» — применить ARN-framework НСПД к нашим первичным данным #99

Closed
opened 2026-05-12 06:48:13 +00:00 by lekss361 · 1 comment
lekss361 commented 2026-05-12 06:48:13 +00:00 (Migrated from github.com)

Эшелон: Demand / Analytics framework

Контекст / открытие

При full audit НСПД (см. NSPD_API_Map_May12 Update part 2) найден готовый аналитический фреймворк в /api/market-analytics/v1/* (требует ЕСИА). НСПД считает индикатор цен вторичного рынка с 2018 года по 4 индикаторам / 6 area buckets / 3 calc methods / 13-step shaded legend.

Реальный пример для Екатеринбурга (POST /tableEgrn/fgisEgrn):

Индикатор цен квартальный «К предыдущему периоду»:
Q1 2025: 1.01   Q2 2025: 1.05   Q3 2025: 1.04   Q4 2025: 1.03   Q1 2026: 1.03

Killer insight: у них вторичка, у нас в rosreestr_deals (6.83M ДДУ) — первичка. Это идеальное дополнение их фреймворка.

Что сделать

1. Применить ARN методологию к нашим ДДУ-данным

Расширить D1 (#33) — mv_quarter_price_per_m2mv_ddu_price_indicator:

Параметр ARN (вторичка) Наше (первичка)
Индикаторы M/Q/H/Y (4 типа) Те же 4 типа
Area buckets 6: 0-25/25-40/40-60/60-80/80-100/100+ м² Те же 6
Calc methods 3: базисный / предыдущий / годом ранее Те же 3
Гранулярность Округ → Субъект → Нас.пункт → Cad_quarter Те же 4 уровня
Legend 13 ступеней (0.25, 0.50, ..., 1.75) Те же 13

2. Schema

CREATE MATERIALIZED VIEW mv_ddu_price_indicator AS
SELECT
  cad_quarter,
  area_bucket,  -- 1..6
  period_type,  -- M/Q/H/Y
  period_value, -- e.g. '2026-Q1'
  calc_method,  -- 1/2/3
  -- индикатор = median(price/area) текущего периода / median предыдущего
  median_price_per_m2 / LAG(median_price_per_m2) OVER (...) AS price_indicator,
  deals_count
FROM rosreestr_deals  -- filter realestate_type = '002001003000'
GROUP BY ...;

3. Endpoint mirror ARN API

POST /api/v1/market/ddu-indicator — принимает то же body что ARN:

{
  "indicators": ["Q"],
  "calculationMethod": 2,
  "periodFrom": "2025-Q1",
  "periodTo": "2026-Q1",
  "federalDistrict": [6],  // Уральский
  "federalSubject": ["66"], // Свердл
  "cadastralQuarter": ["66:41:0204016"],
  "areaRanges": [3]
}

→ возвращает тот же формат table + graph что у ARN.

4. Frontend /analytics/market-indicator

Аналогичный UI к ARN (heatmap + табы + графики + таблица), но для ДДУ. Killer feature: toggle «Первичка / Вторичка» — наша vs deep-link на ARN.

5. Integration с Site Finder analyze

В gate.demand.market_indicator: добавить per-quarter индикатор (M/Q/Y) для участка. Trust booster в карточке.

Acceptance

  • mv_ddu_price_indicator создан и refresh раз в неделю
  • Для Екатеринбурга Q1 2026 индикатор сопоставим с ARN значением 1.03 (± 5%, разница из-за primary vs secondary)
  • /analytics/market-indicator рендерится с heatmap + table + graph
  • Кнопка «Сравнить с ARN (НСПД)» открывает /market-analysis в новой вкладке

Owner

database-expert (mv + refresh) + backend-engineer (endpoint) + frontend-engineer (страница UI)

Effort

~4-5 дней (1 день schema + 1.5 backend + 2 frontend)

Dependencies

  • D1 #33 (foundation mv_quarter_price)
  • ARN open data — НЕ зависим от их API, переиспользуем только framework концепцию

Risks / open

  • Семантика индикатора ДДУ vs ARN-вторички — для первички (новостройки) рост ≠ inflation. Нужно объяснять в tooltip
  • ДДУ с малым числом сделок per quarter → шумный индикатор. Нужен min deals threshold

Why high value

  • Killer USP: «у нас первичка, у НСПД вторичка» — обе нужны девелоперу
  • Один UI паттерн работает для обеих метрик — UX consistency
  • Open data + open API против их paid + ESIA-gated сервиса
  • Research: NSPD_API_Map_May12 (Update part 2 — full ARN endpoints)
  • Foundation: #33 D1, #94 NSPD client (нужен только для deep-link)
  • Cross-ref: #62 (PRINZIP insights — наш ARN-like для одного девелопера)
**Эшелон:** Demand / Analytics framework ## Контекст / открытие При full audit НСПД (см. [[NSPD_API_Map_May12]] Update part 2) найден **готовый аналитический фреймворк** в `/api/market-analytics/v1/*` (требует ЕСИА). НСПД считает индикатор цен **вторичного рынка** с 2018 года по 4 индикаторам / 6 area buckets / 3 calc methods / 13-step shaded legend. Реальный пример для **Екатеринбурга** (POST `/tableEgrn/fgisEgrn`): ``` Индикатор цен квартальный «К предыдущему периоду»: Q1 2025: 1.01 Q2 2025: 1.05 Q3 2025: 1.04 Q4 2025: 1.03 Q1 2026: 1.03 ``` **Killer insight:** у них **вторичка**, у нас в `rosreestr_deals` (6.83M ДДУ) — **первичка**. Это идеальное **дополнение** их фреймворка. ## Что сделать ### 1. Применить ARN методологию к нашим ДДУ-данным Расширить D1 (#33) — `mv_quarter_price_per_m2` → `mv_ddu_price_indicator`: | Параметр | ARN (вторичка) | Наше (первичка) | |---|---|---| | Индикаторы | M/Q/H/Y (4 типа) | Те же 4 типа | | Area buckets | 6: 0-25/25-40/40-60/60-80/80-100/100+ м² | Те же 6 | | Calc methods | 3: базисный / предыдущий / годом ранее | Те же 3 | | Гранулярность | Округ → Субъект → Нас.пункт → Cad_quarter | Те же 4 уровня | | Legend | 13 ступеней (0.25, 0.50, ..., 1.75) | Те же 13 | ### 2. Schema ```sql CREATE MATERIALIZED VIEW mv_ddu_price_indicator AS SELECT cad_quarter, area_bucket, -- 1..6 period_type, -- M/Q/H/Y period_value, -- e.g. '2026-Q1' calc_method, -- 1/2/3 -- индикатор = median(price/area) текущего периода / median предыдущего median_price_per_m2 / LAG(median_price_per_m2) OVER (...) AS price_indicator, deals_count FROM rosreestr_deals -- filter realestate_type = '002001003000' GROUP BY ...; ``` ### 3. Endpoint mirror ARN API `POST /api/v1/market/ddu-indicator` — принимает то же body что ARN: ```json { "indicators": ["Q"], "calculationMethod": 2, "periodFrom": "2025-Q1", "periodTo": "2026-Q1", "federalDistrict": [6], // Уральский "federalSubject": ["66"], // Свердл "cadastralQuarter": ["66:41:0204016"], "areaRanges": [3] } ``` → возвращает тот же формат table + graph что у ARN. ### 4. Frontend `/analytics/market-indicator` Аналогичный UI к ARN (heatmap + табы + графики + таблица), но для ДДУ. **Killer feature:** toggle «Первичка / Вторичка» — наша vs deep-link на ARN. ### 5. Integration с Site Finder analyze В `gate.demand.market_indicator`: добавить per-quarter индикатор (M/Q/Y) для участка. **Trust booster** в карточке. ## Acceptance - [ ] `mv_ddu_price_indicator` создан и refresh раз в неделю - [ ] Для Екатеринбурга Q1 2026 индикатор сопоставим с ARN значением 1.03 (± 5%, разница из-за primary vs secondary) - [ ] `/analytics/market-indicator` рендерится с heatmap + table + graph - [ ] Кнопка «Сравнить с ARN (НСПД)» открывает /market-analysis в новой вкладке ## Owner `database-expert` (mv + refresh) + `backend-engineer` (endpoint) + `frontend-engineer` (страница UI) ## Effort ~4-5 дней (1 день schema + 1.5 backend + 2 frontend) ## Dependencies - **D1 #33** (foundation mv_quarter_price) - ARN open data — НЕ зависим от их API, переиспользуем только framework концепцию ## Risks / open - Семантика индикатора ДДУ vs ARN-вторички — для первички (новостройки) рост ≠ inflation. Нужно объяснять в tooltip - ДДУ с малым числом сделок per quarter → шумный индикатор. Нужен min deals threshold ## Why high value - Killer USP: **«у нас первичка, у НСПД вторичка»** — обе нужны девелоперу - **Один UI паттерн** работает для обеих метрик — UX consistency - **Open data + open API** против их paid + ESIA-gated сервиса ## Links - Research: [[NSPD_API_Map_May12]] (Update part 2 — full ARN endpoints) - Foundation: #33 D1, #94 NSPD client (нужен только для deep-link) - Cross-ref: #62 (PRINZIP insights — наш ARN-like для одного девелопера)
Owner

Status update — foundation готова через PR #209 (mv_quarter_price_per_m2 MV) + PR #210 (analyze integration market_price). ARN-framework UI (heatmap + табы + графики) ещё НЕ построен.

Что сделано:

  • mv_quarter_price_per_m2 MV из 6.83M rosreestr_deals
  • Endpoint /analyze отдаёт market_price per quarter

Что НЕ сделано:

  • Расширение MV → 4 period_type × 6 area_bucket × 3 calc_method (mv_ddu_price_indicator)
  • POST /api/v1/market/ddu-indicator endpoint mirror ARN body shape
  • Frontend /analytics/market-indicator page с heatmap + toggle «Первичка/Вторичка»
  • Cross-check vs реальный ARN Q1 2026 = 1.03

Issue остаётся в backlog priority/high. Effort снизился до ~3-4 дней (MV foundation готов).

Status update — foundation готова через **PR #209** (`mv_quarter_price_per_m2` MV) + **PR #210** (analyze integration market_price). ARN-framework UI (heatmap + табы + графики) ещё НЕ построен. **Что сделано:** - `mv_quarter_price_per_m2` MV из 6.83M rosreestr_deals - Endpoint `/analyze` отдаёт `market_price` per quarter **Что НЕ сделано:** - Расширение MV → 4 period_type × 6 area_bucket × 3 calc_method (`mv_ddu_price_indicator`) - POST `/api/v1/market/ddu-indicator` endpoint mirror ARN body shape - Frontend `/analytics/market-indicator` page с heatmap + toggle «Первичка/Вторичка» - Cross-check vs реальный ARN Q1 2026 = 1.03 Issue остаётся в backlog priority/high. Effort снизился до ~3-4 дней (MV foundation готов).
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#99
No description provided.