/**
 * This file was auto-generated by openapi-typescript.
 * Do not make direct changes to the file.
 */

export interface paths {
  "/api/v1/concepts/house-types": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List House Types
     * @description Stage 3b (#1965, эпик #1953) — каталог типовых домов для фронт-пикера.
     *
     *     Read-only проекция ``catalog.HOUSE_TYPES`` (single source of truth по типам
     *     секций): фронт Stage 3b показывает эти типы в режиме «Выбрать дома» и кладёт
     *     выбранные ``section_type`` в ``ConceptInput.building_program``. Без БД, без
     *     side-effects — справочник захардкожен в коде (см. модуль ``catalog``). Так
     *     фронт НЕ хардкодит габариты/этажности — они приходят отсюда.
     */
    get: operations["list_house_types_api_v1_concepts_house_types_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/concepts": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Create Concept
     * @description Generate 3 building variants for the given parcel polygon.
     *
     *     Stage 1a: Shapely parse + buildable area (setback) + placement grid.
     *     Stage 1b: greedy section placement with STRtree collisions (3 strategies).
     *     Stage 1c: real ТЭП + financial model attached to each variant. The housing
     *     sale price is calibrated to real market data (Objective / district reference)
     *     when available, falling back to the per-class norm with an honest source flag
     *     (PR-2, эпик #1881).
     *
     *     A degenerate parcel (setback consumes everything, malformed geometry) yields a
     *     422 rather than empty variants — that is a bad request, not a valid empty result.
     *
     *     Stage 3a (#1965): если задана ``building_program`` (типовые дома из каталога), кладём
     *     РОВНО эту программу вместо жадной max-FAR раскладки (один вариант). Неизвестный
     *     ``section_type`` → 422 (валидируется тут, до размещения). Если участок не вмещает всю
     *     программу — НЕ 422: кладём сколько влезло и отдаём честный ``placed_count`` < requested.
     */
    post: operations["create_concept_api_v1_concepts_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/concepts/recompute": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Recompute Massing
     * @description Stage 2a (#1965, эпик #1953) — LIVE-пересчёт экономики из 3D-массинга.
     *
     *     Hot, debounced-эндпоинт для интерактивных слайдеров Stage 2b: фронтовый
     *     ``computeModel`` отдаёт агрегированную программу (суммарное пятно × этажность),
     *     мы синтезируем :class:`TEAP` (``synthesize_teap_from_program`` — те же нормативные
     *     константы, что и обычная генерация) и прогоняем готовый чистый ``compute_financial``
     *     → пересчитанный ТЭП + финмодель.
     *
     *     Цена продажи жилья:
     *       * ``market_price_per_sqm`` в теле → используется как есть (FAST path, БЕЗ БД) —
     *         фронт резолвит цену один раз и шлёт её в каждом keystroke-запросе. Источник
     *         берём из ``payload.price_source`` (ПОДЛИННЫЙ source, который фронт получил из
     *         financial_estimate — objective_geo_radius / objective_district_median /
     *         district_reference / class_norm); если фронт его не прислал — дефолтный лейбл.
     *         НЕ хардкодим source — иначе honest-флаг в UI/PDF врёт о происхождении цены.
     *       * иначе, если передан ``parcel_centroid_wkt`` → ``_lookup_market_price`` по центроиду
     *         через ``run_in_threadpool`` (тот же приём, что и в ``create_concept``; sync SQLAlchemy
     *         не должен блокировать event loop). Падение lookup'а → норматив класса, не 500.
     *       * иначе (нет ни цены, ни центроида) → норматив класса (``price_source="class_norm"``).
     */
    post: operations["recompute_massing_api_v1_concepts_recompute_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/chat/ask": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Ask
     * @description Ответить на вопрос по §22-форсайту участка.
     *
     *     Отчёта нет → 200 + report_status='pending' + RU-подсказка «запустите анализ»
     *     (READ-ONLY, ничего не считаем). Иначе ветка по `settings.llm_enabled`:
     *       • False → детерминированный Step-1 ответ (intent → render_answer), llm_used=False;
     *       • True → LLM tool-loop (orchestrate_chat через run_in_threadpool); при сбое LLM
     *         оркестратор сам отдаёт детерминированный ответ (llm_used=False + fallback_reason).
     */
    post: operations["ask_api_v1_chat_ask_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/by-bbox": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Parcels By Bbox
     * @description GET /parcels/by-bbox — вернуть участки внутри bounding box для карты.
     *
     *     Использует GIST-индекс на cad_parcels.geom (ST_Intersects).
     *     Если передан user_id — добавляет статус из parcel_user_status (overlay).
     *     last_analysis_date — реальная дата последнего анализа из v_analysis_runs_latest
     *     (#994, миграция 127): один batch-запрос на весь bbox, участки без рана → None.
     */
    get: operations["get_parcels_by_bbox_api_v1_parcels_by_bbox_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/search": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Search Parcels
     * @description Search parcels by filters + scoring.
     *
     *     TODO Stage 2b: PostGIS query + scorer service.
     */
    post: operations["search_parcels_api_v1_parcels_search_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/runs/{run_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Analysis Run
     * @description Полная строка одного рана анализа по id (включая `result`-блоб) — #994.
     *
     *     Для re-open / детального просмотра сохранённого анализа. `result` отдаём как
     *     есть (форма analyze-1.0 ParcelAnalysis или §22 "1.0" SiteFinderReport — модель
     *     истории её не навязывает).
     *
     *     404 (graceful HTTPException), если рана с таким id нет.
     */
    get: operations["get_analysis_run_api_v1_parcels_runs__run_id__get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/runs": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Analysis Runs
     * @description Недавние раны анализа на участок, newest-first (LIGHT-список) — #994.
     *
     *     Облегчённый список истории анализов: метаданные ранов БЕЗ тяжёлого `result`-
     *     блоба (его отдаёт GET /runs/{run_id}). Пустой список (200, НЕ 404), если ранов
     *     на участок ещё не было.
     */
    get: operations["list_analysis_runs_api_v1_parcels__cad_num__runs_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/fetch-status": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Fetch Status
     * @description Polling endpoint для on-demand cadastre fetch (см. issue #93).
     *
     *     Frontend polling каждые 2с после 202 Accepted из /analyze.
     *
     *     Returns:
     *         {
     *             "status": "ready" | "fetching" | "not_in_nspd" | "failed" | "invalid_format",
     *             "job_id": int | None,
     *             "error_msg": str | None,
     *             "eta_seconds": int | None,
     *         }
     *
     *     Frontend поведение:
     *     - "ready" → автоматически re-trigger POST /analyze
     *     - "fetching" → continue polling
     *     - "not_in_nspd" → показать пользователю «cad не найден в НСПД»
     *     - "failed" → retry button + retry-after message
     *     - "invalid_format" → подсказка формата
     */
    get: operations["get_fetch_status_api_v1_parcels__cad_num__fetch_status_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/forecast": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Parcel Forecast
     * @description Read-only fetch §22-форсайта участка (3b-ii, #995).
     *
     *     Клиент поллит после POST /analyze (тот fire-and-forget enqueue'ит фон-таску,
     *     считающую §22 SiteFinderReport ~30-180s). Читает ПОСЛЕДНИЙ ран schema_version
     *     "1.0" (§22-форсайт, НЕ analyze-1.0 inline-dict) через schema-filtered
     *     `latest_run_for` (3b-i seam).
     *
     *     Returns:
     *         • 200 {"status": "ready", "run_id", "created_at", "report"} — §22 готов
     *           (report = SiteFinderReport.as_dict() из run.result).
     *         • 202 {"status": "pending"} — ещё не посчитан, клиент продолжает поллить.
     *
     *     Graceful: нет рана → 202 pending (НЕ 404/500 на happy "not yet" path);
     *     ошибка БД → 202 pending + warning (клиент ретраит, не видит 500).
     */
    get: operations["get_parcel_forecast_api_v1_parcels__cad_num__forecast_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/forecast/export": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Export Parcel Forecast
     * @description Экспорт §22-форсайта — Markdown / JSON / DOCX / PPTX / PDF (файл) или TG-сводка (#959).
     *
     *     Читает ПОСЛЕДНИЙ §22-ран schema_version "1.0" (тот же блоб, что отдаёт GET
     *     /{cad}/forecast inline) и отдаёт его в нужной форме.
     *       • format=md → `render_report_markdown(run.result)` — attachment (.md, чистый Markdown).
     *       • format=json → сырой `run.result` — attachment (.json, download-вариант inline-чтения).
     *       • format=docx → `render_report_docx(run.result)` — attachment (.docx, Word-документ,
     *         зеркало содержания md/pdf; python-docx).
     *       • format=pptx → `render_report_pptx(run.result)` — attachment (.pptx, презентация,
     *         сжатое зеркало содержания docx; python-pptx).
     *       • format=pdf → `export_report_pdf(run.result)` — attachment (.pdf, §13-отчёт,
     *         зеркало содержания md/docx; WeasyPrint).
     *       • format=tg → `render_report_telegram_summary(run.result)` — КРАТКАЯ plain-text сводка
     *         для копипаста в Telegram, INLINE (без Content-Disposition: это сниппет читать/копировать
     *         и отправить, а не файл-download).
     *
     *     В отличие от read-only поллинга GET /{cad}/forecast (нет рана → 202 pending), это
     *     export-эндпоинт: нет рана → 404 (graceful HTTPException «прогноз ещё не посчитан»,
     *     НЕ 500). 3-сегментный путь (`/{cad}/forecast/export`) не конфликтует с 2-сегментными
     *     `/{cad}/forecast`, `/{cad}/runs`, `/runs/{run_id}` и 1-сегментным `/{parcel_id}`.
     *
     *     Args:
     *         cad_num: кадастровый номер участка (в имени файла `:` → `_`).
     *         format: "md" (default) | "json" | "tg" | "docx" | "pptx" | "pdf".
     *
     *     Returns:
     *         Response — для md/json/docx/pptx/pdf attachment с Content-Disposition (имя
     *         `gendesign_forecast_<cad>_<YYYY-MM-DD>.<ext>`); для tg — inline text/plain сводка.
     */
    get: operations["export_parcel_forecast_api_v1_parcels__cad_num__forecast_export_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/report": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Собрать полный PDF-отчёт участка (§1–§7 + карты) — enqueue (#2259 PR-D)
     * @description Поставить в очередь сборку полного PDF-отчёта участка (или вернуть готовый кэш).
     *
     *     Готовый кэш (метадата-ран `report-pdf-1.0` для последних analyze+forecast ранов +
     *     файл на диске) → 200 {status:"ready"} (качать сразу через /report/download). Иначе
     *     enqueue фоновой Celery-таски `build_full_report_task(cad)` → 202 {status:"building"}.
     *     Best-effort enqueue: провал Celery/Redis НЕ роняет ответ (503 честнее 500, но и он
     *     крайне редок — /analyze уже enqueue'ит форсайт тем же брокером).
     *
     *     В ответе — даты базовых ранов (по каким данным собирается/собран отчёт).
     *
     *     Args:
     *         cad_num: кадастровый номер участка.
     */
    post: operations["build_parcel_report_api_v1_parcels__cad_num__report_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/report/status": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Статус полного PDF-отчёта участка (#2259 PR-D)
     * @description Состояние полного PDF-отчёта: ready / building / none.
     *
     *     ready — метадата-ран `report-pdf-1.0` есть И файл на диске (качать через
     *     /report/download); building — analyze-ран есть, но готового PDF нет (собирается или
     *     ещё не запускался POST /report); none — нет даже analyze-рана (отчётировать нечего).
     *     Read-only поллинг: сбой чтения → building (не 500), клиент повторит.
     *
     *     Args:
     *         cad_num: кадастровый номер участка.
     */
    get: operations["parcel_report_status_api_v1_parcels__cad_num__report_status_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/report/download": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Скачать готовый полный отчёт участка — PDF или DOCX (#2259 PR-D/PR-F)
     * @description Отдать готовый файл полного отчёта в выбранном формате (PDF / DOCX).
     *
     *     Готовый отчёт (метадата-ран `report-pdf-1.0` + файл на диске) → FileResponse с
     *     Content-Disposition attachment (`gendesign_report_<cad>_<date>.<ext>`). Отчёт не готов /
     *     файл не найден → 404 (сначала POST /report, дождаться status=ready).
     *
     *     `format=docx`: старые раны (собранные до PR-F) не несут `docx_path` в метадате →
     *     честный 404 с подсказкой «пересоберите отчёт» (POST /report пере-соберёт с DOCX, т.к.
     *     ключ кэша не изменился, но файла docx нет — пере-рендер запишет оба).
     *
     *     Args:
     *         cad_num: кадастровый номер участка.
     *         format: "pdf" (default) | "docx".
     */
    get: operations["download_parcel_report_api_v1_parcels__cad_num__report_download_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/analyze": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Analyze Parcel
     * @description Анализ участка: близость к социалке + district context + конкуренты.
     *
     *     Порядок поиска геометрии: cad_quarters_geom → cad_buildings → cad_parcels_geom.
     *
     *     Issue #93 — Graceful fallback при отсутствии geometry:
     *     - Не возвращаем 404 сразу. Вместо: enqueue NSPD on-demand fetch, ждём
     *       inline до _INLINE_FETCH_WAIT_S (~15с). Если за это время геометрия
     *       появилась в БД — продолжаем analyze (fast path).
     *     - Иначе → 202 Accepted + {status, job_id, eta_seconds} для polling
     *       через GET /fetch-status.
     *     - Дедупликация (через `find_active_on_demand_job`): параллельные запросы
     *       на тот же cad → один Celery job, оба клиента ждут.
     *
     *     §22-форсайт (3b-ii, #995): после успешного persist рана best-effort enqueue'им
     *     `forecast_site_finder_report.delay(cad_num, horizon, ...)` — fire-and-forget,
     *     провал Celery/Redis НЕ валит ответ (он уже успешен). `horizon` ∈ {6, 12, 18, 24}
     *     (ТЗ §12.1; иначе 422). Результат добавляется в ответ как `forecast` stub (additive); сам
     *     §22-отчёт клиент забирает через GET /{cad}/forecast (202 pending → 200 ready).
     */
    post: operations["analyze_parcel_api_v1_parcels__cad_num__analyze_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/connection-points": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Точки подключения к инженерным сетям + охранные зоны (issue #115)
     * @description Инженерные структуры (ТП, ЦТП, ЛЭП) и охранные зоны коммуникаций вблизи участка.
     *
     *     Источник данных: nspd_quarter_dumps (НСПД cat 36328 / 37578).
     *     Если дамп для квартала ещё не загружен → dump_available=false,
     *     пустые массивы (harvest запускается автоматически).
     *     Если участок не найден в БД (нет geom) → 404.
     *
     *     Query params:
     *         radius_m: радиус поиска инженерных структур, 50–2000 м (default 500).
     */
    get: operations["get_parcel_connection_points_api_v1_parcels__cad_num__connection_points_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/utility-infrastructure": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Инженерные сети из OSM вблизи участка (#1746)
     * @description Инженерные сети (ЛЭП/подстанции/трубопроводы/ЦТП/вышки) из OSM вблизи участка.
     *
     *     No-B2B open-data источник: osm_utility_infrastructure_ekb (наполняется weekly-sync
     *     из Overpass). Возвращает фичи в радиусе от центроида участка (ST_DWithin) +
     *     summary с ближайшими расстояниями по видам сети.
     *
     *     Query params:
     *         radius_m: радиус поиска, 50–2000 м (default 500).
     *
     *     Если участок не найден в БД (нет geom) → 404.
     */
    get: operations["get_parcel_utility_infrastructure_api_v1_parcels__cad_num__utility_infrastructure_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/connection-capacity": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Точки подключения со свободной мощностью — электро + вода (Forgejo #2119)
     * @description Центры питания со свободной мощностью + резервы воды вблизи участка (ПТИЦА §3).
     *
     *     Верифицированные open-data источники (наполняются weekly-sync, RUN-ON-PROD):
     *       - power_supply_centers: ЦП (ПС 35/110 кВ) Россети WFS + резервы xlsx.
     *       - water_supply_reserves: ЦСВ/ЦСК Водоканала ЕКБ (city-level, последний период).
     *
     *     power_points — ЦП в радиусе от центроида участка (ST_DWithin geography).
     *     water — все строки за ПОСЛЕДНИЙ период (город-уровень, показывается целиком).
     *     nearby_network_zones — позитив-разрез (#2119 C2/C3): сетевые охранные зоны cad_zouit
     *     в радиусе 300 м (где физически проходит сеть) — до 2 ближайших на net_kind,
     *     гуманизированы; пересекающие участок отдаются с distance_m=0. Радиус 300 м —
     *     независимый от radius_m ЦП.
     *
     *     Query params:
     *         radius_m: радиус поиска ЦП, 100–10000 м (default 3000).
     *
     *     Если участок не найден в БД (нет geom) → 404.
     */
    get: operations["get_parcel_connection_capacity_api_v1_parcels__cad_num__connection_capacity_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/neighbor-buildings": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Соседние здания (footprint'ы) для 3D-сцены §7 (Forgejo #2180)
     * @description GeoJSON FeatureCollection footprint'ов соседних зданий вокруг участка.
     *
     *     Для 3D-сцены «Размещение застройки» (§7 отчёта ПТИЦА): рисуем существующую
     *     застройку контекста, чтобы концепция вписывалась в окружение. Здания берём из
     *     `cad_buildings` в радиусе `radius_m` (ST_DWithin по geography). Здания,
     *     ПЕРЕСЕКАЮЩИЕ сам участок, исключаем — на его месте строим мы (их footprint'ы
     *     только мешали бы сцене).
     *
     *     Геометрия упрощается (ST_SimplifyPreserveTopology, ~0.5 м) — фронту не нужна
     *     кадастровая точность контура для превью. properties каждой фичи:
     *     cad_num, floors (int|null), height_m (floors×3 если floors>0, иначе null),
     *     building_name (null если пусто), year_built (int|null), is_neighbor=true.
     *
     *     Отдаём максимум 300 ближайших (ORDER BY расстоянию); `truncated=true` если в
     *     радиусе их больше. Участок не найден (нет geom) → 404.
     *
     *     Query params:
     *         radius_m: радиус поиска, 50–1000 м (default 300).
     */
    get: operations["get_parcel_neighbor_buildings_api_v1_parcels__cad_num__neighbor_buildings_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/isochrones": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Isochrones
     * @description Изохроны доступности от центроида участка через OpenRouteService.
     *
     *     Modes: foot-walking | cycling-regular | driving-car.
     *     times_min — список минут (1-60), например ?times_min=10&times_min=15.
     *     Возвращает GeoJSON FeatureCollection для рендера на карте.
     */
    get: operations["get_isochrones_api_v1_parcels__cad_num__isochrones_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/poi-score": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * POI weighted top-7 (B6)
     * @description Вернуть top-7 ближайших POI для участка.
     *
     *     decay=straight (default, B6): weight = (1 / (distance_m + 100)) * category_weight.
     *     decay=routing (#41): время пешком (ORS /matrix) + per-category radius (минут) +
     *         per-category decay-кривая. За порогом доступности категории POI выбывает.
     *         ORS недоступен → graceful fallback на straight-line оценку времени.
     *
     *     POI берутся из osm_poi_ekb в заданном радиусе (default 2000м), отсортированы
     *     по weight DESC.
     */
    get: operations["get_poi_score_api_v1_parcels__cad_num__poi_score_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/competitors": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Get Parcel Competitors
     * @description Активные конкуренты ЖК в радиусе от участка (Issue #112).
     *
     *     Возвращает список ЖК из domrf_kn_objects в радиусе radius_km от центроида
     *     участка с рассчитанным velocity_per_month за указанный time_window.
     */
    post: operations["get_parcel_competitors_api_v1_parcels__cad_num__competitors_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/competitors-parking": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Get Parcel Competitors Parking
     * @description parking_ratio top-N конкурентов (#96 wiring) — ЛЕНИВЫЙ путь, вне analyze.
     *
     *     Резолвит top-3 конкурента (relevance_weight DESC) domrf→cad_buildings через
     *     PostGIS geom-match, затем on-demand НСПД premises-lookup → parking_ratio.
     *     Намеренно ОТДЕЛЬНЫЙ от analyze/forecast: N×НСПД (~0.6-2с каждый) добавил бы
     *     секунды в хот-путь и убил p95 — фронт дёргает этот эндпоинт лениво после
     *     отрисовки списка конкурентов.
     *
     *     sync `def` (не async): premises_lookup изолирует НСПД-async через
     *     asyncio.run() — его нельзя вызвать из async-handler (running loop). FastAPI
     *     исполняет sync-handler в threadpool, не блокируя event loop.
     */
    post: operations["get_parcel_competitors_parking_api_v1_parcels__cad_num__competitors_parking_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/best-layouts": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Get Parcel Best Layouts
     * @description Top layouts (rooms × area_bin) у конкурентов с ranking по velocity.
     *
     *     Issue #113 Phase 2.1: "Анализ лучших планировок конкурентов → ТЗ на проектирование".
     *     Reads from mv_layout_velocity (auto-populated via objective_corpus_room_month
     *     × objective_complex_mapping).
     */
    post: operations["get_parcel_best_layouts_api_v1_parcels__cad_num__best_layouts_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/best-layouts/pdf": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Get Parcel Best Layouts Pdf
     * @description ТЗ на проектирование (PDF) — генерируется из /best-layouts данных.
     *
     *     Issue #113 Phase 2.1: data-driven unit-mix recommendation для тендера.
     */
    post: operations["get_parcel_best_layouts_pdf_api_v1_parcels__cad_num__best_layouts_pdf_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/parcels/{cad_num}/snapshot.pdf": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * 1-page PDF snapshot участка (НСПД + POI + конкуренты)
     * @description Генерирует одностраничный PDF-снимок участка (A4).
     *
     *     Содержимое:
     *       - Header: кадастровый номер, адрес, район, площадь
     *       - Block 1: 5 KPI (площадь, кадастровая стоимость, категория, ВРИ, дата обновления)
     *       - Block 2: Топ-7 POI по взвешенному баллу (из osm_poi_ekb, радиус 1 км)
     *       - Block 3: Топ-5 конкурентов (из domrf_kn_objects, радиус 3 км)
     *       - Footer: gendsgn.ru + дата генерации
     *
     *     Не является официальной выпиской ЕГРН — только аналитические данные НСПД.
     *     Генерация <2 сек. Открывается в Adobe Reader / Chrome.
     */
    get: operations["parcel_snapshot_pdf_api_v1_parcels__cad_num__snapshot_pdf_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/sverdl/market-pulse": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Sverdl Market Pulse
     * @description Monthly series Jan 2025 → present: total square (тыс м²), sold%, avg price.
     */
    get: operations["sverdl_market_pulse_api_v1_analytics_sverdl_market_pulse_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/sverdl/quartirography": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Sverdl Quartirography
     * @description Что строится (portfolio) vs что покупают (deals) по сегментам.
     */
    get: operations["sverdl_quartirography_api_v1_analytics_sverdl_quartirography_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/sverdl/pipeline": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Sverdl Pipeline
     * @description По году ввода: total / sold% / unsold% / unopened%.
     */
    get: operations["sverdl_pipeline_api_v1_analytics_sverdl_pipeline_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/sverdl/districts": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Sverdl Districts
     * @description ЕКБ-районы: ЖК-count, flat-count, area, цены.
     */
    get: operations["sverdl_districts_api_v1_analytics_sverdl_districts_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/sverdl/yandex-listings": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Sverdl Yandex Listings
     * @description Снимок активных новостроек Яндекс.Недвижимости.
     */
    get: operations["sverdl_yandex_listings_api_v1_analytics_sverdl_yandex_listings_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/developers/top": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Developers Top
     * @description Топ-девелоперы Свердл по объёму с Δ sold% за всю доступную историю.
     */
    get: operations["developers_top_api_v1_analytics_developers_top_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/developers/history": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Developers History
     * @description Comma-separated developer_ids → time series sold_perc.
     */
    get: operations["developers_history_api_v1_analytics_developers_history_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/developers/{developer_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /** Developer Detail */
    get: operations["developer_detail_api_v1_analytics_developers__developer_id__get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/developers/{developer_id}/portfolio": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /** Developer Portfolio */
    get: operations["developer_portfolio_api_v1_analytics_developers__developer_id__portfolio_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}/sale_graph": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Sale Graph
     * @description Time-series продаж per-ЖК. type=apartments|parking, без фильтра — обе серии.
     */
    get: operations["object_sale_graph_api_v1_analytics_object__obj_id__sale_graph_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}/sales_agg": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Sales Agg
     * @description 3 строки: apartments + nonliv + parking (total / realised / sold%).
     */
    get: operations["object_sales_agg_api_v1_analytics_object__obj_id__sales_agg_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}/infrastructure": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Infrastructure
     * @description POI вокруг ЖК. Фильтр по category (Спорт/Образование/...) и radius.
     */
    get: operations["object_infrastructure_api_v1_analytics_object__obj_id__infrastructure_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}/photos": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Photos
     * @description Фото-метаданные с photo_url, отсортированные по period_dt DESC.
     */
    get: operations["object_photos_api_v1_analytics_object__obj_id__photos_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Detail
     * @description Базовая инфа объекта из domrf_kn_objects (имя, адрес, координаты, девелопер).
     */
    get: operations["object_detail_api_v1_analytics_object__obj_id__get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}/full": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Full Detail
     * @description Extended object info — все 30+ новых полей (22begh: specs/accessibility/metro/scores).
     */
    get: operations["object_full_detail_api_v1_analytics_object__obj_id__full_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}/quartirography": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Quartirography
     * @description Квартирография ЖК: группировка flats по комнатности с count/area/price.
     */
    get: operations["object_quartirography_api_v1_analytics_object__obj_id__quartirography_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}/checks": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Checks
     * @description 6 проверок «Проверено на наш.дом.рф» (22f).
     */
    get: operations["object_checks_api_v1_analytics_object__obj_id__checks_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}/documents": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Documents
     * @description PDF документы из domrf_kn_documents (22i): декларации, разрешения, отчётность.
     */
    get: operations["object_documents_api_v1_analytics_object__obj_id__documents_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/object/{obj_id}/buildings": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Object Buildings
     * @description Список кадастровых зданий ЖК из cad_buildings.
     */
    get: operations["object_buildings_api_v1_analytics_object__obj_id__buildings_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/velocity-alerts": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Velocity Alerts
     * @description ЖК с statistical-significance провалом темпа продаж vs своя история.
     *
     *     Источник: domrf_kn_sale_graph (monthly realised). Детерминированная
     *     z-score детекция: recent 3-mo mean vs trailing prior-period mean.
     *     Алерт когда z <= -min_zscore И drop_pct <= -min_drop_pct (двойной gate
     *     снижает false-positive на шумных low-volume ЖК). severity high/medium.
     */
    get: operations["velocity_alerts_api_v1_analytics_velocity_alerts_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/prinzip/insights": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Prinzip Insights
     * @description Static recommendations + benchmarks (from PRINZIP_Strategy_Apr27).
     */
    get: operations["prinzip_insights_api_v1_analytics_prinzip_insights_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/prinzip/districts": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /** Prinzip Districts */
    get: operations["prinzip_districts_api_v1_analytics_prinzip_districts_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/prinzip/objects": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Prinzip Objects
     * @description Список 28 ЖК PRINZIP с агрегатами sales_agg + sparkline-данными для UI таблицы.
     */
    get: operations["prinzip_objects_api_v1_analytics_prinzip_objects_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/analytics/recommend/mix": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Recommend Mix
     * @description Rule-based квартирография для участка в указанном районе ЕКБ.
     *
     *     На вход — district_name (8 районов ЕКБ), опционально area_total_m2 и
     *     target_class. На выход — распределение по 5 бакетам комнатности с
     *     ожидаемыми ценами/площадями/выручкой и список comparable ЖК.
     */
    post: operations["recommend_mix_api_v1_analytics_recommend_mix_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/market/ddu-indicator": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Ddu Indicator
     * @description 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: «у нас первичка, у НСПД вторичка» — обе нужны девелоперу.
     */
    post: operations["ddu_indicator_api_v1_market_ddu_indicator_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/kn": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /** Trigger Kn Sweep */
    post: operations["trigger_kn_sweep_api_v1_admin_scrape_kn_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/queue": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Queue Status
     * @description Snapshot of Celery state, optimised for UI poll latency.
     *
     *     - active: from kn_scrape_runs WHERE status='running' (instant, richer info
     *       than celery inspect — includes objects_count/flats_count/requests_count).
     *     - reserved + workers: celery inspect with short timeout (500 ms), called in
     *       a thread so a missing worker can't block the request.
     *     - queue_depth: Redis LLEN on default queue (single round-trip).
     *     - scheduled: omitted — we don't use ETA tasks.
     *
     *     Worst-case latency ≈ 600 ms even if no worker is reachable, vs ~8 s with
     *     the previous 4×2 s blocking inspect calls.
     */
    get: operations["queue_status_api_v1_admin_scrape_queue_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/release-lock": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Release Lock
     * @description Принудительно удалить Redis-lock для (region, devs). Использовать когда
     *     зомби-worker оставил lock и новые задачи скипаются с reason='lock_held'.
     */
    post: operations["release_lock_api_v1_admin_scrape_release_lock_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/revoke": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Revoke Task
     * @description Cancel a queued or running task by id.
     */
    post: operations["revoke_task_api_v1_admin_scrape_revoke_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/failures": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Failures
     * @description Per-request failure log for manual browser verification.
     */
    get: operations["list_failures_api_v1_admin_scrape_failures_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/logs": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Logs
     * @description Per-run progress events. Use since_id to poll incrementally:
     *     pass the highest log_id seen → returns only newer rows.
     */
    get: operations["list_logs_api_v1_admin_scrape_logs_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/noise-sync": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Noise Sync
     * @description Manual trigger для синхронизации OSM шумовых источников ЕКБ из Overpass API.
     *
     *     Обычно запускается еженедельно через beat (понед 3:30 МСК).
     *     Этот endpoint — для ad-hoc запуска (например после первого деплоя или
     *     после добавления миграции 84_osm_noise_sources_ekb).
     */
    post: operations["trigger_noise_sync_api_v1_admin_scrape_noise_sync_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/nspd/harvest-quarter": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Harvest Quarter
     * @description Manual trigger одного quarter harvest (для testing / конкретного квартала).
     *
     *     Запускает harvest_quarter Celery task и возвращает task_id.
     *     Для получения результата — poll через Celery inspect или нождите строку
     *     в nspd_quarter_dumps WHERE quarter_cad = payload.quarter_cad.
     */
    post: operations["trigger_harvest_quarter_api_v1_admin_scrape_nspd_harvest_quarter_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/pzz-sync": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Pzz Sync
     * @description Manual trigger для импорта ПЗЗ территориальных зон ЕКБ из Росреестр PKK6.
     *
     *     Запускать после деплоя миграции 85_pzz_zones_ekb.sql и при необходимости
     *     обновить данные о зонировании (обычно раз в несколько месяцев).
     */
    post: operations["trigger_pzz_sync_api_v1_admin_scrape_pzz_sync_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/zone-regulations/backfill": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Zone Regulations Backfill
     * @description Backfill кэша ПЗЗ-регламента ВСЕХ терзон ЕКБ → zone_regulation_cache (эпик #1881).
     *
     *     Чтобы financial_estimate фаерил для большинства участков (max_far из кэша, без live-urbanCard
     *     в hot-пути). Идемпотентно: уже закэшированные зоны пропускаются, повторный запуск дёшев.
     *
     *     estimate_minutes — груба: ~120 уникальных терзон ЕКБ × (rate_delay + ~2с live-urbanCard).
     */
    post: operations["trigger_zone_regulations_backfill_api_v1_admin_scrape_zone_regulations_backfill_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/poi-sync": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Poi Sync
     * @description Manual trigger для синхронизации OSM POI ЕКБ из Overpass API.
     *
     *     Обычно запускается еженедельно через beat (понед 3:00 МСК).
     *     Этот endpoint — для ad-hoc запуска (например после первого деплоя
     *     или при создании нового тестового участка).
     */
    post: operations["trigger_poi_sync_api_v1_admin_scrape_poi_sync_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/gisogd-permits-sync": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Gisogd Permits Sync
     * @description Manual trigger инкрементальной загрузки РНС/РВЭ ГИСОГД-СО → gisogd_permits (#2367).
     *
     *     Обычно запускается еженедельно через beat (вторник 06:30 МСК). Этот endpoint —
     *     для ad-hoc запуска (например после деплоя миграции 187_gisogd_permits.sql или для
     *     внеочередного обновления). Инкрементально: карточки тянутся только для новых/
     *     изменившихся документов, повторный запуск дёшев.
     */
    post: operations["trigger_gisogd_permits_sync_api_v1_admin_scrape_gisogd_permits_sync_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/objective": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Objective Etl
     * @description Запустить ETL Антоновского SQLite → наша PG.
     *
     *     SQLite-файл должен быть доступен внутри Celery-worker контейнера:
     *       - на проде: смонтирован bind-mount-ом из /opt/gendesign/site-finder/
     *       - локально: путь передать через payload.sqlite_path
     */
    post: operations["trigger_objective_etl_api_v1_admin_scrape_objective_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/objective/runs": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /** List Objective Runs */
    get: operations["list_objective_runs_api_v1_admin_scrape_objective_runs_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/objective/sync-our": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Objective Sync Our
     * @description Запустить НАШ sync_all_groups (тратит limits Объектива).
     *
     *     В отличие от ETL (POST /objective) — это вызовы api.objctv.ru напрямую,
     *     с парсингом payload через app.workers.tasks.scrape_objective.
     *     Полезно когда нужно расширить покрытие за пределов Антоновского ЕКБ
     *     (Свердл.обл целиком + Челябинск + Тюмень + Пермь).
     */
    post: operations["trigger_objective_sync_our_api_v1_admin_scrape_objective_sync_our_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/objective/config": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Objective Config
     * @description Текущая динамическая конфигурация Objective sync (single row).
     */
    get: operations["get_objective_config_api_v1_admin_scrape_objective_config_get"];
    /**
     * Update Objective Config
     * @description PATCH-style update. После изменения cron_schedule нужен restart beat,
     *     остальные поля применяются на следующем sync-вызове автоматически.
     */
    put: operations["update_objective_config_api_v1_admin_scrape_objective_config_put"];
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/objective/coverage": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Objective Coverage
     * @description Что у нас в БД сейчас + что лежит в SQLite Антона (size, last modified).
     *
     *     Помогает понять стоит ли запускать ETL: если SQLite старше последнего
     *     успешного run'а — данные не изменятся.
     */
    get: operations["objective_coverage_api_v1_admin_scrape_objective_coverage_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/geo/jobs": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Geo Jobs
     * @description Список последних geo-jobs (для UI dashboard).
     */
    get: operations["list_geo_jobs_api_v1_admin_scrape_geo_jobs_get"];
    put?: never;
    /**
     * Enqueue Geo Job
     * @description Создать bulk geo-job и поставить в очередь.
     *
     *     source_kind:
     *       - manual_list: cad_nums передан явно
     *       - rosreestr_pending: автоматически набрать из rosreestr_deals.quarter_cad_number
     *         которых ещё нет в cad_quarters_geom (для region_codes если задано)
     *       - region_bbox: TODO (для будущего spatial-bulk)
     */
    post: operations["enqueue_geo_job_api_v1_admin_scrape_geo_jobs_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/geo/bulk": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Bulk Enqueue Geo
     * @description Разбить pending cad-номера на N чанков и запустить N×len(thematic_ids) geo-jobs.
     *
     *     source=rosreestr_pending: для каждого thematic_id выбирает cad из rosreestr_deals
     *       которых нет в соответствующей geo-таблице.
     *     source=all_in_region: UNION из rosreestr_deals + cad_buildings + complexes — один
     *       набор для всех thematic_ids (каждый thematic_id обрабатывает весь список).
     */
    post: operations["bulk_enqueue_geo_api_v1_admin_scrape_geo_bulk_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/geo/jobs/{job_id}/cancel": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Cancel Geo Job
     * @description Пометить job как cancelled. Worker увидит при следующей итерации.
     */
    post: operations["cancel_geo_job_api_v1_admin_scrape_geo_jobs__job_id__cancel_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/geo/jobs/{job_id}/resume": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Resume Geo Job
     * @description Re-enqueue paused/failed job. Resume idempotent через pending targets.
     */
    post: operations["resume_geo_job_api_v1_admin_scrape_geo_jobs__job_id__resume_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/newbuilding-crossload": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Newbuilding Crossload
     * @description Ручной запуск cross-load ETL tradein.houses → newbuilding_listings (#976).
     *
     *     Обычно запускается ночью через beat (03:30 МСК).
     *     Если TRADEIN_DATABASE_URL не задан в settings — возвращает 503.
     */
    post: operations["trigger_newbuilding_crossload_api_v1_admin_scrape_newbuilding_crossload_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/all/runs": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List All Runs
     * @description Унифицированный список прогонов (kn + nspd + objective).
     *
     *     Поверх v_scrape_runs_unified. Если scraper_type не задан — все 3.
     *     Используется главной dashboard /admin/scrape/all.
     */
    get: operations["list_all_runs_api_v1_admin_scrape_all_runs_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/all/logs": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List All Logs
     * @description Унифицированный список логов (kn + nspd). Objective пока не пишет log.
     */
    get: operations["list_all_logs_api_v1_admin_scrape_all_logs_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/freshness": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Scrape Freshness
     * @description GET-обёртка над compute_freshness — только читает, не алертит.
     *
     *     Вся агрегация живёт в compute_freshness (один источник истины); эндпоинт
     *     лишь прокидывает сессию и возвращает результат без изменений формы payload.
     *     Sentry-алёрты по критичным источникам шлёт beat-таска scrape_freshness_check.
     */
    get: operations["scrape_freshness_api_v1_admin_scrape_freshness_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/runs": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /** List Runs */
    get: operations["list_runs_api_v1_admin_scrape_runs_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/ekburg-permits": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Ekburg Permits
     * @description Manual trigger для синхронизации РНС/РВЭ ЕКБ из екатеринбург.рф (xlsx).
     *
     *     Обычно запускается раз в месяц через beat (1-го числа 02:00 UTC).
     *     Этот endpoint — для ad-hoc запуска (после первого деплоя или для smoke-теста).
     *
     *     - year=None → refresh_all: скачивает 5 xlsx (2022-2026), ~3-8 мин.
     *     - year=2026 → refresh_year(2026): один файл, ~1 мин.
     */
    post: operations["trigger_ekburg_permits_api_v1_admin_scrape_ekburg_permits_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/kn-catalog-objects": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Kn Catalog Objects
     * @description Manual trigger для catalog-OBJECT scraper (заполняет wall_type, energy_eff,
     *     ceiling_height_m, parking_*, playground_*, scores из SSR __NEXT_DATA__).
     *
     *     Beat schedule: Tuesday 04:00 UTC, batch 300/run. Этот endpoint — для ad-hoc
     *     запуска (smoke-тест после деплоя или повторный pass для свежесозданных
     *     объектов до next beat fire).
     *
     *     - max_objects=None → дефолтный лимит таска (300).
     *     - max_objects=3 → smoke-тест.
     *     - force=True → "Загрузить все": игнорирует skip-today, грузит всё подряд.
     *
     *     WAF cooldown guard (#2443, #2445 D1): требует i_understand_waf_risk=true —
     *     beat schedule для этого таска отключён из-за WAF hard-ban 2026-05-24, ad-hoc
     *     re-trigger без явного подтверждения оператора запрещён.
     */
    post: operations["trigger_kn_catalog_objects_api_v1_admin_scrape_kn_catalog_objects_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/scrape/kn-catalog-flats": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Trigger Kn Catalog Flats
     * @description Manual trigger для catalog-FLAT scraper (#2442): цена/статус/отделка/потолки/
     *     дата обновления + plan-изображения квартир из SSR-страницы каталога.
     *
     *     Селектит domrf_kn_flats WHERE catalog_url_hash IS NOT NULL. До тех пор пока
     *     #2442 Task 1 (elemId → catalog_url_hash) не задеплоен и свежий kn-sweep не
     *     наполнил hash — вернёт 0 обработанных строк (ожидаемо, не баг).
     *
     *     - max_flats=None → дефолтный лимит таска (300).
     *     - max_flats=3 → smoke-тест.
     *     - force=True → 'Загрузить все': игнорирует фильтр свежести, грузит всё с hash.
     *
     *     WAF cooldown guard (#2443, #2445 D1): требует i_understand_waf_risk=true —
     *     same /сервисы/* BrowserSession path family как catalog-objects, риск re-trigger
     *     того же WAF-бана.
     */
    post: operations["trigger_kn_catalog_flats_api_v1_admin_scrape_kn_catalog_flats_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/jobs/settings": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Job Settings
     * @description Список всех job_settings (все job_type).
     */
    get: operations["list_job_settings_api_v1_admin_jobs_settings_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/jobs/settings/{job_type}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Job Setting
     * @description Настройки одного job_type. Возвращает fallback defaults если строки нет в БД.
     */
    get: operations["get_job_setting_api_v1_admin_jobs_settings__job_type__get"];
    /**
     * Update Job Setting
     * @description PATCH-style update: передавать только изменяемые поля.
     *
     *     После изменения cron_schedule нужен restart beat-контейнера.
     *     Остальные поля (rate_ms, extra_config, enabled) применяются динамически.
     *
     *     cron_schedule='' устанавливает NULL (manual-only режим).
     *     rate_ms=0 устанавливает NULL (no throttle).
     */
    put: operations["update_job_setting_api_v1_admin_jobs_settings__job_type__put"];
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/leads/": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /** List Leads */
    get: operations["list_leads_api_v1_admin_leads__get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/leads/stats": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Leads Stats
     * @description KPI summary за последние N месяцев.
     */
    get: operations["leads_stats_api_v1_admin_leads_stats_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/leads/funnel/monthly": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Funnel Monthly
     * @description Воронка по месяцам: leads → engaged → converted (по source).
     */
    get: operations["funnel_monthly_api_v1_admin_leads_funnel_monthly_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/leads/funnel/by-source": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Funnel By Source
     * @description Splitting по source: кто конвертит лучше за последние N месяцев.
     */
    get: operations["funnel_by_source_api_v1_admin_leads_funnel_by_source_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/leads/funnel/by-object": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Funnel By Object
     * @description Воронка для каждого ЖК PRINZIP: leads / deals / revenue.
     */
    get: operations["funnel_by_object_api_v1_admin_leads_funnel_by_object_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/leads/sources": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Sources
     * @description Distinct list of source values for filter dropdown.
     */
    get: operations["list_sources_api_v1_admin_leads_sources_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/site-finder/weight-profiles": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List User Profiles
     * @description Список всех weight profiles для заданного user_id. Default-профиль первым.
     *
     *     При include_system=true добавляются системные presets (user_id='__system__'):
     *     Эконом, Комфорт, Бизнес — готовые шаблоны весов POI.
     */
    get: operations["list_user_profiles_api_v1_admin_site_finder_weight_profiles_get"];
    put?: never;
    /**
     * Create User Profile
     * @description Создать новый weight profile.
     *
     *     При is_default=True снимает is_default у всех существующих профилей
     *     пользователя в одной транзакции.
     */
    post: operations["create_user_profile_api_v1_admin_site_finder_weight_profiles_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/site-finder/weight-profiles/{profile_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get User Profile
     * @description Получить один weight profile по id (scoped к user_id).
     */
    get: operations["get_user_profile_api_v1_admin_site_finder_weight_profiles__profile_id__get"];
    /**
     * Update User Profile
     * @description PATCH-style обновление weight profile.
     *
     *     Передавай только изменяемые поля. Не переданные поля остаются прежними.
     *     При is_default=True снимает is_default у остальных профилей пользователя.
     */
    put: operations["update_user_profile_api_v1_admin_site_finder_weight_profiles__profile_id__put"];
    post?: never;
    /**
     * Delete User Profile
     * @description Удалить weight profile. 404 если не найден.
     */
    delete: operations["delete_user_profile_api_v1_admin_site_finder_weight_profiles__profile_id__delete"];
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/photos/{obj_id}/{file_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /** Get Photo */
    get: operations["get_photo_api_v1_photos__obj_id___file_id__get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/custom-pois": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Pois
     * @description Список кастомных POI пользователя.
     *
     *     Если parcel_cad задан — возвращает global (parcel_cad IS NULL) + parcel-specific POI.
     */
    get: operations["list_pois_api_v1_custom_pois_get"];
    put?: never;
    /**
     * Create Poi
     * @description Создать кастомную POI точку.
     *
     *     Возвращает 201 с созданным объектом. X-Session-Id response header содержит
     *     актуальный session_id (пригодится frontend для localStorage).
     */
    post: operations["create_poi_api_v1_custom_pois_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/custom-pois/{poi_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    post?: never;
    /**
     * Delete Poi
     * @description Удалить кастомную POI. 404 если не найдена.
     */
    delete: operations["delete_poi_api_v1_custom_pois__poi_id__delete"];
    options?: never;
    head?: never;
    /**
     * Patch Poi
     * @description Обновить поля кастомной POI (PATCH-style). 404 если не найдена.
     */
    patch: operations["patch_poi_api_v1_custom_pois__poi_id__patch"];
    trace?: never;
  };
  "/api/v1/locations": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Locations Endpoint
     * @description Все локации (районы) с district-level индексами.
     */
    get: operations["list_locations_endpoint_api_v1_locations_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/locations/{district_name}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Location Endpoint
     * @description Вернуть одну локацию по district_name. 404 если не найдена.
     */
    get: operations["get_location_endpoint_api_v1_locations__district_name__get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/insights": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Insights Endpoint
     * @description Список insight'ов с фильтрами + пагинацией.
     */
    get: operations["list_insights_endpoint_api_v1_insights_get"];
    put?: never;
    /**
     * Create Insight Endpoint
     * @description Создать insight. created_by = X-Authenticated-User.
     */
    post: operations["create_insight_endpoint_api_v1_insights_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/insights/{insight_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Insight Endpoint
     * @description Вернуть один insight. 404 если не найден.
     */
    get: operations["get_insight_endpoint_api_v1_insights__insight_id__get"];
    /**
     * Update Insight Endpoint
     * @description Partial update insight. 404 если не найден.
     */
    put: operations["update_insight_endpoint_api_v1_insights__insight_id__put"];
    post?: never;
    /**
     * Delete Insight Endpoint
     * @description Удалить insight. 404 если не найден.
     */
    delete: operations["delete_insight_endpoint_api_v1_insights__insight_id__delete"];
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/own-projects": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Own Projects Endpoint
     * @description Список планируемых проектов с фильтрами + пагинацией.
     */
    get: operations["list_own_projects_endpoint_api_v1_own_projects_get"];
    put?: never;
    /**
     * Create Own Project Endpoint
     * @description Создать планируемый проект. created_by = X-Authenticated-User.
     */
    post: operations["create_own_project_endpoint_api_v1_own_projects_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/own-projects/{project_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Own Project Endpoint
     * @description Вернуть один планируемый проект. 404 если не найден.
     */
    get: operations["get_own_project_endpoint_api_v1_own_projects__project_id__get"];
    /**
     * Update Own Project Endpoint
     * @description Partial update планируемого проекта. 404 если не найден.
     */
    put: operations["update_own_project_endpoint_api_v1_own_projects__project_id__put"];
    post?: never;
    /**
     * Delete Own Project Endpoint
     * @description Удалить планируемый проект. 404 если не найден.
     */
    delete: operations["delete_own_project_endpoint_api_v1_own_projects__project_id__delete"];
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/cadastre/jobs": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * List Cadastre Jobs
     * @description Список последних cadastre harvest jobs.
     */
    get: operations["list_cadastre_jobs_api_v1_admin_cadastre_jobs_get"];
    put?: never;
    /**
     * Create Cadastre Job
     * @description Создать bulk cadastre harvest job и поставить в очередь.
     *
     *     scope=pilot    → первые 50 ЕКБ кварталов из cad_quarters_geom
     *     scope=ekb_full → все ~2408 ЕКБ кварталов
     *     scope=manual_list → body.quarters (явный список)
     *
     *     Возвращает: {job_id, targets_total, estimate_minutes}
     */
    post: operations["create_cadastre_job_api_v1_admin_cadastre_jobs_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/cadastre/jobs/{job_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Cadastre Job
     * @description Детали одного cadastre harvest job.
     */
    get: operations["get_cadastre_job_api_v1_admin_cadastre_jobs__job_id__get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/cadastre/jobs/{job_id}/cancel": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Cancel Cadastre Job
     * @description Отменить job. Воркеры увидят status='cancelled' при следующей итерации и skip.
     */
    post: operations["cancel_cadastre_job_api_v1_admin_cadastre_jobs__job_id__cancel_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/cadastre/jobs/{job_id}/resume": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Resume Cadastre Job
     * @description Возобновить paused/failed job. Re-enqueue enqueue_cadastre_harvest.
     */
    post: operations["resume_cadastre_job_api_v1_admin_cadastre_jobs__job_id__resume_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/etl/objective-backfill": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Run Objective Backfill
     * @description Запустить backfill objective_complex_mapping + опционально REFRESH MV.
     *
     *     Ищет DOM.РФ комплексы (is_ekb=true) без mapping и применяет fuzzy match
     *     к project_name из objective_corpus_room_month через pg_trgm similarity.
     *
     *     Режим v1 (default, ?v2=false):
     *       - score >= 0.85 (AUTO_ACCEPT_THRESHOLD): auto-insert, match_method='fuzzy_trgm'
     *       - score >= 0.6 (REVIEW_THRESHOLD) и < 0.85: только счётчик review_queue
     *
     *     Режим v2 (?v2=true, task #44 coverage expansion):
     *       - score >= 0.80 (AUTO_ACCEPT_THRESHOLD_V2): auto-insert, match_method='fuzzy_v2'
     *       - is_reviewed=false — требует ручной проверки (false positives вероятны)
     *       - Целевой прирост: +~47-80 строк, coverage 8.5% → ~17%
     *
     *     Returns dict:
     *         auto_accepted: сколько строк вставлено
     *         review_queue: сколько кандидатов ниже порога auto-accept
     *         skipped: ON CONFLICT + ошибки
     *         mv_rows_after_refresh: строк в MV после REFRESH (0 если refresh_mv=False)
     *         threshold_used: фактический порог (float)
     *         match_method_used: match_method в БД (str)
     */
    post: operations["run_objective_backfill_api_v1_admin_etl_objective_backfill_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/etl/objective-core-backfill": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Run Objective Core Backfill
     * @description Core-name + dev-confirm проход (#2177 шаг 2, match_method='auto_core_dev_v5').
     *
     *     Нормализует ЯДРО имени обеих сторон (normalize_complex_name, #2198) и мапит
     *     несопоставленные domrf ЕКБ-объекты на objective-проекты. Пишутся ТОЛЬКО tier_a
     *     (ровно 1 кандидат + подтверждение застройщика). tier_b/ambiguous — в counts.
     *
     *     Дефолт dry_run=True (безопасно). Реальный insert — ?dry_run=false.
     *
     *     Returns dict:
     *         inserted / conflict_skipped / error_skipped / tier_a_total — из apply;
     *         tier_b / ambiguous / skipped_taken — счётчики отчёта;
     *         mv_rows_after_refresh — строк в MV после REFRESH (0 если dry-run / нет вставок).
     */
    post: operations["run_objective_core_backfill_api_v1_admin_etl_objective_core_backfill_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/etl/nspd-denorm-backfill": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Run Nspd Denorm Backfill
     * @description Запустить Celery backfill: denormalize nspd_quarter_dumps → nspd_parcels/nspd_buildings.
     *
     *     Задача идемпотентна (ON CONFLICT DO UPDATE). Безопасно запускать повторно.
     *     Возвращает Celery task_id — статус через /flower или celery inspect.
     *
     *     Args:
     *         limit: если задан — обработать только первые N кварталов ORDER BY quarter_cad.
     */
    post: operations["run_nspd_denorm_backfill_api_v1_admin_etl_nspd_denorm_backfill_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/etl/mapping-review": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Mapping Review
     * @description Список строк objective_complex_mapping + обогащение для ревьюера.
     *
     *     Обогащение каждой строки:
     *       - domrf_comm_name / domrf_dev_name — latest snapshot по domrf_obj_id;
     *       - objective_developers — застройщики objective-проекта (агрегат
     *         objective_lots.developer, scoped по project_name).
     *
     *     Сорт: is_reviewed asc, match_score asc NULLS FIRST (сомнительные сверху).
     *
     *     Returns dict:
     *         rows: list обогащённых строк (id, objective_complex_name,
     *             objective_project_id, objective_group, domrf_obj_id, match_method,
     *             match_score, is_reviewed, note, created_at, domrf_comm_name,
     *             domrf_dev_name, objective_developers);
     *         total: всего строк (с учётом only_unreviewed, БЕЗ limit/offset);
     *         limit / offset / only_unreviewed: эхо параметров.
     */
    get: operations["get_mapping_review_api_v1_admin_etl_mapping_review_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/etl/mapping-review/{mapping_id}/approve": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Approve Mapping Review
     * @description Подтвердить маппинг: is_reviewed=true + append «approved <date>» в note.
     *
     *     404 если строки с таким id нет.
     */
    post: operations["approve_mapping_review_api_v1_admin_etl_mapping_review__mapping_id__approve_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/admin/etl/mapping-review/{mapping_id}/reject": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Reject Mapping Review
     * @description Отклонить маппинг — DELETE строки (иначе травит mv_layout_velocity §4.2).
     *
     *     Удаляемая строка целиком логируется (logger.info) перед commit — в note
     *     писать некуда, строки не будет. 404 если id не найден.
     */
    post: operations["reject_mapping_review_api_v1_admin_etl_mapping_review__mapping_id__reject_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/trade-in/estimate": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Estimate
     * @description MOCK реализация оценки квартиры для Trade-In.
     *
     *     TODO TI-1b: заменить на реальный SQL aggregation из objective_lots
     *     после OBJ-1/2 merge (issue #314).
     */
    post: operations["estimate_api_v1_trade_in_estimate_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/trade-in/estimate/{estimate_id}": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Estimate
     * @description Получить сохранённую оценку по UUID (для генерации PDF).
     *
     *     Возвращает 404 если оценка не найдена или TTL истёк.
     */
    get: operations["get_estimate_api_v1_trade_in_estimate__estimate_id__get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/trade-in/estimate/{estimate_id}/pdf": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Estimate Pdf
     * @description Скачать 4-страничный PDF-отчёт для оценки trade-in.
     *
     *     Возвращает application/pdf attachment.
     *     404 — оценка не найдена.
     *     410 — оценка просрочена (TTL 24ч).
     */
    get: operations["estimate_pdf_api_v1_trade_in_estimate__estimate_id__pdf_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/landing/stats": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Landing Stats
     * @description 5 KPI для hero-секции лендинга.
     *
     *     Поля ответа:
     *     - zk_total: количество ЖК DOM.РФ в ЕКБ
     *     - deals_total: суммарное кол-во ДДУ-сделок в индексе Росреестра
     *     - price_coverage_pct: % объектов objective_lots с ценой
     *     - mapping_coverage_pct: % маппинга objective → domrf_kn_objects (ЕКБ)
     *     - last_data_update: дата последнего обновления данных (YYYY-MM-DD)
     *     - paradox: строка-парадокс портфеля для hero CTA
     *     - stale: true если данные недоступны (DB ошибка или пустая БД)
     */
    get: operations["landing_stats_api_v1_landing_stats_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/pilot/request": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    get?: never;
    put?: never;
    /**
     * Create Pilot Request
     * @description Сохраняет заявку на пилот в pilot_requests.
     */
    post: operations["create_pilot_request_api_v1_pilot_request_post"];
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/users/me/recent-parcels": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Get Recent Parcels
     * @description STUB. Real impl после NextAuth (Wave 3) — будет читать parcel_analysis_history table.
     */
    get: operations["get_recent_parcels_api_v1_users_me_recent_parcels_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/me": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /**
     * Me
     * @description Return the current user's RBAC scope (role + allowed/deny paths).
     */
    get: operations["me_api_v1_me_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/api/v1/ping": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /** Ping */
    get: operations["ping_api_v1_ping_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
  "/health": {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    /** Health */
    get: operations["health_health_get"];
    put?: never;
    post?: never;
    delete?: never;
    options?: never;
    head?: never;
    patch?: never;
    trace?: never;
  };
}
export type webhooks = Record<string, never>;
export interface components {
  schemas: {
    /** AggregatedEstimate */
    AggregatedEstimate: {
      /**
       * Estimate Id
       * Format: uuid
       */
      estimate_id: string;
      /** Median Price Rub */
      median_price_rub: number;
      /** Range Low Rub */
      range_low_rub: number;
      /** Range High Rub */
      range_high_rub: number;
      /** Median Price Per M2 */
      median_price_per_m2: number;
      /**
       * Confidence
       * @enum {string}
       */
      confidence: "low" | "medium" | "high";
      /** N Analogs */
      n_analogs: number;
      /** Period Months */
      period_months: number;
      /** Analogs */
      analogs: components["schemas"]["AnalogLot"][];
      /** Actual Deals */
      actual_deals: components["schemas"]["AnalogLot"][];
      /**
       * Expires At
       * Format: date-time
       */
      expires_at: string;
    };
    /** AnalogLot */
    AnalogLot: {
      /** Address */
      address: string;
      /** Area M2 */
      area_m2: number;
      /** Rooms */
      rooms: number;
      /** Floor */
      floor: number | null;
      /** Total Floors */
      total_floors: number | null;
      /** Price Rub */
      price_rub: number;
      /** Price Per M2 */
      price_per_m2: number;
      /** Listing Date */
      listing_date: string | null;
      /** Days On Market */
      days_on_market: number | null;
      /** Photo Url */
      photo_url?: string | null;
    };
    /**
     * AnalysisRunDetail
     * @description Полная строка одного рана (включая `result`) для re-open / детального view.
     *
     *     `result` — JSONB-блоб analyze (schema_version "analyze-1.0", форма ParcelAnalysis)
     *     ИЛИ §22 SiteFinderReport ("1.0") — отдаём как есть (dict), форму не навязываем
     *     (модель истории, не контракт analyze). Источник: repository.get_run (full SELECT).
     */
    AnalysisRunDetail: {
      /** Id */
      id: number;
      /** Cad Num */
      cad_num: string;
      /**
       * Created At
       * Format: date-time
       */
      created_at: string;
      /** Status */
      status?: string | null;
      /** Schema Version */
      schema_version?: string | null;
      /** District */
      district?: string | null;
      /** Confidence */
      confidence?: string | null;
      /** Created By */
      created_by?: string | null;
      /** Advisory */
      advisory?: boolean | null;
      /** Params */
      params?: {
        [key: string]: unknown;
      } | null;
      /** Segment */
      segment?: {
        [key: string]: unknown;
      } | null;
      /** Result */
      result?: {
        [key: string]: unknown;
      } | null;
    };
    /**
     * AnalysisRunListResponse
     * @description Ответ GET /parcels/{cad_num}/runs — список (пустой, если ранов нет).
     */
    AnalysisRunListResponse: {
      /** Runs */
      runs: components["schemas"]["AnalysisRunSummary"][];
    };
    /**
     * AnalysisRunSummary
     * @description Облегчённая карточка одного рана для списка истории по участку.
     *
     *     БЕЗ тяжёлого `result`-блоба (~90 ключей) — только метаданные для UI-списка
     *     «история анализов». Источник колонок: repository.list_runs_for (LIGHT SELECT).
     */
    AnalysisRunSummary: {
      /** Id */
      id: number;
      /** Cad Num */
      cad_num: string;
      /**
       * Created At
       * Format: date-time
       */
      created_at: string;
      /** Status */
      status?: string | null;
      /** Schema Version */
      schema_version?: string | null;
      /** District */
      district?: string | null;
      /** Confidence */
      confidence?: string | null;
      /** Created By */
      created_by?: string | null;
    };
    /**
     * AnalyzeRequest
     * @description Опциональное тело запроса POST /analyze.
     *
     *     Позволяет передать inline POI-веса напрямую в запросе без сохранения
     *     профиля. Если задан weights — применяется с наивысшим приоритетом
     *     (выше profile_id и user default).
     */
    AnalyzeRequest: {
      /**
       * Weights
       * @description Inline POI weights override (категория → weight). Если задан — применяется к scoring, без обязательного profile save. Validated против ALLOWED_CATEGORIES + MIN_WEIGHT/MAX_WEIGHT.
       */
      weights?: {
        [key: string]: number;
      } | null;
    };
    /**
     * AnalyzeResponse
     * @description Типизированный контракт ответа POST /parcels/{cad_num}/analyze (#992).
     *
     *     КРИТИЧЕСКИЕ инварианты (EPIC 961 — наивысший blast radius PR):
     *
     *     1) `extra="allow"` — ЛЮБОЙ ключ из `result_payload` (parcels.py), НЕ перечисленный
     *        здесь явно, ПОПАДАЕТ в ответ без изменений (Pydantic v2: уходит в
     *        __pydantic_extra__ → включается в model_dump → FastAPI отдаёт в body).
     *        Это backstop против silent-drop: даже если новый ключ добавят в payload и
     *        забудут сюда — frontend его получит. Без этого response_model молча выкинул
     *        бы неперечисленные ключи и сломал Site Finder.
     *
     *     2) ВСЕ поля Optional с дефолтом — модель НИЧЕГО не требует. Эндпоинт имеет
     *        graceful 202 fetch-stub ({status:"fetching", job_id, eta_seconds, message},
     *        без score/competitors/...). Если бы тут были required-поля, FastAPI словил бы
     *        ValidationError → 500 при сериализации 202-стаба через response_model. Все
     *        поля nullable → 202-стаб проходит без ошибок (недостающие → null, additive,
     *        frontend ветвится по HTTP-коду 202, не по телу — useSiteAnalysis.ts).
     *
     *     Перечень ниже документирует ~90 известных top-level ключей (зеркало
     *     frontend ParcelAnalysis + result_payload) для OpenAPI / codegen — но НЕ
     *     ограничивает ответ (extra="allow" + Optional). Источник истины формы — всё
     *     ещё result_payload в parcels.py; модель его описывает, а не сужает.
     */
    AnalyzeResponse: {
      /** Cad Num */
      cad_num?: string | null;
      /** Source */
      source?: string | null;
      /** Geom Geojson */
      geom_geojson?: {
        [key: string]: unknown;
      } | null;
      /** District */
      district?: {
        [key: string]: unknown;
      } | null;
      /** Score */
      score?: number | null;
      /** Score Without Center */
      score_without_center?: number | null;
      /** Score Label */
      score_label?: string | null;
      /** Score Max Reference */
      score_max_reference?: number | null;
      /** Score Explanation */
      score_explanation?: string | null;
      /** Score Is Advisory */
      score_is_advisory?: boolean | null;
      /** Score Advisory */
      score_advisory?: {
        [key: string]: unknown;
      } | null;
      /** Score Breakdown */
      score_breakdown?: {
        [key: string]: unknown;
      } | null;
      /** Score Breakdown Detailed */
      score_breakdown_detailed?:
        | {
            [key: string]: unknown;
          }[]
        | null;
      /** Score Top 3 Positives */
      score_top_3_positives?:
        | {
            [key: string]: unknown;
          }[]
        | null;
      /** Score Top 3 Negatives */
      score_top_3_negatives?:
        | {
            [key: string]: unknown;
          }[]
        | null;
      /** Score By Group */
      score_by_group?:
        | {
            [key: string]: unknown;
          }[]
        | null;
      /** Poi Count */
      poi_count?: number | null;
      /** Location */
      location?: {
        [key: string]: unknown;
      } | null;
      /** Competitors */
      competitors?:
        | {
            [key: string]: unknown;
          }[]
        | null;
      /** Market Pulse */
      market_pulse?: {
        [key: string]: unknown;
      } | null;
      /** Market Avg Price Per M2 */
      market_avg_price_per_m2?: number | null;
      /** Market Data Coverage Pct */
      market_data_coverage_pct?: number | null;
      /** Pipeline 24Mo */
      pipeline_24mo?: {
        [key: string]: unknown;
      } | null;
      /** Velocity */
      velocity?: {
        [key: string]: unknown;
      } | null;
      /** Market Trend */
      market_trend?: {
        [key: string]: unknown;
      } | null;
      /** Market Price */
      market_price?: {
        [key: string]: unknown;
      } | null;
      /** Noise */
      noise?: {
        [key: string]: unknown;
      } | null;
      /** Air Quality */
      air_quality?: {
        [key: string]: unknown;
      } | null;
      /** Weather */
      weather?: {
        [key: string]: unknown;
      } | null;
      /** Seasonal Weather */
      seasonal_weather?: {
        [key: string]: unknown;
      } | null;
      /** Wind */
      wind?: {
        [key: string]: unknown;
      } | null;
      /** Geology */
      geology?: {
        [key: string]: unknown;
      } | null;
      /** Hydrology */
      hydrology?: {
        [key: string]: unknown;
      } | null;
      /** Utilities */
      utilities?: {
        [key: string]: unknown;
      } | null;
      /** Geotech Risk */
      geotech_risk?: {
        [key: string]: unknown;
      } | null;
      /** Geometry Suitability */
      geometry_suitability?: {
        [key: string]: unknown;
      } | null;
      /** Neighbors Summary */
      neighbors_summary?: {
        [key: string]: unknown;
      } | null;
      /** Parcel Meta */
      parcel_meta?: {
        [key: string]: unknown;
      } | null;
      /** Recent Permits In Quarter */
      recent_permits_in_quarter?:
        | {
            [key: string]: unknown;
          }[]
        | null;
      /** Permits Summary */
      permits_summary?: {
        [key: string]: unknown;
      } | null;
      /** Permits Nearby */
      permits_nearby?: {
        [key: string]: unknown;
      } | null;
      /** Zoning */
      zoning?: {
        [key: string]: unknown;
      } | null;
      /** Success Recommendation */
      success_recommendation?: {
        [key: string]: unknown;
      } | null;
      /** Isochrones Available */
      isochrones_available?: boolean | null;
      /** Confidence */
      confidence?: number | null;
      /** Confidence Label */
      confidence_label?: string | null;
      /** Confidence Breakdown */
      confidence_breakdown?: {
        [key: string]: unknown;
      } | null;
      /** Confidence Caveats */
      confidence_caveats?: string[] | null;
      /** Nspd Zoning */
      nspd_zoning?: {
        [key: string]: unknown;
      } | null;
      /** Nspd Zouit Overlaps */
      nspd_zouit_overlaps?:
        | {
            [key: string]: unknown;
          }[]
        | null;
      /** Nspd Engineering Nearby */
      nspd_engineering_nearby?:
        | {
            [key: string]: unknown;
          }[]
        | null;
      /** Nspd Risk Zones */
      nspd_risk_zones?: components["schemas"]["RiskZone"][] | null;
      /** Nspd Opportunity Parcels */
      nspd_opportunity_parcels?:
        components["schemas"]["OpportunityParcel"][] | null;
      /** Nspd Red Lines */
      nspd_red_lines?: components["schemas"]["RedLine"][] | null;
      /** Nspd Dump */
      nspd_dump?: {
        [key: string]: unknown;
      } | null;
      /** Gate Verdict */
      gate_verdict?: {
        [key: string]: unknown;
      } | null;
      /** Weights Profile */
      weights_profile?: {
        [key: string]: unknown;
      } | null;
      /** Custom Poi Score Items */
      custom_poi_score_items?:
        | {
            [key: string]: unknown;
          }[]
        | null;
      /** Egrn */
      egrn?: {
        [key: string]: unknown;
      } | null;
      /** Encumbrance */
      encumbrance?: {
        [key: string]: unknown;
      } | null;
      /** Red Lines */
      red_lines?: {
        [key: string]: unknown;
      } | null;
      /** Metro */
      metro?: {
        [key: string]: unknown;
      } | null;
      /** District Price Per M2 Min */
      district_price_per_m2_min?: number | null;
      /** District Price Per M2 Max */
      district_price_per_m2_max?: number | null;
      /** District Price Per M2 Median */
      district_price_per_m2_median?: number | null;
      /** District Price Sample Size */
      district_price_sample_size?: number | null;
      /** Risks */
      risks?: {
        [key: string]: unknown;
      } | null;
      /** Forecast */
      forecast?: {
        [key: string]: unknown;
      } | null;
      /** Ird */
      ird?: {
        [key: string]: unknown;
      } | null;
      /** Developer Attribution */
      developer_attribution?: {
        [key: string]: unknown;
      } | null;
      /** Status */
      status?: string | null;
      /** Job Id */
      job_id?: number | null;
      /** Eta Seconds */
      eta_seconds?: number | null;
      /** Message */
      message?: string | null;
    } & {
      [key: string]: unknown;
    };
    /**
     * BestLayoutsRequest
     * @description Параметры запроса top-планировок в радиусе вокруг участка.
     */
    BestLayoutsRequest: {
      /**
       * Radius Km
       * @default 1
       */
      radius_km: number;
      /**
       * Time Window
       * @default last_quarter
       * @enum {string}
       */
      time_window: "last_month" | "last_quarter" | "last_year";
      /** Filter Competitor Obj Ids */
      filter_competitor_obj_ids?: number[] | null;
      /** Exclude Competitor Obj Ids */
      exclude_competitor_obj_ids?: number[];
      /**
       * Min Velocity Per Month
       * @default 0.5
       */
      min_velocity_per_month: number;
      /** Obj Class Filter */
      obj_class_filter?: ("economy" | "comfort" | "business") | null;
      /** Target Total Flats */
      target_total_flats?: number | null;
    };
    /**
     * BestLayoutsResponse
     * @description Ответ /best-layouts endpoint'а.
     */
    BestLayoutsResponse: {
      /** Top Layouts */
      top_layouts: components["schemas"]["TopLayoutRow"][];
      recommendation_for_tz: components["schemas"]["LayoutTzRecommendation"];
      data_quality: components["schemas"]["LayoutDataQuality"];
      /** Supply Only Layouts */
      supply_only_layouts?: components["schemas"]["SupplyOnlyLayoutRow"][];
    };
    /**
     * BuildingProgramItem
     * @description Stage 3a (#1965, эпик #1953) — один пункт программы застройки (типовой дом × N).
     *
     *     Пользователь набирает программу из ТИПОВЫХ домов каталога
     *     (``app.services.generative.catalog.HOUSE_TYPES``) вместо max-FAR жадной раскладки:
     *     «поставь ``count`` секций типа ``section_type`` этажностью ``floors``». Габариты
     *     пятна секции берутся из каталога по ключу ``section_type`` (контракт несёт только
     *     ключ, не геометрию — единый справочник на бэке).
     */
    BuildingProgramItem: {
      /**
       * Section Type
       * @description Catalog house-type key (HOUSE_TYPES)
       */
      section_type: string;
      /**
       * Floors
       * @description Floors for this house-type group
       */
      floors: number;
      /**
       * Count
       * @description Number of sections to place
       */
      count: number;
      /**
       * Footprint W M
       * @description Optional manual section footprint width, m
       */
      footprint_w_m?: number | null;
      /**
       * Footprint D M
       * @description Optional manual section footprint depth, m
       */
      footprint_d_m?: number | null;
    };
    /**
     * BulkGeoEnqueueRequest
     * @description Параметры для параллельного backfill geo по Свердловской обл.
     */
    BulkGeoEnqueueRequest: {
      /**
       * Parallelism
       * @default 5
       */
      parallelism: number;
      /**
       * Thematic Ids
       * @description Список thematic_id: 1=parcel, 2=quarter, 5=building. Можно несколько.
       * @default [
       *       2
       *     ]
       */
      thematic_ids: number[];
      /**
       * Region Codes
       * @description Список region кодов
       * @default [
       *       66
       *     ]
       */
      region_codes: number[];
      /**
       * Only Ddu
       * @description True = только ДДУ (002001003000); False = все cad-кварталы
       * @default false
       */
      only_ddu: boolean;
      /**
       * Source
       * @description rosreestr_pending — cad-номера из rosreestr_deals которых нет в geo-таблице; all_in_region — UNION всех cad из rosreestr_deals + cad_buildings + complexes
       * @default rosreestr_pending
       */
      source: string;
      /**
       * Rate Ms
       * @default 600
       */
      rate_ms: number;
    };
    /**
     * ChatAskRequest
     * @description Запрос вопроса по §22-форсайту участка.
     *
     *     `cad_num` + `message` обязательны. `intent` — опциональный явный intent (если задан,
     *     роутер его уважает и не угадывает по тексту). `history` — опциональная история
     *     диалога: принимается для совместимости контракта, но в Step 1 НЕ используется
     *     (LLM-контекст — Step 2); длину кэпируем (последние _HISTORY_MAX_TURNS ходов).
     */
    ChatAskRequest: {
      /**
       * Cad Num
       * @description Кадастровый номер участка
       */
      cad_num: string;
      /**
       * Message
       * @description Вопрос пользователя (RU, free-form)
       */
      message: string;
      /** @description Явный intent — если задан, роутер его уважает (не угадывает по тексту) */
      intent?: components["schemas"]["ChatIntent"] | null;
      /**
       * History
       * @description История диалога (Step 1: принимается, НЕ используется; LLM-контекст — Step 2)
       */
      history?: components["schemas"]["ChatTurn"][] | null;
    };
    /**
     * ChatAskResponse
     * @description Ответ чата по отчёту участка (детерминированный, шаблонный RU-текст).
     *
     *     `answer` — готовый RU-ответ с числами ВЕРБАТИМ из отчёта (никогда не фабрикуем) +
     *     advisory-оговорка. `grounded_in` — привязка к рану/секциям (None если pending).
     *     `llm_used` ВСЕГДА False в Step 1. `fallback_reason` — почему ответ деградировал
     *     (отчёта нет / intent не распознан / секция отсутствует). `advisory` зеркалит
     *     report.advisory (пока всегда True). `report_status` — 'ready' (отчёт прочитан) или
     *     'pending' (отчёта ещё нет — запустите анализ участка).
     */
    ChatAskResponse: {
      /**
       * Answer
       * @description Готовый RU-ответ (числа из отчёта + advisory-оговорка)
       */
      answer: string;
      /** @description Привязка к рану/схеме/секциям (None если отчёта ещё нет) */
      grounded_in?: components["schemas"]["GroundedIn"] | null;
      /**
       * Llm Used
       * @description Использовался ли LLM (Step 1 — ВСЕГДА False; LLM — Step 2)
       * @default false
       */
      llm_used: boolean;
      /**
       * Fallback Reason
       * @description Почему ответ деградировал (нет отчёта / intent unknown / нет секции)
       */
      fallback_reason?: string | null;
      /**
       * Advisory
       * @description Отчёт советующий (зеркало report.advisory — пока всегда True)
       * @default true
       */
      advisory: boolean;
      /**
       * Report Status
       * @description Статус отчёта: 'ready' (прочитан) | 'pending' (ещё нет)
       * @enum {string}
       */
      report_status: "ready" | "pending";
    };
    /**
     * ChatIntent
     * @description Поддерживаемые типы вопросов по отчёту (детерминированный роутинг §22-чата).
     *
     *     StrEnum → значение члена и есть строка (сериализуется как plain-строка в JSON-
     *     ответе, сравнимо со строкой). `unknown` — graceful-фолбэк: вопрос не распознан,
     *     отдаём меню поддерживаемых тем.
     * @enum {string}
     */
    ChatIntent:
      | "summary"
      | "what_to_build"
      | "why_forecast"
      | "risks"
      | "scenarios"
      | "unknown";
    /**
     * ChatTurn
     * @description Один ход диалога (роль + текст). Принимается, но в Step 1 НЕ используется.
     *
     *     Форвардится в LLM-контекст только на Step 2 (#957). frozen — это входной факт.
     */
    ChatTurn: {
      /**
       * Role
       * @description Роль хода: 'user' | 'assistant'
       */
      role: string;
      /**
       * Content
       * @description Текст хода диалога
       */
      content: string;
    };
    /** Competitor */
    Competitor: {
      /** Obj Id */
      obj_id: number;
      /** Comm Name */
      comm_name: string | null;
      /** Dev Name */
      dev_name: string | null;
      /** Obj Class */
      obj_class: string | null;
      /** Distance M */
      distance_m: number;
      /** Lat */
      lat: number;
      /** Lng */
      lng: number;
      /** Stage */
      stage: string | null;
      /** Site Status */
      site_status?: string | null;
      /** Ready Dt */
      ready_dt?: string | null;
      /** Flats Total */
      flats_total: number | null;
      /** Flats Sold */
      flats_sold: number | null;
      /** Sold Pct */
      sold_pct: number | null;
      /** Velocity Per Month */
      velocity_per_month: number;
      /** Avg Price Per M2 */
      avg_price_per_m2: number | null;
      /** Price Source */
      price_source?: string | null;
      /** Is Active */
      is_active: boolean;
      /** Relevance Weight */
      relevance_weight?: number | null;
      /** Relevance Breakdown */
      relevance_breakdown?: {
        [key: string]: number;
      } | null;
    };
    /**
     * CompetitorParking
     * @description parking_ratio одного конкурента (#96). obj_id связывает с Competitor.
     *
     *     matched_cad_num — здание cad_buildings, на которое сматчился domrf-центроид
     *     (None если geom-match не нашёл здание в радиусе). parking_ratio /
     *     parking_count / flats_count — из НСПД tab-group (None если здание не
     *     сматчилось ИЛИ НСПД недоступен — graceful, НЕ нулевой паркинг).
     *     match_distance_m — расстояние domrf-центроид → footprint (диагностика).
     */
    CompetitorParking: {
      /** Obj Id */
      obj_id: number;
      /** Matched Cad Num */
      matched_cad_num?: string | null;
      /** Match Distance M */
      match_distance_m?: number | null;
      /** Parking Ratio */
      parking_ratio?: number | null;
      /** Parking Count */
      parking_count?: number | null;
      /** Flats Count */
      flats_count?: number | null;
    };
    /**
     * CompetitorsParkingResponse
     * @description Ответ ленивого /{cad}/competitors-parking (#96).
     *
     *     items — по одному CompetitorParking на top-N конкурентов (по relevance_weight
     *     DESC из get_competitors). matched_count — сколько реально получили
     *     parking_ratio (диагностика покрытия для фронта / мониторинга).
     */
    CompetitorsParkingResponse: {
      /** Items */
      items: components["schemas"]["CompetitorParking"][];
      /** Matched Count */
      matched_count: number;
    };
    /** CompetitorsRequest */
    CompetitorsRequest: {
      /**
       * Radius Km
       * @default 1
       */
      radius_km: number;
      /**
       * Time Window
       * @default last_quarter
       * @enum {string}
       */
      time_window: "last_month" | "last_quarter" | "last_year";
      /** Obj Class Filter */
      obj_class_filter?: ("economy" | "comfort" | "business") | null;
      /** Exclude Obj Ids */
      exclude_obj_ids?: number[];
      /**
       * Horizon Months
       * @default 12
       */
      horizon_months: number;
    };
    /** CompetitorsResponse */
    CompetitorsResponse: {
      /** Competitors */
      competitors: components["schemas"]["Competitor"][];
      summary: components["schemas"]["CompetitorsSummary"];
    };
    /** CompetitorsSummary */
    CompetitorsSummary: {
      /** Total Competitors */
      total_competitors: number;
      /** Active Count */
      active_count: number;
      /** Weighted Avg Velocity */
      weighted_avg_velocity: number;
      /** Radius Km */
      radius_km: number;
      /** Time Window */
      time_window: string;
    };
    /** ComplexBuilding */
    ComplexBuilding: {
      /** Cad Num */
      cad_num: string;
      /** Floors */
      floors: number | null;
      /** Area */
      area: number | null;
      /** Purpose */
      purpose: string | null;
      /** Building Name */
      building_name: string | null;
      /** Readable Address */
      readable_address: string | null;
      /** Geom Geojson */
      geom_geojson: {
        [key: string]: unknown;
      } | null;
    };
    /**
     * ConceptInput
     * @description Stage 1a — input contract. Frozen interface for frontend codegen.
     */
    ConceptInput: {
      /**
       * Parcel Geojson
       * @description GeoJSON Polygon of the parcel (WGS84 / EPSG:4326)
       */
      parcel_geojson: {
        [key: string]: unknown;
      };
      /**
       * Housing Class
       * @default comfort
       * @enum {string}
       */
      housing_class: "econom" | "comfort" | "business";
      /**
       * Target Floors
       * @default 9
       */
      target_floors: number;
      /**
       * Development Type
       * @default mid_rise
       * @enum {string}
       */
      development_type: "spot" | "mid_rise" | "high_rise";
      /**
       * Land Cost Rub
       * @description Optional land cost for financial model
       */
      land_cost_rub?: number | null;
      /**
       * Building Program
       * @description Optional typed house program; None → greedy max-FAR placement
       */
      building_program?: components["schemas"]["BuildingProgramItem"][] | null;
    };
    /** ConceptOutput */
    ConceptOutput: {
      /** Variants */
      variants: components["schemas"]["ConceptVariant"][];
    };
    /** ConceptVariant */
    ConceptVariant: {
      /**
       * Strategy
       * @enum {string}
       */
      strategy: "max_area" | "max_insolation" | "balanced";
      /** Buildings Geojson */
      buildings_geojson: {
        [key: string]: unknown;
      };
      teap: components["schemas"]["TEAP"];
      financial: components["schemas"]["FinancialModel"];
      /**
       * Placed Count
       * @description Stage 3a: sections actually placed (program mode only)
       */
      placed_count?: number | null;
      /**
       * Requested Count
       * @description Stage 3a: sections requested by program (program mode only)
       */
      requested_count?: number | null;
    };
    /** ConnectionCapacityResponse */
    ConnectionCapacityResponse: {
      /** Power Points */
      power_points: components["schemas"]["PowerConnectionPoint"][];
      power_summary: components["schemas"]["PowerCapacitySummary"];
      /** Water */
      water: components["schemas"]["WaterCapacityRow"][];
      gas?: components["schemas"]["GasCapacityBlock"] | null;
      /**
       * Gas Outlet Points
       * @default []
       */
      gas_outlet_points: components["schemas"]["GasOutletPoint"][];
      heat?: components["schemas"]["HeatCapacityBlock"] | null;
      /**
       * Nearby Network Zones
       * @default []
       */
      nearby_network_zones: components["schemas"]["NearbyNetworkZone"][];
    };
    /** ConnectionPointsResponse */
    ConnectionPointsResponse: {
      /** Engineering Structures */
      engineering_structures: components["schemas"]["EngineeringStructure"][];
      /** Zouit Engineering Overlaps */
      zouit_engineering_overlaps: components["schemas"]["ZouitOverlap"][];
      summary: components["schemas"]["ConnectionPointsSummary"];
      /** Dump Available */
      dump_available: boolean;
      /** Dump Fetched At */
      dump_fetched_at: string | null;
    };
    /** ConnectionPointsSummary */
    ConnectionPointsSummary: {
      /** Nearest Structure Distance M */
      nearest_structure_distance_m: number | null;
      /** In Protection Zone */
      in_protection_zone: boolean;
      /** Protection Zones Intersecting */
      protection_zones_intersecting: number;
      /** Total Structures In Radius */
      total_structures_in_radius: number;
      /**
       * Protection Zones Truncated
       * @default false
       */
      protection_zones_truncated: boolean;
      /**
       * Structures Truncated
       * @default false
       */
      structures_truncated: boolean;
    };
    /**
     * CreateCadastreJobRequest
     * @description Параметры создания bulk cadastre job.
     */
    CreateCadastreJobRequest: {
      /**
       * Scope
       * @description pilot=50 кварталов ЕКБ, ekb_full=все 2408, manual_list=явный список
       */
      scope: string;
      /**
       * Quarters
       * @description Список кварталов для scope=manual_list
       */
      quarters?: string[] | null;
      /**
       * Limit
       * @description Ограничить количество кварталов (override для pilot/ekb_full)
       */
      limit?: number | null;
      /** Name */
      name?: string | null;
      /**
       * Rate Ms
       * @description Задержка между запросами в мс (333мс = ~3 req/s)
       * @default 333
       */
      rate_ms: number;
    };
    /** CustomPoiCreate */
    CustomPoiCreate: {
      /**
       * Name
       * @description Отображаемое название точки
       */
      name: string;
      /**
       * Category
       * @description Произвольная категория
       */
      category?: string | null;
      /**
       * Weight
       * @description Вес точки в scoring [-5, 5]
       */
      weight: number;
      /**
       * Lon
       * @description Долгота WGS-84
       */
      lon: number;
      /**
       * Lat
       * @description Широта WGS-84
       */
      lat: number;
      /**
       * Parcel Cad
       * @description Кадастровый номер участка; NULL = глобальная для пользователя
       */
      parcel_cad?: string | null;
      /**
       * Notes
       * @description Примечания
       */
      notes?: string | null;
    };
    /** CustomPoiOut */
    CustomPoiOut: {
      /** Id */
      id: number;
      /** User Id */
      user_id: string;
      /** Parcel Cad */
      parcel_cad: string | null;
      /** Name */
      name: string;
      /** Category */
      category: string | null;
      /** Weight */
      weight: number;
      /** Lon */
      lon: number;
      /** Lat */
      lat: number;
      /** Notes */
      notes: string | null;
      /**
       * Created At
       * Format: date-time
       */
      created_at: string;
      /**
       * Updated At
       * Format: date-time
       */
      updated_at: string;
    };
    /** CustomPoiUpdate */
    CustomPoiUpdate: {
      /** Name */
      name?: string | null;
      /** Category */
      category?: string | null;
      /** Weight */
      weight?: number | null;
      /** Lon */
      lon?: number | null;
      /** Lat */
      lat?: number | null;
      /** Parcel Cad */
      parcel_cad?: string | null;
      /** Notes */
      notes?: string | null;
    };
    /**
     * DduIndicatorRequest
     * @description ARN-shaped request body. Unsupported options are reported in `notes`
     *     of the response rather than rejected (MVP supports Q / methods 1,2 / subj 66).
     */
    DduIndicatorRequest: {
      /** Indicators */
      indicators?: string[] | null;
      /**
       * Calculationmethod
       * @default 2
       */
      calculationMethod: number;
      /** Periodfrom */
      periodFrom?: string | null;
      /** Periodto */
      periodTo?: string | null;
      /** Federaldistrict */
      federalDistrict?: number[] | null;
      /** Federalsubject */
      federalSubject?: string[] | null;
      /** Cadastralquarter */
      cadastralQuarter?: string[] | null;
      /** Arearanges */
      areaRanges?: number[] | null;
    };
    /**
     * DduIndicatorResponse
     * @description Free-form ARN-mirror response (table + graph + meta + notes).
     */
    DduIndicatorResponse: {
      /** Meta */
      meta: {
        [key: string]: unknown;
      };
      /** Table */
      table: {
        [key: string]: unknown;
      }[];
      /** Graph */
      graph: {
        [key: string]: unknown;
      }[];
      /** Notes */
      notes: string[];
    };
    /** EngineeringStructure */
    EngineeringStructure: {
      /** Name */
      name: string | null;
      /** Type */
      type: string | null;
      /** Cad Num */
      cad_num: string | null;
      /** Purpose */
      purpose?: string | null;
      /** Distance To Boundary M */
      distance_to_boundary_m: number;
      /** Geometry Geojson */
      geometry_geojson: {
        [key: string]: unknown;
      };
      /** Readable Address */
      readable_address: string | null;
      /** Characteristics */
      characteristics?: string | null;
      /** Raw Props */
      raw_props: {
        [key: string]: unknown;
      };
      /** Source */
      source: string;
    };
    /**
     * EnqueueGeoJobRequest
     * @description Создать новый bulk geo-job.
     */
    EnqueueGeoJobRequest: {
      /** Name */
      name?: string | null;
      /** Job Kind */
      job_kind: string;
      /**
       * Source Kind
       * @default manual_list
       */
      source_kind: string;
      /**
       * Cad Nums
       * @description Список cad-номеров для обработки
       */
      cad_nums?: string[];
      /**
       * Thematic Id
       * @description 1=parcel, 2=quarter, 5=building
       * @default 2
       */
      thematic_id: number;
      /**
       * Region Codes
       * @description Для source=rosreestr_pending
       */
      region_codes?: number[] | null;
      /**
       * Rate Ms
       * @default 600
       */
      rate_ms: number;
    };
    /**
     * FinancialModel
     * @description Static developer P&L + monthly-DCF investment metrics (PR-1/PR-3, эпик #1881).
     *
     *     Full static cost cascade + VAT + profit tax → net profit + ROI (PR-1). On top
     *     of that static P&L, PR-3 lays the cascade onto a **monthly cashflow schedule**
     *     (default phase norms — ПИР → СМР → продажи) and runs a real DCF: NPV, IRR
     *     (bisection over the monthly cashflow) and *undiscounted* cumulative payback.
     *     See ``compute_financial`` docstring for the schedule assumptions and the
     *     налоги/рассрочка phasing choices.
     *
     *     ``irr`` is a **real** annualised DCF IRR when ``irr_is_proxy is False``; for a
     *     degenerate cashflow with no sign change (e.g. always-loss) the bisection cannot
     *     bracket a root, so we fall back to the PR-1 annualised-ROI proxy and flag
     *     ``irr_is_proxy=True``. VAT is a documented simplification (see docstring), not
     *     exact НК РФ mechanics.
     *
     *     ``levered_irr`` — IRR на собственные средства (equity cashflow при LTC): тот же
     *     DCF-IRR + roi-proxy fallback, но по equity-потоку графика долга. При положительном
     *     леверидже выше unlevered ``irr``; вырожденные случаи → 0.0 + ``levered_irr_is_proxy``.
     *
     *     The legacy summary fields (``revenue_rub`` / ``cost_rub`` /
     *     ``gross_margin_rub`` / ``irr``) are kept for backward-compat; the new fields
     *     expose the full cascade, the net P&L and the DCF metrics.
     */
    FinancialModel: {
      /** Revenue Rub */
      revenue_rub: number;
      /** Cost Rub */
      cost_rub: number;
      /** Gross Margin Rub */
      gross_margin_rub: number;
      /** Irr */
      irr: number;
      /** Revenue Residential Rub */
      revenue_residential_rub: number;
      /** Revenue Parking Rub */
      revenue_parking_rub: number;
      /**
       * Revenue Office Rub
       * @default 0
       */
      revenue_office_rub: number;
      /** Construction Rub */
      construction_rub: number;
      /** Pir Rub */
      pir_rub: number;
      /** Networks Rub */
      networks_rub: number;
      /** Developer Services Rub */
      developer_services_rub: number;
      /** Contingency Rub */
      contingency_rub: number;
      /** Marketing Rub */
      marketing_rub: number;
      /** Land Rub */
      land_rub: number;
      /** Vat Rub */
      vat_rub: number;
      /** Profit Before Tax Rub */
      profit_before_tax_rub: number;
      /** Profit Tax Rub */
      profit_tax_rub: number;
      /** Net Profit Rub */
      net_profit_rub: number;
      /** Roi */
      roi: number;
      /** Margin Pct */
      margin_pct: number;
      /**
       * Irr Is Proxy
       * @default true
       */
      irr_is_proxy: boolean;
      /**
       * Npv Rub
       * @default 0
       */
      npv_rub: number;
      /** Payback Months */
      payback_months?: number | null;
      /**
       * Discount Rate Used
       * @default 0
       */
      discount_rate_used: number;
      /**
       * Schedule Is Default
       * @default true
       */
      schedule_is_default: boolean;
      /** Sales Duration Months */
      sales_duration_months?: number | null;
      /**
       * Financing Enabled
       * @default false
       */
      financing_enabled: boolean;
      /**
       * Annual Rate Used
       * @default 0
       */
      annual_rate_used: number;
      /**
       * Peak Debt Rub
       * @default 0
       */
      peak_debt_rub: number;
      /**
       * Total Interest Rub
       * @default 0
       */
      total_interest_rub: number;
      /**
       * Net Profit After Financing Rub
       * @default 0
       */
      net_profit_after_financing_rub: number;
      /**
       * Financing Is Simplified
       * @default true
       */
      financing_is_simplified: boolean;
      /**
       * Levered Irr
       * @default 0
       */
      levered_irr: number;
      /**
       * Levered Irr Is Proxy
       * @default true
       */
      levered_irr_is_proxy: boolean;
      /** Price Per Sqm Used */
      price_per_sqm_used: number;
      /**
       * Price Is Calibrated
       * @default false
       */
      price_is_calibrated: boolean;
      /**
       * Price Source
       * @default class_norm
       */
      price_source: string;
    };
    /**
     * GasCapacityBlock
     * @description Газовый блок: городские ГРС ЕКБ со свободной мощностью. #2119 Фаза B1.
     *
     *     + счётчики точек выхода газосети (gas_grs_outlet_points, форма 6 ФАС №960 АО
     *     «Екатеринбурггаз») за последний срез. #2119 Фаза B2 PR-4.
     */
    GasCapacityBlock: {
      /** City Grs */
      city_grs: components["schemas"]["GasGrsRow"][];
      /** Total Free Th M3 H */
      total_free_th_m3_h: number | null;
      /**
       * Outlets Total
       * @default 0
       */
      outlets_total: number;
      /**
       * Outlets Deficit
       * @default 0
       */
      outlets_deficit: number;
      /**
       * Outlets Needs Calc
       * @default 0
       */
      outlets_needs_calc: number;
    };
    /**
     * GasGrsRow
     * @description Свободная мощность одной городской ГРС (агрегация по выходам). #2119 B1.
     */
    GasGrsRow: {
      /** Grs Name */
      grs_name: string;
      /** Design Capacity Th M3 H */
      design_capacity_th_m3_h: number | null;
      /** Free Capacity Th M3 H */
      free_capacity_th_m3_h: number | null;
      /** Free Capacity Pct */
      free_capacity_pct: number | null;
      /** Upgrade Due */
      upgrade_due: string | null;
      /** Outputs Count */
      outputs_count: number;
    };
    /**
     * GasOutletPoint
     * @description Гео-точка выхода газосети в радиусе от участка (для слоя карты §3). #2119 B2 PR-4.
     */
    GasOutletPoint: {
      /** Outlet Name */
      outlet_name: string;
      /** Consumer Type */
      consumer_type: string | null;
      /** Free Capacity Mln M3 */
      free_capacity_mln_m3: number | null;
      /** Needs Calc */
      needs_calc: boolean;
      /** Distance M */
      distance_m: number;
      /** Lat */
      lat: number | null;
      /** Lon */
      lon: number | null;
    };
    /**
     * GroundedIn
     * @description Привязка ответа к источнику — какой ран/схема/секции легли в основу ответа.
     *
     *     Делает ответ explainable: фронт может показать «основано на ране N, секции X, Y».
     *     None в ответе, когда отчёта ещё нет (report_status='pending').
     */
    GroundedIn: {
      /**
       * Run Id
       * @description ID персистентного analysis_run, давшего отчёт
       */
      run_id: number;
      /**
       * Schema Version
       * @description Версия схемы отчёта (контракт as_dict)
       */
      schema_version: string;
      /**
       * Sections
       * @description Секции отчёта, использованные для ответа (explainability)
       */
      sections?: string[];
    };
    /** HTTPValidationError */
    HTTPValidationError: {
      /** Detail */
      detail?: components["schemas"]["ValidationError"][];
    };
    /**
     * HarvestQuarterRequest
     * @description Параметры ручного запуска harvest одного квартала.
     */
    HarvestQuarterRequest: {
      /**
       * Quarter Cad
       * @description 3-сегментный кадастровый номер квартала, например '66:41:0204016'
       */
      quarter_cad: string;
      /**
       * Region Code
       * @default 66
       */
      region_code: number;
      /**
       * Include Zouit
       * @default true
       */
      include_zouit: boolean;
      /**
       * Include Risks
       * @default false
       */
      include_risks: boolean;
    };
    /**
     * HeatCapacityBlock
     * @description Тепловой блок: резервы систем теплоснабжения за последний период. #2119 B2.
     */
    HeatCapacityBlock: {
      /** Systems */
      systems: components["schemas"]["HeatSystemRow"][];
      /** Total Reserve Gcal H */
      total_reserve_gcal_h: number | null;
    };
    /**
     * HeatSystemRow
     * @description Резерв тепловой мощности одной системы теплоснабжения. #2119 Phase B2.
     */
    HeatSystemRow: {
      /** Org */
      org: string;
      /** System Name */
      system_name: string;
      /** Reserve Gcal H */
      reserve_gcal_h: number | null;
      /** Period */
      period: string | null;
    };
    /**
     * HouseTypeCatalog
     * @description Stage 3b (#1965) — каталог типовых домов, отдаваемый ``GET /concepts/house-types``.
     */
    HouseTypeCatalog: {
      /** House Types */
      house_types: components["schemas"]["HouseTypeCatalogItem"][];
    };
    /**
     * HouseTypeCatalogItem
     * @description Stage 3b (#1965, эпик #1953) — один тип дома каталога, ОТДАВАЕМЫЙ фронту.
     *
     *     Read-only проекция ``app.services.generative.catalog.HouseType`` для пикера
     *     Stage 3b: фронт показывает ``label_ru`` + габариты пятна + дефолтную этажность
     *     + класс, а в ``BuildingProgramItem.section_type`` кладёт ``section_type``. Это
     *     делает каталог ЕДИНЫМ источником истины — фронт ничего не хардкодит. Поля
     *     зеркалят dataclass на бэке (см. ``GET /api/v1/concepts/house-types``).
     */
    HouseTypeCatalogItem: {
      /**
       * Section Type
       * @description Catalog house-type key (HOUSE_TYPES)
       */
      section_type: string;
      /**
       * Label Ru
       * @description Human-readable Russian label
       */
      label_ru: string;
      /**
       * Footprint W M
       * @description Section footprint width, m
       */
      footprint_w_m: number;
      /**
       * Footprint D M
       * @description Section footprint depth, m
       */
      footprint_d_m: number;
      /**
       * Footprint Sqm
       * @description Section footprint area, m² (w × d)
       */
      footprint_sqm: number;
      /**
       * Default Floors
       * @description Default floors for this type
       */
      default_floors: number;
      /**
       * Housing Class
       * @description Suitable housing class
       * @enum {string}
       */
      housing_class: "econom" | "comfort" | "business";
    };
    /** InsightCreate */
    InsightCreate: {
      /**
       * Title
       * @description Заголовок заметки
       */
      title: string;
      /**
       * Body
       * @description Тело заметки (intel)
       */
      body: string;
      /**
       * Category
       * @description Категория: competition|permitting|demand|risk|other
       */
      category?:
        ("competition" | "permitting" | "demand" | "risk" | "other") | null;
      /**
       * Is Confidential
       * @description «Непублично» (§7.13): маркировка чувствительной заметки
       * @default false
       */
      is_confidential: boolean;
      /**
       * District
       * @description Location ref (район); Part B промоутит в Location FK
       */
      district?: string | null;
      /**
       * Cad Num
       * @description Опциональный кадастровый номер участка
       */
      cad_num?: string | null;
      /**
       * Lon
       * @description Долгота WGS-84 (map-pin)
       */
      lon?: number | null;
      /**
       * Lat
       * @description Широта WGS-84 (map-pin)
       */
      lat?: number | null;
      /**
       * Source
       * @description Источник intel
       */
      source?: string | null;
    };
    /**
     * InsightList
     * @description Ответ list-эндпоинта: total + страница строк (как admin_leads).
     */
    InsightList: {
      /** Total */
      total: number;
      /** Limit */
      limit: number;
      /** Offset */
      offset: number;
      /** Rows */
      rows: components["schemas"]["InsightOut"][];
    };
    /** InsightOut */
    InsightOut: {
      /** Id */
      id: number;
      /** Created By */
      created_by: string;
      /** Title */
      title: string;
      /** Body */
      body: string;
      /** Category */
      category: string | null;
      /** Is Confidential */
      is_confidential: boolean;
      /** District */
      district: string | null;
      /** Cad Num */
      cad_num: string | null;
      /** Lon */
      lon: number | null;
      /** Lat */
      lat: number | null;
      /** Source */
      source: string | null;
      /**
       * Created At
       * Format: date-time
       */
      created_at: string;
      /**
       * Updated At
       * Format: date-time
       */
      updated_at: string;
    };
    /**
     * InsightUpdate
     * @description Partial update (PUT) — переданные поля заменяются, отсутствующие не трогаются.
     */
    InsightUpdate: {
      /** Title */
      title?: string | null;
      /** Body */
      body?: string | null;
      /** Category */
      category?:
        ("competition" | "permitting" | "demand" | "risk" | "other") | null;
      /** Is Confidential */
      is_confidential?: boolean | null;
      /** District */
      district?: string | null;
      /** Cad Num */
      cad_num?: string | null;
      /** Lon */
      lon?: number | null;
      /** Lat */
      lat?: number | null;
      /** Source */
      source?: string | null;
    };
    /** JobSettingRead */
    JobSettingRead: {
      /** Job Type */
      job_type: string;
      /** Enabled */
      enabled: boolean;
      /** Queue Name */
      queue_name: string;
      /** Cron Schedule */
      cron_schedule: string | null;
      /** Rate Ms */
      rate_ms: number | null;
      /** Max Retries */
      max_retries: number;
      /** Max Concurrency */
      max_concurrency: number;
      /** Extra Config */
      extra_config: {
        [key: string]: unknown;
      };
      /**
       * Updated At
       * Format: date-time
       */
      updated_at: string;
      /** Updated By */
      updated_by: string | null;
      /** Description */
      description: string | null;
    };
    /**
     * JobSettingUpdate
     * @description PATCH-style: передавать только изменяемые поля. Непереданные — без изменений.
     */
    JobSettingUpdate: {
      /** Enabled */
      enabled?: boolean | null;
      /** Queue Name */
      queue_name?: string | null;
      /** Cron Schedule */
      cron_schedule?: string | null;
      /** Rate Ms */
      rate_ms?: number | null;
      /** Max Retries */
      max_retries?: number | null;
      /** Max Concurrency */
      max_concurrency?: number | null;
      /** Extra Config */
      extra_config?: {
        [key: string]: unknown;
      } | null;
    };
    /** LandingStatsOut */
    LandingStatsOut: {
      /** Zk Total */
      zk_total: number;
      /** Deals Total */
      deals_total: number;
      /** Price Coverage Pct */
      price_coverage_pct: number;
      /** Mapping Coverage Pct */
      mapping_coverage_pct: number;
      /** Last Data Update */
      last_data_update: string;
      /** Paradox */
      paradox: string;
      /**
       * Stale
       * @default false
       */
      stale: boolean;
    };
    /**
     * LayoutDataQuality
     * @description Метаданные качества данных (coverage).
     *
     *     Issue #2177: coverage считается в ГРУППАХ-КОМПЛЕКСАХ, а не в сырых obj_id.
     *     domrf_kn_objects дробит один ЖК на несколько obj_id (разные очереди /
     *     дубли snapshot-строк / гео-кучки безымянных корпусов), из-за чего сырой
     *     знаменатель завышал число «конкурентов» (прод-кейс: 12 obj_id = 5 реальных
     *     комплексов → «2 из 12» вместо честных «2 из 5»). Поля objects_* теперь
     *     считают комплексы; raw_objects_total — старый счёт obj_id для прозрачности.
     */
    LayoutDataQuality: {
      /** Objects With Velocity Data */
      objects_with_velocity_data: number;
      /** Objects Total In Radius */
      objects_total_in_radius: number;
      /** Raw Objects Total */
      raw_objects_total: number;
      /**
       * Groups Matched By Core
       * @default 0
       */
      groups_matched_by_core: number;
      /**
       * Groups With Supply Only
       * @default 0
       */
      groups_with_supply_only: number;
      /** Velocity Coverage Pct */
      velocity_coverage_pct: number;
      /**
       * Confidence
       * @enum {string}
       */
      confidence: "high" | "medium" | "low";
    };
    /**
     * LayoutTzMixRow
     * @description Строка рекомендации unit-mix для ТЗ.
     */
    LayoutTzMixRow: {
      /** Room Bucket */
      room_bucket: string;
      /** Pct */
      pct: number;
      /** Abs Units */
      abs_units: number | null;
      /** Avg Target Area M2 */
      avg_target_area_m2: number | null;
    };
    /**
     * LayoutTzRecommendation
     * @description Рекомендация для ТЗ на проектирование.
     */
    LayoutTzRecommendation: {
      /** Rationale Text */
      rationale_text: string;
      /** Mix */
      mix: components["schemas"]["LayoutTzMixRow"][];
      /** Weighted Avg Price Per M2 Rub */
      weighted_avg_price_per_m2_rub: number | null;
      /** Based On Obj Count */
      based_on_obj_count: number;
      /** Based On Total Deals */
      based_on_total_deals: number;
      /**
       * Data Window Start
       * Format: date
       */
      data_window_start: string;
      /**
       * Data Window End
       * Format: date
       */
      data_window_end: string;
      /**
       * Cap Skipped
       * @default false
       */
      cap_skipped: boolean;
    };
    /**
     * LocationList
     * @description Ответ list-эндпоинта: total + страница строк (зеркало InsightList).
     */
    LocationList: {
      /** Total */
      total: number;
      /** Rows */
      rows: components["schemas"]["LocationOut"][];
    };
    /**
     * LocationOut
     * @description Локация (район) с district-level индексами (#948 Part B, §8.2).
     */
    LocationOut: {
      /** Id */
      id: number;
      /**
       * District Name
       * @description Логический ключ района (8 админ-районов ЕКБ)
       */
      district_name: string;
      /**
       * Region
       * @description Регион (NULL = ЕКБ/Свердл.)
       */
      region?: string | null;
      /**
       * Lon
       * @description Долгота центроида района (WGS-84), None если нет
       */
      lon?: number | null;
      /**
       * Lat
       * @description Широта центроида района (WGS-84), None если нет
       */
      lat?: number | null;
      /**
       * Infra Index
       * @description Инфра-индекс 0..1 (POI района / POI города); None=нет данных
       */
      infra_index?: number | null;
      /**
       * Competition Index
       * @description Индекс конкуренции 0..1 (доступное/затоваренное конкурирующее предложение = overstock; выше = больше конкур. давления; ортогонален demand); None=нет данных
       */
      competition_index?: number | null;
      /**
       * Demand Index
       * @description Индекс спроса 0..1 (saturated velocity); None=нет данных
       */
      demand_index?: number | null;
      /**
       * Future Supply Index
       * @description Индекс будущего предложения 0..1; None=нет данных
       */
      future_supply_index?: number | null;
      /**
       * Indices Computed At
       * @description Когда индексы последний раз пересчитаны (None до первого refresh)
       */
      indices_computed_at?: string | null;
      /**
       * Created At
       * Format: date-time
       */
      created_at: string;
      /**
       * Updated At
       * Format: date-time
       */
      updated_at: string;
    };
    /**
     * MassingProgram
     * @description Stage 2a (#1965) — агрегированная массинг-программа для LIVE-пересчёта экономики.
     *
     *     Контракт POST ``/api/v1/concepts/recompute``: вход — уже СВЁРНУТАЯ программа из
     *     фронтового ``computeModel`` интерактивного 3D-массинга (суммарное пятно × этажность),
     *     без покомпонентной геометрии секций. Эндпоинт синтезирует из неё :class:`TEAP` и
     *     прогоняет готовый ``compute_financial`` → пересчитанная экономика для дебаунс-слайдеров
     *     Stage 2b.
     *
     *     Класс жилья / тип застройки — те же Literal-множества, что у :class:`ConceptInput`
     *     и ``compute_financial`` (single source of truth по допустимым значениям).
     */
    MassingProgram: {
      /**
       * Total Footprint Sqm
       * @description Суммарное пятно застройки всех секций, кв.м (скаляр)
       */
      total_footprint_sqm: number;
      /**
       * Floors
       * @description Этажность программы
       */
      floors: number;
      /**
       * Sections
       * @description Число секций (метаданные программы)
       * @default 1
       */
      sections: number;
      /**
       * Site Area Sqm
       * @description Площадь участка для плотности (FAR)
       */
      site_area_sqm: number;
      /**
       * Housing Class
       * @default comfort
       * @enum {string}
       */
      housing_class: "econom" | "comfort" | "business";
      /**
       * Development Type
       * @default mid_rise
       * @enum {string}
       */
      development_type: "spot" | "mid_rise" | "high_rise";
      /**
       * Land Cost Rub
       * @description Стоимость участка для финмодели (опционально)
       */
      land_cost_rub?: number | null;
      /**
       * Market Price Per Sqm
       * @description Предрезолвленная рыночная цена жилья, руб/кв.м (skip DB lookup)
       */
      market_price_per_sqm?: number | null;
      /**
       * Price Source
       * @description Подлинный источник предрезолвленной цены (forward из financial_estimate)
       */
      price_source?: string | null;
      /**
       * Parcel Centroid Wkt
       * @description WKT-точка центроида участка (WGS84) для DB-резолва цены при fallback
       */
      parcel_centroid_wkt?: string | null;
    };
    /**
     * MassingRecomputeOutput
     * @description Stage 2a (#1965) — результат LIVE-пересчёта: синтезированный ТЭП + финмодель.
     */
    MassingRecomputeOutput: {
      teap: components["schemas"]["TEAP"];
      financial: components["schemas"]["FinancialModel"];
    };
    /**
     * NearbyNetworkZone
     * @description Сетевая охранная зона cad_zouit рядом с участком — позитив-сигнал §3. #2119 C2/C3.
     *
     *     Охранная зона сети = коридор, где физически проходит сеть → «теплотрасса в 24 м,
     *     врезка дешёвая». Зона, ПЕРЕСЕКАЮЩАЯ участок, отдаётся с distance_m=0.
     */
    NearbyNetworkZone: {
      /** Net Kind */
      net_kind: string;
      /** Distance M */
      distance_m: number;
      /** Name By Doc */
      name_by_doc: string | null;
      /** Human Label */
      human_label: string;
    };
    /**
     * ObjectiveConfigUpdateRequest
     * @description PATCH-style — обновляет только переданные поля.
     */
    ObjectiveConfigUpdateRequest: {
      /** Cron Schedule */
      cron_schedule?: string | null;
      /** Groups Csv */
      groups_csv?: string | null;
      /** Use Ddu */
      use_ddu?: boolean | null;
      /** Use Dkp */
      use_dkp?: boolean | null;
      /** Period Months Back */
      period_months_back?: number | null;
      /** Inter Group Delay S */
      inter_group_delay_s?: number | null;
      /** Rate Ms */
      rate_ms?: number | null;
      /** Retries */
      retries?: number | null;
    };
    /**
     * OpportunityParcel
     * @description TIER 4: opportunity ЗУ вблизи участка (auction/scheme/free/future/oopt).
     *
     *     Поля:
     *         layer: тип opportunity — "auction_parcels" | "scheme_parcels" |
     *                "free_parcels" | "future_parcels" | "oopt"
     *         cad_num: кадастровый номер ЗУ (если доступен в NSPD properties)
     *         distance_m: расстояние от centroid анализируемого участка до ЗУ, м
     *         geom_wkt: WKT геометрии ЗУ в EPSG:4326
     */
    OpportunityParcel: {
      /** Layer */
      layer: string;
      /** Cad Num */
      cad_num: string | null;
      /** Distance M */
      distance_m: number | null;
      /** Geom Wkt */
      geom_wkt: string | null;
    };
    /** OwnPlannedProjectCreate */
    OwnPlannedProjectCreate: {
      /**
       * Name
       * @description Название проекта/ЖК
       */
      name: string;
      /**
       * District
       * @description Район (location ref)
       */
      district?: string | null;
      /**
       * Obj Class
       * @description Класс: Стандарт|Комфорт|Бизнес|Премиум
       */
      obj_class?: ("Стандарт" | "Комфорт" | "Бизнес" | "Премиум") | null;
      /**
       * Planned Release Month
       * @description Планируемый месяц выхода в продажу (нормализуется к 1-му числу)
       */
      planned_release_month?: string | null;
      /**
       * Price Min Per M2
       * @description Нижняя граница цены, ₽/м² (≥0)
       */
      price_min_per_m2?: number | null;
      /**
       * Price Max Per M2
       * @description Верхняя граница цены, ₽/м² (≥0)
       */
      price_max_per_m2?: number | null;
      /**
       * Unit Mix
       * @description Квартирография: доли по форматам {"studio":0.3,"1k":0.4,...} (каждая в [0,1])
       */
      unit_mix?: {
        [key: string]: number;
      } | null;
      /**
       * Lon
       * @description Долгота WGS-84 (центроид)
       */
      lon?: number | null;
      /**
       * Lat
       * @description Широта WGS-84 (центроид)
       */
      lat?: number | null;
    };
    /**
     * OwnPlannedProjectList
     * @description Ответ list-эндпоинта: total + страница строк (как insight).
     */
    OwnPlannedProjectList: {
      /** Total */
      total: number;
      /** Limit */
      limit: number;
      /** Offset */
      offset: number;
      /** Rows */
      rows: components["schemas"]["OwnPlannedProjectOut"][];
    };
    /** OwnPlannedProjectOut */
    OwnPlannedProjectOut: {
      /** Id */
      id: number;
      /** Created By */
      created_by: string;
      /** Name */
      name: string;
      /** District */
      district: string | null;
      /** Obj Class */
      obj_class: string | null;
      /** Planned Release Month */
      planned_release_month: string | null;
      /** Price Min Per M2 */
      price_min_per_m2: number | null;
      /** Price Max Per M2 */
      price_max_per_m2: number | null;
      /** Unit Mix */
      unit_mix: {
        [key: string]: number;
      } | null;
      /** Lon */
      lon: number | null;
      /** Lat */
      lat: number | null;
      /**
       * Created At
       * Format: date-time
       */
      created_at: string;
      /**
       * Updated At
       * Format: date-time
       */
      updated_at: string;
    };
    /**
     * OwnPlannedProjectUpdate
     * @description Partial update (PUT) — переданные поля заменяются, отсутствующие не трогаются.
     */
    OwnPlannedProjectUpdate: {
      /** Name */
      name?: string | null;
      /** District */
      district?: string | null;
      /** Obj Class */
      obj_class?: ("Стандарт" | "Комфорт" | "Бизнес" | "Премиум") | null;
      /** Planned Release Month */
      planned_release_month?: string | null;
      /** Price Min Per M2 */
      price_min_per_m2?: number | null;
      /** Price Max Per M2 */
      price_max_per_m2?: number | null;
      /** Unit Mix */
      unit_mix?: {
        [key: string]: number;
      } | null;
      /** Lon */
      lon?: number | null;
      /** Lat */
      lat?: number | null;
    };
    /**
     * ParcelBboxResponse
     * @description Ответ GET /parcels/by-bbox.
     */
    ParcelBboxResponse: {
      /** Parcels */
      parcels: components["schemas"]["ParcelMapMarker"][];
      /** Count */
      count: number;
      /** Limit */
      limit: number;
      /** Bbox Area Km2 */
      bbox_area_km2: number;
    };
    /** ParcelFilter */
    ParcelFilter: {
      /** Vri */
      vri?: string[] | null;
      /** Area Min Sqm */
      area_min_sqm?: number | null;
      /** Area Max Sqm */
      area_max_sqm?: number | null;
      /** Region */
      region?: string | null;
      /** Polygon Geojson */
      polygon_geojson?: {
        [key: string]: unknown;
      } | null;
      /** Text Search */
      text_search?: string | null;
    };
    /**
     * ParcelMapMarker
     * @description Один маркер участка на карте — облегчённый ответ для bbox-запроса.
     *
     *     status берётся из parcel_user_status если передан user_id, иначе null.
     *     last_analysis_date — placeholder до реализации B2 auth.
     */
    ParcelMapMarker: {
      /** Cad Num */
      cad_num: string;
      /** Centroid Lat */
      centroid_lat: number;
      /** Centroid Lon */
      centroid_lon: number;
      /** Area M2 */
      area_m2: number | null;
      /** Land Category */
      land_category: string | null;
      /** Status */
      status: string | null;
      /** Last Analysis Date */
      last_analysis_date: string | null;
    };
    /** ParcelSearchRequest */
    ParcelSearchRequest: {
      filters?: components["schemas"]["ParcelFilter"];
      weights?: components["schemas"]["ScoringWeights"];
      /**
       * Limit
       * @default 50
       */
      limit: number;
    };
    /** ParcelSearchResponse */
    ParcelSearchResponse: {
      /** Items */
      items: components["schemas"]["ParcelSummary"][];
      /** Total */
      total: number;
    };
    /** ParcelSummary */
    ParcelSummary: {
      /** Id */
      id: string;
      /** Cadastral Number */
      cadastral_number: string;
      /** Area Sqm */
      area_sqm: number;
      /** Vri */
      vri: string;
      /** Address */
      address: string | null;
      score: components["schemas"]["ScoreBreakdown"];
    };
    /** PilotRequestInput */
    PilotRequestInput: {
      /** Name */
      name: string;
      /** Phone */
      phone?: string | null;
      /** Email */
      email?: string | null;
      /** Company */
      company?: string | null;
      /** Message */
      message?: string | null;
      /**
       * Source
       * @default landing
       * @enum {string}
       */
      source: "landing" | "analyze_page" | "other";
    };
    /**
     * PoiScoreItem
     * @description Один POI в ranked-ответе.
     */
    PoiScoreItem: {
      /** Name */
      name: string | null;
      /** Category */
      category: string;
      /** Distance M */
      distance_m: number;
      /** Weight */
      weight: number;
      /** Score Contribution */
      score_contribution: number;
      /** Address */
      address: string | null;
    };
    /** PoiScoreResponse */
    PoiScoreResponse: {
      /** Cad Num */
      cad_num: string;
      /** Radius M */
      radius_m: number;
      /** Poi Weighted Score */
      poi_weighted_score: number;
      /** Top Poi */
      top_poi: components["schemas"]["PoiScoreItem"][];
    };
    /**
     * PowerCapacitySummary
     * @description Сводка по электрике: ближайший ЦП с резервом + count по индексу загрузки.
     */
    PowerCapacitySummary: {
      /** Total Power Points */
      total_power_points: number;
      /** By Load Index */
      by_load_index: {
        [key: string]: number;
      };
      nearest_with_reserve:
        components["schemas"]["PowerConnectionPoint"] | null;
    };
    /**
     * PowerConnectionPoint
     * @description Центр питания (ЦП, ПС 35/110 кВ) вблизи участка со свободной мощностью.
     */
    PowerConnectionPoint: {
      /** Name */
      name: string;
      /** Dzo Name */
      dzo_name: string | null;
      /** Voltage Class */
      voltage_class: string | null;
      /** Load Index */
      load_index: string | null;
      /** Installed Capacity Mva */
      installed_capacity_mva: number | null;
      /** Current Load Mva */
      current_load_mva: number | null;
      /** Reserve Mva */
      reserve_mva: number | null;
      /** Reserve Asof */
      reserve_asof: string | null;
      /** Distance M */
      distance_m: number;
      /** Lat */
      lat: number | null;
      /** Lon */
      lon: number | null;
      /** Reserve Note */
      reserve_note?: string | null;
      /** Reserve Unit */
      reserve_unit?: string | null;
      /** District */
      district?: string | null;
    };
    /** RecommendBucket */
    RecommendBucket: {
      /** Bucket */
      bucket: string;
      /** Share Pct */
      share_pct: number;
      /** Deal Count */
      deal_count: number;
      /** Area Avg M2 */
      area_avg_m2: number;
      /** Area Median M2 */
      area_median_m2: number;
      /** Price Median Per M2 */
      price_median_per_m2: number;
      /** Price P25 Per M2 */
      price_p25_per_m2: number;
      /** Price P75 Per M2 */
      price_p75_per_m2: number;
      /** Units Planned */
      units_planned?: number | null;
      /** Revenue Planned Rub */
      revenue_planned_rub?: number | null;
      /** Velocity Per Month */
      velocity_per_month?: number | null;
      /** Months To Sellout */
      months_to_sellout?: number | null;
      /** Elasticity */
      elasticity?: number | null;
      /** Elasticity R2 */
      elasticity_r2?: number | null;
      /** Elasticity N */
      elasticity_n?: number | null;
      /** Elasticity Source */
      elasticity_source?: string | null;
      /** Velocity Source */
      velocity_source?: string | null;
      /**
       * Is Top Success
       * @default false
       */
      is_top_success: boolean;
    };
    /** RecommendComparable */
    RecommendComparable: {
      /** Obj Id */
      obj_id: number;
      /** Comm Name */
      comm_name?: string | null;
      /** Dev Name */
      dev_name?: string | null;
      /** Obj Class */
      obj_class?: string | null;
      /** Flat Count */
      flat_count?: number | null;
      /** Sold Perc */
      sold_perc?: number | null;
      /** Cad Quarter */
      cad_quarter?: string | null;
      /** Lat */
      lat?: number | null;
      /** Lon */
      lon?: number | null;
      /** Buildings N */
      buildings_n?: number | null;
    };
    /** RecommendMixInput */
    RecommendMixInput: {
      /** District Name */
      district_name: string;
      /** Area Total M2 */
      area_total_m2?: number | null;
      /** Target Class */
      target_class?: ("Comfort" | "Comfort+" | "Business" | "Elite") | null;
      /**
       * Months Window
       * @default 12
       */
      months_window: number;
      /**
       * Price Factor
       * @default 1
       */
      price_factor: number;
      /** Target Months */
      target_months?: number | null;
      /** Horizon Months */
      horizon_months?: number | null;
      /** Cad Num */
      cad_num?: string | null;
    };
    /** RecommendMixOutput */
    RecommendMixOutput: {
      /** Scope */
      scope: {
        [key: string]: unknown;
      };
      /** Buckets */
      buckets: components["schemas"]["RecommendBucket"][];
      /** Summary */
      summary: {
        [key: string]: unknown;
      };
      /** Comparables */
      comparables: components["schemas"]["RecommendComparable"][];
    };
    /**
     * RedLine
     * @description TIER 4: красная линия застройки (NSPD layer 879243).
     *
     *     Поля:
     *         geom_wkt: WKT геометрии линии в EPSG:4326
     *         intersection_length_m: длина пересечения линии с участком, м
     *                                (null если только nearby, не intersect)
     *         distance_m: расстояние от ближайшей точки линии до участка, м
     *                     (null если линия пересекает участок)
     *
     *     UI-семантика:
     *         intersection_length_m != null → красная линия ПЕРЕСЕКАЕТ участок (ALERT)
     *         distance_m != null → красная линия рядом (warning)
     */
    RedLine: {
      /** Geom Wkt */
      geom_wkt: string | null;
      /** Intersection Length M */
      intersection_length_m: number | null;
      /** Distance M */
      distance_m: number | null;
    };
    /** ReleaseLockRequest */
    ReleaseLockRequest: {
      /** Region Code */
      region_code: number;
      /** Developers */
      developers?: string[] | null;
    };
    /**
     * ReportBuildResponse
     * @description Ответ POST /{cad}/report — enqueue сборки полного PDF-отчёта (#2259 PR-D).
     *
     *     status="building" (202) — таска поставлена в очередь, PDF собирается в фоне;
     *     status="ready" (200) — готовый кэш (тот же analyze+forecast ран) уже на диске,
     *     качать сразу через /report/download.
     */
    ReportBuildResponse: {
      /**
       * Status
       * @enum {string}
       */
      status: "building" | "ready";
      /** Analyze Run At */
      analyze_run_at?: string | null;
      /** Forecast Run At */
      forecast_run_at?: string | null;
      /** Report Generated At */
      report_generated_at?: string | null;
    };
    /**
     * ReportStatusResponse
     * @description Ответ GET /{cad}/report/status — состояние полного PDF-отчёта (#2259 PR-D).
     *
     *     status: "ready" (метадата-ран report-pdf-1.0 есть И файл на диске),
     *     "building" (есть analyze-ран, но готового отчёта нет — вероятно собирается / ещё не
     *     запускался), "none" (нет даже analyze-рана — отчётировать нечего).
     */
    ReportStatusResponse: {
      /**
       * Status
       * @enum {string}
       */
      status: "ready" | "building" | "none";
      /** Analyze Run At */
      analyze_run_at?: string | null;
      /** Forecast Run At */
      forecast_run_at?: string | null;
      /** Report Generated At */
      report_generated_at?: string | null;
    };
    /** RevokeRequest */
    RevokeRequest: {
      /** Task Id */
      task_id: string;
      /**
       * Terminate
       * @default false
       */
      terminate: boolean;
    };
    /**
     * RiskZone
     * @description Одна риск-зона НСПД (TIER 3), пересекающая участок.
     */
    RiskZone: {
      /** Layer */
      layer: string;
      /** Subtype */
      subtype: string | null;
      /** Geom Wkt */
      geom_wkt: string | null;
      /** Intersection Area Sqm */
      intersection_area_sqm: number | null;
    };
    /** ScoreBreakdown */
    ScoreBreakdown: {
      /** Total */
      total: number;
      /** Distance To Center */
      distance_to_center: number;
      /** Poi Density */
      poi_density: number;
      /** Neighborhood Price */
      neighborhood_price: number;
    };
    /** ScoringWeights */
    ScoringWeights: {
      /**
       * Distance To Center
       * @default 0.4
       */
      distance_to_center: number;
      /**
       * Poi Density
       * @default 0.3
       */
      poi_density: number;
      /**
       * Neighborhood Price
       * @default 0.3
       */
      neighborhood_price: number;
    };
    /**
     * SupplyOnlyLayoutRow
     * @description Строка блока «по предложению» (#2177 шаг 3).
     *
     *     Структура текущего предложения (комнатность × площадь × цена) для комплексов,
     *     которые сматчены на objective project_name по ЯДРУ имени, но у которых НЕТ
     *     сделок (velocity). Источник — objective_lots (снапшот предложения). Это НЕ
     *     velocity-ранжир: темпа продаж здесь нет, только структура остатков в продаже.
     */
    SupplyOnlyLayoutRow: {
      /** Project Name */
      project_name: string;
      /** Room Bucket */
      room_bucket: string;
      /** Area Bin */
      area_bin: string;
      /** Lots Count */
      lots_count: number;
      /** Median Price M2 */
      median_price_m2: number | null;
      /** Median Area M2 */
      median_area_m2: number | null;
      /**
       * Source
       * @default objective_lots
       */
      source: string;
    };
    /**
     * TEAP
     * @description Технико-экономические показатели.
     */
    TEAP: {
      /** Built Area Sqm */
      built_area_sqm: number;
      /** Total Floor Area Sqm */
      total_floor_area_sqm: number;
      /**
       * Office Area Sqm
       * @default 0
       */
      office_area_sqm: number;
      /** Residential Area Sqm */
      residential_area_sqm: number;
      /** Apartments Count */
      apartments_count: number;
      /** Density */
      density: number;
      /** Parking Spaces */
      parking_spaces: number;
    };
    /**
     * TopLayoutRow
     * @description Одна строка top-planirovok ranking'а.
     */
    TopLayoutRow: {
      /** Rank */
      rank: number;
      /** Room Bucket */
      room_bucket: string;
      /** Area Bin */
      area_bin: string;
      /** Signature */
      signature: string;
      /** Competitor Obj Ids */
      competitor_obj_ids: number[];
      /** Competitor Count */
      competitor_count: number;
      /** Total Sold In Window */
      total_sold_in_window: number;
      /** Velocity Per Month */
      velocity_per_month: number;
      /** Avg Price Per M2 Rub */
      avg_price_per_m2_rub: number | null;
      /** Avg Area M2 */
      avg_area_m2: number;
      /** Supply Units In Radius */
      supply_units_in_radius: number;
      /** Sold Pct Of Supply */
      sold_pct_of_supply: number | null;
      /** Is Oversold */
      is_oversold: boolean;
    };
    /** TradeInEstimateInput */
    TradeInEstimateInput: {
      /** Address */
      address: string;
      /** Area M2 */
      area_m2: number;
      /** Rooms */
      rooms: number;
      /** Floor */
      floor: number;
      /** Total Floors */
      total_floors: number;
      /** Year Built */
      year_built?: number | null;
      /** House Type */
      house_type?:
        ("panel" | "brick" | "monolith" | "monolith_brick" | "other") | null;
      /** Repair State */
      repair_state?:
        ("needs_repair" | "standard" | "good" | "excellent") | null;
      /** Has Balcony */
      has_balcony?: boolean | null;
    };
    /** TriggerEkburgPermitsRequest */
    TriggerEkburgPermitsRequest: {
      /**
       * Year
       * @description Если None — refresh_all (все 5 лет 2022-2026). Иначе refresh_year(year) для конкретного года.
       */
      year?: number | null;
    };
    /** TriggerKnCatalogFlatsRequest */
    TriggerKnCatalogFlatsRequest: {
      /**
       * Region Code
       * @default 66
       */
      region_code: number;
      /** Max Flats */
      max_flats?: number | null;
      /**
       * Force
       * @description True — игнорировать фильтр свежести ('catalog_updated_at свежий') и грузить ВСЕ квартиры последнего snapshot с непустым catalog_url_hash ('Загрузить все'). По умолчанию пропускает то, что скраплено < 30 дней назад.
       * @default false
       */
      force: boolean;
      /**
       * I Understand Waf Risk
       * @description Обязателен (True) для запуска. Guard против случайного re-trigger'а после DOM.РФ WAF hard-ban 2026-05-24 (#2443) — этот scraper ездит по тому же /сервисы/* BrowserSession path family, что и catalog-objects.
       * @default false
       */
      i_understand_waf_risk: boolean;
    };
    /** TriggerKnCatalogObjectsRequest */
    TriggerKnCatalogObjectsRequest: {
      /**
       * Region Code
       * @default 66
       */
      region_code: number;
      /** Max Objects */
      max_objects?: number | null;
      /**
       * Force
       * @description True — игнорировать фильтр 'уже сегодня обновлён' и грузить ВСЕ объекты последнего snapshot ('Загрузить все'). По умолчанию пропускает то, что уже скраплено сегодня.
       * @default false
       */
      force: boolean;
      /**
       * I Understand Waf Risk
       * @description Обязателен (True) для запуска. Guard против случайного re-trigger'а после DOM.РФ WAF hard-ban 2026-05-24 (#2443) — этот scraper бьёт по тому же /сервисы/* BrowserSession path family, что вызвал бан.
       * @default false
       */
      i_understand_waf_risk: boolean;
    };
    /** TriggerKnRequest */
    TriggerKnRequest: {
      /** Region Code */
      region_code: number;
      /** Developers */
      developers?: string[] | null;
      /**
       * Fetch Flats
       * @default true
       */
      fetch_flats: boolean;
      /**
       * Extras
       * @default true
       */
      extras: boolean;
      /**
       * Download Photos
       * @default false
       */
      download_photos: boolean;
      /**
       * Force
       * @default false
       */
      force: boolean;
    };
    /** TriggerObjectiveEtlRequest */
    TriggerObjectiveEtlRequest: {
      /**
       * Sqlite Path
       * @description Override settings.objective_anton_sqlite_path (abs file path)
       */
      sqlite_path?: string | null;
    };
    /**
     * TriggerObjectiveSyncRequest
     * @description Ручной триггер нашего sync_all_groups (платный API Объектива).
     */
    TriggerObjectiveSyncRequest: {
      /**
       * Groups
       * @description Override settings.objective_sync_groups (csv). Если None — берёт дефолт из settings.
       */
      groups?: string[] | null;
    };
    /**
     * TriggerZoneRegulationsBackfillRequest
     * @description Параметры ручного backfill ПЗЗ-регламента терзон ЕКБ (эпик #1881).
     */
    TriggerZoneRegulationsBackfillRequest: {
      /**
       * Limit
       * @description Максимум уникальных незакэшированных зон к фетчу (None = все). Smoke-тест.
       */
      limit?: number | null;
      /**
       * Rate Delay S
       * @description Пауза (сек) между live-fetch'ами зон — вежливость к геопорталу.
       * @default 1
       */
      rate_delay_s: number;
    };
    /**
     * UserScope
     * @description Возвращается /me — фронт может использовать allowed_paths для UI gating.
     */
    UserScope: {
      /** Username */
      username: string;
      /**
       * Role
       * @enum {string}
       */
      role: "admin" | "pilot" | "analyst";
      /** Allowed Paths */
      allowed_paths: string[];
      /** Deny Paths */
      deny_paths: string[];
    };
    /** UtilityInfrastructureFeature */
    UtilityInfrastructureFeature: {
      /** Osm Id */
      osm_id: number;
      /** Osm Type */
      osm_type: string;
      /** Infrastructure Kind */
      infrastructure_kind: string;
      /** Name */
      name: string | null;
      /** Source Tag */
      source_tag: string | null;
      /** Distance M */
      distance_m: number;
      /** Geometry Geojson */
      geometry_geojson: {
        [key: string]: unknown;
      };
      /** Characteristics */
      characteristics?: string | null;
    };
    /** UtilityInfrastructureResponse */
    UtilityInfrastructureResponse: {
      /** Features */
      features: components["schemas"]["UtilityInfrastructureFeature"][];
      summary: components["schemas"]["UtilityInfrastructureSummary"];
    };
    /** UtilityInfrastructureSummary */
    UtilityInfrastructureSummary: {
      /** Total Features */
      total_features: number;
      /** Nearest Distance M */
      nearest_distance_m: number | null;
      /** Nearest By Kind */
      nearest_by_kind: {
        [key: string]: number | null;
      };
      /**
       * Features Truncated
       * @default false
       */
      features_truncated: boolean;
    };
    /** ValidationError */
    ValidationError: {
      /** Location */
      loc: (string | number)[];
      /** Message */
      msg: string;
      /** Error Type */
      type: string;
      /** Input */
      input?: unknown;
      /** Context */
      ctx?: Record<string, never>;
    };
    /**
     * WaterCapacityRow
     * @description Строка резерва ЦСВ/ЦСК Водоканала (city-level) за последний период.
     */
    WaterCapacityRow: {
      /** System Kind */
      system_kind: string;
      /** System Name */
      system_name: string;
      /** Reserve Thousand M3 Day */
      reserve_thousand_m3_day: number | null;
      /** Note */
      note: string | null;
      /** Period */
      period: string | null;
    };
    /** WeightProfile */
    WeightProfile: {
      /** Profile Name */
      profile_name: string;
      /** Weights */
      weights?: {
        [key: string]: number;
      };
      /**
       * Is Default
       * @default false
       */
      is_default: boolean;
      /** Description */
      description?: string | null;
      /** Id */
      id: number;
      /** User Id */
      user_id: string;
      /**
       * Created At
       * Format: date-time
       */
      created_at: string;
      /**
       * Updated At
       * Format: date-time
       */
      updated_at: string;
    };
    /** WeightProfileCreate */
    WeightProfileCreate: {
      /** Profile Name */
      profile_name: string;
      /** Weights */
      weights?: {
        [key: string]: number;
      };
      /**
       * Is Default
       * @default false
       */
      is_default: boolean;
      /** Description */
      description?: string | null;
      /** User Id */
      user_id: string;
    };
    /** WeightProfileUpdate */
    WeightProfileUpdate: {
      /** Profile Name */
      profile_name?: string | null;
      /** Weights */
      weights?: {
        [key: string]: number;
      } | null;
      /** Is Default */
      is_default?: boolean | null;
      /** Description */
      description?: string | null;
    };
    /** ZouitOverlap */
    ZouitOverlap: {
      /** Reg Numb Border */
      reg_numb_border: string | null;
      /** Type Zone */
      type_zone: string | null;
      /** Subcategory */
      subcategory: number | null;
      /** Intersects Parcel */
      intersects_parcel: boolean;
      /** Geometry Geojson */
      geometry_geojson: {
        [key: string]: unknown;
      };
      /** Raw Props */
      raw_props: {
        [key: string]: unknown;
      };
      /** Source */
      source: string;
    };
  };
  responses: never;
  parameters: never;
  requestBodies: never;
  headers: never;
  pathItems: never;
}
export type $defs = Record<string, never>;
export interface operations {
  list_house_types_api_v1_concepts_house_types_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HouseTypeCatalog"];
        };
      };
    };
  };
  create_concept_api_v1_concepts_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["ConceptInput"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["ConceptOutput"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  recompute_massing_api_v1_concepts_recompute_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["MassingProgram"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["MassingRecomputeOutput"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  ask_api_v1_chat_ask_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["ChatAskRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["ChatAskResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcels_by_bbox_api_v1_parcels_by_bbox_get: {
    parameters: {
      query: {
        /** @description Южная граница bbox */
        min_lat: number;
        /** @description Западная граница bbox */
        min_lon: number;
        /** @description Северная граница bbox */
        max_lat: number;
        /** @description Восточная граница bbox */
        max_lon: number;
        limit?: number;
        /** @description user_id для overlay статуса */
        user_id?: string | null;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["ParcelBboxResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  search_parcels_api_v1_parcels_search_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["ParcelSearchRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["ParcelSearchResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_analysis_run_api_v1_parcels_runs__run_id__get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        run_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["AnalysisRunDetail"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_analysis_runs_api_v1_parcels__cad_num__runs_get: {
    parameters: {
      query?: {
        /** @description Сколько недавних ранов вернуть (newest-first) */
        limit?: number;
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["AnalysisRunListResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_fetch_status_api_v1_parcels__cad_num__fetch_status_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcel_forecast_api_v1_parcels__cad_num__forecast_get: {
    parameters: {
      query?: never;
      header?: {
        /** @description Идентичность из Caddy basic_auth (#994, nullable, read-only здесь) */
        "X-Authenticated-User"?: string | null;
      };
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  export_parcel_forecast_api_v1_parcels__cad_num__forecast_export_get: {
    parameters: {
      query?: {
        /** @description Формат выгрузки: md (Markdown) | json (сырой отчёт) | tg (сводка) | docx (Word-документ) | pptx (презентация) | pdf (PDF-отчёт) */
        format?: "md" | "json" | "tg" | "docx" | "pptx" | "pdf";
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": unknown;
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  build_parcel_report_api_v1_parcels__cad_num__report_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["ReportBuildResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  parcel_report_status_api_v1_parcels__cad_num__report_status_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["ReportStatusResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  download_parcel_report_api_v1_parcels__cad_num__report_download_get: {
    parameters: {
      query?: {
        /** @description Формат файла: pdf (default) | docx (Word-документ, #2259 PR-F) */
        format?: "pdf" | "docx";
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": unknown;
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  analyze_parcel_api_v1_parcels__cad_num__analyze_post: {
    parameters: {
      query?: {
        /** @description Переопределить веса POI через конкретный weight profile */
        profile_id?: number | null;
        /** @description user_id для fallback на default-профиль пользователя */
        profile_user_id?: string | null;
        /** @description Горизонт прогноза, мес (#995, ТЗ §12.1): один из {6, 12, 18, 24} */
        horizon?: number;
      };
      header?: {
        /** @description Session ID пользователя для custom POI scoring (#254) */
        "x-session-id"?: string | null;
        /** @description Идентичность из Caddy basic_auth → created_by рана (#994, nullable) */
        "X-Authenticated-User"?: string | null;
      };
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: {
      content: {
        "application/json": components["schemas"]["AnalyzeRequest"] | null;
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["AnalyzeResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcel_connection_points_api_v1_parcels__cad_num__connection_points_get: {
    parameters: {
      query?: {
        radius_m?: number;
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["ConnectionPointsResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcel_utility_infrastructure_api_v1_parcels__cad_num__utility_infrastructure_get: {
    parameters: {
      query?: {
        radius_m?: number;
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["UtilityInfrastructureResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcel_connection_capacity_api_v1_parcels__cad_num__connection_capacity_get: {
    parameters: {
      query?: {
        radius_m?: number;
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["ConnectionCapacityResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcel_neighbor_buildings_api_v1_parcels__cad_num__neighbor_buildings_get: {
    parameters: {
      query?: {
        radius_m?: number;
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_isochrones_api_v1_parcels__cad_num__isochrones_get: {
    parameters: {
      query?: {
        mode?: string;
        times_min?: number[];
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_poi_score_api_v1_parcels__cad_num__poi_score_get: {
    parameters: {
      query?: {
        radius_m?: number;
        decay?: string;
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["PoiScoreResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcel_competitors_api_v1_parcels__cad_num__competitors_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["CompetitorsRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["CompetitorsResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcel_competitors_parking_api_v1_parcels__cad_num__competitors_parking_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["CompetitorsRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["CompetitorsParkingResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcel_best_layouts_api_v1_parcels__cad_num__best_layouts_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["BestLayoutsRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["BestLayoutsResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_parcel_best_layouts_pdf_api_v1_parcels__cad_num__best_layouts_pdf_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["BestLayoutsRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": unknown;
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  parcel_snapshot_pdf_api_v1_parcels__cad_num__snapshot_pdf_get: {
    parameters: {
      query?: {
        /** @description Скрыть конкурентов этих застройщиков (dev_name) из блока «Конкуренты». Несколько — через запятую. Регистронезависимо. Пример: exclude_dev=Практика */
        exclude_dev?: string | null;
      };
      header?: never;
      path: {
        cad_num: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": unknown;
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  sverdl_market_pulse_api_v1_analytics_sverdl_market_pulse_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
    };
  };
  sverdl_quartirography_api_v1_analytics_sverdl_quartirography_get: {
    parameters: {
      query?: {
        source?: "portfolio" | "deals";
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  sverdl_pipeline_api_v1_analytics_sverdl_pipeline_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
    };
  };
  sverdl_districts_api_v1_analytics_sverdl_districts_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
    };
  };
  sverdl_yandex_listings_api_v1_analytics_sverdl_yandex_listings_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  developers_top_api_v1_analytics_developers_top_get: {
    parameters: {
      query?: {
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  developers_history_api_v1_analytics_developers_history_get: {
    parameters: {
      query: {
        ids: string;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  developer_detail_api_v1_analytics_developers__developer_id__get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        developer_id: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  developer_portfolio_api_v1_analytics_developers__developer_id__portfolio_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        developer_id: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_sale_graph_api_v1_analytics_object__obj_id__sale_graph_get: {
    parameters: {
      query?: {
        type?: string | null;
      };
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_sales_agg_api_v1_analytics_object__obj_id__sales_agg_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_infrastructure_api_v1_analytics_object__obj_id__infrastructure_get: {
    parameters: {
      query?: {
        category?: string | null;
        max_distance?: number;
      };
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_photos_api_v1_analytics_object__obj_id__photos_get: {
    parameters: {
      query?: {
        limit?: number;
      };
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_detail_api_v1_analytics_object__obj_id__get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_full_detail_api_v1_analytics_object__obj_id__full_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_quartirography_api_v1_analytics_object__obj_id__quartirography_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_checks_api_v1_analytics_object__obj_id__checks_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_documents_api_v1_analytics_object__obj_id__documents_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  object_buildings_api_v1_analytics_object__obj_id__buildings_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        obj_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["ComplexBuilding"][];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  velocity_alerts_api_v1_analytics_velocity_alerts_get: {
    parameters: {
      query?: {
        region_code?: number;
        lookback_months?: number;
        min_zscore?: number;
        min_drop_pct?: number;
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  prinzip_insights_api_v1_analytics_prinzip_insights_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  prinzip_districts_api_v1_analytics_prinzip_districts_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
    };
  };
  prinzip_objects_api_v1_analytics_prinzip_objects_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
    };
  };
  recommend_mix_api_v1_analytics_recommend_mix_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["RecommendMixInput"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["RecommendMixOutput"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  ddu_indicator_api_v1_market_ddu_indicator_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["DduIndicatorRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["DduIndicatorResponse"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  trigger_kn_sweep_api_v1_admin_scrape_kn_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["TriggerKnRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  queue_status_api_v1_admin_scrape_queue_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  release_lock_api_v1_admin_scrape_release_lock_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["ReleaseLockRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  revoke_task_api_v1_admin_scrape_revoke_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["RevokeRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_failures_api_v1_admin_scrape_failures_get: {
    parameters: {
      query?: {
        run_id?: number | null;
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_logs_api_v1_admin_scrape_logs_get: {
    parameters: {
      query?: {
        run_id?: number | null;
        since_id?: number | null;
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  trigger_noise_sync_api_v1_admin_scrape_noise_sync_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  trigger_harvest_quarter_api_v1_admin_scrape_nspd_harvest_quarter_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["HarvestQuarterRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  trigger_pzz_sync_api_v1_admin_scrape_pzz_sync_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  trigger_zone_regulations_backfill_api_v1_admin_scrape_zone_regulations_backfill_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["TriggerZoneRegulationsBackfillRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  trigger_poi_sync_api_v1_admin_scrape_poi_sync_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  trigger_gisogd_permits_sync_api_v1_admin_scrape_gisogd_permits_sync_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  trigger_objective_etl_api_v1_admin_scrape_objective_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["TriggerObjectiveEtlRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_objective_runs_api_v1_admin_scrape_objective_runs_get: {
    parameters: {
      query?: {
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  trigger_objective_sync_our_api_v1_admin_scrape_objective_sync_our_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["TriggerObjectiveSyncRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_objective_config_api_v1_admin_scrape_objective_config_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  update_objective_config_api_v1_admin_scrape_objective_config_put: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["ObjectiveConfigUpdateRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  objective_coverage_api_v1_admin_scrape_objective_coverage_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  list_geo_jobs_api_v1_admin_scrape_geo_jobs_get: {
    parameters: {
      query?: {
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  enqueue_geo_job_api_v1_admin_scrape_geo_jobs_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["EnqueueGeoJobRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  bulk_enqueue_geo_api_v1_admin_scrape_geo_bulk_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["BulkGeoEnqueueRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  cancel_geo_job_api_v1_admin_scrape_geo_jobs__job_id__cancel_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        job_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  resume_geo_job_api_v1_admin_scrape_geo_jobs__job_id__resume_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        job_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  trigger_newbuilding_crossload_api_v1_admin_scrape_newbuilding_crossload_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  list_all_runs_api_v1_admin_scrape_all_runs_get: {
    parameters: {
      query?: {
        scraper_type?: string | null;
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_all_logs_api_v1_admin_scrape_all_logs_get: {
    parameters: {
      query?: {
        scraper_type?: string | null;
        run_id?: number | null;
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  scrape_freshness_api_v1_admin_scrape_freshness_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
    };
  };
  list_runs_api_v1_admin_scrape_runs_get: {
    parameters: {
      query?: {
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  trigger_ekburg_permits_api_v1_admin_scrape_ekburg_permits_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["TriggerEkburgPermitsRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  trigger_kn_catalog_objects_api_v1_admin_scrape_kn_catalog_objects_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["TriggerKnCatalogObjectsRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  trigger_kn_catalog_flats_api_v1_admin_scrape_kn_catalog_flats_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["TriggerKnCatalogFlatsRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_job_settings_api_v1_admin_jobs_settings_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["JobSettingRead"][];
        };
      };
    };
  };
  get_job_setting_api_v1_admin_jobs_settings__job_type__get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        job_type: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["JobSettingRead"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  update_job_setting_api_v1_admin_jobs_settings__job_type__put: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        job_type: string;
      };
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["JobSettingUpdate"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["JobSettingRead"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_leads_api_v1_admin_leads__get: {
    parameters: {
      query?: {
        status?: string | null;
        source?: string | null;
        converted?: boolean | null;
        obj_id?: number | null;
        search?: string | null;
        /** @description YYYY-MM-DD */
        date_from?: string | null;
        /** @description YYYY-MM-DD */
        date_to?: string | null;
        sort?: "created_desc" | "created_asc";
        limit?: number;
        offset?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  leads_stats_api_v1_admin_leads_stats_get: {
    parameters: {
      query?: {
        months?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  funnel_monthly_api_v1_admin_leads_funnel_monthly_get: {
    parameters: {
      query?: {
        months?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  funnel_by_source_api_v1_admin_leads_funnel_by_source_get: {
    parameters: {
      query?: {
        months?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  funnel_by_object_api_v1_admin_leads_funnel_by_object_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
    };
  };
  list_sources_api_v1_admin_leads_sources_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": string[];
        };
      };
    };
  };
  list_user_profiles_api_v1_admin_site_finder_weight_profiles_get: {
    parameters: {
      query: {
        /** @description user_id для фильтра профилей */
        user_id: string;
        /** @description Включить системные preset-профили (Эконом/Комфорт/Бизнес) */
        include_system?: boolean;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["WeightProfile"][];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  create_user_profile_api_v1_admin_site_finder_weight_profiles_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["WeightProfileCreate"];
      };
    };
    responses: {
      /** @description Successful Response */
      201: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["WeightProfile"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_user_profile_api_v1_admin_site_finder_weight_profiles__profile_id__get: {
    parameters: {
      query: {
        /** @description Владелец профиля */
        user_id: string;
      };
      header?: never;
      path: {
        profile_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["WeightProfile"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  update_user_profile_api_v1_admin_site_finder_weight_profiles__profile_id__put: {
    parameters: {
      query: {
        /** @description Владелец профиля */
        user_id: string;
      };
      header?: never;
      path: {
        profile_id: number;
      };
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["WeightProfileUpdate"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["WeightProfile"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  delete_user_profile_api_v1_admin_site_finder_weight_profiles__profile_id__delete: {
    parameters: {
      query: {
        /** @description Владелец профиля */
        user_id: string;
      };
      header?: never;
      path: {
        profile_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      204: {
        headers: {
          [name: string]: unknown;
        };
        content?: never;
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_photo_api_v1_photos__obj_id___file_id__get: {
    parameters: {
      query?: {
        size?: "thumb" | "full";
      };
      header?: never;
      path: {
        obj_id: number;
        file_id: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": unknown;
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_pois_api_v1_custom_pois_get: {
    parameters: {
      query?: {
        /** @description Фильтр по кадастровому номеру участка (возвращает global + parcel POI) */
        parcel_cad?: string | null;
      };
      header?: {
        "x-session-id"?: string | null;
      };
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["CustomPoiOut"][];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  create_poi_api_v1_custom_pois_post: {
    parameters: {
      query?: never;
      header?: {
        "x-session-id"?: string | null;
      };
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["CustomPoiCreate"];
      };
    };
    responses: {
      /** @description Successful Response */
      201: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["CustomPoiOut"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  delete_poi_api_v1_custom_pois__poi_id__delete: {
    parameters: {
      query?: never;
      header?: {
        "x-session-id"?: string | null;
      };
      path: {
        poi_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      204: {
        headers: {
          [name: string]: unknown;
        };
        content?: never;
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  patch_poi_api_v1_custom_pois__poi_id__patch: {
    parameters: {
      query?: never;
      header?: {
        "x-session-id"?: string | null;
      };
      path: {
        poi_id: number;
      };
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["CustomPoiUpdate"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["CustomPoiOut"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_locations_endpoint_api_v1_locations_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["LocationList"];
        };
      };
    };
  };
  get_location_endpoint_api_v1_locations__district_name__get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        district_name: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["LocationOut"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_insights_endpoint_api_v1_insights_get: {
    parameters: {
      query?: {
        /** @description Фильтр по району */
        district?: string | null;
        /** @description Фильтр по кадастровому номеру */
        cad_num?: string | null;
        /** @description Фильтр по категории */
        category?:
          ("competition" | "permitting" | "demand" | "risk" | "other") | null;
        /** @description Фильтр по пометке «непублично» */
        is_confidential?: boolean | null;
        /** @description Фильтр по автору */
        created_by?: string | null;
        limit?: number;
        offset?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["InsightList"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  create_insight_endpoint_api_v1_insights_post: {
    parameters: {
      query?: never;
      header?: {
        "x-authenticated-user"?: string | null;
      };
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["InsightCreate"];
      };
    };
    responses: {
      /** @description Successful Response */
      201: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["InsightOut"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_insight_endpoint_api_v1_insights__insight_id__get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        insight_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["InsightOut"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  update_insight_endpoint_api_v1_insights__insight_id__put: {
    parameters: {
      query?: never;
      header?: {
        "x-authenticated-user"?: string | null;
      };
      path: {
        insight_id: number;
      };
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["InsightUpdate"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["InsightOut"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  delete_insight_endpoint_api_v1_insights__insight_id__delete: {
    parameters: {
      query?: never;
      header?: {
        "x-authenticated-user"?: string | null;
      };
      path: {
        insight_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      204: {
        headers: {
          [name: string]: unknown;
        };
        content?: never;
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_own_projects_endpoint_api_v1_own_projects_get: {
    parameters: {
      query?: {
        /** @description Фильтр по району */
        district?: string | null;
        /** @description Фильтр по классу */
        obj_class?: ("Стандарт" | "Комфорт" | "Бизнес" | "Премиум") | null;
        /** @description Фильтр по автору */
        created_by?: string | null;
        limit?: number;
        offset?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["OwnPlannedProjectList"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  create_own_project_endpoint_api_v1_own_projects_post: {
    parameters: {
      query?: never;
      header?: {
        "x-authenticated-user"?: string | null;
      };
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["OwnPlannedProjectCreate"];
      };
    };
    responses: {
      /** @description Successful Response */
      201: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["OwnPlannedProjectOut"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_own_project_endpoint_api_v1_own_projects__project_id__get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        project_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["OwnPlannedProjectOut"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  update_own_project_endpoint_api_v1_own_projects__project_id__put: {
    parameters: {
      query?: never;
      header?: {
        "x-authenticated-user"?: string | null;
      };
      path: {
        project_id: number;
      };
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["OwnPlannedProjectUpdate"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["OwnPlannedProjectOut"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  delete_own_project_endpoint_api_v1_own_projects__project_id__delete: {
    parameters: {
      query?: never;
      header?: {
        "x-authenticated-user"?: string | null;
      };
      path: {
        project_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      204: {
        headers: {
          [name: string]: unknown;
        };
        content?: never;
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  list_cadastre_jobs_api_v1_admin_cadastre_jobs_get: {
    parameters: {
      query?: {
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          }[];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  create_cadastre_job_api_v1_admin_cadastre_jobs_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["CreateCadastreJobRequest"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_cadastre_job_api_v1_admin_cadastre_jobs__job_id__get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        job_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  cancel_cadastre_job_api_v1_admin_cadastre_jobs__job_id__cancel_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        job_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  resume_cadastre_job_api_v1_admin_cadastre_jobs__job_id__resume_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        job_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  run_objective_backfill_api_v1_admin_etl_objective_backfill_post: {
    parameters: {
      query?: {
        /** @description Preview без insertions */
        dry_run?: boolean;
        /** @description REFRESH mv_layout_velocity после backfill */
        refresh_mv?: boolean;
        /** @description v2 mode: threshold=0.80, match_method='fuzzy_v2'. Запускать после v1 run — только для unmapped объектов. */
        v2?: boolean;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  run_objective_core_backfill_api_v1_admin_etl_objective_core_backfill_post: {
    parameters: {
      query?: {
        /** @description Preview без insertions (default True) */
        dry_run?: boolean;
        /** @description REFRESH mv_layout_velocity после apply */
        refresh_mv?: boolean;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  run_nspd_denorm_backfill_api_v1_admin_etl_nspd_denorm_backfill_post: {
    parameters: {
      query?: {
        /** @description Максимум кварталов для обработки (None = все) */
        limit?: number | null;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_mapping_review_api_v1_admin_etl_mapping_review_get: {
    parameters: {
      query?: {
        /** @description Только is_reviewed=false (авто-матчи без ревью) */
        only_unreviewed?: boolean;
        /** @description Строк на странице */
        limit?: number;
        /** @description Смещение страницы */
        offset?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  approve_mapping_review_api_v1_admin_etl_mapping_review__mapping_id__approve_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        mapping_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  reject_mapping_review_api_v1_admin_etl_mapping_review__mapping_id__reject_post: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        mapping_id: number;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  estimate_api_v1_trade_in_estimate_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["TradeInEstimateInput"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["AggregatedEstimate"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_estimate_api_v1_trade_in_estimate__estimate_id__get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        estimate_id: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["AggregatedEstimate"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  estimate_pdf_api_v1_trade_in_estimate__estimate_id__pdf_get: {
    parameters: {
      query?: never;
      header?: never;
      path: {
        estimate_id: string;
      };
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": unknown;
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  landing_stats_api_v1_landing_stats_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["LandingStatsOut"];
        };
      };
    };
  };
  create_pilot_request_api_v1_pilot_request_post: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody: {
      content: {
        "application/json": components["schemas"]["PilotRequestInput"];
      };
    };
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  get_recent_parcels_api_v1_users_me_recent_parcels_get: {
    parameters: {
      query?: {
        limit?: number;
      };
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: unknown;
          };
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  me_api_v1_me_get: {
    parameters: {
      query?: never;
      header?: {
        "X-Authenticated-User"?: string | null;
      };
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["UserScope"];
        };
      };
      /** @description Validation Error */
      422: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": components["schemas"]["HTTPValidationError"];
        };
      };
    };
  };
  ping_api_v1_ping_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: boolean;
          };
        };
      };
    };
  };
  health_health_get: {
    parameters: {
      query?: never;
      header?: never;
      path?: never;
      cookie?: never;
    };
    requestBody?: never;
    responses: {
      /** @description Successful Response */
      200: {
        headers: {
          [name: string]: unknown;
        };
        content: {
          "application/json": {
            [key: string]: string;
          };
        };
      };
    };
  };
}
