"""Market indicator endpoints (Issue #99) — ARN-framework for primary market. POST /api/v1/market/ddu-indicator — per-quarter price indicator of the PRIMARY market (новостройки/ДДУ) for Свердловская обл., ARN-mirror request/response. """ from __future__ import annotations from typing import Annotated from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app.core.db import get_db from app.schemas.market import DduIndicatorRequest, DduIndicatorResponse from app.services.analytics import ddu_price_indicator as ddu router = APIRouter() @router.post("/ddu-indicator", response_model=DduIndicatorResponse) def ddu_indicator( payload: DduIndicatorRequest, db: Annotated[Session, Depends(get_db)], ) -> DduIndicatorResponse: """ARN-style ценовой индикатор первичного рынка (ДДУ) по кварталам × площади. Принимает то же body, что ARN/НСПД (camelCase). MVP: period_type=Q, calc methods 1 (базисный) / 2 (предыдущий), субъект 66. Неподдержанные ARN-опции (M/H/Y, method=3, иные субъекты, cad_quarter) не отвергаются — отражаются в `notes`. Источник: mv_ddu_price_indicator (migration 152). Killer-USP: «у нас первичка, у НСПД вторичка» — обе нужны девелоперу. """ result = ddu.get_ddu_indicator( db, calculation_method=payload.calculation_method, period_from=payload.period_from, period_to=payload.period_to, area_ranges=payload.area_ranges, federal_subject=payload.federal_subject, indicators=payload.indicators, ) # cadastral_quarter is shape-compat only; flag it if the client sent one. if payload.cadastral_quarter: result["notes"].append( "cadastralQuarter не поддержан: первичка (ДДУ) слишком разрежена " "на уровне кад.квартала — индикатор считается по субъекту (66)." ) return DduIndicatorResponse(**result)