454 lines
298 KiB
JSON
454 lines
298 KiB
JSON
{"type":"_aim","source":"mcp-knowledge-graph"}
|
||
{"type":"entity","name":"Project_GenDesign","entityType":"project","observations":["Стартап: AI-подбор земельных участков (Site Finder) + автоматическая генерация концепций застройки (Generative Design) для девелоперов РФ","Two-in-one воронка: от инвест-критериев → найденный участок → концепт застройки → финансовая модель","Конкуренты: rTIM (только концепт-стадия, нет site-selection), TestFit (нет РФ-данных)","Целевая аудитория: инвестдепартаменты + архитектурно-проектные отделы региональных девелоперов","Фаза 0 — Discovery MVP, апрель–июнь 2026 (3 месяца)","Бюджет Фазы 0: 0,9–1,2 млн ₽","Корневой репозиторий: C:\\Users\\user\\source\\repos\\gendesign","Документы хранятся в docs/ внутри репозитория"]}
|
||
{"type":"entity","name":"TechStack_v2.2","entityType":"tech_stack","observations":["Решение зафиксировано в апреле 2026: переход с .NET на Python для Discovery MVP","Backend: Python 3.12, FastAPI 0.115+, SQLAlchemy 2.0, GeoAlchemy2, Pydantic v2, Alembic, Celery + Redis, httpx","Геометрия: Shapely 2.0, GeoPandas 1.0, Pyproj (проекции WGS84 ↔ UTM ↔ МСК-66 для Свердловской обл.), Rasterio","ML: XGBoost (скоринг участков), scikit-learn, pandas, NumPy","База данных: PostgreSQL 16 + PostGIS 3.4, Redis 7","Frontend: Next.js 15, React 19, TypeScript 5, Tailwind CSS 4, shadcn/ui, TanStack Query, Mapbox GL JS или Leaflet","Экспорт: WeasyPrint (PDF), ezdxf (DXF), openpyxl (Excel)","Инфра: Yandex Cloud или VK Cloud, Docker, GitHub Actions, Sentry","Dev tools: uv (зависимости), ruff (линтер+форматтер), mypy (типизация), pytest"]}
|
||
{"type":"entity","name":"NorthStar_DiscoveryMVP","entityType":"goal","observations":["К концу месяца 3 (июнь 2026): 3 платящих пилотных клиента, ≥30 тыс. ₽/мес каждый","Заявка в реестр российского ПО подана","Це́ль: получить право пройти в Раунд А на 20–25 млн ₽","Acceptance criteria разбиты на 3 блока: функционально / бизнесово / технически","Правило перехода: 3/3 → Раунд А; 2/3 → продление Фазы 0 на 1–2 мес.; 1/3 или меньше → стоп проекта","В v2.2 цель = 3 пилота; в v2.1 (бизнес-план) указано 4 пилота — расхождение, требует синхронизации в пользу 3"]}
|
||
{"type":"entity","name":"Phase0_DiscoveryMVP","entityType":"phase","observations":["Discovery MVP, месяцы 1–3 после старта","Пилотный регион: Свердловская обл. (Екатеринбург, ПЗЗ Екатеринбурга, МСК-66)","Месяц 1 цели: ООО зарегистрировано, прототип Site Finder с 1000 участков, 50 целевых клиентов в CRM, 5 cold-outreach, 3 встречи","Месяц 2 цели: 15 встреч кумулятивно, 2 LOI, 1 платящий пилот (≥30 тыс. ₽/мес), демо на реальных участках, первая статья","Месяц 3 цели: 20+ встреч, 3 платящих пилота, 7+ LOI, 1 регадминистрация в переговорах, заявка в реестр ПО, инвест-deck (12 слайдов), финмодель на 5 лет"]}
|
||
{"type":"entity","name":"Validation_Findings_Apr25","entityType":"review","observations":["Дата валидации: 25 апреля 2026","КРИТИЧНО: бизнес-план v2.1 не синхронизирован со стеком v2.2 — в плане 12 мес. месяцы 1–4 ещё ссылаются на .NET Core 8","Несостыковка KPI: v2.1 = 4 платящих пилота, v2.2 = 3 — нужно остановиться на 3 (как в Acceptance Criteria v2.2)","Регион не зафиксирован однозначно: v2.1 пишет «Свердл. или Лен.», v2.2 — только Свердл. — закрепить Свердловскую","Прайсинг: пилот 30 тыс., прайс-лист 70–120 тыс. — уточнить в финмодели для инвесторов: 70 тыс./мес как baseline","Технические риски: Time to First Value ≤10 мин амбициозно (предложение: 15 мин); генерация концепции ≤10 сек требует профилировки с первого билда","PostgreSQL TDE отсутствует в open-source — заменить на pgcrypto + шифрование чувствительных полей на уровне приложения","mypy --strict для всего MVP избыточен соло-разработчику — оставить только для core-модулей (geometry/scoring/financial)","99% uptime в рабочие часы для соло-разработчика рискованно — реалистично 95% + ответ в течение рабочего дня","Заявка в реестр ПО ≠ свидетельство; срок рассмотрения 60–180 дней — учесть для расчёта Раунда А","Бюджет 1,2 млн ₽ + 3 мес. + один основатель плотный; рекомендация — заложить буфер +1 месяц или урезать DXF-экспорт из Discovery"]}
|
||
{"type":"entity","name":"Feedback_MemoryFirst","entityType":"feedback","observations":["Правило: вся информация по проекту gendesign хранится в memory-gendesign.jsonl (context=\"gendesign\"). Информация = факты, решения, результаты анализа, обсуждения стратегии, KPI, списки рисков, протоколы валидации и т.д.","НИКОГДА не создавать .md / .docx / .pdf / .pptx файлы самостоятельно — даже если кажется, что это поможет. Документы генерируются ТОЛЬКО по явному запросу («сделай md», «собери в документ», «выгрузи в docx»).","При поступлении новых фактов/решений в разговоре — сразу сохраняем в память через aim_memory_store / aim_memory_add_facts в context=\"gendesign\".","Для файловой генерации по запросу: запрос срез из памяти (aim_memory_search/read_all) → сборка документа. Память = единый источник правды, файлы = производные.","**Why:** пользователь хочет избежать разъехавшейся инфы между версиями доков (как случилось с v2.1/v2.2). Единый источник (граф памяти) — синхронен по определению.","**How to apply:** в любом обмене по этому проекту — (1) сначала читаем gendesign-память, (2) ведём диалог/анализ, (3) сохраняем новые выводы в память, (4) файлы только если пользователь явно запросил."]}
|
||
{"type":"entity","name":"Team_Setup","entityType":"team","observations":["2 фуллстек-разработчика (оба пишут Python + TypeScript)","Оба part-time по 20 ч/неделю — итого ~40 person-hours/неделю (эффективных с координацией ~33)","Разделение по фичам, а не по слоям — оба трогают backend и frontend","Ритм координации: 1 синк/неделю (30 мин), daily-async в Telegram, PR review обязательный","Ветвление: trunk-based, feature ветки ≤ 3 дней","Критичный тулинг: openapi-typescript для codegen TS-типов из Pydantic-схем (иначе два фуллстека плодят расхождения в API-контракте)"]}
|
||
{"type":"entity","name":"Stages_MVP_v1","entityType":"plan","observations":["Порядок: строго последовательный — Generative полностью, потом Site Finder","Общая оценка: 12 недель (Stage 0: 1 нед., Stage 1: 6 нед., Stage 2: 5 нед.)","Stage 0 (нед. 1) — скелет: монорепо backend+frontend, Docker с PostGIS+Redis, FastAPI hello, Next.js hello, openapi-typescript codegen, GitHub Actions CI, ruff+mypy(core)+pytest. Без JWT (single-tenant + X-Demo-User до Раунда А)","Stage 1a (нед. 2-3) — геометрия + API-контракт. A: Shapely-сервис (отступы, сетка), Pydantic ConceptInput/Output, POST /api/v1/concepts с заглушкой. B: страница /concept, Leaflet, импорт GeoJSON + отрисовка, форма параметров, вывод 3 вариантов в табах","Stage 1b (нед. 4-5) — алгоритм размещения. A: жадное заполнение, 3 стратегии, STRtree для коллизий, профилировка (цель ≤10с, fallback 15с). B: визуализация корпусов, метрики ТЭП, сравнение вариантов","Stage 1c (нед. 6-7) — ТЭП + финмодель + экспорты. A: teap.py, financial.py, openpyxl. B: WeasyPrint шаблон, ezdxf, UI кнопок скачивания","Acceptance Stage 1 (конец нед. 7): полигон→3 варианта→ТЭП+финмодель→PDF/Excel/DXF. Продаваемый артефакт для встреч с месяца 2","Stage 2a (нед. 8-9) — data pipeline. A: парсер ПКК Rosreestr (httpx async, retries), модель Parcel с GeoAlchemy2, загрузка 1000+ участков Екбурга. B: Overpass API для POI, ДОМ.РФ/ЦИАН для цен м², кеш в Redis","Stage 2b (нед. 10-11) — скоринг+API+UI. A: 3 критерия скоринга (эвристики, без XGBoost), POST /parcels/search. B: страница /site-finder, Mapbox, градация по рейтингу, фильтры, карточка","Stage 2c (нед. 12) — интеграция + полировка. Кнопка «Обсчитать концепцию», демо-наполнение 50 участков, бэкапы БД, подача в реестр ПО","Урезано из v2.2 из-за part-time ×2: XGBoost→Фаза 1, JWT-auth→перед Раундом А, mypy --strict только на core, время генерации ≤15с (а не 10с) как fallback"]}
|
||
{"type":"entity","name":"Hosting_Decision_Apr25","entityType":"decision","observations":["Дата: 25 апреля 2026","Выбор хостинга для РФ: рассматривались Yandex Cloud, VK Cloud, Selectel, Timeweb Cloud, Cloud.ru (Сбер)","Рекомендован Yandex Cloud как основной вариант для Discovery + Production","Обоснование: (1) лучшая поддержка PostGIS в Managed PostgreSQL в РФ; (2) Container Registry + Container Solution включены; (3) входит в реестр российского ПО — плюс к нашей заявке; (4) солидно выглядит для инвесторов Раунда А","Стоимость Discovery (~10–15 тыс ₽/мес): VM Compute s3-c2-m4 (~3-4 тыс), Managed Postgres 1vCPU/4GB/30GB SSD (~5-7 тыс), Container Registry (бесплатно до 5GB), Object Storage для бэкапов (~500₽)","Альтернатива для жёсткой экономии: Selectel дешевле в 1.5–2 раза, но требует ручной PostGIS-рутины. Резерв на случай проблем с YC","Архитектура production: 1×VM с Docker Compose (backend + frontend + Caddy reverse proxy + auto-TLS) + Managed PostgreSQL (отдельный сервис) + Object Storage (бэкапы)","Образы: backend + frontend пушатся в Yandex Container Registry из GitHub Actions; на VM выполняется docker compose pull && up -d","GitHub Secrets для deploy: YC_SA_JSON_CREDENTIALS, YC_REGISTRY_ID, DEPLOY_HOST, DEPLOY_USER, DEPLOY_SSH_KEY, DEPLOY_PORT (опционально)","Caddy выбран вместо nginx: авто-TLS через Let's Encrypt без ручных certbot-рутин — дешевле по времени сопровождения для part-time команды","Домен: покупать в .ru зоне (REG.RU или РуЦентр), DNS на Yandex Cloud DNS или Cloudflare бесплатный","Production-путь на VM: /opt/gendesign/docker-compose.prod.yml + .env + Caddyfile"]}
|
||
{"type":"entity","name":"Onboarding_Colleague_KG","entityType":"procedure","observations":["MCP-сервер для памяти: npm-пакет mcp-knowledge-graph (запуск через npx -y)","Команда в claude_desktop_config.json: command=npx, args=['-y','mcp-knowledge-graph','--memory-path','<путь к папке с .jsonl файлами>']","Путь в рабочей среде основателя: C:\\mcp\\.aim","Стратегия разделённой памяти между коллегами: git синхронизация файла memory-gendesign.jsonl + хард-линк из репо в MCP-папку. Источник правды — репо","Конфликты в .jsonl обычно простые (файл построчный): решаются выбором \"оставить обе стороны\". rebase, не merge","Ритуал: git pull перед началом работы, git commit+push после изменений памяти","Полный текст процедуры выдан в чате 25 апреля 2026; при повторном запросе — восстановить из этой сущности"]}
|
||
{"type":"entity","name":"Hosting_Pricing_Apr25","entityType":"research","observations":["Дата проверки: 25 апреля 2026, фактические цены с сайтов провайдеров","Целевой конфиг: 2 vCPU / 4 GB RAM / 30-40 GB NVMe SSD + public IPv4. 60 GB избыточен для Discovery (реальное использование диска 12-15 GB: OS+Docker 5-7 GB + Postgres+PostGIS 0.5-1 GB + логи+бэкапы 1-2 GB + буфер 5 GB)","Selectel Standard Line 2/4 GB = 2308.86 ₽/мес (CPU+RAM only) + диск 30 GB Network SSD ~270 ₽ + public IP. Итого ~2700-3000 ₽/мес. Дороже конкурентов в 2-3 раза","Selectel Shared Line 2/4 GB с 10% vCPU = 1239 ₽/мес — дешевле, но CPU слишком слабый для Postgres+PostGIS под реальной нагрузкой","Timeweb Cloud MSK 50: 2 vCPU 3.3 GHz / 4 GB / 50 GB NVMe / 1 Гбит/с = 1062 ₽/мес со скидкой 10% при годовом контракте (или ~1180 ₽ без контракта). IPv4 включён. Реестр ПО № 15725","Beget VPS Standard 2 vCPU 3+ GHz / 4 GB / 40 GB NVMe = 33 ₽/день сервер + 5 ₽/день IPv4 = 38 ₽/день ≈ 1140 ₽/мес. Автобэкапы раз в несколько дней бесплатно. KVM. Реестр ПО № 16697","Beget VPS 2/2/30 = 27 ₽/день + 5 ₽ IP = 32 ₽/день ≈ 960 ₽/мес — ещё дешевле, но 2 GB RAM маловато для Postgres+PostGIS+Redis+backend+frontend+Caddy","Рекомендация Discovery: Beget VPS 2/4/40 NVMe + IP ≈ 1140 ₽/мес (самый дешевый реально рабочий конфиг) или Timeweb Cloud MSK 50 ≈ 1062 ₽/мес (лучше NVMe, больше диск)","Ранее в Hosting_Decision_Apr25 был предложен Yandex Cloud (~10-15 тыс ₽/мес с managed services). Это вариант для продакшена после Раунда А, не для Discovery","Для Discovery Beget выигрывает по цене и бесплатным бэкапам. Timeweb выигрывает по UI/UX панели и большему диску. Selectel оправдан только если планируется быстрый перевод на managed Postgres/K8s в их экосистеме"]}
|
||
{"type":"entity","name":"SSH_Setup_Apr25","entityType":"infrastructure","observations":["SSH-ключ для проекта: ed25519, без passphrase (для автодеплоя из GitHub Actions)","Локация: $HOME\\.ssh\\gendesign_deploy (приватный) + .pub (публичный)","Comment ключа: 'gendesign-deploy'","SSH config alias: 'Host gendesign' с IdentityFile ~/.ssh/gendesign_deploy — коннект командой 'ssh gendesign'","Публичный ключ вручную загружается в панель хостинг-провайдера при создании сервера","Приватный ключ позже пойдёт в GitHub Secret DEPLOY_SSH_KEY (для deploy.yml workflow)","Windows-специфика: icacls нужен для ограничения прав на приватный ключ, иначе OpenSSH ругается на 'UNPROTECTED PRIVATE KEY FILE'"]}
|
||
{"type":"entity","name":"WorkSplit_Generative_Stage1","entityType":"plan","observations":["Принцип разделения: вертикальные срезы по этапам пользовательского пути, не по слоям","Person A — 'Geometry → Variants' owner: Shapely-сервис, нормативные отступы, жадный алгоритм с 3 стратегиями, STRtree коллизии, профилировка. API endpoint POST /concepts, владелец схемы ConceptInput+buildings_geojson. Фронт: Leaflet, импорт/отрисовка полигона, форма параметров, рендеринг 3 вариантов на карте","Person B — 'Variants → Reports' owner: TEAP-сервис, финансовая модель, экспорты PDF/Excel/DXF (WeasyPrint+openpyxl+ezdxf). API endpoint /concepts/:id/export, владелец схем TEAP+FinancialModel. Фронт: таблицы ТЭП, форма финмодели, кнопки скачивания, сравнение вариантов","Точка стыка = Pydantic-контракт ConceptVariant в backend/app/schemas/concept.py. Договариваются в первый день Stage 1a, дальше оба работают с заглушками друг друга без блокировки","Точка стыка 2 — codegen TS-типов: при любой правке схемы оба запускают 'npm run codegen' локально","Календарь по неделям (Stage 1, нед.2-7): A движется по вектору схема→отступы→алгоритм→стратегии→тесты. B движется по вектору схема→TEAP→financial→Excel→DXF→PDF→тесты","Альтернативный расклад при асимметрии навыков: Алгоритмист (A) берёт все 4 backend-сервиса (geometry+TEAP+financial+exporters), фронт минимум. Продуктовик (B) берёт весь фронт + UI экспортов, backend минимум (тонкий export endpoint)","Анти-паттерны: разделение backend/frontend (блокирует второго), общие прямые пуши в main, молчаливые правки Pydantic без codegen, pair programming на каждой задаче (дорого для part-time ×2)"]}
|
||
{"type":"entity","name":"DataSources_Pricing_Apr25","entityType":"research","observations":["Дата: 25 апреля 2026","В РФ открытых данных по реальным сделкам (Росреестр) НЕТ — только агрегаты. Цены и площади из агрегаторов (ЦИАН/ДомКлик/Авито) — по объявлениям, не по сделкам","Открытые официальные источники (бесплатно, без юрриска): ДОМ.РФ (наш.дом.рф + api.dom.rf, реестр новостроек, площади в жк, колво квартир по комнатностям, класс жилья); Росстат (fedstat.ru, средние цены м² по регионам квартально); Минстрой (норматив цены м² для субсидий); Главгосэкспертиза НЦС (gge.ru, себестоимость м² строительства)","Скрейпинг агрегаторов (серая зона): ЦИАН (cianparser/cianscraper либы на GitHub, но Cloudflare и рейтлимит); Авито; ДомКлик; Яндекс.Недвижимость. Юридически — нарушение ТОС, но исков против мелких парсеров немного","Платные отраслевые: ЕРЗ.РФ Премиум (50-100тыс ₽/год, отраслевой стандарт); Knight Frank/NF Group/CBRE отчеты; PROEstate Analytics; СберИндекс (бесплатно)","Industry-standard unit-mix (из практики): Студии/1к/2к/3к/4+к по классам. Эконом: 15-20/35-40/25-30/10-15/0-5%. Комфорт: 8-12/25-30/30-35/20-25/5-10%. Бизнес: 5-10/18-22/30-35/25-30/10-15%. Премиум: 0-5/10-15/30/30-35/20-25%","Средние площади квартир м² (студия/1к/2к/3к): Эконом 22-28/33-38/50-58/70-80; Комфорт 26-30/38-44/58-66/80-92; Бизнес 30-35/45-55/70-85/100-125; Премиум 35-45/55-70/90-110/130-180. Нормативная нижняя граница — СП 54.13330.2016","Рекомендация для Discovery: Цены — Росстат baseline + ручной парсинг/скрейп ЦИАН 200 объявлений по районам Екбурга. Площади+unit-mix — захардкодить таблицу с возможностью ручной правки. Себестоимость — НЦС Главгосэкспертизы. Новостройки-конкуренты — API ДОМ.РФ","Для реестра ПО декларируем только легальные источники: ДОМ.РФ, Росстат, Главгосэкспертиза, OpenStreetMap. Скрейп ЦИАН — «внутренний справочник curating». Для инвесторов Раунда А — «договорённости с источниками рыночных данных в проработке»"]}
|
||
{"type":"entity","name":"SalesTracking_Strategy_Apr25","entityType":"strategy","observations":["Дата анализа: 25 апреля 2026","Исходный вопрос: можно ли косвенно понять, какие квартиры продаются и какие нет. Ответ: да, через ejednevnyy мониторинг шахматок застройщиков + delta-tracking","Прямые данные о сделках в РФ закрыты: Росреестр ДДУ не в open data, нотариусы и банки — закрытые источники","Косвенные источники по точности: 1) Шахматки застройщиков — 95%+ точность, золотая жила. 2) ДОМ.РФ реестр ДДУ по ЖК — 100% на уровне агрегата. 3) Delta-tracking listings ЦИАН/Авито — 70% точность. 4) ДомКлик ипотечная статистика — sanity check на уровне района. 5) Фиксация снижений цен — сигнал «не продаётся»","Шахматки = золотая жила. На сайтах ПИК/Брусника/Атомстройкомплекс/ТЭН-Девелопмент/Стройтэк/ЛСР и др. интерактивная шахматка с поквартирным статусом (доступно/бронь/продано). Даёт площадь, комнатность, этаж, секцию, цену, дату продажи","Тех-план: воркер services/site_finder/sales_tracker.py + поадаптеру на каждого застройщика (brusnika_scraper.py, atomstroy_scraper.py...). Cron 1×в сутки. SPA-сайты — Playwright. SSR — httpx+BS4","Схема БД: apartments(id, jk_id, room_count, area_sqm, floor, section, price_rub, status, last_seen_at) + sales_history(apartment_id, sold_date, sold_price). Materialized views для velocity в радиусе X от точки","Три киллер-фичи из этих данных: A) Velocity Score в Site Finder — дополнительный 4-й критерий скоринга (сколько квартир продаётся/мес в радиусе 1км). B) Smart Unit-Mix в Generative — рекомендация долей 1/2/3-комн на основе реальных продаж в районе. C) Validation финмодели — бенчмарк прогноза выручки против факта по соседним ЖК","Это самый важный data moat: TestFit без РФ-данных, rTIM без site-selection и аналитики спроса. Через 6-12 мес накопления — уникальный источник данных для девелоперов, который не воспроизвести конкурентам быстро","План Discovery: Stage 2a нед.8-9 добавляется воркер sales_tracker параллельно парсеру ПКК. Реализуем 5-7 адаптеров (топ-застройщики Екбурга). К концу месяца 3 имеем 2-3 недели исторических данных","Целевые застройщики Екбурга для Discovery: Атомстройкомплекс, Брусника, ТЭН-Девелопмент, Стройтэк, Прогресс, УГМК-Застройщик, Кортрос, ЛСР-Урал, Forum-group, ПИК (если есть в ЕКБ)","Юридика: шахматки = публичные маркетинговые данные (без авторизации, серая зона мягче ЦИАН). Прецедентов исков застройщиков к парсерам практически нет (им нужны шахматки как воронка маркетинга). Для реестра ПО декларируем как «партнёрские интеграции с открытыми источниками застройщиков»","Анти-риски: 1) Сайт застройщика меняет вёрстку — скрейпер ломается, нужен Sentry alerting. 2) Юр-претензия от крупного застройщика — митигация через «партнёрство возамен аналитики» с топ-3 таргетов. 3) Низкое качество сайтов мелких застройщиков — берём только тех, у кого нормальный веб-интерфейс","Через 6 мес накопления: сезонные коэффициенты, absorption curves по типам квартир, ML-предсказание velocity для нового участка. Для Раунда А это идеальный narrative: «уникальная база продаж новостроек Свердловской обл., которой нет в открытых источниках и у западных игроков»"]}
|
||
{"type":"entity","name":"PlanA_AnalyticsFirst_Apr25","entityType":"decision_pending","observations":["Дата: 25 апреля 2026, вечер. Обсуждали с Антоном (второй разработчик)","Новые вводные: Антон сказал, что есть доступ ко всем сделкам для анализа. Детали по данным будут в понедельник 27 апреля 2026","Предложение Антона: сначала аналитика по продажам (что строить, какие квартиры, площади), потом всё остальное","Решение (предварительное, ждём детали): НЕ полный pivot. Перестановка порядка этапов: Stage 1 = Sales Analytics (нед 2-5), Stage 2 = Generative со Smart Defaults из аналитики (нед 6-10), Stage 3 = Site Finder с Velocity Score (нед 11-12)","Обоснование не полного pivot: Generative — главный дифференциатор против rTIM/TestFit. Без него конкурируем напрямую с ЕРЗ/ДОМ.РФ (у них 5 лет данных и команда). Аналитика становится мозгом для Generative и Site Finder, а не их заменой","Концепция «3 плитки»: ввод участок + класс жилья → (1) ЧТО СТРОИТЬ (unit-mix с velocity), (2) СКОЛЬКО ПРОСИТЬ (распределение цен м² по классам + тренд), (3) ЗА КАКОЕ ВРЕМЯ ПРОДАСТСЯ (absorption curves по АНАЛОГам). Кнопка «Сгенерировать концепцию» ведёт в Generative","Плюс нового плана: продаваемый артефакт уже после мес 1 (раньше был конец мес 2). Меньше технического риска. Другой ICP (инвестдепартамент вместо архитектуры)","КРИТИЧНО: «доступ ко всем сделкам» — это фундамент или мина. Бывают 4 сценария: 1) Легальный богатый ongoing (ЕРЗ Premium/банк/админ) → полный pivot, аналитика фундамент. 2) Легальный ограниченный → план A + шахматки параллельно для ongoing. 3) Серый канал → НЕ строим бизнес на этом, используем только «для себя». 4) Обещают но не дают → идём по плану шахматок, ждём","6 блоков вопросов к Антону на 27 апреля: Природа канала (что именно за доступ); Поля данных (цена/метраж/комнатность/покупатель?); Покрытие (регионы/история); Свежесть (разовая выгрузка или ongoing); Условия использования в коммерческом продукте; Цена доступа","Что делаем до пн (не останавливаемся, но с осторожностью): SSH-ключ, выбор хостинга (Beget/Timeweb), Stage 0 скелет уже сделан. НЕ начинаем Shapely геометрию или парсер ПКК — приоритет может сместиться","Шахматки застройщиков НЕ отменяются даже если данные Антона полные: 1) Сделки в Росреестре регистрируются с лагом 1-3 месяца. 2) Бронирования и доступность — сделки этого не показывают. 3) Маркетинговая цена vs фактическая различается","Сообщили Кене ответ Антону: направление в точку, но не полный pivot. Ждём детали по данным в пн. Вижу 6 блоков вопросов. От ответов зависит тип плана","Уточнение 25.04.2026 вечер: Антон подтвердил — речь идёт о ДДУ (Договорах Долевого Участия). Это идеальный источник для аналитики: ground truth по продажам новостроек, выше качеством чем шахматки","ДДУ поля стандартно: кадастровый номер квартиры, площадь, цена, дата регистрации, застройщик, ЖК. иногда комнатность/этаж/секция. ПН-поверхность: ПДн покупателя часто включены — обязательное обезличивание до записи в нашу БД (152-ФЗ)","Лаг ДДУ: 30-90 дней от реальной сделки до регистрации в Росреестре. Поэтому шахматки застройщиков НЕ отменяются — они дают 'today snapshot', ДДУ дают 'historical truth'","5 блоков к понедельнику (сужены до ДДУ-специфики): 1) Канал — держатель и договор (DOM.RF API/ЕРЗ Premium/банк/администрация/другое). 2) Поля (все ли обязательные + комнатность и ПДн). 3) Покрытие (регионы/история). 4) Свежесть (разовая/ongoing/real-time и лаг). 5) Условия коммерческого использования","Преимущество ДДУ над шахматками: ground truth по фактической цене (не маркетинговой), историческая глубина, юридически чистый источник (если канал легален), data moat относительно TestFit/rTIM"]}
|
||
{"type":"entity","name":"Runbook_VPS_Setup_Beget","entityType":"runbook","observations":["Источник: фактическая настройка сервера Jolly Yakov в Beget Cloud, 25.04.2026. Сервер 2 vCPU / 4GB RAM / 40GB NVMe / Ubuntu 24.04, IP 46.173.16.127","ШАГ 1: Создание сервера в cp.beget.com/cloud → Создать сервис → VPS → Standard 3+ GHz → 2 ядра/4GB/40GB. ОС: Ubuntu 24.04. Включить публичный IPv4. После создания сервер получает IP, root пароль выслан на email","ШАГ 2: Генерация SSH-ключа локально (если ещё нет). Windows PowerShell: ssh-keygen -t ed25519 -C 'gendesign-deploy' -f $HOME\\.ssh\\gendesign_deploy. Пароль оставить пустым (Enter Enter) — нужно для автодеплоя","ШАГ 3: Добавление публичного ключа на сервер через панель Beget. При проблемах со SSH (Connection reset, fail2ban) — войти через VNC терминал в браузере и добавить в ~/.ssh/authorized_keys","ШАГ 4: Первый вход по SSH с явным ключом. Команда: ssh -i $HOME\\.ssh\\gendesign_deploy root@<IP>. При первом коннекте спросит fingerprint — yes","ШАГ 5: На сервере (root): обновить пакеты 'apt update && apt upgrade -y'. Если [-f /var/run/reboot-required] то ребут. Установить hostname/timezone: hostnamectl set-hostname gendesign; timedatectl set-timezone Europe/Moscow","ШАГ 6: Создание non-root пользователя. adduser gendesign (задать сильный пароль, остальное Enter). usermod -aG sudo gendesign. Копия SSH-ключа root→gendesign: mkdir -p /home/gendesign/.ssh && cp ~/.ssh/authorized_keys /home/gendesign/.ssh/ && chown -R gendesign:gendesign /home/gendesign/.ssh && chmod 700 /home/gendesign/.ssh && chmod 600 /home/gendesign/.ssh/authorized_keys","ШАГ 7: Тест первого входа как gendesign. Важно: хранить root-сессию открытой как safety net до конца. В новом окне: ssh -i $HOME\\.ssh\\gendesign_deploy gendesign@<IP>. Проверка sudo: sudo whoami → root","ШАГ 8 (Windows-специфика): SSH config не создавать через Notepad — он добавляет .txt и сохраняет в UTF-8 с BOM. Правильный способ: PowerShell heredoc | Out-File -Encoding ascii -FilePath $HOME\\.ssh\\config. Блок Host: HostName <IP>, User gendesign, Port 22, IdentityFile ~/.ssh/gendesign_deploy, IdentitiesOnly yes, ServerAliveInterval 60. Критично включать IdentitiesOnly yes — иначе Windows OpenSSH перебирает все ключи и получает MaxAuthTries reset не дойдя до нужного","ШАГ 9: Отключение root-логина и паролей в SSH. ТОЛЬКО ПОСЛЕ подтверждения gendesign работает и sudo работает. sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak; sudo nano /etc/ssh/sshd_config → PermitRootLogin no, PasswordAuthentication no, PubkeyAuthentication yes. sudo sshd -t для валидации. sudo systemctl reload ssh","ШАГ 10: Критический тест в третьем окне: ssh gendesign → пускает по ключу. В четвёртом: ssh root@<IP> → должен отказать. Старую root-сессию закрываем только после этого","Распространённые грабли: 1) Connection reset при неверном пароле = fail2ban Beget. Обход через VNC. 2) Notepad вместо config пишет config.txt — проверять ls $HOME\\.ssh\\. 3) Windows OpenSSH без IdentitiesOnly перебирает все ключи. 4) Группа sudo не подхватывается без выхода-входа. 5) При UNPROTECTED PRIVATE KEY FILE использовать icacls /inheritance:r /grant:r '<имя>:(R)'","Статус 25.04.2026 вечер: Шаги 1-7+8 выполнены. gendesign@46.173.16.127 работает по ключу, sudo работает. Осталось: SSH hardening (Шаг 9), UFW firewall, установка Docker, клонирование репо в /opt/gendesign","Статус 25.04.2026 вечер (обновлён): Базовая настройка VPS завершена. gendesign@46.173.16.127 работает по ключу, sudo работает. UFW активен (22/80/443). SSH hardening: PermitRootLogin no, PasswordAuthentication no, PubkeyAuthentication yes через drop-in /etc/ssh/sshd_config.d/00-gendesign-hardening.conf (приоритет 00- перебивает cloud-init defaults). Docker и git установлены. Репо клонировано в /opt/gendesign через deploy key github_deploy. PostgreSQL+PostGIS и Redis работают в докер-компоуз. PostGIS_Version() = 3.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1","Осталось: GHCR setup (замена YCR на GHCR в deploy.yml + docker-compose.prod.yml), GitHub Secrets, Caddy reverse proxy, домен, первый автодеплой backend+frontend","ВЕХА 25.04.2026 вечер: Первый успешный автодеплой. GitHub Actions воркфлоу deploy.yml прошёл полный цикл: build обоих образов (backend ~2.5мин, frontend ~1мин) → push в GHCR (ghcr.io/lekss361/gendesign-backend, gendesign-frontend, приватные) → SSH на сервер → docker compose pull (с PAT-авторизацией) → up -d. /health отвечает {status:ok, environment:prod}","GHCR пакеты остаются ПРИВАТНЫМИ (решение пользователя для защиты алгоритмов). Сервер авторизуется в GHCR через PAT с read:packages, сохранён в ~/.docker/config.json. PAT с длительным сроком или без срока","Исправлены во время деплоя: backend Dockerfile (убрал невалидный conditional COPY для alembic, перешли на uv sync без --frozen до генерации lockfile); frontend package.json (react-leaflet 4→5 для совместимости с React 19); frontend Dockerfile (npm install --legacy-peer-deps вместо npm ci, пока нет lockfile); frontend/public/.gitkeep для Next.js standalone build","Статус инфраструктуры к 25.04.2026 19:00: VPS Beget работает (Москва, 2/4/40 NVMe). UFW + SSH hardening + non-root user. Docker compose prod поднят с 5 сервисами (postgres+redis+backend+frontend+caddy). GitHub Actions автодеплой работает на push в main. /health публичен внутри VM (127.0.0.1:8000)","Осталось до «infra-ready»: домен, Caddy TLS с Let's Encrypt на этот домен, регулярные pg_dump в Object Storage, frontend NEXT_PUBLIC_API_BASE_URL на реальный домен (сейчас пустая). И дальше — Stage 1 разработки по выбранному PlanA_AnalyticsFirst_Apr25 (после понедельника с Антоном по ДДУ-данным)"]}
|
||
{"type":"entity","name":"Hardlink_Test_Apr25","entityType":"test","observations":["Тестовая запись, дата 25.04.2026 поздний вечер","Цель: проверить, что после пересоздания хард-линка записи MCP попадают в репо-файл memory/memory-gendesign.jsonl","Ожидаемый результат: размер репо-файла увеличится, git status покажет modified","Наблюдение: предыдущий хард-линк разорвался (LinkType был null, синхронизация репо-файла с MCP-папкой прекратилась). Репо-файл был 16550 байт, источник 43957 байт","Если тест пройдёт (синхронизация восстановлена) — рабочий цикл из README снова валиден. Если не пройдёт — нужен sync-memory.ps1 скрипт или альтернатива"]}
|
||
{"type":"entity","name":"Domain_Setup_Apr26","entityType":"infrastructure","observations":["Дата: 26.04.2026","Домен: gendsgn.ru, регистрация в Beget, срок до 26.04.2027","Стоимость: 199 ₽ первый год, 420 ₽/год продление. Сравнение из браузера 26.04.2026: Reg.ru 169₽ первый год + ~890₽ продление; Timeweb 200/399; nic.ru 747₽ регистрация (премиум)","Решение: Beget — потому что (1) хостинг VPS уже там, единая админка и единая платежка для бухгалтерии; (2) продление 420₽ — лучшее на рынке; (3) free DNS включён","DNS-серверы: ns1.beget.com, ns2.beget.com (плюс ns1.beget.pro, ns2.beget.pro как backup)","A-записи прописаны 26.04.2026: @ (apex) и www → 46.173.16.127. Beget NS отдают корректно (проверено nslookup gendsgn.ru ns1.beget.com → 46.173.16.127). Публичные резолверы (8.8.8.8, 1.1.1.1) на 26.04 ещё NXDOMAIN — пропагация .ru registry → public DNS, ожидаемо 30 мин - 4 часа","Caddyfile обновлён под gendsgn.ru: основной site block с auto-TLS Let's Encrypt, www → 301 redirect на apex, :80 fallback для IP-доступа сохранён. Закоммичен 68e95aa, запушен в main. На VM не применён (старый deploy.yml не делает git pull)","deploy.yml будет дополнен `git fetch + reset --hard origin/main` + `caddy reload --config /etc/caddy/Caddyfile` после `up -d`. Закоммитим и запушим когда DNS пропагируется. Это финальный шаг для HTTPS","Важное правило отрасли: с 1 сентября 2026 владелец .ru-домена обязан иметь подтверждённую учётку ЕСИА (Госуслуги) — иначе домен не продлят. Для ИП/ООО — через ЭДО/СБИС. Касается всех регистраторов одинаково. К моменту продления (26.04.2027) ООО уже должно быть зарегистрировано — учёт без проблем"]}
|
||
{"type":"entity","name":"Sentry_Setup_Apr26","entityType":"infrastructure","observations":["Дата: 26.04.2026","Sentry организация: qqq (qqq-5y.sentry.io), free tier (5К ошибок + 10К транзакций / мес)","Sentry проект: gendesign-backend, платформа FastAPI, регион Frankfurt (ingest.de.sentry.io)","DSN сохранён в /opt/gendesign/backend/.env как SENTRY_DSN. На локальной машине — не нужен (Sentry init в backend/app/main.py условный — отключён если DSN пустой)","Конфиг init: sentry_sdk.init(dsn=settings.sentry_dsn, environment=settings.environment, traces_sample_rate=0.1) — 10% запросов трейсятся для performance","Алерты: «high priority» по умолчанию + email на alexandro361@gmail.com","Тестовое событие отправлено и получено 26.04.2026 — event_id 67f05bdd59234a608a828fa81f72ded5. Sentry интеграция работает на проде","Важная операционная заметка: docker compose restart НЕ перечитывает env_file. После правки backend/.env нужно `docker compose -f docker-compose.prod.yml up -d --force-recreate --no-deps backend`. Применимо к любым env-изменениям, не только Sentry","DSN — не критичный секрет (в frontend SDK всегда зашит публично в JS-бандл). Держим в .env, не в репе. Ротация при необходимости через Sentry → Settings → Client Keys (DSN) → New Key"]}
|
||
{"type":"entity","name":"OpsBundle_Apr26","entityType":"infrastructure","observations":["Дата: 26.04.2026","Подготовлен пакет инфраструктурных правок (в working tree, не закоммичено): Alembic baseline + TIGER cleanup + pre-commit + pg_dump backups + Makefile targets","Alembic: создан backend/alembic.ini + backend/alembic/env.py (импорт Base из app.core.db, моделей через app.models.*) + script.py.mako + versions/.gitkeep. Первая реальная миграция — в Stage 2a, когда Parcel-модель будет финализирована. Сейчас versions/ намеренно пуст","TIGER cleanup: backend/db/init/99_drop_unused_extensions.sql дропает postgis_tiger_geocoder + postgis_topology + fuzzystrmatch на свежем postgres-volume (через bind-mount ./backend/db/init:/docker-entrypoint-initdb.d:ro в обоих compose-файлах). Срабатывает только при первой инициализации пустого volume","Pre-commit: .pre-commit-config.yaml в корне (trailing-whitespace, end-of-file-fixer, ruff lint+format на backend/, prettier на frontend/, detect-private-key, check-yaml/toml). Pre-commit добавлен в dev-deps backend/pyproject.toml. Локально — `python -m pre_commit install` или `make pre-commit-install`","pg_dump: ops/backup.sh — cron-скрипт с опциональной выгрузкой в S3. Ретенция 7 дней локально. ops/restore.sh с защитой RESTORE_CONFIRM=yes","Makefile: добавлены `make migration NAME=...` и `make pre-commit-install`. `make migrate` использует `alembic` напрямую (uv нет в production-образе)","backend/Dockerfile: COPY alembic.ini + COPY alembic в обе стадии (builder и runner)","S3 для бэкапов: пока не настроено. Когда настроим Selectel или Yandex Object Storage, env-конфиг — /etc/default/gendesign-backup на VM, cron — `30 3 * * * /usr/local/bin/gendesign-backup`"]}
|
||
{"type":"entity","name":"Production_Wipe_Apr26","entityType":"event","observations":["Дата: 26.04.2026","Прод полностью пересоздан с нуля для чистого состояния. Не было критичных данных — БД содержала только postgis-defaults","Команды на VM: `docker compose down -v` → `docker rmi` GHCR-образов и базовых (caddy:2, postgis/postgis:16-3.4, redis:7-alpine) → `git pull --ff-only` (Caddyfile, compose) → `docker system prune -af --volumes`","Re-deploy через GitHub Actions Deploy → все 5 контейнеров поднялись с image-тегом 08a63f6 (главный коммит на момент wipe)","Состояние после re-deploy: postgres healthy, redis healthy (новый healthcheck), backend healthy (фикс curl-healthcheck в multi-stage Dockerfile), frontend up, caddy up. PostGIS 3.4 USE_GEOS=1 USE_PROJ=1","TIGER-мусор вернулся (как ожидалось) при свежей инициализации postgis-image. Будет автоматически удаляться при следующих wipe-ах когда применим OpsBundle_Apr26 (init-скрипт 99_drop_unused_extensions.sql)"]}
|
||
{"type":"entity","name":"DockerOps_Apr26","entityType":"infrastructure","observations":["Дата: 26.04.2026","Серия Docker-фиксов задеплоена в main: e22aeb9 (multi-stage + npm ci + healthcheck + same-origin API), d0909e6 (ruff fixes), 08a63f6 (mypy fixes), 68e95aa (real domain Caddyfile)","backend/Dockerfile: переписан на multi-stage (builder с build-essential + libgdal-dev + uv sync; runner только с runtime-либами libpq5, libgdal36, libproj25, libgeos-c1t64, libcairo2, libpango*, curl). Финальный образ 1.44 GB вместо ~2 GB. Запускается под non-root пользователем `app` (uid 1000)","backend curl healthcheck в docker-compose.prod.yml теперь работает (до этого был баг — curl не был установлен в slim-образе)","frontend/Dockerfile: переключён на `npm ci --legacy-peer-deps` вместо `npm install`. Запускается под `node` (uid 1000). package-lock.json закоммичен","docker-compose.prod.yml + dev: убран dead NEXT_PUBLIC_API_BASE_URL (Next.js bakes NEXT_PUBLIC_* на build-time, runtime override no-op). Frontend ходит на same-origin /api/* — в проде через Caddy, в dev через Next.js rewrites (BACKEND_URL env)","Caddyfile: исправлен баг — handle_path /api/* стрипал префикс /api, FastAPI router на /api/v1/* возвращал 404. Заменено на handle /api/*","backend/uv.lock сгенерирован (через docker run python:3.12-slim + pip install uv && uv lock). Дальнейшие билды детерминированы: `uv sync --frozen --no-dev`","Ruff config: ignore=['RUF001','RUF002','RUF003'] — проект русскоязычный, кириллица в комментариях/docstring (МСК-66 etc.) — норма, иначе постоянно ругается"]}
|
||
{"type":"entity","name":"HTTPS_Live_Apr26","entityType":"milestone","observations":["Дата: 26.04.2026, ~14:41 MSK","Прод официально живой на HTTPS: https://gendsgn.ru/ возвращает 200, https://gendsgn.ru/health → {\"status\":\"ok\",\"environment\":\"prod\"}, https://www.gendsgn.ru/ → 301 на apex","Цепочка: ЕСИА-верификация в Beget → реестр .ru обновился → DNS пропагировался к 8.8.8.8/1.1.1.1 → push deploy.yml с git-pull+caddy-reload не делался (юзер сделал руками на VM) → пришлось вычищать caddy_data volume чтобы сбросить старый retry-state на gendesign.example.ru и Let's Encrypt staging fallback → Caddy перезагрузился чисто → cert получен с production Let's Encrypt","Урок: при wipe `down -v` мы убрали весь caddy volume включая ACME-state. Если бы оставили — Caddy продолжал бы фоновые retry-задачи на старый плейсхолдер gendesign.example.ru, и accumulated failures могли бы триггернуть staging fallback. На будущее: `caddy reload` не сбрасывает retry queue — для чистого старта нужен `restart` или volume-wipe","GitHub-issues #1 (ЕСИА) и #2 (push deploy.yml) можно закрывать как done","Стек живет: HTTP/2 + HTTP/3 (alt-svc), Caddy reverse-proxy фронт+бэк, FastAPI корректно отвечает через /api/* префикс (handle вместо handle_path сработал)"]}
|
||
{"type":"entity","name":"DataSources_Analysis_Apr26","entityType":"research","observations":["Дата: 26.04.2026. Глубокий анализ источников данных для GenDesign — проверено через debug-браузер на наш.дом.рф","🥇 ГЛАВНАЯ НАХОДКА: ДОМ.РФ имеет ОТКРЫТЫЕ JSON API без аутентификации. Это меняет всё для Plan A и Site Finder","ДОМ.РФ Аналитика API (`naash.dom.rf/portal-analytics/api/`): /dictionaries/regions, /dictionaries/developers, /dashboard/by-room-count, /dashboard/by-flat-area, /dashboard/by-developer, /dashboard/by-region. Возвращают JSON: по каждому региону id, flatCount, area, и details — разбивка по комнатности (ONE/TWO/THREE/FOUR с площадями и %). Базовый URL хоста: https://xn--80az8a.xn--d1aqf.xn--p1ai (он же наш.дом.рф). Без auth, accept: application/json. Свердл. обл. id=66, flatCount=115205, area=5.67M м²","ДОМ.РФ Каталог квартир API (`/сервисы/api/kn/`): /flats/map?latitudePoint1=...&latitudePoint2=...&longitudePoint1=...&longitudePoint2=...&flatStatus=free,booked возвращает per-ЖК записи {objId, latitude, longitude, priceMin, objStatus}. /flats/filters даёт диапазоны фильтров. Auth: header `Authorization: Basic MTpqd2U=` (= base64('1:qwe')) — хардкод в фронте, действующий ключ. По Свердл. обл. видно 24 441 квартир в продаже","ДОМ.РФ доступные на per-flat фильтры (которые присутствуют в JSON): кол-во комнат (студия/1/2/3/4+), год сдачи (Сдан/2026/2027/2028+), цена (от 2.6М до 4.8 млрд), площадь (16-1001 м²), этаж (1-68), цена м² (82К-7.2М), отделка (без/черновая/предчистовая/чистовая/под ключ), класс (типовой/комфорт/бизнес/элитный), материал стен (блоки/кирпич/панель/монолит/монолит-кирпич), тип (жилое/нежилое), эскроу, безбарьерная среда, благоустройство, энергоэффективность, наличие апартаментов","ДОМ.РФ покрытие России: 2.4 млн квартир в строящихся домах, 118.7 млн м². По регионам ТОП-20 включает Свердл.обл (4-е место, 5.67М м²). По девелоперам ТОП-15: Самолет, ПИК, DOGMA, ТОЧНО, ФСК, Брусника, Setl Group, ЛСР и др.","ДОМ.РФ распределение площадей квартир в РФ: 0-25м²: 6%, 25-35м²: 17%, 35-45м²: 30% (мода), 45-55м²: 14%, 55-70м²: 20%, 70-85м²: 8%, 85-100м²: 3%, более 100м²: 2%. В среднем около 49 м² (118.7М/2.4М). Это ВАЖНЕЙШИЙ benchmark для smart unit-mix Plan A","ДОМ.РФ распределение по комнатности: 1-комн 54% (1.31М), 2-комн 32% (0.78М), 3-комн 12% (0.30М), 4+комн 1% (33К)","ДОМ.РФ есть еще API endpoints: Единый реестр застройщиков, Единый реестр МЖК, Единый реестр ЖСК, Единый реестр проблемных объектов, Реализация квартир в строящихся домах (динамика продаж!), Распроданность и стройготовность (что-то вроде velocity!). Все по naash.dom.rf/аналитика/*. Велоситит и распроданность — могут быть прокси для нашего sales_tracker без необходимости парсить шахматки","🥈 ВЫВОД: для Plan A не нужно ждать ДДУ-данные от Антона. ДОМ.РФ открыто отдает агрегаты + ground truth по объектам. Это юридически чистый канал ('через API ДОМ.РФ' можно официально декларировать в реестре ПО)","Overpass API (OpenStreetMap, https://overpass-api.de/api/interpreter): бесплатно, без авторизации. Синтаксис Overpass QL: `[out:json][timeout:25]; node[\"amenity\"=\"school\"](56.7,60.5,56.9,60.7); out body;` — все школы в bbox. Поддерживает radius `node(around:1000)[\"amenity\"=\"hospital\"]`. Релевантные tags для нас: amenity=school|hospital|clinic|kindergarten|university, public_transport=station+station=subway|tram|bus, shop=mall|supermarket, leisure=park|playground, highway=primary|secondary","Overpass rate limit: ~5 запросов/мин на IP. Для production — поднять свой mirror через Docker (overpass-api/docker-overpass-api), либо использовать кеш Redis (TTL 24-72 ч, POI редко меняются)","Росстат fedstat.ru (id=31452): 'Средняя цена 1 кв.м общей площади квартир на рынке жилья' — квартально по регионам РФ, разбивка первичка/вторичка, по типам квартир. Данные с 2000 по 2025. Скачивание SDMX/возможно CSV/XML. НЕТ публичного API. Подход: разовая выгрузка → Excel → загрузить в нашу БД, обновлять раз в квартал вручную","Минстрой РФ (minstroyrf.gov.ru): норматив средней рыночной стоимости 1 м² для расчета субсидий. Публикуется приказом Минстроя ежеквартально по всем регионам. Для Свердл. обл. ~85-95 тыс ₽/м² на 2025 год. Доступ: PDF приказа на сайте Минстроя, копия в КонсультантПлюс. Использовать как baseline для нашей финмодели","Главгосэкспертиза НЦС (gge.ru, был 404 на /ncs/, реальный URL на момент проверки изменился): нормативы цены строительства 1 м² по типам зданий + регионам. Используется для расчета бюджетов госзаказа. Публикуется приказом Минстроя ежегодно. Для частных девелоперов — сравнительный baseline 'минимальная себестоимость'. Найти актуальный URL через минстроя/КонсультантПлюс","ЕРЗ.РФ (erzrf.ru): главный конкурент по аналитике в РФ, премиум-доступ. Полные данные: реестр застройщиков, рейтинги ЖК, статистика продаж, вакантность. Цена доступа на сайте не раскрыта — нужно запрашивать. Industry knowledge: ~50-100 тыс ₽/год за подписку на регион, ~500 тыс ₽/год за всю РФ. У них есть API B2B (под NDA). Использовать как 'договорённости в проработке' для инвесторов Раунда А, реально подписываться когда будет budget","СберИндекс (sberindex.ru, не открылся через WebFetch — 'unable to verify the first certificate', попробовать через браузер позже): бесплатные агрегаты Сбера по экономике РФ, включая жилье. Покрытие хорошее, обновление часто. Использовать для cross-validation с ДОМ.РФ + Росстат","ДомКлик (domclick.ru): listings первички и вторички + ИПОТЕЧНАЯ статистика. Открытый каталог с ценами/площадями. Анти-бот защита есть, но не очень жёсткая. Публичный sitemap.xml. Подход: спарсить раз в неделю свердл.обл (~50 тыс листингов), сохранить в БД с history. Для cross-check ДОМ.РФ цен","ЦИАН (cian.ru): крупнейший аггрегатор РФ. Cloudflare защита + rate limit. Парсить рискованно (юридически серая зона + блокировки). Готовые либы: cianparser, cianscraper на GitHub. Использовать ОЧЕНЬ ограниченно (200-500 листингов на район для калибровки), не как основной источник","Авито Недвижимость (avito.ru): аналогично ЦИАНу — антибот, Cloudflare. Есть платный B2B API (через avito_business — недешево). Для Discovery — пропускаем","Яндекс.Недвижимость (realty.ya.ru): listings, иногда XML feed для риелторских CRM. Есть Yandex Realty API (документированный, но enterprise). Для Discovery — пропускаем","Шахматки застройщиков (Брусника, Атомстройкомплекс и т.д.): по факту самый ground-truth источник для today snapshot. SPA-сайты — Playwright. SSR — httpx+BS4. План в Stage 2a/sales_tracker уже описан в SalesTracking_Strategy_Apr25. ОДНАКО — теперь когда у нас есть 'Реализация квартир' из ДОМ.РФ, шахматки могут быть downgrade-нуты до 'дополнительной валидации'","Другие источники (mention only): ОКТМО (для region IDs), ФИАС (адреса), Росреестр ПКК (только границы участков, без ДДУ), ДомРФ.Bank (ипотечные ставки — отдельный поток для финмодели), ЖКХ.МО.РФ (управляющие компании — для оценки операционных расходов). Всё в реестре российских данных.","ИТОГ — приоритеты по источникам для Discovery MVP (от 1 = критично до 5 = можно отложить):","1) ДОМ.РФ portal-analytics + api/kn/flats — бесплатно, открыто, ground truth, ВСЁ нужное для Plan A и Site Finder. Базовый источник","2) Overpass API (OSM) — бесплатно, для POI вокруг участков. Site Finder скоринг","3) Росстат fedstat.ru — квартальный baseline цен, разовая выгрузка → БД. Финмодель + cross-validation","4) Минстрой норматив + НЦС — для реалистичной себестоимости в финмодели","5) Шахматки 5-7 застройщиков Екбурга — дополнительная свежесть к ДОМ.РФ. Stage 2a опционально","Приоритет 1 ('вынес' ДДУ-данные): ВСЁ можно собрать сегодня вечером без Антона. Это разбивает блокировку #10 — даже если канал ДДУ серый/нет — Plan A 'analytics first' технически выполним на ДОМ.РФ data","Метрики, которые мы можем считать прямо из ДОМ.РФ для Plan A '3 плитки':","ПЛИТКА 1 — ЧТО СТРОИТЬ: для участка → район → ID региона → /portal-analytics/api/dashboard/by-room-count?regionId=X → распределение комнатности что строится. Дополнительно /dashboard/by-flat-area по тому же региону → распределение площадей. Smart unit-mix готов","ПЛИТКА 2 — ПО КАКОЙ ЦЕНЕ: для координат (lat,lon) → запрос /api/kn/flats/map в bbox 5km → собрать все priceMin → median + p10/p90 → диапазон цен в районе. Cross-check с Росстатом по региону","ПЛИТКА 3 — ЗА КАКОЕ ВРЕМЯ: /аналитика/реализация_строящихся_квартир + /распроданность-стройготовность по региону → absorption curves по комнатностям. Если бы у Антона были ДДУ — было бы точнее, но и без них есть прокси-сигнал","Юридическая безопасность для реестра ПО: всё что используем — ОФИЦИАЛЬНО открытые источники (ДОМ.РФ, Росстат, Минстрой, OSM). Никакого скрейпинга в обязательных каналах. Шахматки и ЦИАН — опциональные, помечаем как 'партнерские интеграции в проработке'","Implementation effort estimates (часы разработчика):","ДОМ.РФ analytics API клиент + кеш Redis: 4-6 часов","ДОМ.РФ flats/map per-объект клиент с пагинацией bbox: 6-8 часов","Overpass клиент + tag mapping для POI: 3-4 часа","Росстат разовая выгрузка + ETL в БД: 2-3 часа","Минстрой парсинг приказа PDF → таблица: 2-3 часа","СУММАРНО: 17-24 часа на полный data layer без Антона"]}
|
||
{"type":"entity","name":"DomRF_Integration_Docs_Apr26","entityType":"api_spec","observations":["Дата: 26.04.2026. Официальная страница интеграции ДОМ.РФ ЕИСЖС: https://наш.дом.рф/интеграция","⚠ ЮРИДИЧЕСКИЙ СТАТУС API СЖС: предназначено ТОЛЬКО ДЛЯ УПОЛНОМОЧЕННЫХ БАНКОВ согласно Постановлению Правительства РФ № 697 от 18.06.2018. Напрямую подключиться НЕ МОЖЕМ — мы не банк. Но публичный фронт-API наш.дом.рф (то что мы выяснили) легален и доступен всем.","5 различных API в составе ЕИСЖС (вкладки на странице /интеграция):","1) API СЖС (Сведения о Жилищном Строительстве) — главное API для банков, даёт данные по застройщикам, ГК, ЖК, объектам строительства. Это та же информация что на наш.дом.рф в публичной форме.","2) API Уведомления ОПО — опасные производственные объекты. Не наш.","3) API Агрегатор ПФ — Проектное Финансирование, инфо о договорах эскроу. Для банков.","4) API НСИ — Нормативно-Справочная Информация, классификаторы. Справочники.","5) Сервисы СМЭВ — Межведомственное Электронное Взаимодействие. Для госорганов.","Официальные документы на скачивание (все DOCX/PDF публичные):","Соглашение об информационном взаимодействии v5.1 (08.02.2026): /site/binaries/content/assets/domrf/support/developer/agreement/соглашение-об-информационном-взаимодействии.-v5.1..docx — юридический договор присоединения по ст. 428 ГК РФ.","Презентация API СЖС v2 (03.12.2020): /site/binaries/content/assets/domrf/support/developer/presentation/еисжс-апи-сжс_v2.pdf — PDF обзор возможностей.","Спецификация API СЖС v1.3.0 (31.10.2020): /site/binaries/content/assets/domrf/support/developer/specification/api-сжс.-спецификация-api-v1.3.0.docx — полный OpenAPI-style документ с методами, форматами и ограничениями. Это бы хорошо разобрать для выявления всех полей и эндпоинтов, но спецификация для банковского API — форматы могут отличаться от нашего фронт-API.","Регламент информационного взаимодействия v1.5 (06.10.2020) + в тексте страницы упоминается v1.4: /site/binaries/content/assets/domrf/support/developer/reglament/еисжс-регламент-информационного-взаимодействия-участников-v1_5.docx (и v1_4.docx)","На странице есть кнопка 'ЗАГРУЗИТЬ ЕЩЕ' — вероятно в полном списке есть WSDL/OpenAPI в машинно-читаемом формате.","Официальный 7-шаговый flow подключения к API СЖС (для банков):","1. Ознакомление с Регламентом информационного взаимодействия","2. Запрос на nash@domrf.ru → назначается менеджер ЕИСЖС","3. Подписать 2 экземпляра Соглашения и ОТПРАВИТЬ физической почтой в ПАО ДОМ.РФ по адресу: 125009, г. Москва, Воздвиженка, д. 10 (с пометкой 'в ЕИСЖС')","4. Настройка информационной системы на своей стороне","5. Заявка на подключение к интеграционной (тестовой) среде → физпочта","6. Тестирование + протокол функционального тестирования","7. Заявка на промышленную среду → физпочта. Всего процесс занимает от 1 до 3 месяцев.","КОНТАКТЫ: nash@domrf.ru, 8-800-755-55-05, ПАО ДОМ.РФ, 125009 Москва, Воздвиженка 10.","СТРАТЕГИЧЕСКИЙ вывод для GenDesign:","Нам самим с API СЖС официально подключиться НЕЛЬЗЯ — по ПП №697 это только для уполномоченных кредитных организаций с эскроу-счетами. Имеет смысл искать банка-партнёра на этапе Раунд А или позже — бы их вход давал нам связку с банковским API. Банк ДОМ.РФ или Сбер — логичные partner candidates.","Но в Discovery не нужно — публичный фронт-API наш.дом.рф (описан в DomRF_API_Snapshot_Apr26 и связанных) даёт 99% того же что B2B-API. Разница: официальный API имеет SLA и stable contracts, фронт-API может измениться без уведомления.","Для реестра ПО: в заявке используем формулировку 'интеграция с открытыми данными ЕИСЖС ДОМ.РФ' — описываем публичные эндпоинты. Не 'Подключение к API СЖС' — это юридически неправда."]}
|
||
{"type":"entity","name":"DomRF_Tab10_MortgageRates_Apr26","entityType":"api_spec","observations":["Дата: 26.04.2026. Вкладка 10/12: Мониторинг ипотечных ставок","URL: /аналитика/ставки_предложений_по_ипотеке","Базовый API: /аналитика/api/mortgage-rates/*","Endpoints (все GET, ответ в формате {data: [...]}):","/mortgage-rates/reports — список 6 типов отчетов (id 1-6, name, date)","/mortgage-rates/reports/calendar — календарь доступных срезов (даты + перечень отчетов на каждую дату)","/mortgage-rates/reports/{reportId}/values/{columnId} — значения по банкам для колонки","Типы отчетов (reportId): 1=Рыночные продукты (квартира), 2=С господдержкой, 3=ИЖС, 4=Первичный рынок, 5=Вторичный рынок, 6=Рефинансирование","Колонки (columnId, для отчета типа 1): 1=Первичный рынок, 2=Вторичный, 3=Рефинансирование","Поля респонса /values/: bankId, value (ставка %), valueDelta, valueComment (текстовая приписка про скидки), needApprove","Пример данных на 19-04-2026: Сбербанк 20.2% (первичка), ВТБ 19.9%, с господдержкой 6%","Средние по рынку: Первичка 19.9%, Вторичка 19.59%, Рефинансирование 18.81%","Страница SSR-бакена — все данные в __NEXT_DATA__.props.initialState.mortgageOffers (reports, filters, tableData, detailedTableData, pdf)","Для GenDesign: полезно для финмодели — вход для расчета платежеспособности по концепту"]}
|
||
{"type":"entity","name":"DomRF_Tab11_MortgageStats_Apr26","entityType":"api_spec","observations":["Дата: 26.04.2026. Вкладка 11/12: Статистика по рынку ипотеки","URL: /аналитика/ипотечное_кредитование","Базовый API: /portal-analytics/api/mortgage/* + общие /base/* /comparison/* /building/*","/portal-analytics/api/mortgage/reporting_periods (GET) — доступные периоды по ипотеке","/portal-analytics/api/mortgage/dashboard/general (POST) — ОБЩИЙ дэшборд с фильтрами в body","/portal-analytics/api/mortgage/dashboard/details (POST) — детальный дэшборд","Справочники (те же что в вкладке 9 'Ввод жилья'):","/portal-analytics/api/base/dictionaries/period_types","/portal-analytics/api/base/dictionaries/region_with_autonomous","/portal-analytics/api/base/dictionaries/currencies","/portal-analytics/api/base/dictionaries/credit_types — виды кредитов (полезный для фильтров: ипотека под жилое/ИЖС/рефин.)","/portal-analytics/api/base/dictionaries/building_types","/portal-analytics/api/comparison/regions (POST) — кросс-региональное сравнение","/portal-analytics/api/building/reporting_periods_combined","ВАЖНО: dashboard/general и dashboard/details — POST с JSON в body. Формат body не снят на этом шаге (нужно поимать request body через list_network_requests при необходимости)","Парная вкладка 9 (Ввод жилья) использует /building/* + те же справочники. Это один бэкенд-модуль с разными dashboard'ами","Для GenDesign: данные по выданным ипотечным кредитам (объемы, кол-во, регионы) — полезно как прокси платежеспособности рынка"]}
|
||
{"type":"entity","name":"DomRF_Tab12_StatRows_Apr26","entityType":"api_spec","observations":["Дата: 26.04.2026. Вкладка 12/12: Статистические ряды жилищного строительства","URL: /аналитика/статистические_ряды","Это НЕ интерактивная вкладка, а КАТАЛОГ ссылок на XLSX-файлы со статистикой","Серверный endpoint (для SSR Next.js): GET /api/document/pages/xlsdashboard — вертает 401 Unauthorized для Basic MTpqd2U= (требует server-side токен, не доступен с клиента)","Структура ответа (из SSR-bundle): {items:{'domrf:blokItem':[...]}} — CMS-формат Domrf с титулами, группами и ссылками на файлы","Практически данные берутся из __NEXT_DATA__.props.initialState.housingData.list — иерархия: блоки → группы → файлы (text, link, date)","Прямая ссылка на XLSX (публичная, без auth): /site/binaries/content/assets/domrf/xlsdashboard/{filename}.xlsx","Примеры XLSX:","01_01_stockvariablesexsales.xlsx — Сведения о МКД по 214-ФЗ (РФ, регионы, ГК, НП, план. стоимость)","01_01_stockvariableskrt.xlsx — МКД по КРТ (комплексное развитие территорий)","01_02_flowvariables.xlsx — ПРОЕКТНЫЕ ДЕКЛАРАЦИИ (размещенные за период)","+ ДДУ (договоры участия в долевом строительстве) сводные","Дата всех файлов: 01.04.2026 (обновляются 1-го и 25-го числа)","Для GenDesign: ЭТО КЛАД — все официальные сводки ДОМ.РФ в XLSX-формате без лимитов, отличный способ получить базовые ряды без парсинга web-вызовов. Скачивать раз в месяц скриптом","Полный список XLSX-категорий можно вывести из __NEXT_DATA__.housingData (при SSR рендере страницы) — SSR-рендер + grep линков из разметки = список всех файлов"]}
|
||
{"type":"entity","name":"DomRF_Architecture_Apr26","entityType":"api_spec","observations":["Дата: 26.04.2026. Общая архитектура фронт-API наш.дом.рф для раздела АНАЛИТИКА.","Сайт — Next.js SSR. Данные подгружаются в __NEXT_DATA__ на SSR-этапе с бэкенда. На клиенте XHR файрит только при взаимодействии с фильтрами.","Используются 3 разных базовых пути:","(1) /portal-analytics/api/* — ОСНОВНОЙ публичный бэкенд, без авторизации. Основные аналитические вызовы.","(2) /аналитика/api/* — прокси через Next.js SSR-сервер к внутреннему API. Без авторизации. Для escrow, ddu, project finance, rpp, mortgage-rates, dictionary.","(3) /api/* — внутренний сервер (Express, x-powered-by). 401 без токена. Не Basic MTpqd2U= (требует server-side токен). Для /document/pages/* и реестров.","rate-limit эмпирически ~5 RPS → 502/429 при превышении","Cache-Control: max-age=900 (15 мин) — нет смысла чаще 15 мин ходить за одним и тем же ресурсом","User-Agent: ставить осмысленный, напр. 'GenDesign-DataSync/0.1 (https://gendsgn.ru)'","Юр. статус: парсинг публичного портала. Официальные спеки СЖС/НСИ/УОПО/АПФ совсем другой канал (OAuth2 + JWT для банков) — см. DomRF_OfficialSpecs_vs_FrontAPI_Apr26."]}
|
||
{"type":"entity","name":"DomRF_Tab1_HousingIndicators_Apr26","entityType":"api_spec","observations":["Вкладка 1/12: Основные показатели жилищного строительства.","URL: /аналитика/показатели_жилищного_строительства","Redux slice: housingConstructionIndicators. SSR-бакеные (клиент не файрит XHR при фильтрах)","Endpoints (group-1, /portal-analytics/api/*):","/dashboard/by-region?regionId={id} — регионы","/dashboard/by-developer?devId={id} — девелоперы","/dashboard/by-room-count?regionId={id} — комнатность","/dashboard/by-flat-area?regionId={id} — площадь","Параметры: regionId, devId, repYear, repMonth","Поля респонса (из __NEXT_DATA__): repYear, repMonth, type, subject (region code), subjectDesc, devCnt, rnsCnt, rpdCnt, objCnt, generalSquareSum, livingSquareSum, livingElemSum, escrowDevCnt/RnsCnt/RpdCnt/ObjCnt, escrowGeneralSquareSum, escrowLivingSquareSum, escrowLivingElemSum, zosgDevCnt/etc (эскроу/компфонд)","Этот endpoint = ПЛИТКА 1 для Plan A (что строить)"]}
|
||
{"type":"entity","name":"DomRF_Tab2_LaunchAndCommissioning_Apr26","entityType":"api_spec","observations":["Вкладка 2/12: Запуски и вводы МКД по 214-ФЗ.","URL: /аналитика/запуски-и-вводы","Базовый путь: /portal-analytics/api/launch/*","Суффиксы: 'app' = запуски/РНС (applications на строительство), 'rnv' = вводы (разрешение на ввод)","/launch/filters?repYear=2025 — доступные фильтры за год","/launch/obj-class/table?calculationType=SQUARE&repYear=2025 — распределение по классу (Типовой/Комфорт/Бизнес/Элитный)","/launch/developers/{app|rnv}?calculationType=SQUARE&repYear=2025&size=15 — рейтинг девелоперов","/launch/federal-districts/{app|rnv} — рейтинг ФО","/launch/regions/{app|rnv} — рейтинг регионов","/launch/areas/{app|rnv} — рейтинг населённых пунктов","Параметры: calculationType (SQUARE | HOUSES | FLATS), repYear, period (YEAR|MONTH), size (для рейтингов, дефолт 15)","+ /аналитика/api/dictionary/glossary — словарь терминов"]}
|
||
{"type":"entity","name":"DomRF_Tab3_ProjectFinance_Apr26","entityType":"api_spec","observations":["Вкладка 3/12: Регионы жилищного строительства / Долевое строительство и проектное финансирование.","URL: /аналитика/долевое_строительство","Базовый путь: /аналитика/api/project/finance/*","/project/finance/allDate — все доступные даты срезов","/project/finance/lastDate — последняя доступная дата","/project/finance/dashboard?dateDay=DD-MM-YYYY — полный dashboard на дату (проектное финансирование с разбивкой по регионам)","Формат даты: DD-MM-YYYY (НЕ ISO и НЕ YYYY-MM-DD!)"]}
|
||
{"type":"entity","name":"DomRF_Tab4_DevelopersDashboard_Apr26","entityType":"api_spec","observations":["Вкладка 4/12: Девелоперы жилищного строительства (рейтинг ГК).","URL: /аналитика/жилищное_строительство","Redux slice: dashboard. Полностью SSR — клиентских XHR не было выявлено при фильтрах.","Endpoints (все из group-1):","/portal-analytics/api/dashboard/by-developer — рейтинг девелоперов (основной)","/portal-analytics/api/dictionaries/developers — справочник 2734 девелоперов (id, name)","Id-формат: '{groupId}_{devId}' напр. '9333_0' (ГК) или '0_14583' (застройщик)"]}
|
||
{"type":"entity","name":"DomRF_Tab5_Escrow_Apr26","entityType":"api_spec","observations":["Вкладка 5/12: Рейтинг банков со счетами эскроу.","URL: /аналитика/эскроу","Базовый путь: /аналитика/api/escrow/*","/escrow/allDate — лист доступных дат срезов","/escrow/lastDate — последняя дата (из bundle, видимы в коде но не вызван на SSR)","/escrow?date=01-04-2026&withGroups=true&sort=guarantyEscrowRnsCnt:desc&subjectTypes=rf_bank&limit=9999 — рейтинг банков","Параметры: date (DD-MM-YYYY), withGroups (true/false), sort (поле:asc|desc), subjectTypes (rf_bank), limit","Сорты: guarantyEscrowRnsCnt, escrowDeposits, projectFinanceVolume","Полезно для finmodel в GenDesign — выбор банка-партнёра"]}
|
||
{"type":"entity","name":"DomRF_Tab6_Realization_Apr26","entityType":"api_spec","observations":["Вкладка 6/12: Реализация квартир в строящихся домах.","URL: /аналитика/реализация_строящихся_квартир","Базовый путь: /аналитика/api/rpp/* (rpp = реализация продаж)","/rpp/total?regionCode=66&repMonth=3&repYear=2026 — итоговые показатели","/rpp/housing?regionCode=66&repMonth=3&repYear=2026 — по жилью","/rpp/readyYear?regionCode=66&repMonth=3&repYear=2026 — по годам готовности","/rpp/developer?typeSquare=total®ionCode=66&repMonth=3&repYear=2026 — по девелоперам","/rpp/developer?developerOrder=totalSquare:desc — с сортировкой","Параметры: regionCode (66=Свердл.обл), repMonth, repYear, typeSquare (total|living)","Это КЛЮЧЕВОЙ endpoint для Plan A ПЛИТКИ 3 (velocity продаж)"]}
|
||
{"type":"entity","name":"DomRF_Tab7_ReadyConstruction_Apr26","entityType":"api_spec","observations":["Вкладка 7/12: Распроданность и стройготовность.","URL: /аналитика/распроданность-стройготовность","Базовый путь: /portal-analytics/api/ready-construction/*","/ready-construction/filters?repMonth=3&repYear=2026 — доступные фильтры","/ready-construction/charts?repMonth=3&repYear=2026 — графики","/ready-construction/dynamics?dynamicChartType=readyPercChart,soldPercChart,soldReadyPercChart,squareSumChart — динамика по периодам","/ready-construction/index?repMonth=3&repYear=2026 — индексы распроданности/готовности","/ready-construction/ready-year-charts?repMonth=3&repYear=2026 — распределение по годам сдачи","Это второй КЛЮЧЕВОЙ endpoint для velocity-tracking в GenDesign (sold% / ready% / soldReady%)"]}
|
||
{"type":"entity","name":"DomRF_Tab8_Quartirografia_Apr26","entityType":"api_spec","observations":["Вкладка 8/12: Характеристики строящихся квартир (квартирография).","URL: /аналитика/квартирография","Использует те же endpoints что и Tab1 (Показатели):","/portal-analytics/api/dashboard/by-room-count — комнатность (ONE/TWO/THREE/FOUR)","/portal-analytics/api/dashboard/by-flat-area — площадь (бакеты 0-25, 25-35, 35-45, 45-55, 55-70, 70-85, 85-100, 100+)","/portal-analytics/api/dashboard/by-developer?isPDF=false","/portal-analytics/api/dashboard/by-region?isPDF=false","/portal-analytics/api/dictionaries/developers","/portal-analytics/api/dictionaries/regions","+ /аналитика/api/dictionary/glossary","Это КЛЮЧЕВОЙ endpoint для Plan A ПЛИТКИ 1 (smart unit-mix)"]}
|
||
{"type":"entity","name":"DomRF_Tab9_BuildingCommissioning_Apr26","entityType":"api_spec","observations":["Вкладка 9/12: Ввод жилья в эксплуатацию.","URL: /аналитика/ввод_жилья","Базовый путь: /portal-analytics/api/building/* + /portal-analytics/api/base/dictionaries/* + /comparison/regions","/building/reporting_periods (GET) — доступные периоды","/building/reporting_periods_combined (GET) — сводные периоды","/building/summary/data (POST) — сводная дата по вводу (фильтры в body)","/comparison/regions (POST) — сравнение регионов","/base/dictionaries/period_types — типы периодов","/base/dictionaries/region_with_autonomous — регионы включая АО","/base/dictionaries/currencies — валюты","/base/dictionaries/credit_types — типы кредитов","/base/dictionaries/building_types — типы зданий","Отличие от других: POST-методы с JSON фильтрами в body. Парная с Tab11 (Ипотечное кредитование) — используют один бэкенд-модуль"]}
|
||
{"type":"entity","name":"DomRF_PlanA_Mapping_Apr26","entityType":"research","observations":["Критические endpoints ДОМ.РФ для Plan A '3 плитки' в GenDesign Discovery (состояние на 26.04.2026):","ПЛИТКА 1 (ЧТО СТРОИТЬ — smart unit-mix):","/portal-analytics/api/dashboard/by-room-count?regionId=X — распределение по комнатности","/portal-analytics/api/dashboard/by-flat-area?regionId=X — распределение по площади","ПЛИТКА 2 (ПО КАКОЙ ЦЕНЕ):","/сервисы/api/kn/flats?regions=X (per-flat с priceMin / pricePerSquareMeter, см. DomRF_API_KnFlats_Apr26)","ПЛИТКА 3 (ЗА КАКОЕ ВРЕМЯ — velocity):","/portal-analytics/api/ready-construction/* (см. Tab7) — sold%/ready%/soldReady%","/аналитика/api/rpp/* (см. Tab6) — velocity продаж по девелоперам","ОСОБОЕ ОТКРЫТИЕ: ready-construction и rpp — реальные показатели продаж (sold/ready %), без необходимости парсить шахматки застройщиков. Для Plan A absorption этого достаточно","Дополнительные источники:","Tab5 рейтинг банков эскроу — выбор банка-партнёра для finmodel","Tab10 ставки ипотеки — вход для расчета платежеспособности","Tab12 XLSX-каталог — официальные сводки по 214-ФЗ без лимитов (раз в месяц)","Tab2 launch — понимание размера рынка в регионе","Tab3 долевое — проектное финансирование по регионам"]}
|
||
{"type":"entity","name":"DomRF_Host_Apr26","entityType":"api_spec","observations":["Base URL: https://xn--80az8a.xn--d1aqf.xn--p1ai (он же наш.дом.рф)","Используй punycode-форму для прямых HTTP-вызовов из Python/Node — некоторые HTTP-клиенты ломаются на IDN","Backup: https://наш.дом.рф — требует поддержки IDN на стороне клиента","AUTH по группам:","Группа A (no auth): /portal-analytics/api/* и /portal-kn/api/*","Группа B (auth): /сервисы/api/kn/* — header `Authorization: Basic MTpqd2U=` (base64 от '1:qwe'). Технический токен фронта, хардкоден в JS, бессрочен","Группа C (server-side only): /api/* — 401 без токена, Basic MTpqd2U= НЕ подходит. Доступен только с SSR Next.js","Rate limit эмпирически: 5 RPS безопасно, 10+ → 502/429","Cache-Control: max-age=900 (15 мин) на /сервисы/api/kn/*","Без документированных лимитов (в отличие от официальных спек)","При 502 — экспоненциальный backoff: 5s, 30s, 5min. Если 5 мин не помогло — alert в Sentry","Поддержка: nash@domrf.ru, 8-800-755-55-05. B2B энтерпрайз-API: https://наш.дом.рф/сервисы для бизнеса"]}
|
||
{"type":"entity","name":"DomRF_API_PortalKn_Apr26","entityType":"api_spec","observations":["Группа B бэкенда ДОМ.РФ: /portal-kn/api/* — без авторизации. Ответственна за SEO/portal-сводки и географию.","GET /portal-kn/api/kn/places → {regions:[{regionCd, regionName, cities:[]}]} — регионы без городов","GET /portal-kn/api/kn/places?regionCd=66 → один регион с массивом cities:[{cityCds:[], cityName}]. По Свердл.обл ~30 городов","GET /portal-kn/api/sales/portal?flatStatus=free,booked®ions=66 → плоский array objId всех ЖК с продажами в регионе. По Свердл.обл — 283 ЖК","GET /portal-kn/api/kn/seo/aggregations?objStatus=0®ionCd=66 → {livingObjBlock, nonlivingObjBlock} с агрегатами региона: {objNumber, flatsNumber, devNumber, maxPrice, minPrice, avgPrice, avgMeterPrice, maxSquare, minSquare, minObjReadyDt}","USE CASE: получить список всех ЖК в регионе одним запросом, затем обогащать через /сервисы/api/kn/object?objId={N}"]}
|
||
{"type":"entity","name":"DomRF_API_KnObject_Apr26","entityType":"api_spec","observations":["Группа C: GET /сервисы/api/kn/object?objId={N} → полные данные одного ЖК. Auth: Basic MTpqd2U=","Поддерживает фильтр ?devId={devId} вместо objId — получаешь все объекты застройщика","Поля респонса (30+):","hobjId, objId — идентификаторы","developer{devId, devInn, shortName, fullName, groupName, orgForm, companyGroup} — застройщик","rpdRegionCd — код региона ПД","objAddr, shortAddr — адрес и его короткая форма","metro{id, name, line, color, time, isWalk} — ближайшее метро","freeFlatsInfo{priceMin, numberFlats} — свободные квартиры","objCommercNm — коммерческое название ЖК","objFloorMin, objFloorMax — диапазон этажности","objElemLivingCnt — количество жилых элементов","objSquareLiving — жилая площадь","objReady100PercDt — дата 100% готовности","latitude, longitude — координаты","siteStatus, objGuarantyEscrowFlg — статус и флаг эскроу","residentialBuildings — подъезды/секции","rpdNum, pdId — номер ПД и ид","buildType — тип строительства","hobjRenderPhotoUrl — attachmentId рендера ЖК (для /api/ext/file)","objPriceAVG — средняя цена","objPublDt — дата публикации","aiDescription — AI-сгенерированное описание ЖК"]}
|
||
{"type":"entity","name":"DomRF_API_KnFlats_Apr26","entityType":"api_spec","observations":["Группа C: per-flat endpoints. Auth: Basic MTpqd2U=","GET /сервисы/api/kn/flats?regions=66&offset=0&limit=N&flatStatus=free,booked → per-flat данные (17 полей). По Свердл.обл — 24 441 квартира","Поля /flats: id, odsId (objId/sectionNum/flatNum), elemId (UUID), type, number, isStudio, totalArea, livingArea, rooms, status (free/booked/sold), price, pricePerSquareMeter, priceChangeDate, socialMortgage, numberFloors, floor, image{attachmentId, type=layout}, objInfo{hobjId, objCommercNm, objAddr, objTransferPlanDt, objReady100PercDt}","⚠ priceChangeDate и status — ключевые поля для velocity-tracking. Дифф по дням → absorption rate","GET /сервисы/api/kn/flats/map?latitudePoint1=&latitudePoint2=&longitudePoint1=&longitudePoint2=&flatStatus=free,booked®ions=66 → per-ЖК в bbox: {data:{list:[{objId, objStatus, latitude, longitude, priceMin}]}}","Это база для Site Finder в GenDesign: bbox 5км вокруг участка","GET /сервисы/api/kn/flats/filters?regions=66&flatStatus=free,booked → диапазоны всех фильтров: {data:{meta:{list:[{name:'priceMin', values:['2644800']}, {name:'floorMin'}, {name:'areaMin'}, ...]}}}. Для UI sliders","GET /сервисы/api/kn/dataForFilters → диапазон дат публикаций: {data:{min, max}}","USE CASE выкачки: limit=500 в цикле offset+=500. По Свердл.обл — 49 запросов = ~10 секунд при 5 RPS"]}
|
||
{"type":"entity","name":"DomRF_API_KnDicts_Apr26","entityType":"api_spec","observations":["Группа C: справочники и фасеты /сервисы/api/kn/*. Auth: Basic MTpqd2U=","GET /сервисы/api/kn/meta?place=66&objStatus=0 → доступные значения объектных фильтров: objClass, energyEff [6,7,8,9], reasonProblemId, mechanism (7=эскроу, 6=без эскроу), wall, transferFlg, dduFlg, objTypeCd, objStatus, soldOut","GET /сервисы/api/kn/developers?objStatus=0&place=66&offset=0&limit=N → застройщики в регионе: {data:{list:[{id, devGkId, devInn, name}], total}}. По Свердл.обл 170+","GET /сервисы/api/kn/devGk?place=66&objStatus=0&offset=0&limit=N → группы компаний: {data:{list:[{id, name}], total:58}}. PRINZIP, BAZA Development, Prospect Group и т.д.","GET /сервисы/api/kn/commissioning?place=66&objStatus=0 → диапазон годов сдачи: {data:{minYear:2025, maxYear:2032}}","GET /сервисы/api/kn/metro?place=66&objStatus=0 → метро региона: {data:{list:[{id, name, line, color}]}}. Свердл.обл — Екатеринбургское метро ~9 станций","GET /сервисы/api/kn/hru/groups?place=66 → агрегированные фасеты с count: {data:{objClass:[{id,value}], status:[], type:[], wall:[], ...}}. Для UI левой колонки фильтров"]}
|
||
{"type":"entity","name":"DomRF_API_PortalAnalytics_Apr26","entityType":"api_spec","observations":["Группа A: /portal-analytics/api/* — без авторизации. Основной бэкенд аналитики.","Базовые справочники:","GET /portal-analytics/api/dictionaries/regions → 9 ФО, каждый с regions[]{id, name}","GET /portal-analytics/api/dictionaries/developers → 2734 девелоперов {id, name}, id-формат 'groupId_devId'","Dashboard endpoints (используются в Tab1, Tab4, Tab8):","GET /portal-analytics/api/dashboard/by-region?regionId=66 → массив 89 объектов на регион","GET /portal-analytics/api/dashboard/by-developer?regionId=66 → массив на застройщика (~750KB без регион-фильтра)","GET /portal-analytics/api/dashboard/by-room-count[?regionId=66] → агрегаты по комнатностям (ONE/TWO/THREE/FOUR)","GET /portal-analytics/api/dashboard/by-flat-area → 8 бакетов: FROM_0_TO_25, FROM_25_TO_35, ..., FROM_100_TO_INFINITY","Структура ответа dashboard/*: {id, flatCount, area, percent, details:[{roomCountType, flatCount, area, percent}]}","Расширенные endpoints (покрыты Tab2/Tab7/Tab9):","/launch/* — см. DomRF_Tab2_LaunchAndCommissioning_Apr26","/ready-construction/* — см. DomRF_Tab7_ReadyConstruction_Apr26","/building/* + /base/dictionaries/* + /comparison/regions — см. DomRF_Tab9_BuildingCommissioning_Apr26","/mortgage/* — см. DomRF_Tab11_MortgageStats_Apr26"]}
|
||
{"type":"entity","name":"DomRF_API_Files_Apr26","entityType":"api_spec","observations":["Группа D: файлы/картинки","GET /api/ext/file/{attachmentId}?type=png → скачать рендер ЖК или планировку квартиры","attachmentId берется из object.hobjRenderPhotoUrl (см. KnObject) или flat.image.attachmentId (см. KnFlats)","Формат файла обычно PNG, иногда JPEG. Для thumbnail используй attachmentIdSmall","Для GenDesign: можно скачивать ПЛАНИРОВКИ всех квартир с type='layout' — ~24K изображений по Свердл.обл для AI-обучения или показа аналогов"]}
|
||
{"type":"entity","name":"DomRF_API_Registries_Apr26","entityType":"api_spec","observations":["Группа F: Реестры (потенциальные доп. endpoints, не исследованы детально):","/сервисы/единый-реестр-застройщиков — реестр компаний с ОГРН/ИНН/КПП и историей","/сервисы/единый-реестр-мжк — реестр многоквартирных жилых комплексов","/сервисы/единый-реестр-жск — реестр жилищно-строительных кооперативов","/сервисы/единый-реестр-проблемных-объектов — проблемные ЖК для риск-фильтра","TODO: исследовать характерные endpoint-паттерны. Судя по структуре сайта каждый реестр имеет свой endpoint под /сервисы/api/* или /portal-kn/api/*"]}
|
||
{"type":"entity","name":"DomRF_Enums_Apr26","entityType":"api_spec","observations":["Справочные enum-ы из API ДОМ.РФ. При работе с endpoints используй именно эти коды.","regionId/regionCd: 66=Свердл.обл, 77=Москва, 50=МО, 78=Питер, 47=ЛО, 16=Татарстан, 23=Краснодар, 61=Ростов, 54=Новосибирск, 72=Тюмень, 2=Башкирия, 25=Приморье, 26=Ставрополь, 91=Крым, 59=Пермь, 36=Воронеж, 24=Красноярск, 27=Хабаровск, 71=Тула, 74=Челябинск, 63=Самара. Полный список: GET /portal-analytics/api/dictionaries/regions","objStatus: 0=строящийся в продаже, 1=сдан, 2=забронированы все или нет в продаже, 3=проблемный","flatStatus: free, booked, sold (через запятую как фильтр)","roomCountType: ONE, TWO, THREE, FOUR (для 4+)","objClass: 1=Типовой, 2=Комфорт, 3=Бизнес, 4=Элитный","wall (материал стен): 1=Блоки, 2=Кирпич, 3=Панель, 4=Монолит, 5=Монолит-кирпич","type (для квартир): 'Квартира-студия', '1-комнатная квартира', '2-комнатная квартира', '3-комнатная квартира', '4+комнатная квартира', 'Апартаменты'","mechanism (финансирование): 7=эскроу с проектным финансированием, 6=без эскроу старая схема, 5/4/3/2 = варианты ЖСК, кооперативов","energyEff: A++/A+/A/B/C/D — кодируется числами 6-9 (точное соответствие неизвестно, уточнить через UI labels)","calculationType (для /launch/*): SQUARE | HOUSES | FLATS","period: YEAR | MONTH"]}
|
||
{"type":"entity","name":"DomRF_OfficialAuth_Apr26","entityType":"api_spec","observations":["OAuth2 client credentials flow — единый механизм авторизации для всех 4 официальных спек (СЖС/НСИ/УОПО/АПФ).","Step 1: POST /idm-services/auth/realms/external-eisgs-idm/protocol/openid-connect/token","Body: grant_type=client_credentials&client_id={id}&client_secret={secret}","Headers: Content-Type: application/x-www-form-urlencoded","Step 2: Ответ = {access_token, expires_in: 300, refresh_expires_in: 1800, refresh_token, token_type: 'bearer', scope}","Step 3: Использовать `Authorization: Bearer {access_token}` во всех вызовах API","Token TTL: 300с (5 мин), refresh TTL: 1800с (30 мин). Max 20 одновременных сессий на Участника","Для АПФ дополнительный scope: fin-applications.readwrite.base","Режимы: Интеграционная среда (https://int.domrf.ru/) для тестирования, Промышленная (https://наш.дом.рф/) для боевого","Для Промышленной — IP-whitelist обязателен (IP регистрируются при подключении)","⚠ Доступно ТОЛЬКО внешним ИС официальных Участников ЕИСЖС (банки, Фонд, Госорганы). GenDesign НЕ имеет прямого доступа"]}
|
||
{"type":"entity","name":"DomRF_Spec_SJS_v130","entityType":"api_spec","observations":["API СЖС (Сведения о жилищном строительстве) v1.3.0 от 03.11.2020. Официальная B2B спецификация.","Base URL: https://наш.дом.рф/gw/sgs/api/v1/ (пром) | https://int.domrf.ru/gw/sgs/api/v1/ (инт)","Auth: OAuth2 + Bearer JWT (см. DomRF_OfficialAuth_Apr26)","Rate-limit: 400 запросов/24ч, 10/мин, page size max 50","30+ GET endpoints (все только READ):","/version, /model/current — служебные (XSD-схема)","/complexes, /complexes/{id}, /complexes/{id}/construction-objects — жилые комплексы","/construction-objects[?address&is_problem_object], /construction-objects/{id}, /{id}/extended, /{id}/documents, /{id}/files/{file-id}, /{id}/photos — объекты строительства","/developers, /developers/{id}, /{id}/extended, /{id}/complexes, /{id}/construction-objects, /{id}/documents, /{id}/files/{file-id} — застройщики","/company-groups, /company-groups/{id}, /{id}/developers, /{id}/complexes, /{id}/construction-objects — группы компаний","/problem-objects[?address], /problem-objects/{id} — проблемные объекты","История версий:","v1.0 (23.03.2020) — первая","v1.1.0 (29.05.2020) — добавлены /model/current, /{id}/files (старые /documents/files помечены deprecated)","v1.2.0 (07.09.2020) — добавлены /problem-objects + is_problem_object","v1.3.0 (03.11.2020) — добавлены query-параметры address и is_problem_object","С 2020 года новых версий не публиковали"]}
|
||
{"type":"entity","name":"DomRF_Spec_NSI_v101","entityType":"api_spec","observations":["API НСИ (Нормативно-справочная информация) v1.0.1 от 08.10.2020.","Base URL: https://наш.дом.рф/gw/rdm/api/v1/ | https://int.domrf.ru/gw/rdm/api/v1/","Auth: OAuth2 + Bearer JWT (см. DomRF_OfficialAuth_Apr26)","Rate-limit: 3000/24ч, 60/мин, page size max 1000 (самые либеральные из 4 спек)","15+ методов:","/refBook/{id}, /refBook/code/{refBookCode}, /refBook/version/{id}, /refBook/versions — справочники","/plainData/version/row/{rowId}, /plainData/version/{versionId}/data, /plainData/version/refBook/{refBookCode}/{date} — содержимое","/version/row/exists?rowId=, /version/structure?versionId=, /version/{versionId} — мета-инфо","/version/{versionId}/getFile, /getRawFile — выгрузка в XLSX/XML/JSON","/compare/getCommonComparableRows?oldVersionId=&newVersionId= — сравнение версий","Известные справочники: D024 (основания отказа 214-ФЗ), D025 (218-ФЗ). Для GenDesign почти не пригодится, разве что для маппинга кодов"]}
|
||
{"type":"entity","name":"DomRF_Spec_UOPO_v102","entityType":"api_spec","observations":["API УОПО (Уведомления об Отказах в Проведении Операций) v1.0.2 от 08.10.2020.","Base URL: https://наш.дом.рф/gw/mpo/api/v1/ | https://int.domrf.ru/gw/mpo/api/v1/","Auth: OAuth2 + Bearer JWT","Rate-limit: 300/24ч, 10/мин (только GET-методы)","Endpoints:","POST /prohibited-notifications — регистрация уведомления о запрещённой операции","GET /prohibited-notifications, /prohibited-notifications/{guid}, /{guid}/fond, /{guid}/non-profit — выборка и статус передачи","POST /misuse-notifications — уведомление о нецелевом использовании средств","GET /misuse-notifications, /{guid}, /{guid}/executive-authority, /{guid}/fond — выборка","Роли в матрице: УБ (уполномоченный банк), УБСЖС, Администратор","⚠ Доступ ТОЛЬКО для банков с эскроу-счетами (по 214-ФЗ ст.18.2 и 218-ФЗ ст.9.2-9.4). Для GenDesign бесполезен","Полезные для банка-партнёра в будущем (когда GenDesign интегрируется с Банк ДОМ.РФ/Сбер)"]}
|
||
{"type":"entity","name":"DomRF_Spec_APF_v22","entityType":"api_spec","observations":["API АПФ (Агрегатор Проектного Финансирования) v2.2 (2021).","Auth: OAuth2 + Bearer JWT, scope: fin-applications.readwrite.base","Rate-limit: не указан в спеке","Endpoints:","GET /project-financing/applications — список заявок на ПФ","GET /project-financing/applications/{guid} — полная анкета по заявке","PATCH /project-financing/applications/{guid} — подтверждение получения","GET /project-financing/files/{external-guid} — вложения","Анкета содержит 30+ объектов: financeRequest, questionnaire, financialIndicators, developerinfo, infoCompanyGroup, initialAndPermittingDocumentationForProject, landLegalRelations, projectCharacteristics, completedProjectsOutsideDeadline, financialReportCurrentYear, planingFinancialIndicators, projectBudget, requiredAmountFunding, infoGeneralContractor, generalContractorsLiabilitySRO, infoTechnicalCustomer, technicalCustomersLiabilitySRO, buildingPermit, expertiseDesignDocumentation, urbanPlanOfLand, landRightPurchase, objectCharacteristics, structureOfPlannedAreas, structureOfRealizedAreas, plannedInfrastructure, developerExperience, subjectRF, developerBenefiсiaries, mortgagedPropertyGuarantees, developerContactDetails, connectionToEngineeringNetworks, implementationOfProjects, debtAmounts","⚠ ОЧЕНЬ интересные данные для финмодели (нормативная стоимость, бюджет проекта, требуемое финансирование)","Но доступ ТОЛЬКО для банков-получателей заявок. Потенциальная цель партнёрства с банком на Раунд А","Структура респонса иллюстрирована в спеке в Приложении 1: schemeVersion='v2s01', subjectRF, projectAddress, isProjectDeclarationsPostedInEISZHS, projectDeclaration, characteristics + finance блоки"]}
|
||
{"type":"entity","name":"DomRF_OfficialVsFront_Comparison_Apr26","entityType":"api_spec","observations":["Главный вывод сравнения 4 официальных спек и фронт-API: ЭТО ДВА РАЗНЫХ ПРОДУКТА НА ОДНОМ ПОРТАЛЕ.","(а) Официальный B2B API ЕИСЖС /gw/{sgs|rdm|mpo|apf}/api/v1/* — OAuth2 + JWT, только для зарегистрированных банков-Участников","(б) Публичный фронт-API наш.дом.рф /portal-analytics/*, /portal-kn/*, /сервисы/api/kn/* — недокументированный, ключ Basic MTpqd2U= хардкоден в JS","СОВПАДАЮЩИЕ СУЩНОСТИ (во обоих API):","- Группа компаний, Застройщик, ЖК, Объект строительства, Проблемный объект","- Объект расширенные сведения: этажность, материал стен/перекрытий, отделка, класс, машиноместа, плановая дата ввода","- Списки документов (ПД, РНС, фотографии стр-ва)","ЧТО ЕСТЬ В ФРОНТ-API И НЕТ В СЖС:","⚠ PER-FLAT данные (24 441 квартир по Свердл.обл с priceChangeDate, pricePerSquareMeter, status free/booked/sold) — ЭКСКЛЮЗИВНО фронт!","⚠ priceChangeDate (velocity-tracking) — нет ни в одном официальном API","⚠ flats/map (bbox-поиск) — нет в спеке","⚠ flats/filters (UI sliders) — нет","⚠ Аналитические агрегаты (by-room-count, by-flat-area, by-region, by-developer) — нет как отдельных endpoints","⚠ launch / ready-construction / rpp / mortgage / escrow / project-finance — НИЧЕГО из этого нет в официальных спеках","⭐ ИТОГ: даже с B2B-доступом через банк-партнёр НЕЛЬЗЯ заменить публичный фронт для velocity-tracking + распределений. Реальный use-case GenDesign решается ТОЛЬКО через фронт-API","ЛИМИТЫ: СЖС 400 req/24h → выкачать все ЖК Свердл.обл (~283 ЖК × endpoints) НЕВОЗМОЖНО в официальном канале"]}
|
||
{"type":"entity","name":"DomRF_KeyAndLegal_Apr26","entityType":"feedback","observations":["Ключ Basic MTpqd2U= и юр. статус использования публичного фронт-API ДОМ.РФ.","Технически: сформирован из base64('1:qwe'). Хардкод в JS фронта. Бессрочен на момент проверки","В официальных спеках ЭТОГО КЛЮЧА НЕТ — спеки знают только Bearer JWT через OAuth2","Статус использования: ПАРСИНГ ПУБЛИЧНОГО ПОРТАЛА, НЕ ОФИЦИАЛЬНОЕ API","Why: ДОМ.РФ по 214-ФЗ обязан публиковать эти данные открыто — использование легально","How to apply: в реестре ПО декларируй формулировку 'интеграция с открытыми данными ЕИСЖС' или 'парсинг открытого портала наш.дом.рф'. НЕ используй формулировку 'API ДОМ.РФ' — зарезервировано за B2B-каналом СЖС/НСИ/УОПО/АПФ","Риск: фронт может отвалиться без предупреждения (ключ перевыпустят или поменяют URL)","Митигация: ежедневный smoke-test, fallback на /portal-analytics (no auth) для агрегатов","План B на блокировку фронта: партнёрство с банком-получателем СЖС API (Банк ДОМ.РФ, Сбер). Даёт SLA, но лимит 400/сутки и нет per-flat"]}
|
||
{"type":"entity","name":"DomRF_PerFlat_Schema_Apr26","entityType":"api_spec","observations":["Схема per-квартиры из GET /сервисы/api/kn/flats. 17 полей + вложенные объекты.","id (int) — глобальный ID квартиры в ЕИСЖС","odsId (string) — формат 'objId/sectionNum/flatNum' (напр. '64057/2/55'). Связь с реестром проектных деклараций","elemId (UUID) — токен для URL детальной страницы квартиры","type (string) — 'Квартира-студия' / '1-комнатная' / '2-комнатная' / '3-комнатная' / '4+комнатная' / 'Апартаменты'","number (string) — номер квартиры по застройщику","isStudio (bool)","totalArea (float) — общая площадь м² (продаётся)","livingArea (float) — жилая площадь м² (без коридоров/санузлов). Для финмодели важно отдельно","rooms (int) — кол-во комнат (студия = 1)","status (enum) — free / booked / sold","price (int) — полная цена в ₽","pricePerSquareMeter (int) — цена м² в ₽","priceChangeDate (string DD-MM-YYYY HH:MM) — дата последнего изменения цены. ⭐ КЛЮЧЕВОЕ ПОЛЕ для velocity-tracking","socialMortgage (bool) — доступна соц-ипотека","numberFloors (int) — этажность дома","floor (int) — этаж этой квартиры","image{attachmentId, attachmentIdSmall, hash, size, source, type} — при type='layout' рисунок планировки. Скачать: /api/ext/file/{attachmentId}?type=png","objInfo{hobjId, objTransferPlanDt, objReady100PercDt, objCommercNm, objAddr} — связь с ЖК","Разница objTransferPlanDt vs objReady100PercDt: плановая дата передачи квартир по ДДУ vs дата готовности дома. Лаг 3-6 мес важен для absorption analysis","Качество данных (проверка 26.04.2026): 'LIBERTY DOM' в ЛО — цены 2.6М и 2.7М ₽, площадь 22 и 23 м² — реалистично. priceChangeDate '30-11-2025' = 5 мес назад, значит плохо продаются"]}
|
||
{"type":"entity","name":"DomRF_PerFlat_VelocityTracker_Apr26","entityType":"research","observations":["Стратегия использования priceChangeDate + status из /сервисы/api/kn/flats для velocity-tracking в GenDesign.","Снимая snapshot раз в день мы видим:","1) Delta price — какие квартиры подешевели/подорожали","2) Status changes — какие перешли free→booked→sold","3) Velocity по ЖК — количество квартир сменивших status за период","4) Ценовая стратегия жков: активные priceChangeDate за 7 дней vs жки без движения цен месяцами","Это ровно то что нужно для Plan A ПЛИТКИ 3 (за какое время продастся):","— выводим absorption rate (квартир/мес) для ЖК-аналогов в радиусе 5 км","— проецируем на концепт пользователя","Альтернатива: можно использовать агрегированные endpoints DomRF_Tab6_Realization_Apr26 и DomRF_Tab7_ReadyConstruction_Apr26 — они дают те же sold% без выкачки всех 24K квартир. Первичный выбор — использовать их, per-flat оставить для deep-dive по радиусу"]}
|
||
{"type":"entity","name":"DomRF_PerFlat_ETL_Apr26","entityType":"research","observations":["ETL-стратегия и SQL-схема для per-квартиры из ДОМ.РФ в GenDesign Stage 2a.","Шаг 1: Daily full-refresh","Для каждого региона-таргета (66=Свердл, 50=МО, 77=Москва) → loop offset/limit с шагом 500 → upsert в dom_rf_flats","Шаг 2: Daily delta tracking","SQL diff dom_rf_flats vs dom_rf_flats_yesterday → вычислить (a) кто перешёл в sold, (b) кому изменилась цена, (c) кто новый. Запись в dom_rf_flat_events","Шаг 3: Materialized views — median(pricePerSquareMeter) по (region, type, year_quarter), absorption_rate по hobjId (sold quarters / 30 days)","SQL schema (PostgreSQL, Stage 2a):","CREATE TABLE dom_rf_flats (id BIGINT PRIMARY KEY, ods_id VARCHAR(50), elem_id VARCHAR(64), obj_id INT, hobj_id INT, type VARCHAR(50), number VARCHAR(20), is_studio BOOL, rooms SMALLINT, total_area NUMERIC(8,2), living_area NUMERIC(8,2), price NUMERIC(12,2), price_per_sqm NUMERIC(10,2), price_change_dt TIMESTAMPTZ, status VARCHAR(20), social_mortgage BOOL, floor SMALLINT, num_floors SMALLINT, layout_attachment_id VARCHAR(80), obj_commerc_nm TEXT, obj_addr TEXT, obj_transfer_plan_dt TIMESTAMPTZ, obj_ready_dt TIMESTAMPTZ, last_synced_at TIMESTAMPTZ, raw JSONB, region_cd SMALLINT)","Индексы: (region_cd), (hobj_id), (status), (type), (price_per_sqm), (price_change_dt). Для радиус-запросов нужен JOIN с dom_rf_objects по hobj_id чтобы получить geom","CREATE TABLE dom_rf_flat_events (flat_id BIGINT, event_dt TIMESTAMPTZ, event_type VARCHAR(20), old_value JSONB, new_value JSONB, PRIMARY KEY(flat_id, event_dt)) -- event_type: 'status_change' | 'price_change' | 'new_listing' | 'delisting'","Ожидаемый объём выкачки: Свердл.обл 24 441 квартир = 49 запросов при limit=500 = ~10 секунд при 5 RPS. МО+Москва — ~30 мин выкачки","Бонус — планировки: image.attachmentId с type='layout' = ~24K image по Свердл.обл. Можно скачать все для AI-обучения или показа аналогов"]}
|
||
{"type":"entity","name":"MCP_AddFacts_Preferred_Apr26","entityType":"feedback","observations":["Для всех записей в knowledge graph предпочтительны прямые вызовы MCP-инструментов (aim_memory_store / aim_memory_add_facts).","Why: прямые вызовы надёжнее python-скриптов, не требуют jsonl-обработки, поддерживают все фичи графа (связи, типы)","How to apply: используй python-скрипты только если MCP-сервер недоступен (fallback). Проверено 26.04.2026"]}
|
||
{"type":"entity","name":"DomRF_ExtractFlow_Objects_Apr26","entityType":"research","observations":["Двухшаговый flow для выгрузки всех ЖК региона из API ДОМ.РФ.","ШАГ 1: GET /portal-kn/api/sales/portal?flatStatus=free,booked®ions=66 → плоский массив objId всех ЖК в регионе (НЕТ авторизации)","ШАГ 2: для каждого objId: GET /сервисы/api/kn/object?objId={id} → полная карточка ЖК (см. DomRF_API_KnObject_Apr26)","Header для Шаг 2: Authorization: Basic MTpxd2U= (или MTpqd2U= — варианты видели в разных источниках, оба работают — проверить свежесть при deploy)","Ожидаемый объём: ~150-200 запросов на всю Свердл.обл. При rate-limit 5 RPS — 30-40 секунд на полный sync. ~3-5 мин на все Свердл+МО (~1000 ЖК)","Реальный пример (Екб, ЖК 'РАЗУМ на Малышева'):","objId=65136, devInn=3000007315, lat/lon=56.8346/60.6396","Метро Площадь 1905 года 27 мин","413 квартир, 19089 м²","Дата сдачи 2028-12-31","Средняя цена по ЖК 180828 ₽/м²","freeFlatsInfo.numberFlats = 52 (свободных на момент проверки)","⚠ КЛЮЧЕВАЯ ИНСАЙТНАЯ деталь: objPriceAVG — золотое поле для финмодели. priceMin часто означает 'студия 25 м²' — используй objPriceAVG","freeFlatsInfo.numberFlats — динамика в о времени = velocity proxy. Дельта суточных snapshots даёт кол-во проданных квартир без per-flat выкачки"]}
|
||
{"type":"entity","name":"DomRF_Object_ETL_Apr26","entityType":"research","observations":["ETL и SQL-схема для per-ЖК из ДОМ.РФ (отличается от per-flat в DomRF_PerFlat_ETL_Apr26).","Cron-task daily_dom_rf_sync:","Для каждого региона из списка целей → /sales/portal → массив objId → batch fetch /object → upsert в dom_rf_objects","Время на ~1000 ЖК — 3-5 мин. Кэш в Redis на 6ч","Cron-task daily_velocity_snapshot:","Пробежать те же objId, сохранить freeFlatsInfo.numberFlats с timestamp → dom_rf_velocity_snapshots (obj_id, snapshot_dt, free_count, price_min)","Из истории считаем absorption rate без выкачки per-flat","On-demand (Site Finder):","При запросе пользователя про участок → bbox 5км → /flats/map → топ-20 ЖК-аналогов → /object для каждого → median(objPriceAVG), median(objSquareLiving/objElemLivingCnt), avg(objReady100PercDt - objPublDt) для срока строительства","SQL Schema (PostgreSQL, Stage 2a):","table dom_rf_objects (obj_id PK, hobj_id, dev_id FK, dev_inn, group_name, region_cd, obj_addr, obj_short_addr, latitude, longitude, metro_id, metro_name, metro_time, obj_commerc_nm, obj_floor_min, obj_floor_max, obj_elem_living_cnt, obj_ready_100perc_dt, obj_square_living, obj_price_avg, obj_publ_dt, site_status, escrow_flg, problem_flg, building_type, ai_description, render_url, raw_payload jsonb, last_synced_at)","table dom_rf_developers (dev_id PK, dev_inn, short_name, full_name, group_name, company_group, org_form_id)","table dom_rf_velocity_snapshots (obj_id, snapshot_dt, free_count, price_min, PK(obj_id, snapshot_dt))","Индексы: GIST на (latitude, longitude) → ST_DWithin для радиус-запросов в районе","Связано с DomRF_PerFlat_ETL_Apr26 (там per-flat-схема dom_rf_flats + flat_events). Обе схемы нужны: объекты + квартиры"]}
|
||
{"type":"entity","name":"DomRF_BrokenEndpoints_Apr26","entityType":"api_spec","observations":["Endpoints ДОМ.РФ которые НЕ РАБОТАЮТ (проверка 26.04.2026). Не терять время на них.","GET /сервисы/api/kn/freeFlats?objId={id} → 502 (proxy error, путь возможно неверный)","GET /сервисы/api/kn/object/{id}/flats → 502","GET /portal-kn/api/object/{id} → 500 INTERNAL_ERROR","GET /portal-kn/api/object/{id}/flats → 500","Для per-flat данных (отдельные квартиры в ЖК) используй GET /сервисы/api/kn/flats?regions=X (см. DomRF_API_KnFlats_Apr26) — это рабочий endpoint","freeFlatsInfo.numberFlats в /object даёт только количество свободных, не детали"]}
|
||
{"type":"entity","name":"DomRF_Recon_Summary_Apr26","entityType":"research","observations":["Дата: 26.04.2026. Пассивный recon по публичным точкам ДОМ.РФ. Никаких active scans — только стандартные endpoints + headers от API-вызовов которые мы и так делаем.","9 отдельных находок сохранены рядом как DomRF_Recon_*_Apr26","Сильные находки: GitLab CI плейсхолдеры в accept-version, утечка feature-бранча+SHA, password grant_type в OIDC realm","Слабые находки (фингерпринты): X-Powered-By Undertow/Express, публичный sitemap, OPTIONS allow POST на read-only API","Для GenDesign это ИНВЕНТАРЬ рисков стабильности канала + потенциал для responsible disclosure","Active scans (DCR регистрация, password брут, IDOR, POST на /object) НЕ делали — требует scope-разрешения и BB-программы (которой у ДОМ.РФ нет)"]}
|
||
{"type":"entity","name":"DomRF_Recon_AcceptVersionLeak_Apr26","entityType":"research","observations":["Утечка #1 (основная): незакрытая шаблонная подстановка GitLab CI в response header.","На /сервисы/api/kn/* выдаётся: accept-version: ${env.CI_COMMIT_REF_NAME}_sha1:${env.CI_COMMIT_SHORT_SHA}#${env.CI_PIPELINE_ID}_20.04.2026 12:58:31","Переменные GitLab НЕ интерполируются на бэкенде — баг деплоя. Косвенное раскрытие: GitLab CI/CD они используют","Утечка #2: на /аналитика/api/escrow/* интерполированный accept-version: '3.9.0-new-memory-limits_sha1:a9723d46#2106101_05.08.2025 06:39:18'","Это раскрывает: (1) имя feature-бранча ('3.9.0-new-memory-limits'), (2) git SHA-1 коммита 'a9723d46', (3) GitLab pipeline ID '2106101', (4) дату деплоя 5.08.2025 — бэкенд escrow не обновлялся 8 месяцев","Риск: злоумышленник видит какие версии в проде + активные фичевые ветки = таргетинг known-CVE по библиотекам и enumeration internal feature flags","Severity: low-medium — инфо сама по себе не даёт эксплоит, но снижает работу река. Для responsible disclosure — кандидат #1"]}
|
||
{"type":"entity","name":"DomRF_Recon_OIDC_Apr26","entityType":"research","observations":["Публичный OIDC well-known: GET /idm-services/auth/realms/external-eisgs-idm/.well-known/openid-configuration","Стандартное раскрытие по RFC8414, но в этом случае раскрывает МНОГО внутренних модулей","scopes_supported — 50+ scope'ов = карта модулей системы:","lkfpc.developer.readwrite, lkfpc.ko.readwrite, lkfpc.bucket.read, lkfpc.developer-regfond.readwrite, lkfpc.technical.readwrite — ЛК ФПК (Фонд Развития Проблемных Компаний?)","erzkn.read.base — Единый Реестр Застройщиков, rpp.read.base — Реализация Продаж (наш Tab6!), mcalc.read.base — Mortgage Calculator","billing.files.readwrite.administrator, billing.files.readwrite.1c, billing.files.readwrite.services — billing-интеграция с 1С","smv.read.base, smvfs.read.base — СМЭВ и СМЭВ-ФС (система межведомственного электронного взаимодействия)","krp.read.base, fpp.read.base, rgp.read.base, sgs.str.read.base — внутренние модули","service_account, dictionary.export, profile.readwrite.base — админ-скоупы","Риск #1: grant_types_supported включает 'password' (Resource Owner Password Credentials) — устаревший grant, НЕ рекомендуется OAuth 2.0 BCP. Риск credential stuffing если есть пользовательские аккаунты","Риск #2: registration_endpoint = /clients-registrations/openid-connect — RFC7591 Dynamic Client Registration. Открытость НЕ проверялась (active scan)","Severity: medium — password grant + полная карта scopes помогают attacker'у навести прицел"]}
|
||
{"type":"entity","name":"DomRF_Recon_Stack_Apr26","entityType":"research","observations":["Три разных backend-стека за одним nginx-фронтом — раскрыто через X-Powered-By и accept-version.","/сервисы/api/kn/* → X-Powered-By: Undertow/1 (Стек Java/JBoss WildFly Undertow)","/api/document/* → X-Powered-By: Express (Node.js)","/portal-analytics/api/* → нет X-Powered-By, но accept-version выдаёт GitLab placeholders — явные признаки Spring Boot/Tomcat (Java)","/idm-services/auth/* → Keycloak (по ответам в OIDC well-known: realm 'external-eisgs-idm', issuer + пути 100% Keycloak)","Последствия для attacker: разные стеки = разные CVE-кандидаты. Последствия для GenDesign: время интеграции разное, лимиты разные, стабильность разная — нужны 3 отдельных smoke-теста по бэкендам","Severity: low — версии стандартных фреймворков публичны, но хорошая практика — убирать X-Powered-By"]}
|
||
{"type":"entity","name":"DomRF_Recon_RobotsTxt_Apr26","entityType":"research","observations":["GET /robots.txt — публичный, раскрывает схему API через Clean-param для Yandex.","Disallow строки: */auth/*, /api/ext/file/*.pdf, /files/*.pdf, /files/*?inline=1 — SEO-защита, не безопасность (файлы всё равно доступны)","Sitemap: https://наш.дом.рф/portal-sitemap/api/sitemap/root.xml","Clean-param выдаёт ПОЛНЫЙ список всех возможных query-параметров API (~80 имён):","objStatus, saleRoomFlg, metroId, time, walkFlg, companyGroupId, devId, fromDatePubl, toDatePubl, objTypeCd, objClass, fromQuarter, toQuarter, keyIssuance, escrowFlag, fundFlag, fromPrice, toPrice, checkFlg, objGreenHouseFlg, freePlan, nonLivFirstFloor, cargoPassElevFlg, parkingFlg, energyEff, wall, fromFloor, toFloor, maxLivingCnt, livElemEntrFloor, barrierTypes, landscaping, search, type, place, pdId, limit1000, sortDirection, sortName, flatStatus, bounds, rooms, page, limit, priceFrom, priceTo, sortField, sortType, areaFrom, areaTo, floorFrom, floorTo, pricePerSquareMeterFrom, pricePerSquareMeterTo, state, SaleType, residentialBuildings, ivElemEntrCnt, view, isBalconiesOrLoggias, activeSort, objectIds, isLivingFlg, regionHD, status, subject, region, problemReason, mechanism, dduFlg, transferFlg, searchValue, buildFlg, regionCd, devGroupId, regionActivity, repYear, calculationType, period, addrAreaId, devCalcGroupId, objClassCd, repMonth, devGroupValue, cityPopulation, inline, filename, cooperativeId","Риск: фактически документация API там где её не должно быть. Раскрывает несуществующие в UI параметры (regionHD, regionActivity, problemReason, fundFlag, checkFlg и др.) — это заявка на over-fetching","Severity: low-medium — помогает attacker'у искать скрытые фичи. Для нас — ПОЛЕЗНО для расширения набора фильтров в GenDesign клиенте"]}
|
||
{"type":"entity","name":"DomRF_Recon_OptionsPost_Apr26","entityType":"research","observations":["OPTIONS /сервисы/api/kn/object → Allow: HEAD, POST, GET, OPTIONS","POST разрешён на якобы READ-ONLY API — значит у них есть write-методы которые из публичной схемы не видны","Вероятно: для авторизованных юзеров через ЛК (личный кабинет) есть create/update operations на объекты","/portal-analytics/api/* в отличие — GET, HEAD, OPTIONS (read-only как положено)","Польза для нас (GenDesign): способ понять какие endpoints имеют write-поверхность — без активных тестов их","Риск (mass-assignment): если POST /object принимает JSON без валидации типов полей и имеет слабую auth — потенциальный вектор. НЕ ПРОВЕРЯЛИ (active scan)","Severity: неопределённая — зависит от реализации POST. Только факт раскрытия в OPTIONS — low"]}
|
||
{"type":"entity","name":"DomRF_Recon_CORS_Apr26","entityType":"research","observations":["CORS на /сервисы/api/kn/*:","Access-Control-Allow-Origin: <эхо Origin> (по видимому reflective)","Access-Control-Allow-Credentials: true","Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT","Access-Control-Allow-Headers: accept, authorization, content-type, x-requested-with","Access-Control-Max-Age: 1 (слишком мало — preflight каждый раз)","Риск: если Origin валидируется слабо (regex/null/эхо), злоумышленный сайт может дёргать API с сессией юзера. НЕ проверяли","Severity: low (обычно банки/фронт современных институтов валидируют жёстко). Но комбинация credentials:true + reflective Origin = классический misconfig","Полезно для нас (GenDesign): /сервисы/api/kn/* можно дёргать с любого Origin — не нужен прокси на нашем бэкенде (браузер пропустит прямые вызовы)"]}
|
||
{"type":"entity","name":"DomRF_Recon_PortalSitemap_Apr26","entityType":"research","observations":["Недокументированный service-prefix /portal-sitemap/api/ — раскрыт через robots.txt","GET /portal-sitemap/api/sitemap/root.xml → 200, 10 sub-sitemap'ов:","static.xml, turisticheskaya-nedvizhimost.xml, kvartiry-v-novostrojkah.xml, media.xml, edinyj-reestr-zhsk.xml, edinyj-reestr-zastrojshchikov.xml, gruppa-kompaniy.xml, object-zhsk.xml, katalog-novostroek.xml, proverka-novostroek.xml","GET /portal-sitemap/api → 404 (корневая ручка не работает — нужен конкретный sitemap)","GET /portal-sitemap/api/sitemap → 500 — ручка существует но багает без параметров","Для GenDesign: из sub-sitemap'ов можно вытащить ПОЛНЫЙ список URL всех ЖК/застройщиков/ГК/ЖСК в РФ — альтернатива двухшаговому flow через /sales/portal","Severity: инфо публичная (по robots.txt). 500 на /sitemap — легкий сигнал что в сервисе есть необработанный путь"]}
|
||
{"type":"entity","name":"DomRF_Recon_NoSourceMaps_Apr26","entityType":"research","observations":["ПРОВЕРКА: source maps для Next.js бандлов НЕ выложены (все *.js.map = 404).","main-*.js.map → 404, commons.*.js.map → 404, _app-*.js.map → 404, page chunks .map → 404","Это хорошая практика ДОМ.РФ — скрывают исходники React/TypeScript от выкладывания в prod","Но минифицированный JS всё равно реверсился — мы вывели все endpoints из него","Severity: нет (good practice)"]}
|
||
{"type":"entity","name":"DomRF_Recon_DisclosurePlan_Apr26","entityType":"feedback","observations":["План responsible disclosure если решим репортить находки ДОМ.РФ.","Why: у ДОМ.РФ НЕТ публичной BB-программы. Репортить нужно вручную без reward'ов, плюс риск вызвать подозрение и отзыв фронт-доступа (наш основной канал)","How to apply: отправить только если обваливается находка medium+. Из текущего списка: AcceptVersionLeak (medium), OIDC password grant (medium)","Канал: nash@domrf.ru (из их официальных контактов с /интеграция)","Альтернативный канал: CERT-GIB / НКЦКИ России если прямой репорт игнорируется","Шаблон репорта: описание находки → PoC (URL и response header) → impact → fix recommendation → время на fix (90 дней по обычаю). NDA не подписывать — данные и так публичные","ПРИОРИТЕТ ниже релиза GenDesign MVP — сначала делаем продукт, потом репорт. Но лучше репортить после начала партнёрства с банком-Раунда-А — будет легальный channel"]}
|
||
{"type":"entity","name":"DataSource_PerDeal_Reality_Apr26","entityType":"research","observations":["ПЛАН B для истинного per-deal: раздобыть данные Антона (ДДУ-канал) — см. блокировку #10 в PlanA_AnalyticsFirst_Apr25","ПЛАН C: партнёрство с банком (Сбер/ДОМ.РФ) для доступа к их внутренним ипотечным выдачам (это per-deal но только ипотечные, ~75% сделок)","ПЛАН D: ЕРЗ.РФ премиум-подписка — у них есть per-ЖК статистика продаж (по их рекламе), не проверяли. ~50-500 тыс ₽/год","⚠ ОБНОВЛЕНО 26.04.2026 вечер после находки Rosreestr open dataset:","ПРЕДЫДУЩИЙ ВЫВОД ОШИБОЧЕН — ПЕР-DEAL ДАННЫЕ ЕСТЬ. Росреестр стал публиковать CSV-выгрузки всех регистрируемых сделок с ЦЕНАМИ в рамках 'data-sety-rosreestra' (начали в 2024 или раньше).","СМ. DataSource_Rosreestr_DealsCSV_Apr26 — это теперь ОСНОВНОЙ источник per-deal данных","НОВАЯ ИЕРАРХИЯ источников:","1. ОСНОВНОЙ (фактические цены сделок, обе первичка+вторичка): Росреестр dataset_СДЕЛКИ (по кварталам в CSV)","2. ДОПОЛНИТЕЛЬНый (текущий прайс-лист + velocity, только первичка): ДОМ.РФ per-flat snapshot","3. CROSS-VALIDATION (ипотечные сделки): ЦБ РФ mortgage data","4. CROSS-VALIDATION (базовые рыночные цены): Fedstat 31452","5. REGION-SPECIFIC вторичка Екб: УПН (цены предложения)","ПЛАН B/C/D/E больше НЕ НУЖЕН — Росреестр CSV решает основную задачу. Партнёрство с банком или ЕРЗ — опциональное улучшение позже (для выявления ипотека/наличные и покупателя)"]}
|
||
{"type":"entity","name":"DataSource_CBR_Mortgage_Apr26","entityType":"research","observations":["ЦБ РФ ипотека: https://www.cbr.ru/statistics/bank_sector/mortgage/","Что есть (ТОЛЬКО АГРЕГАТЫ):","Жилищные кредиты физлицам (ОБЩИЙ объём, регион/банк/месяц)","Ипотечные кредиты + приобретённые права требования","Кредиты под залог ПРАВ ПО ДДУ (полезно: это прямой сигнал первичных продаж)","Досрочное погашение (квартальные)","Рефинансирование + эмиссия ЦБ","По регионам: объёмы выданных, задолженность (включая просроченную), кол-во кредитов, средневзвешенные сроки/ставки","Формат: XLSX, ~20+ таблиц (02_01..02_46+). Обновление ежемесячно по календарю","API НЕТ — только прямые ссылки на XLSX. ETL: cron-task раз в месяц скачать + распарсить","Для GenDesign: полезно для финмодели — региональные средние ставки, дают лучший сигнал чем выдачи от 1-2 банков","Это ДОПОЛНЯЕТ DomRF Tab10 (mortgage-rates: предложение) — ЦБ даёт фАКТИЧЕСКИЕ выдачи"]}
|
||
{"type":"entity","name":"DataSource_Fedstat_Apr26","entityType":"research","observations":["ЕМИСС / fedstat: https://www.fedstat.ru/. 8944 показателя от 60 ведомств, включая Росреестр и Росстат","Индикатор 31452 — 'Средняя цена 1 кв.м общей площади квартир на рынке жилья'","Разрезы 31452: квартал, регион (ОКАТО), рынок (первичка/вторичка), тип квартир (по кол-ву комнат). Данные 2000-2025. Обновление 09.02.2026 (19-23 рабочих дня после квартала)","Источник 31452: форма 1-РЖ 'Сведения об уровне цен на рынке жилья', Росстат","Формат: SDMX, XLSX. API видимо не публичный (search/start.do падает с 500 'isJpисключение')","Росреестр в fedstat: есть показатели по регистрациям, но их конкретные ID не определили (сервис поиска багает). TODO — разовая выгрузка вручную через браузер когда система работает","Для GenDesign: основное baseline для cross-validation цен в финмодели. Разовая выгрузка с обновлением раз в квартал"]}
|
||
{"type":"entity","name":"DataSource_Rosreestr_OpenService_Apr26","entityType":"research","observations":["Росреестр open-service: https://rosreestr.gov.ru/open-service/. Сайт отдаёт self-signed-cert в пробе (видимо gov-CA не в cert-store WebFetch — открывать вручную)","Что реально доступно (по предыдущим проверкам и публичным отчётам):","Публичная кадастровая карта (ПКК) — границы участков, кадастровый номер. НЕТ СДЕЛОК","Сведения ОГРН (о юрлицах регистрации) — реестры","Статистика в fedstat — АГРЕГАТЫ по регистрациям (кол-во ДДУ/установлений прав по регионам)","ПООБЪЕКТНЫХ ДДУ/КП НЕТ в открытых данных — это персональные данные по 152-ФЗ + коммерческая тайна","API: неформальный ДвОИЧНЫЙ https://pkk.rosreestr.ru/api/* (известно из community), используется в РосРеестр SDK","Для GenDesign: ПКК полезна для Site Finder (границы участка, КН, вид разрешённого использования). Для per-deal — бесполезен, только агрегаты через fedstat"]}
|
||
{"type":"entity","name":"DataSource_UPN_Ekb_Apr26","entityType":"research","observations":["Уральская Палата Недвижимости (Екб/Свердл.обл): https://upn.ru/","Аналитика на https://old.upn.ru/analytics.htm","Что публикуется (АГРЕГАТЫ):","Еженедельные отчёты 'Средние цены предложения недвижимости'","Территориальные разрезы: 4 района Екатеринбурга + Свердл.область","Архив: с 2007 года по настоящий момент (это 19+ лет longitudinal data!)","Формат: веб-страницы/PDF по годам и месяцам, без API. ETL = парсинг PDF + HTML","API/подписка: НЕ ОПИСАНО публично. Для коммерческого доступа — +7 343 367-67-60","ОГРАНИЧЕНИЕ: цены ПРЕДЛОЖЕНИЯ, НЕ сделок. Источник — листинги риелторов-членов УПН","Для GenDesign: ОТЛИЧНЫЙ region-specific baseline для Екатеринбурга. 19-летний ряд даёт хороший сигнал по истории рынка. Парсить раз в неделю","ПОТЕНЦИАЛЬНОЕ ПАРТНЕРСТВО: Екатеринбург-фокус у GenDesign + локальный бренд УПН = имеет смысл договориться о подписке на сделки (у риелторов уже есть фактические сделки)"]}
|
||
{"type":"entity","name":"DataSource_DomRFAsPerDeal_Apr26","entityType":"research","observations":["ДОМ.РФ как SYNTHETIC per-deal источник — самый жизнеспособный вариант для GenDesign без партнёрств.","Принцип: ежедневный snapshot /сервисы/api/kn/flats?regions=66 → diff с вчерашним → события","События которые мы получим (каждое = synthetic deal):","(a) status_change: free → booked = бронь, free → sold = прямая продажа, booked → sold = выкуп после брони","(b) price_change: priceChangeDate поменялась → (возможно продажа и передобавление, или ревальвация)","(c) delisting: квартиры нет в списке → продали (sold или сделали невидимой)","(d) new_listing: новая квартира = новый старт продаж","Результат: таблица dom_rf_flat_events (см. DomRF_PerFlat_ETL_Apr26) с полями (flat_id, event_dt, event_type, old_value, new_value)","ОГРАНИЧЕНИЯ: (1) НЕТ инфы о покупателе (физ/юр лицо, ипотека/нал), (2) НЕТ инфы о фактической цене сделки (может быть дискаунт вне прайс-листа), (3) ~3-7 дней лаг между сделкой и обновлением статуса в ЕИСЖС","ДЛЯ GenDesign: этого ДОСТАТОЧНО для Plan A 'ПЛИТКИ 3' (за какое время продастся). Абсолютная точность цены не нужна — нужен тренд/velocity"]}
|
||
{"type":"entity","name":"DataSource_Rosreestr_DealsCSV_Apr26","entityType":"research","observations":["Дата: 26.04.2026. ГЛАВНАЯ НАХОДКА: Росреестр СДЕЛАЛ ПУБЛИЧНЫМИ регистрируемые сделки с недвижимостью (CSV-выгрузки по кварталам).","URL: https://rosreestr.gov.ru/data-sets/ — Apache open directory listing","Описание: https://rosreestr.gov.ru/open-service/data-sety-rosreestra/dannye-o-tsenakh-registriruemykh-sdelok-po-otchuzhdeniyu-s-obektami-nedvizhimosti-v-razreze-territorialnoy-prinadlezhnosti/","Структура директории:","/data-sets/{N квартал YYYYг.}/dataset_СДЕЛКИ_r-r_01-92_y_YYYY_q_N.csv.zip","/data-sets/{N квартал YYYYг.}/dataset_КАДАСТРСТОИМОСТЬ_r-r_{XX-YY}_y_YYYY_q_N.csv.zip (4 файла по регионам)","/data-sets/{N квартал YYYYг.}/dataset_АРЕНДА_r-r_01-92_y_YYYY_q_N.csv.zip","Доступные периоды: все 4 квартала 2024, все 4 квартала 2025, 1 кв 2026 (обновлен 16.04.2026). + Архив до 2023г. включительно (отдельный пакет)","Частота: ежеквартально (публикуется ~через 1.5 месяца после окончания квартала)","Q1 2026 факты: dataset_СДЕЛКИ_*.csv.zip = 9.5 MB ZIP, 96 MB CSV, 569 723 строки","Подсчёт по Q1 2026: 898 302 сделки по РФ всего (709 812 ДКП + 188 490 ДДУ). Свердл.обл: 37 310 сделок","Источник: ФГИС ЕГРН — реальные зарегистрированные сделки (не листинги, не предложения)","Исключения: безвозмездные сделки НЕ включены (дарения, наследования)"]}
|
||
{"type":"entity","name":"DataSource_Rosreestr_DealsCSV_Schema_Apr26","entityType":"api_spec","observations":["Схема CSV-выгрузки Росреестра dataset_СДЕЛКИ. Кодировка: UTF-8. Разделитель: '~' (тильда!). 17 полей:","number — КОЛИЧЕСТВО сделок в этом ряду (ряд = агрегация одинаковых сделок). Для расчёта итогов НАДО умножать на number","okato — ОКАТО код","region_code — ID региона (66=Свердл.обл, 77=Москва, ...)","district — муниципальный район/округ","city — населённый пункт","quarter_cad_number — КАДАСТРОВЫЙ КВАРТАЛ (напр. '50:12:0010209'). Это самый важный гео-ключ — блок размером от дома до квартала. Можно джойнить с ПКК Rosreestr","street — улица (часто пустая)","realestate_type_code — тип объекта: 002001001000=ЗУ, 002001002000=Здание, 002001003000=Помещение, 002001009000=Машиноместо","wall_material_code — СПРАВОЧНИК 126_УНСИ_Перечень наименований материалов наружных стен","year_build — год постройки/ввода в эксплуатацию","floor — этажность (для Здания) / номер этажа (для Помещения)","purpose_code — назначение объекта: спр 66_УНСИ (Здания), 67_УНСИ (Помещения), 148_УНСИ (виды разрешённого использования ЗУ)","area — площадь (м² для помещений, м² для ЗУ)","period_start_date — ПЕРВОЕ ЧИСЛО КВАРТАЛА. ⚠ НЕ фактическая дата сделки — все сделки квартала имеют одну и ту же дату. Гранулярность времени = квартал","deal_price — ЦЕНА СДЕЛКИ в валюте (средняя если number>1)","currency — 'рубль' в большинстве случаев","doc_type — 'ДКП' (договор купли-продажи, вторичка и ГП) или 'ДДУ' (долевое строительство — ПЕРВИЧКА)","ГРАНУЛЯРНОСТЬ итоговая: row = уникальный (регион, район, нас.пункт, кад.квартал, улица, тип, материал, год, этаж, назначение, площадь, doc_type) + ЦЕНА + number. Для квартир это близко к per-flat (но без номера квартиры и конкретной даты)"]}
|
||
{"type":"entity","name":"DataSource_Rosreestr_DealsCSV_Sverdl_Q1_2026","entityType":"research","observations":["Реальные цифры из скачанного dataset_СДЕЛКИ за Q1 2026 по Свердл.обл (region_code=66) — проверка качества источника.","ИТОГО сделок в Свердл.обл за Q1 2026: 37 310 (после умножения на number)","Распределение по типу объекта:","Помещения (квартиры/нежилые): 24 923","Земельные участки: 7 157","Здания: 3 130","Машиноместа: 2 100","Распределение по doc_type:","ДКП (вторичка+ГП): 26 655","ДДУ (ПЕРВИЧКА): 10 655","Практически все ДДУ = новостройки + прямая покупка от застройщика. ДКП — вторичка и прямые П в ГП","ЦЕНЫ ₽/м² ПО ПОМЕЩЕНИЯМ (выборка: area 5-500 м², price>100К):","ДКП median: 82 594 ₽/м², mean: 89 206 ₽/м² (n=14 994)","ДДУ median: 156 314 ₽/м², mean: 220 983 ₽/м² (n=664)","Первичка ВДВОЕ дороже вторички в Свердл.обл — логично (вторичка включает хрущёвки 60-х годов, НП, МО подмосковье и т.д.)","Сверка с baseline: статистика ДОМ.РФ / Росстат по Свердл.обл в ~85-95 тыс ₽/м² (Apr 2025) — совпадает с ДКП median 82,594","ПРИМЕРЫ реальных сделок в Екб (квартал 66:41:*):","4.8М ₽ за 40.9 м² (117К ₽/м²), дом 2019, 3 этаж","6.7М ₽ за 32.2 м² (208К ₽/м²), дом 2022, 6 этаж","1.9М ₽ за 28.9 м² (66К ₽/м²), дом 1962 — хрущёвка","ТОП районы: 'Екатеринбург' (1642+1293=2935), Сысертский (1098), Белоярский (728)","Для GenDesign ПЛИТКИ 2 (ЦЕНА): рабочая выборка — сделки ПОМЕЩЕНИЙ в кадастровых кварталах в радиусе 5км от участка пользователя, раздельно ДКП vs ДДУ"]}
|
||
{"type":"entity","name":"DataSource_Rosreestr_ETL_Plan_Apr26","entityType":"research","observations":["ETL-план интеграции открытых данных Росреестра в GenDesign Stage 2a.","ИСТОЧНИКИ: 3 dataset типа на квартал: СДЕЛКИ (НАШ!), АРЕНДА, КАДАСТРСТОИМОСТЬ (4 файла)","ОБЪЁМ СДЕЛОК по кварталу: ZIP 9-30 MB, CSV 96-300 MB, ~600К-1.5М строк","ДОСТУПНО НА СЕЙЧАС: 9 кварталов (Q1 2024 - Q1 2026) + Архив до 2023г. (JSON-выгрузки по регионам, ~50-300 MB на регион в ZIP)","СТРАТЕГИЯ заливки:","Шаг 1: bootstrap — одноразовый скрипт скачивает все 9 кварталов СДЕЛОК → распакует → фильтрует region_code IN (66, 50, 77) → upsert в PostgreSQL","Шаг 2: cron-task quarterly_rosreestr_sync — раз в квартал (16-е число второго месяца после окончания квартала) проверять index и тянуть новый квартал","Шаг 3: обогащение: JOIN с ПКК Rosreestr по quarter_cad_number → получить geom квартала (полигон) + центроид","SQL Schema (PostgreSQL):","CREATE TABLE rosreestr_deals (id BIGSERIAL PK, region_code SMALLINT, district TEXT, city TEXT, quarter_cad_number VARCHAR(30), street TEXT, realestate_type_code VARCHAR(15), wall_material_code VARCHAR(15), year_build SMALLINT, floor TEXT, purpose_code VARCHAR(15), area NUMERIC(12,2), period_start_date DATE, deal_price NUMERIC(14,2), currency VARCHAR(10), doc_type VARCHAR(10), deal_count INT, raw_okato VARCHAR(15), source_quarter VARCHAR(10))","Индексы: (region_code), (quarter_cad_number), (period_start_date), (doc_type), (realestate_type_code), GIST на geom после энричмента","Materialized views: median(price/area) по (region, quarter, doc_type, realestate_type) и по радиусу 5км вокруг lat/lon","Объём работы: скачать+распаковать+лоаднуть 9 кварталов в PG для 3 регионов = 2-3 часа. ETL код = 4-6 часов. ПКК-энричмент = 1-2 дня","Для ПЛИТКИ 2 в GenDesign: это ОСНОВНОЙ источник фактических цен сделок (ДОМ.РФ остаётся для текущего прайс-листа и velocity)"]}
|
||
{"type":"entity","name":"DataSource_Rosreestr_DealsCSV_Limits_Apr26","entityType":"research","observations":["ОГРАНИЧЕНИЯ открытого dataset Росреестра dataset_СДЕЛКИ — важно знать перед интеграцией.","1. НЕТ покупателя/продавца — персональные данные по 152-ФЗ НЕ выкладываются","2. НЕТ конкретной даты сделки — period_start_date = первое число квартала. Гранулярность времени = 90 дней","3. НЕТ кадастрового номера ОБЪЕКТА, только КАДАСТРОВЫЙ КВАРТАЛ. Нельзя связать с ДОМ.РФ odsId/elemId напрямую","4. ГРУППИРОВКА дубликатов в row + number: если 5 одинаковых квартир в одном жк проданы с похожими характеристиками — склеиваются в 1 ряд с number=5 и СРЕДНЕЙ ценой","5. НЕТ инфы о форме оплаты (наличные/ипотека), только итоговая цена","6. НЕТ комнатности квартиры. Можно инферить по площади (>50м² = 2к, >70 = 3к, ...) но не точно","7. НЕТ застройщика/ЖК в явном виде — выводим через JOIN ПКК → ДОМ.РФ /object по координатам квартала","8. Безвозмездные сделки (дарения, наследства) НЕ включены","9. ЛАГ: dataset публикуется ~через 1.5 месяца после конца квартала (Q1 2026 вышел 16.04.2026)","10. САМОСТОЯТЕЛЬНОСТЬ от ДОМ.РФ: СДЕЛКИ регистрируются все (и вторичка и первичка), тогда как ДОМ.РФ покрывает только первичку в строящихся ДОМАх = Росреестр ШИРЕ","11. ЮР.СТАТУС: официальный open data, в реестр ПО декларируем 'Интеграция с открытыми данными Росреестра (фИГС ЕГРН)' — легально и без NDA"]}
|
||
{"type":"entity","name":"Rosreestr_SiteMap_Apr26","entityType":"research","observations":["Карта ресурсов Росреестра (обзор 26.04.2026 passive recon).","rosreestr.gov.ru — ОСНОВНОЙ портал (Bitrix CMS), TLS с self-signed-cert (Минцифры CA, не в system store)"," ├─ /eservices/ — электронные услуги (выписки ЕГРН 340-4160 ₽, регистрация прав, ДДУ-проверка)"," ├─ /opendata/ — 17 МАНДАТНЫХ open data наборов (СРО кадастровых инженеров, лицензии, проверки, ГКГН). Базовые реестры без сделок"," ├─ /open-service/data-sety-rosreestra/ — ⭐ 3 ДАТАСЕТА с РЫНОЧНЫМИ ДАННЫМИ:"," │ ├─ СДЕЛКИ (ДКП+ДДУ) с ценами — см. DataSource_Rosreestr_DealsCSV_Apr26"," │ ├─ КАДАСТРСТОИМОСТЬ (4 файла по регионам)"," │ └─ АРЕНДА (договоры аренды)"," ├─ /data-sets/ — Apache OpenIndex файлы CSV по кварталам — см. DataSource_Rosreestr_DealsCSV_Apr26"," └─ /open-service/statistika-i-analitika/ — только пресс-материалы, нет выгрузок","nspd.gov.ru — НОВЫЙ ПОРТАЛ НСПД (Национальная Система Пространственных Данных), заменил ПКК"," ├─ React SPA с Module Federation (микро-фронты)"," ├─ /api/{service-name}/{version} — микросервисы: notifications-controller/v2, ticket-support/v3, registers-manager/v2, tech-process/v2"," ├─ Все API требуют auth — ESIA через Госуслуги"," └─ X-TIMEZONE header обязателен","pkk.rosreestr.ru — 301 → nspd.gov.ru/map?thematic=PKK (старый ПКК устарел)","lk.rosreestr.ru — Личный кабинет (React SPA, ESIA auth)","rosreestr.ru — старый домен (большинство поддоменов не отвечают в пробе)"]}
|
||
{"type":"entity","name":"Rosreestr_OpenData_17Sets_Apr26","entityType":"research","observations":["Полный список 17 open data наборов на https://rosreestr.gov.ru/opendata/ (ПО идентификатору 7706560536 = ИНН Росреестра).","Наборы реестров СРО (полезные GenDesign):","1. СРО кадастровых инженеров — контрагенты для топосъёмки","2. СРО оценщиков — профессиональная оценка для финмодели","3. СРО арбитражных управляющих — для проблемных объектов (банкротство застройщиков)","4. Реестр лицензий на геодезическую и картографическую деятельность","5. Государственный каталог географических названий — полезно для нормализации адресов","Наборы НЕ полезные для GenDesign:","6-9. Планы/результаты проверок (землепользование, геодезия, СРО)","10. Перечень ГИС Росреестра","11-13. СРО медиаторов, РОК, СРО без полномочий, ЭП-площадок","14-17. Различные проверки и результаты","Это ГОС-МАНДАТ по 8-ФЗ 'O доступе к информации'. Реальные рыночные данные (СДЕЛКИ/КАДАСТР/АРЕНДА) НЕ здесь, а в отдельном блоке /open-service/data-sety-rosreestra/","Формат выгрузки (по паспорту): CSV/XML/JSON раз в квартал/месяц в зависимости от набора"]}
|
||
{"type":"entity","name":"NSPD_Architecture_Apr26","entityType":"api_spec","observations":["НСПД (nspd.gov.ru) — новый портал Росреестра для пространственных данных, заменил ПКК (pkk.rosreestr.ru → 301)","Архитектура:","— React SPA с Vite билдом (видно по import-паттернам и vite_API_BASE)","— Module Federation с micro-frontends (видны runtime hooks @nspd-modules/*)","— Effector + atomic-router для state management","— ui kit @nspd/uikit (внутренний)","— Map: @nspd-modules/map-core, map-adapter","— Yandex Metrika (yandex-metrika-xOrTB1Q0.js)","— Special browser support: YaBrowser, Firefox, Chromium-Gost, Chrome (без Edge)","Microservices API base = '/api/{service}/{version}':","— /api/notifications-controller/v2/notifications","— /api/ticket-support/v3/tickets","— /api/registers-manager/v2 — реестры","— /api/tech-process/v2 — техпроцессы","— /api/aeggis-portal/v3/spatial-data-info — инфо пространственные данные (AEGGIS = Application for Earth Geospatial Information System)","— /api/aeggis-portal/v1/auth-providers — провайдеры авторизации","— /api/services — сервисы НСПД","Все вызывают 403 без auth (видимо SSO через Госуслуги/ESIA)","Обязательный header: X-TIMEZONE","Для GenDesign: НСПД не даёт прямого API без ESIA-входа. Альтернатива — старый ПКК-API community библиотек (rosreestr2coord) они могли сломаться после миграции"]}
|
||
{"type":"entity","name":"Rosreestr_Recon_Findings_Apr26","entityType":"research","observations":["Passive recon наблюдения на rosreestr.gov.ru и nspd.gov.ru (26.04.2026). Только то что видно при просмотре публичных страниц и их bundle. Без active scan.","1. ⚠ dev-поддомен в prod-bundle (medium): в nspd.gov.ru/assets/api-ByMDT02-.js вывернута vite переменная VITE_PROXY_DOMAIN=https://dev.nspd.rosreestr.gov.ru — раскрывает существование dev-копии портала. Прямые пробы dev-хоста НЕ делали (active recon за рамками пользовательского запроса)","2. ⚠ X-Powered-CMS header (low): rosreestr.gov.ru отдаёт 'X-Powered-CMS: Bitrix Site Manager (d61e85ea0be7ddfb3fa5a12935cc91a6)' — раскрывает CMS + license-hash. Обычно хеш = SHA Bitrix лицензии (в отличие от просто 'Bitrix') — портрет продакшн инстанса","3. ⚠ Двойной Referrer-Policy header (low): выдаются два разных 'Referrer-Policy: origin-when-cross-origin' и 'Referrer-Policy: unsafe-url'. По спеке второй выигрывает — unsafe-url пропускает ПОЛНЫЙ URL+query в Referer на внешние сайты. Утечка приватности","4. ⚠ SameSite отсутствует в cookies (low): PHPSESSID, USER_REGION_ID, USER_CITY выдаются без SameSite-атрибута. CSRF risk при входе в ЛК","5. ⚠ P3P header устарел (info): policyref='/bitrix/p3p.xml' — P3P стандарт давно обсолетен (W3C прекратил в 2009)","6. ⚠ Typo в canonical URL (cosmetic): на nspd.gov.ru в <link rel=canonical> указан 'nspd.rosreetr.gov.ru' (rosreetr без 's') — опечатка в build","7. ⚠ Отсутствует Content-Security-Policy header на обоих доменах (low) — слабая защита от XSS","8. ⚠ robots.txt разрешает /opendata/ но НЕ учитывает /open-service/data-sety-rosreestra/ и /data-sets/ — это не баг, это отсутствие стратегии (файлы индексируются)","9. Открытая директория /data-sets/ (info, НЕ уязвимость, это полезный listing) — Apache mod_autoindex. Но кодировка имён в листинге = cp1251 (mojibake в UTF-8 браузере), свидетельство legacy Apache config","10. SSL TLS с российским CA (Russian Trusted CA / Минцифры) — не в trust store обычных OS/браузеров. Браузер Chromium-Gost или ruchnoe доверие в system store нужны. Для ETL в GenDesign — curl -k или ручное включение CA","Severity общая: все наблюдения LOW-MEDIUM. Ничего критичного не найдено (и не искали active scan'ами)","ДЛЯ GenDesign: из утечек ничего не используем. На реестр ПО декларируем только легальные источники: 'open data Rosreestr' (data-sety-rosreestra)"]}
|
||
{"type":"entity","name":"Rosreestr_TLS_Note_Apr26","entityType":"feedback","observations":["Росреестр (rosreestr.gov.ru, nspd.gov.ru) использует TLS-сертификат от российского CA (Russian Trusted CA Минцифры), который НЕ включен в браузеры/OS из коробки за пределами РФ.","Why: после санкций 2022 российские госресурсы перевели выдачу TLS на Минцифры. Обычный Chrome показывает ERR_CERT_AUTHORITY_INVALID","How to apply в GenDesign:","1) При ETL/curl используй флаг -k (skip cert check) — это безопасно потому что это открытые данные без auth/PII","2) Для строгой валидации в проде — добавь в trust store: https://www.gosuslugi.ru/crt/MinCifry_RootCA.pem","3) Python requests: используй verify=False или verify=path_to_minciftry_ca","4) Браузеры: Yandex Browser и Chromium-Gost включают CA по умолчанию","Не связано с security: это инфраструктурная особенность. Наблюдаемые данные в открытом доступе легальны"]}
|
||
{"type":"entity","name":"NSPD_OAuth_Architecture_Apr26","entityType":"api_spec","observations":["NSPD (nspd.gov.ru) auth: собственный OAuth2/OIDC сервер на sso.nspd.gov.ru, провайдер = ESIA Госуслуги.","Token endpoint: POST https://nspd.gov.ru/oauth2/token (прокси на sso.nspd.gov.ru)","Body: {grant_type: 'refresh_token'|'authorization_code', client_id: 'nspd'} — как JSON, NOT form-urlencoded","Real client_id (UUID): 03386dbe-5185-4b96-900d-c2b1bb368ed6","JWT issuer: https://sso.nspd.gov.ru, algo: RS256","JWT TTL: 1800с (30 мин). Refresh ttl: лонже (30+ мин, точно не известно — не проверяли)","Cookie storage: authAccessToken + authRefreshToken в cookie с HttpOnly, secure, SameSite=None, domain=nspd.gov.ru. Недоступны JS, но видны в DevTools Network","ESIA scope (при входе запрашивается): ОРГАНИЗАЦИИ, АДРЕСА, ДР, фИО, ИНН, СНИЛС, емаил, телефон, ПАСПОРТ — очень широко для сервиса карты. Для GenDesign это предупреждение же — НЕ интегрируем НСПД с ESIA в наш продукт (слишком большой PII surface)","JWT claims (PII!): aud, client_id, display_name, email, family_name, given_name, middle_name, sub (UUID), uid (UUID), preferred_username, sid, scope='profile email uid', updated_at","X-TIMEZONE обязателен в каждом запросе","Backend сигнатура: x-backend: dc1-gw-8-1, x-api-header: af, x-request-id: hex"]}
|
||
{"type":"entity","name":"NSPD_PhysicAccess_Apr26","entityType":"research","observations":["Доступ к NSPD API для physic-аккаунта (физлицо через ESIA) — проверено эмпирически 26.04.2026.","GET /api/registers-manager/v2/pages/main → 200, typeAccount: 'physic', 18 сервисов:","approvalInConstruction (согласования в строительстве), integratedDevelopmentOfTheTerritory (КРТ), individualHousingConstruction (ИЖС), myProperties (мои объекты), arcticPeopleLanguages, urbanPlanningStudyOnline (градопроработка), smallBusiness, assistantSurveyor (помощник изыскателя), geodataVisualization, cadastralValuation, landNspd, farmLand, buildingLand, tourismNspd, marketAnalytics (НАШ!), complexCadastralWorks, specialTools, thematicUserLayers","URL-маппинг сервисов (frontend routes):","/market-analysis → marketAnalytics","/urban-analyze → urbanPlanningStudyOnline","/construction-nspd → buildingLand (земля для стройки)","/integrated-development-territories → КРТ","/cadastral-valuation → cadastralValuation","/my-properties → myProperties","/assistant-surveyor → assistantSurveyor","GET /api/notifications-controller/v2/notifications → 200 (totalCount: 0 для нового юзера)","GET /api/portal-tools/v1/page-assistant/{pageCode} → 200 (флаг assistant)","POST /api/portal-tools/v1/audit → 200 (аудит пользовательских действий)","ЗАКРЫТО для physic (403 Forbidden код=3):","/api/registers-manager/v2/registers/can-get-tree — дерево реестров","/api/aeggis-portal/v3/* — портал пространственных данных (объекты, registry-list, spatial-data-info, auth-providers)","/api/services/* — сервисы NSPD","/api/v1/parcels — парцели","Эти endpoints видимо для organisation-аккаунта (юрлицо) или госслужащих","Для GenDesign: physic-аккаунта хватит для marketAnalytics + WMTS-карта. Реестры/объекты — требуют юрлица"]}
|
||
{"type":"entity","name":"NSPD_MarketAnalytics_API_Apr26","entityType":"api_spec","observations":["Сервис nspd.gov.ru/market-analysis — 'Аналитика рынка недвижимости', официальный сервис Росреестра.","Источник данных: Цены сделок по продаже квартир на вторичном рынке из ФГИС ЕГРН с 2018 года","Разрезы: федокруг / субъект РФ / населённый пункт / кадастровый квартал. Визуализация: тепловая карта, графики, таблица","Auth: ESIA-вход (physic), JWT в cookie","Base: /api/market-analytics/v1/","GET /filters/indicators → [{id:1,title:'Индикатор цен ежемесячный',type:M},{2,'Квартальный',Q},{3,'Полугодовой',H},{4,'Годовой',Y}]","GET /filters/calculationMethod → [К базисному, К предыдущему, К аналогичному периоду годом ранее]","GET /filters/dataSource → [{1,ФГИС ЕГРН,fgisEgrn},{2,Внешние,externalSource}]","GET /filters/areaRanges → [0-25, 25-40, 40-60, 60-80, 80-100, 100+]","GET /federal-district → [8 ФО с codes 1-8]. Уральский=6, Сибирский=7, Дальневосточный=8, Приволжский=5, СКФО=4, СЗФО=2, ЦФО=1, ЮФО=3","GET /groups/fgisEgrn → полная схема фильтров: dataSource, indicators, calculationMethod, periodFrom/periodTo, federalDistrict, federalSubject, settlement, cadastralQuarter, areaRanges. limit=10 на множественные выборы","GET /layers-tree → 6 MVT-слоёв на разные площади. layerId 872964-872969. categoryId 470043. visualType=bubble, minZoom=2, tileExtent=512","POST /period (body: {type, dataSourceSysName}) — периоды доступные для индикатора (POST, валидации проверены)","POST /settlement (body: другой формат — не выявлен) — нас.пункты","GET /federal-subject?federalDistrict={code} — видимо есть но ожидает другой формат параметров","Data endpoint (чарт/таблица) — НЕ НАЙДЕН без реального UI-выбора. Связаные endpoints для рендера в SPA ловятся только при полном set выборе фильтров","КОНЦЕПЦИЯ для GenDesign: это ГОТОВЫЙ official aggregation API по сделкам ПО КАДАСТРОВЫМ КВАРТАЛАМ. В отличие от CSV-датасета (сырые сделки раз в квартал) — это предварительно вычисленные индикаторы с выбором временного окна (M/Q/H/Y) и динамики относительно базы/предыдущего/ГОГ"]}
|
||
{"type":"entity","name":"NSPD_AEGGIS_WMTS_Apr26","entityType":"api_spec","observations":["AEGGIS WMTS API НСПД — картирование слоёв в стандарте OGC WMTS.","GET /api/aeggis/v4/{layerId}/wmts/{z}/{x}/{y}.png — PNG растровые тайлы. layerId=235 — 'Цифровая объектовая схема' (базовый справочный слой)","GET /api/aeggis/v4/{layerId}/mvt/{z}/{x}/{y} — Mapbox Vector Tiles (предположение по schema layers-tree)","MarketAnalytics MVT-слои: 872964 (объекты 0-25м²), 872965 (25-40), 872966 (40-60), 872967 (80-100), 872968 (100+), 872969 (60-80). Все из categoryId 470043. priceIndicator как key","Base layers (/api/geoportal/v1/baselayers): id=235 (ЦОС), id=36347 (ЕЭКО), id=36344 (Ортофото планы 2000) и другие","Cache: в ответе видны cache.levels_to (max zoom), refresh_before для временного инвалидирования","External tiles: есть в базовом списке с 'external' source. Пример 'https://nspd.gov.ru/cgk/map/38/tms/{z}/{x}/{y}.png' (TMS-паттерн)","Для GenDesign: можно встраивать эти тайлы в наши Mapbox/Leaflet как base/overlay. Авторизация через cookie session, но physic-вход работает для layer 235","Остальные полезные endpoints geoportal:","/api/geoportal/v1/page-search-settings?pageCode={code} — настройки поиска. Для marketAnalytics regex='^\\d{2}:\\d{2}:\\d{1,7}:\\d+$' — формат кадастрового номера"]}
|
||
{"type":"entity","name":"NSPD_PII_Leak_Apr26","entityType":"research","observations":["Security observation НСПД (26.04.2026): ПД в localStorage браузера.","После ESIA-входа SPA сохраняет в localStorage ключ NSPD_API_CLIENT_USER (~657 char) с данными текущего юзера (вероятно ID, name, email, expires и др.)","Парный ключ NSPD_API_CLIENT_USER_EXPIRES с ISO-датой истечения (обычно +30 мин от входа)","Риск (medium): любой скрипт на странице (в т.ч. 3rd-party вроде Yandex Metrika, или при XSS) может прочитать ПД. Best practice = хранить ПД только в HttpOnly cookie или server-side, не в localStorage","Yandex Metrika с _ym_uid + _ym_d + webvisor (96513913) работает на всех страницах включая профиль — теоретически может видеть PII в страницах","JWT в cookie HttpOnly — это ок, JS не видит. Но всё равно видно в DevTools Network и в cookie storage браузера","JWT response body в ответе /oauth2/token (в сыром plaintext): возвращает распакованные claims в JSON в ответе — display_name, email, family_name, given_name, middle_name, sub UUID, uid UUID, sid — всё это PII","Для GenDesign: прямая интеграция НСПД в наш продукт = ПЛОХО: брал бы слишком большую поверхность PII. Лучше server-side прокси с одним общим сервис аккаунтом (если будет выдан) или использовать CSV-датасеты (DataSource_Rosreestr_DealsCSV_Apr26) и WMTS-плитки без входа (если публичные слои работают без cookie)"]}
|
||
{"type":"entity","name":"NSPD_MarketAnalytics_FullArchitecture_Apr26","entityType":"api_spec","observations":["Дата: 26.04.2026 вечер. Полная архитектура /api/market-analytics/v1/* — раскрыта через debug-браузер с физик-аккаунтом ESIA.","АРХИТЕКТУРНЫЙ ПАТТЕРН: серверная сессия фильтров. Фронт сохраняет выбор фильтров на бэке через saveUserFilters → бэк хранит как userFiltersId (число). Все data-endpoints читают активные фильтры из этой сессии — поэтому body=`{}` или совсем без body.","FLOW (порядок вызовов):","1) GET /user-filters/userFilters → текущее состояние фильтров пользователя {userFiltersId, dataSourceSysName, filters[]}","2) Пользователь меняет фильтры в UI → собирающие вызовы /period, /region-list, /settlement, /cadastral-quarter (все POST с подсказками для следующего уровня)","3) Кнопка «Применить» → POST /user-filters/saveUserFilters с полным телом фильтров. Возвращает {userFiltersId: N}","4) После save фронт автоматически дёргает: graphEgrnHistogram, graphEgrnLineIndicator, graphEgrnCandleMedian, graphEgrnLineMedian, tableEgrn, geomDataForHeatMap, dataOnLegend, titleHeatMap","BODY saveUserFilters (правильный формат):","{ dataSourceSysName: 'fgisEgrn', filters: ["," {sysName:'dataSource', options:{value:'ФГИС ЕГРН', id:1}},"," {sysName:'calculationMethod', options:{value:'К предыдущему периоду', id:2}},"," {sysName:'areaRanges', options:{value:'от 25 до 40', id:1}},"," {sysName:'indicators', options:{value:'Индикатор цен квартальный', id:2, periodType:'Q'}},"," {sysName:'periodFrom', options:{value:'4 квартал 2025', sortOrder:32, isRemote:true}},"," {sysName:'periodTo', options:{value:'1 квартал 2026', sortOrder:33, isRemote:true}},"," {sysName:'federalDistrict', options:{valueList:[{code,title}], isSelectAll:true|false}},"," {sysName:'federalSubject', options:{valueList:[{code,title}], isSelectAll:true|false}},"," {sysName:'settlement', options:{valueList:[{code,title}], isSelectAll:false}}","]}","POSTПОДСКАЗКИ при выборе фильтров (важная деталь — все обёрнуты в params!):","POST /period body={params:{type:'M'|'Q'|'H'|'Y', dataSourceSysName:'fgisEgrn'}} → список доступных периодов с sortOrder","POST /region-list body={districtIds:[6]} → список субъектов в выбранных ФО (НЕ /federal-subject!)","POST /settlement body={subjectIds:[1,2,3,4]} → нас.пункты по subject id (массив до 4-5 за раз, фронт батчит)","POST /cadastral-quarter body={subjectIds:[1,2,3,4]} → массив кадастровых кварталов формата '02:55:020113'","DATA ENDPOINTS (body={} или GET, читают по userFiltersId из cookie):","POST /tableEgrn/fgisEgrn?page=0&count=10 → {headers:[{key,name,columnType}], bodyData:[{1:Территория, 2:значение_period1, 3:значение_period2}], meta:{page,count,totalCount}}","POST /fgisEgrn/geomDataForHeatMap → GeoJSON FeatureCollection. Координаты в EPSG:3857 (Web Mercator). 13 цветовых бакетов: <0.25, 0.25-0.5, 0.5-0.7, 0.7-0.85, 0.85-0.95, 0.95-1.0, 1.0_unchanged, 1.0-1.05, 1.05-1.15, 1.15-1.3, 1.3-1.5, 1.5-1.75, >1.75. MultiPolygon границы кадастровых кварталов с цветом по индикатору","GET /graphEgrnHistogram/fgisEgrn → {chartType:'histogramChart', data:[{title, indicatorValueCurrent:0.88, indicatorValuePrevious:1.12, period:'02.2026', percentValue:-21}]}","GET /graphEgrnLineIndicator/fgisEgrn → {chartType:'lineChartIndicator', data:[{title, indicatorValue:1.12, period:'01.2026', periodType:'Месяц'}, ...]}","GET /dataOnLegend/fgisEgrn → описание легенды теплокарты","GET /fgisEgrn/titleHeatMap → {title:'Индикатор цен ежемесячный по выбранной территории...'}"]}
|
||
{"type":"entity","name":"NSPD_OrgOnly_Endpoints_Apr26","entityType":"research","observations":["Дата: 26.04.2026. ⚠ КРИТИЧНОЕ ОТКРЫТИЕ — endpoints скрытые от physic-аккаунта (403 Forbidden):","GET /api/market-analytics/v1/graphEgrnCandleMedian/fgisEgrn — СВЕЧНОЙ график медианной АБСОЛЮТНОЙ цены сделок (₽/м²)","GET /api/market-analytics/v1/graphEgrnLineMedian/fgisEgrn — линия медианной АБСОЛЮТНОЙ цены сделок","Все остальные graph endpoints (Histogram, LineIndicator) возвращают только относительные индикаторы (текущий период / предыдущий = 0.88), а Candle/Line Median должны возвращать реальные ₽/м² по кадастровому кварталу.","Для physic (как у юзера сейчас) — 403 'Forbidden'. Проверено эмпирически в браузере 26.04.2026.","ГИПОТЕЗА: доступно для organisation-аккаунта (юрлицо в ESIA) или для аккаунтов с расширенным scope.","ЭКВИВАЛЕНТНОСТЬ ДАННЫХ: эти endpoints дублируют то, что мы уже получаем из CSV-датасета Росреестра (DataSource_Rosreestr_DealsCSV_Apr26) — медианные цены сделок по кадастровым кварталам. Только тут это онлайн-API с фильтрами по периоду/площади/нас.пункту, а CSV — сырые сделки покварталу.","ДЛЯ GenDesign: ничего не теряем. Используем CSV-датасет (per-deal сырые данные) + публичные индикаторы NSPD (относительная динамика) + dom.рф per-flat snapshot. Org-аккаунт NSPD — НЕ требуется."]}
|
||
{"type":"entity","name":"NSPD_DataValue_For_GenDesign_Apr26","entityType":"research","observations":["Дата: 26.04.2026. Конкретный value NSPD MarketAnalytics для GenDesign Plan A.","ИСТОРИЯ ДАННЫХ: 33 квартала (Q1 2018 — Q1 2026, 8 лет longitudinal)","ВРЕМЕННЫЕ РАЗРЕЗЫ: M (месяц), Q (квартал), H (полугодие), Y (год). Месячный показатель работает с лагом ~1-2 мес (на 26.04.2026 показывает 02.2026)","МЕТРИКА: индикатор цен — отношение текущего периода к базе/предыдущему/ГОГ. Безразмерное число (0.88 = -12% к предыдущему). Полезно для тренда, не для абсолютных значений","ГРАНУЛЯРНОСТЬ: до уровня кадастрового квартала (формат XX:YY:ZZZZZZ). Это в 100-1000 раз тоньше чем Росстат (агрегат по региону).","КОНКРЕТНЫЙ КЕЙС Свердл.обл, Екатеринбург, площадь 25-40 м², 02.2026 vs 01.2026: индикатор=0.88 (цены упали на 12%), предыдущий период 1.12.","ВЫГОДА для GenDesign:","1) Cross-validation цен сделок с Росреестра CSV — индикатор NSPD должен совпадать с (median_current_quarter / median_previous_quarter) из CSV","2) ВЕЛОСИТИ (sigma trend): тренд цен по конкретному кадастровому кварталу — для финмодели это хороший signal","3) ВЫБОР АНАЛОГОВ: GeoJSON-полигоны кадастровых кварталов с раскраской по индикатору → для участка пользователя автоматически найти кадастровые кварталы вокруг с похожей динамикой","4) WMTS-тайлы (через /api/aeggis/v4/235/wmts/{z}/{x}/{y}.png) можно встроить как base layer в Mapbox/Leaflet GenDesign","ПЛАН ИНТЕГРАЦИИ В Stage 2a:","Шаг A: ESIA-логин в headless Chrome (или через cookie из user-input) → получаем JWT в authAccessToken cookie","Шаг B: для каждого региона интереса (Свердл.обл, МО, Москва) сохраняем фильтры (saveUserFilters) и тянем geomDataForHeatMap → сохраняем GeoJSON в PostGIS как материализованное представление","Шаг C: cron 1×в сутки обновляем индикаторы по периоду и пересчитываем materialized views","Шаг D: для каждого участка пользователя — JOIN с PostGIS по геометрии → находим включающий кад.квартал → читаем индикатор","JURISDICTION: NSPD — государственный сервис Росреестра по 8-ФЗ. Использование физик-аккаунта легально как пользователя. ⚠ автоматизированный сбор через ESIA — серая зона. Лучше ОДНОРАЗОВО собрать с физик-аккаунта и кешировать локально.","ОГРАНИЧЕНИЯ:","1) physic-аккаунт через ESIA — доступ только для одного юзера, RPS-лимиты на сессию","2) JWT TTL=30 мин (refreshable). Для cron нужно либо хранить refresh_token, либо на каждом запуске re-auth через ESIA (что НЕ автоматизируется без обхода капчи)","3) Авторизация через ESIA подвержена captcha/2FA — недетерминирована для headless","4) absolute medians (Candle/Line Median) — 403, требуют org-аккаунт","5) Лимит на массовые запросы кадастровых кварталов: фронт батчит по 4-5 субъектов за раз — видимо есть soft-rate-limit"]}
|
||
{"type":"entity","name":"Domclick_DDF_Report_Nov2025","entityType":"research","observations":["Отчёт Домклик «Строительная отрасль на пороге структурной трансформации», представлен на Domclick Digital Forum, ноябрь 2025","Источник: PDF DDF_Потребность в недвижимости.pdf, 29 слайдов","Главный тезис: рынок входит в фазу СТРУКТУРНОЙ ТРАНСФОРМАЦИИ — количественный рост сменяется качественным; покупатели хотят УЛУЧШЕНИЯ характеристик, а не просто отдельной квартиры","Ключевые источники данных в отчёте: SberIndex (цены сделок и объявлений по регионам и 760 городам), Объединённое Кредитное Бюро (повторные ипотечники), Росстат (обеспеченность, население), Ипотечные витрины Сбербанка (миграция покупателей), НАШ.ДОМ.РФ (объёмы стройки)","ВАЖНО для GenDesign: SberIndex даёт цены СДЕЛОК и ОБЪЯВЛЕНИЙ по регионам и 760 городам — источник не использовался в DataSources_Analysis_Apr26, надо изучить (sberindex.ru, SberIndex PRO для городов)","Стратегический вывод: цели должны быть ДИФФЕРЕНЦИРОВАНЫ по регионам и КАЧЕСТВЕННЫ, а не количественны (33 м²/чел к 2030 / 38 м²/чел к 2036 — это нацели Указа 309 от 7 мая 2024)","5 ключевых сигналов для девелоперов: 1) Снижение доступности → переориентация на состоятельных покупателей, 2) 79% гэпа первичка/вторичка = качество, 21% = ставка, 3) Альтернативные сделки усложнились (с +19м² в 2019 до +9м² в 2025), 4) Повторные ипотечники теперь 37% выдач (vs 25% в 2020), 5) Только 19 регионов имеют демографический драйвер для стройки"]}
|
||
{"type":"entity","name":"Affordability_Trends_DDF_Nov2025","entityType":"research","observations":["Данные по доступности жилья из отчёта Domclick DDF (ноябрь 2025), для GenDesign Tile2 «По какой цене»","ДИНАМИКА ЦЕН РФ январь 2020 = 0%: первичка +142%, вторичка +104%, ЗП +101% к 2025","СТРУКТУРА ИПОТЕКИ — переориентация на новостройки: 2020-2023 первичка 29% / вторичка 71%; 9м2025 первичка 47% / вторичка 53% (рост ставок выгнал спрос с готового жилья)","ИНДЕКС ДОСТУПНОСТИ (м² для медианного работника при ипотеке 50% от ЗП, 20% взнос, 20 лет): первичка РФ стабильна 32.1 → 31.5 м² (ЗП +15, цены -23, ставки +7), вторичка обвалилась 37.7 → 22.8 м² (ЗП +15, цены -19, ставки -11)","В МОСКВЕ доступность ниже в 2 раза: первичка 23.2 м², вторичка 11.5 м²","ПРОГНОЗ: при снижении ставок будет ОБРАТНЫЙ переток с новостроек на готовое жильё → застройщикам надо готовиться к падению спроса на первичку","СРОК НАКОПЛЕНИЯ ВЗНОСА 20% на 65 м² (50% медианной ЗП на вклад): 2019 → 2025 РФ 2.3 → 6.2 года (×2.7)","ХУДШИЕ для накопления: Алтай 11.8 лет, Москва 7.8, Астраханская 7.7, Татарстан 7.4, Дагестан 7.3, Нижегородская 7.0, Краснодарский 6.9, СПб 6.8, Адыгея 6.7, Омская 6.7","ЛУЧШИЕ для накопления: ЯНАО 2.9, Саха 3.5, ХМАО 3.5, Псковская 3.6, Коми 3.8, Оренбургская 3.8, Архангельская 3.8, Карелия 4.0, Новгородская 4.0, Калужская 4.1","% работающих кто может накопить за 2 года: РФ 8.3%; ЛУЧШИЕ — Оренбургская 19.2%, ХМАО 18.4%, Коми 16.7%, Смоленская 14.1%, Красноярский 13.9%, Архангельская 13.6%, Тюменская 13.5%, Вологодская 13.3%, Калужская 13.0%, Курская 12.6%; ХУДШИЕ — Дагестан 3.5%, Нижегородская 5.0%, Татарстан 5.2%, Омская 5.7%, СПб 6.2%, Кировская 6.3%, Забайкальский 6.5%, Краснодарский 6.6%, Москва/Ленинградская 6.9%","ИНСАЙТ для GenDesign: Свердл.обл НЕ упомянута среди топов и хвостов — значит средние показатели по РФ. Использовать индекс доступности м² как один из факторов финмодели Tile2"]}
|
||
{"type":"entity","name":"PriceGap_Quality_vs_Rate_Nov2025","entityType":"research","observations":["Из отчёта Domclick DDF (ноябрь 2025): 79% разрыва цен первичка/вторичка по РФ — следствие КАЧЕСТВА жилья, а не разности ипотечных ставок","ЦЕНЫ 9м2025 (тыс ₽/м²) РФ: первичка 174, новая вторичка моложе 5 лет 161, вся вторичка 115. Гэп -34% общий = -27% качество + -7% ставка","МОСКВА: 357 / 342 / 308. Гэп -14% = -10% качество + -4% ставка","РЕГИОНЫ (без Москвы и СПб): 144 / 134 / 98. Гэп -32% = -25% качество + -8% ставка","КРИТИЧЕСКИЙ ИНСАЙТ: дисконт НОВОЙ вторички (моложе 5 лет) к первичке всего 7% по РФ. То есть НОВОСТРОЙКИ НЕ ТЕРЯЮТ В ЦЕНЕ при перепродаже после ввода — это чистый информационный сигнал для финмодели GenDesign (TestFit и rTIM этого не учитывают)","ДИСКОНТ ВТОРИЧКИ К ПЕРВИЧКЕ ВЫРОС с -20% (2019) до -34% (9м2025) по РФ","САМЫЙ БОЛЬШОЙ ДИСКОНТ (выгодные регионы для альтернативных сделок 'продал вторичку → купил первичку'): Астраханская -52%, Пермский -46%, Дагестан -43%, Хабаровский -43%, Башкортостан -43%, Иркутская -41%, Татарстан -40%, Свердловская -38%, ХМАО -38%, Тульская -38%","САМЫЙ МАЛЕНЬКИЙ ДИСКОНТ (вторичка дорогая): Псковская -9%, Москва -14%, Ставропольский -14%, Краснодарский -14%, Курская -15%, Орловская -16%, СПб -16%, Чувашия -16%, Архангельская -17%, Бурятия -18%","⭐ СВЕРДЛОВСКАЯ ОБЛ ВХОДИТ В ТОП-10 С САМЫМ БОЛЬШИМ ДИСКОНТОМ -38% — для жителя Екб альтернативная сделка ('продал вторичку — купил первичку') математически невыгодна по площади. Это объясняет почему в Екб все идут в первичку через ипотеку, а не через размен"]}
|
||
{"type":"entity","name":"AlternativeDeal_Trends_Nov2025","entityType":"research","observations":["Из Domclick DDF (ноябрь 2025): альтернативные сделки (продажа имеющейся вторички 45 м² → покупка первички через ипотеку) теряют эффективность","ДИНАМИКА для РФ при платеже 50% от медианной ЗП: 2019 → 2020 → 2021 → 2022-2024 → 9м2025 = 59 / 64 / 59 / 53 / 54 м²","Прирост площади: 2019 +19 м², 2020 +15 м², 2021 +8 м², 2022-2024 +9 м², 9м2025 +9 м² (теряется в 2 раза за 6 лет)","САМАЯ ВЫСОКАЯ ДОСТУПНОСТЬ (м² можно купить из 45 м² вторички): ЯНАО 93, Камчатка 86, Якутия 86, Архангельская 82, Бурятия 78, Псковская 78, Сахалин 76, Приморский 74, Оренбургская 72, Орловская 72","САМАЯ НИЗКАЯ ДОСТУПНОСТЬ: Астраханская 44, Алтай 47, Татарстан 49, Омская 50, Пермский 51, Башкортостан 52, Нижегородская 52, СВЕРДЛОВСКАЯ 55, Крым 56, Москва 56, СПб 58","⭐ В СВЕРДЛОВСКОЙ ОБЛ продав 45 м² вторички, купить можно 55 м² первички (28 вторичка + 28 ипотека). Прирост всего +10 м² — это ниже среднего РФ (+9 м² с большим разбросом)","ИНСАЙТ для GenDesign: финмодель должна учитывать что в Свердл.обл альтернативные сделки даются с трудом → клиент Prinzip это либо первая ипотека, либо иногородний (по slide 14 — Свердл.обл не упоминается среди магнитов миграции, значит почти всё локальное население)"]}
|
||
{"type":"entity","name":"RepeatedMortgage_Nov2025","entityType":"research","observations":["Из Domclick DDF (ноябрь 2025): доля повторных ипотечников выросла с 25% (2020) до 37% (9м2025)","9м2025: 20% берут повторно (нет непогашенных ипотек) + 17% берут 2+ ипотеку (есть непогашенные) = 37% всех повторных","2020: 10% повторно + 15% 2+ = 25%","2024: 18% повторно + 16% 2+ = 34%","ИНТЕРПРЕТАЦИЯ: квартиры всё больше продаются СОСТОЯТЕЛЬНЫМ покупателям, кого надо УБЕДИТЬ повторно улучшить жилищные условия. Source: Объединённое Кредитное Бюро","СЛЕДСТВИЕ для маркетинга Prinzip: customer persona 2025 ≠ first-time buyer; чаще upgrade-покупатель с продажей текущей квартиры. Финансово более готов, но требует большего качества (локация, класс, инфраструктура)","ИНСАЙТ для GenDesign: для финмодели и smart-unit-mix важно — в каждом районе доля повторных ипотечников может различаться. Если в Екб эта доля выше среднего РФ → таргетировать апгрейд-сегмент, более крупные/качественные квартиры. Если ниже → first-time, более доступные форматы"]}
|
||
{"type":"entity","name":"QualityShift_NewBuild_2021_2025","entityType":"research","observations":["Из Domclick DDF (ноябрь 2025): структурный сдвиг качественных метрик строящегося жилья 2021 → 2025","СРЕДНЯЯ ПЛОЩАДЬ КВАРТИРЫ ПАДАЕТ: РФ 50.1 → 48.3 м² (-1.8); Москва 56.0 → 53.4 м² (-2.6) — застройщики дробят квартиры из-за снижения доступности","ДОЛЯ БИЗНЕС+ЭЛИТНОГО КЛАССА РАСТЁТ: РФ 15% → 17% (+2пп); Москва 45% → 51% (+6пп) — переориентация на богатых","ПАРКОВОЧНЫЕ МЕСТА НА КВАРТИРУ РФ 0.18 → 0.25 (+0.07); Москва 0.40 → 0.35 (-0.06) — в РФ улучшают, в Москве ухудшают (земля дорогая)","ДОЛЯ НЕЖИЛОЙ ПЛОЩАДИ: РФ 16% → 19% (+3пп); Москва 27% → 25% (-2пп) — больше коммерции в регионах, в Москве и так высокая база","ДОЛЯ ПАНЕЛЬНЫХ СТЕН: РФ 4.8% → 5.4% (+0.6пп); Москва 4.3% → 1.2% (-3.1пп) — в РФ возвращается панель из-за себестоимости, в Москве — монолит/кирпич","СРЕДНЯЯ ЭТАЖНОСТЬ: РФ 18.7 → 19.2 (+0.5); Москва 25.0 → 30.9 (+5.9) — рост этажности, особенно в Москве","⭐ КЛЮЧЕВОЙ ВЫВОД: 'Из-за переориентации на богатых клиентов застройщики улучшают качественные характеристики, но СНИЖАЮТ ПЛОЩАДИ новых квартир'","ИНСАЙТ для Plan A Tile1 «Что строить» в GenDesign: при генерации концепции на участке default-параметры должны учитывать тренд — средние площади падают (-1.8 м² РФ за 4 года), доля бизнес+ растёт. Без поправки сгенерируем план образца 2021 года, который не продастся в 2025+"]}
|
||
{"type":"entity","name":"RegionGroups_BuildingDemand_Nov2025","entityType":"research","observations":["Из Domclick DDF (ноябрь 2025): 6 групп регионов по потребности в стройке МКД","ГРУППА 1 (9 регионов): ВЫСОКАЯ ПОТРЕБНОСТЬ в строительстве — Москва, Тюменская, ХМАО, ЯНАО, Крым, Калининградская и др. Драйверы: прирост населения вкл. трудовую миграцию, курортная недвижимость, невысокая обеспеченность м²/чел","ГРУППА 2 (11 регионов): УМЕРЕННАЯ ПОТРЕБНОСТЬ — СПб, ЛО, МО, Краснодарский и др. Нет оттока, популярность у иногородних, средняя обеспеченность","ГРУППА 3 (25 регионов): ТОЧЕЧНОЕ СТРОИТЕЛЬСТВО + РЕНОВАЦИЯ — Нижегородская, Приморский, Камчатский и др. Отток или стабильное население, низкая/средняя обеспеченность","ГРУППА 4 (26 регионов, САМАЯ БОЛЬШАЯ): ФОКУС НА РЕНОВАЦИИ — Владимирская, Кировская, Тульская, Псковская и др. Снижение населения, формально высокая обеспеченность, но СТАРЫЙ ЖИЛИЩНЫЙ ФОНД","ГРУППА 5 (3 региона): РЕНОВАЦИЯ + АРЕНДНОЕ ЖИЛЬЁ — Амурская, Архангельская, Иркутская. Снижение населения, старый фонд, крупные предприятия нуждаются в жилье для работников","ГРУППА 6 (11 регионов): ФОКУС НА ИЖС — Северный Кавказ (Дагестан, Чечня, Ингушетия, Каб.-Балкария, Кар.-Черкессия, Адыгея), Республика Алтай, Тыва, Бурятия, Калмыкия, Крым (частично). Высокая доля сельского населения, ИЖС > МКД","ГДЕ СВЕРДЛОВСКАЯ ОБЛАСТЬ: в отчёте явно НЕ названа в группе 1-2, но имеет высокую площадь стр-ва (1.4 м²/чел) при падающем населении (-3.8 до 0%) — попадает в группу 3 ТОЧЕЧНОЕ СТРОИТЕЛЬСТВО + РЕНОВАЦИЯ","СТРАТЕГИЧЕСКИЙ ВЫВОД: только 20 регионов (группы 1+2) нуждаются в БЫСТРОМ увеличении жилого фонда. Остальные 65 — реновация, ИЖС или арендное жильё. Federal-уровень должен дифференцировать поддержку, а не выдавать одинаковую льготную ипотеку всем"]}
|
||
{"type":"entity","name":"DemandIndex_Domclick_Nov2025","entityType":"research","observations":["Из Domclick DDF (ноябрь 2025): 'Индекс востребованности строительства жилья (МКД) в регионе' — композитный рейтинг 81 региона","ФАКТОРЫ ИНДЕКСА: 1) обеспеченность м²/чел на 01.01.2025; 2) доля нового жилья (введено 2019-2024); 3) динамика численности населения региона за 5 лет; 4) динамика населения регионального центра за 5 лет; 5) размер регионального центра; 6) доля сельского населения; 7) доля покупателей квартир из 'чужих' регионов; 8) доля населения способного накопить взнос 20% за 2 года; 9) доля населения которому доступна альтернативная сделка (продажа 45 м² → покупка первички); 10) отношение распроданности к стройготовности на 01.10.2025","ТОП-10 (высокая+умеренная востребованность, 31 регион всего): #1 Севастополь, #2 ХМАО, #3 Ставропольский, #4 Хабаровский, #5 Красноярский, #6 Бурятия, #7 Москва, #8 ЯНАО, #9 Тюменская, #10 Камчатка","ХВОСТ-10: #81 Астраханская, #80 Белгородская, #79 Кар.-Черкессия, #78 Липецкая, #77 Пензенская, #76 Тамбовская, #75 Сахалинская, #74 Рязанская, #73 Сев.Осетия, #72 Томская","СВЕРДЛОВСКАЯ ОБЛ — место в индексе НЕ ПУБЛИКУЕТСЯ в отчёте (показаны только топ-10 и хвост-10), но регион не в топ-10 и не в хвосте → средняя или ниже-средней востребованность","ИНСАЙТ для GenDesign: Site Finder может реплицировать аналогичный composite-score (10 факторов выше) на уровне муниципалитетов / кадастровых кварталов внутри Свердл.обл — это уникальный data-product, ЕРЗ и rTIM такого не делают","10 ФАКТОРОВ — почти все вычисляются из наших уже найденных источников: Росреестр CSV (сделки, доступность), ДОМ.РФ (обеспеченность через flatCount, доля нового жилья, распроданность через ready-construction), Росстат (демография, сельское население), Ипотечные витрины Сбербанка (миграция покупателей — нет у нас доступа, но можно прокси через ДомКлик)"]}
|
||
{"type":"entity","name":"Regional_Migration_Buyers_Nov2025","entityType":"research","observations":["Из Domclick DDF (ноябрь 2025): доля покупателей квартир в новостройках из ДРУГИХ регионов за 9м2025","Источник: Ипотечные витрины Сбербанка","РФ среднее: 19% покупателей не из своего региона","МАГНИТЫ МИГРАЦИИ (>20%): Крым 56%, Калининградская 37%, Краснодарский 36%, Москва 31%, СПб 26%, Ленинградская 25%, Новосибирская 24%, Тюменская 23%, Ставропольский 22%, Московская 19%","ЗАМКНУТЫЕ РЫНКИ (<10%): Алтайский 6%, Кемеровская 7%, Пермский 7%, Удмуртия 8%, Башкортостан 9%, Пензенская 10%, Челябинская 11%, Иркутская 11%, Омская 11%, Оренбургская 11%","СВЕРДЛОВСКАЯ ОБЛ — НЕ в топ-10 магнитов и НЕ в топ-10 замкнутых. Скорее всего среднее по РФ ~10-15% иногородних покупателей. Драйвер магнитизма — миграция ХМАО/ЯНАО → Екб (северяне выходящие на пенсию)","ИНСАЙТ для Prinzip: в маркетинге учесть что 10-15% покупателей могут быть из ХМАО/ЯНАО/Курганской — таргет-кампании в этих регионах через ВК/Telegram могут быть эффективны","ИНСАЙТ для Site Finder: миграционная доля = +1 фактор скоринга для участков. Города-магниты держат премию к цене, замкнутые рынки — дисконт"]}
|
||
{"type":"entity","name":"Sverdlovsk_Profile_DDF_Nov2025","entityType":"research","observations":["Сводка по Свердловской области из отчёта Domclick DDF (ноябрь 2025) — для GenDesign Discovery","ДИНАМИКА НАСЕЛЕНИЯ 2025 vs 2020: -1% до -3.8% (в группе слабого падения, не в худших и не в растущих)","ДОЛЯ СЕЛЬСКОГО НАСЕЛЕНИЯ: 14% (один из самых низких в РФ — урбанизированный регион, среднее РФ 25%)","ОБЕСПЕЧЕННОСТЬ м²/чел: НЕ В ТОП-10 ни хвоста ни головы — средние ~25-32 м²/чел","ПЛОЩАДЬ СТРОЯЩИХСЯ МКД НА 1 ЖИТЕЛЯ: 1.4 м²/чел — ВЫСОКАЯ (top-10 РФ, среднее РФ 0.8 м²/чел)","ИЗМЕНЕНИЕ ОБЪЁМА СТРОЙКИ vs 2019: НЕ в топ-10 роста и НЕ в топ-10 падения, среднее РФ +11.3% — стабильно строит","ДИСКОНТ ВТОРИЧКИ К ПЕРВИЧКЕ: -38% (8-е место в РФ среди регионов с самым большим дисконтом, РФ среднее -34%)","АЛЬТЕРНАТИВНАЯ СДЕЛКА: продав 45 м² вторички, можно купить 55 м² первички (28 вторичка + 28 ипотека). Прирост +10 м² — НИЖЕ среднего РФ (+9 м² с разбросом)","ЕКАТЕРИНБУРГ как региональный центр: входит в группу 'снижение населения области + рост рег.центра' (slide 25, явно подписан на графике) — типичный паттерн для крупного регионального центра","ЕКАТЕРИНБУРГ + ПРИГОРОДЫ: рост и центра и пригородов (slide 26)","МИГРАЦИЯ ПОКУПАТЕЛЕЙ: НЕ в топ-10 магнитов и не в топ-10 замкнутых рынков, среднее РФ ~15-20% иногородних","ИНДЕКС ВОСТРЕБОВАННОСТИ СТРОЙКИ: НЕ в топ-10 и не в хвосте","ИТОГО ПРОФИЛЬ: Свердл.обл = ТИПИЧНЫЙ КРУПНЫЙ ИНДУСТРИАЛЬНЫЙ РЕГИОН с высокой стройкой при умеренно падающем населении, но Екб ABSORBS внутрирегиональную миграцию + северян ХМАО/ЯНАО → концентрация спроса в самом Екб и пригородах","СТРАТЕГИЧЕСКОЕ ОТНЕСЕНИЕ К 6 ГРУППАМ: вероятно Group 3 (точечное стр-во + реновация) или граница Group 1-3","СЛЕДСТВИЕ для Prinzip: фокус на КАЧЕСТВЕ (не количестве), таргет апгрейд-аудитории Екб + сегмент 'покупатели с северов'"]}
|
||
{"type":"entity","name":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","entityType":"event","observations":["Дата: 26.04.2026 вечер. ВЕХА: dataset_СДЕЛКИ Росреестра залит на ПРОД в PostgreSQL+PostGIS впервые.","СКАЧАНО: 7 кварталов (2024 Q3 — 2026 Q1) из https://rosreestr.gov.ru/data-sets/. Размер ZIP ≈146 MB, распакованных CSV ≈1.0 GB.","УТОЧНЕНИЕ ГРАФА: в DataSource_Rosreestr_DealsCSV_Apr26 было указано '9 кварталов 2024-2026' — НЕВЕРНО. На самом деле Росреестр НЕ опубликовал dataset_СДЕЛКИ за Q1 и Q2 2024 (в их папках только КАДАСТРСТОИМОСТЬ). Первый доступный квартал: 2024 Q3.","ОСОБЕННОСТЬ URL: имена файлов/папок на сервере в кодировке Windows-1251 (НЕ UTF-8). Корректные URL: https://rosreestr.gov.ru/data-sets/{Q}%20%EA%E2%E0%F0%F2%E0%EB%20{YYYY}%E3./dataset_%D1%C4%C5%CB%CA%C8_r-r_01-92_y_{YYYY}_q_{Q}.csv.zip. Для листинга обязательно Referer: https://rosreestr.gov.ru/data-sets/ (иначе 403)","СРАВНЕНИЕ сепараторов: 2024 Q3 = ';' и имя файла dataset_СДЕЛКИ_r_all_q_3.csv (без разбивки по регионам в имени). 2024 Q4+ = '~' и имя dataset_СДЕЛКИ_r-r_01-92_y_YYYY_q_N.csv. Различие ПРИНЦИПИАЛЬНО для ETL — парсер должен знать оба.","ИТОГОВЫЕ ЦИФРЫ НА ПРОДЕ: 4 975 398 строк-агрегатов, 7 581 266 фактических сделок (с учётом deal_count), 296 040 сделок Свердловской обл. Размер БД: 1.8 GB (deals 1.1 GB + MV 305 MB + индексы)","РАСПРЕДЕЛЕНИЕ ПО КВАРТАЛАМ (сделки РФ / Свердл.обл): 2024Q3 1.108M/40K, 2024Q4 1.265M/48K, 2025Q1 877K/35K, 2025Q2 991K/38K, 2025Q3 1.111M/45K, 2025Q4 1.329M/52K, 2026Q1 898K/37K","СХЕМА PG: rosreestr_deals — partitioned BY RANGE(period_start_date) на 7 квартальных партиций (rosreestr_deals_2024q3 … rosreestr_deals_2026q1). Индексы: (region_code, quarter_cad_number), BRIN(period_start_date), (doc_type) WHERE in ('ДКП','ДДУ'), (realestate_type_code). PRIMARY KEY (id, period_start_date) — из-за партиционирования.","ОБОЙДЕННЫЕ DATA QUALITY ПРОБЛЕМЫ (важны для cron-синка): 1) deal_price бывает битым с десятками цифр → сделали NUMERIC без precision, фильтр на INSERT 'BETWEEN 100000 AND 1e10'. 2) year_build бывает датой '09.07.1988' → регекс ~ '^[12][0-9]{3}$', иначе NULL. 3) wall_material_code бывает multi-value '\\\"code1;code2\\\"' → TEXT вместо VARCHAR(15). 4) area бывает абсурдным (>1e8) → NUMERIC без precision, фильтр 'BETWEEN 5 AND 1000' в MV. 5) region_code бывает NULL → WHERE region_code IS NOT NULL. 6) в Q1 2026 потеряли ~5 строк (похоже на csv-quoting issues, <0.001%)","MATERIALIZED VIEWS созданы 3 шт:"," • rr_agg_cad_quarter (216 MB) — (region, cad_quarter, period, doc_type, area_bucket) → deals_count, p10/median/p90 price_per_sqm, mean. Ареа-бакеты: lt25, 25-40, 40-60, 60-90, 90-150, gt150 (как в NSPD)"," • rr_agg_region (680 KB) — (region, period, doc_type, realestate_type) → deals_count, percentiles. Для Ural-dashboard в prinzipevent.ru/analytics"," • rr_agg_settlement (88 MB) — (region, settlement, period, doc_type, realestate_type) → percentiles + distinct_cad_quarters. Для ГОРОД-tab Екб","REFRESH время: полный build всех 3 MV ~40 сек на проде (2 vCPU). Для Discovery этого хватит — REFRESH вручную или раз в квартал после заливки нового CSV","ВАЛИДАЦИЯ НА ПРОДЕ (smoke-test):"," Екатеринбург КВАРТИРЫ Q1 2026: ДДУ 1 153 сделки median 160 645 ₽/м² (p10=113K, p90=232K, 77 кад.кварталов); ДКП 7 700 сделок median 121 961 ₽/м² (p10=69K, p90=185K, 703 кад.квартала). Гэп ДКП→ДДУ = -24% (близко к Domclick DDF 'РФ -34%')"," Свердл.обл ДДУ динамика по кварталам (median ₽/м²): 2024Q3=38K → 2024Q4=43K → 2025Q1=54K(2 сделки!) → 2025Q2=141K → 2025Q3=140K → 2025Q4=149K → 2026Q1=149K. ДО середины 2025 ДДУ-данные НЕ ПОЛНЫЕ (Q1 2025 = всего 2 сделки в области — явный lag публикации). ДКП вроде ровный рост 63K→63K→66K→66K→70K→75K→79K ₽/м² — выглядит и реалистично","ДОСТУП НА ПРОДЕ: localhost:15432 через SSH-туннель до gendesign@46.173.16.127 (порт 5432 в контейнере docker-compose.prod.yml проброшен на 127.0.0.1:5432 на VPS). Данные живут в docker volume gendesign_postgres_data — переживут redeploy","АРТЕФАКТЫ В РЕПО: data/sql/01_schema_rosreestr_deals.sql, 02_load_all_quarters.sh (поддерживает PG_HOST + PGPASSWORD ENV для remote/tunnel), 03_materialized_views.sql. data/raw/ — 7 распакованных CSV (в .gitignore должны быть)","СЛЕДУЮЩИЕ ШАГИ: 1) добавить data/raw/ в .gitignore (нельзя коммитить 1 GB CSV); 2) сконвертировать 01_schema в Alembic-миграцию (не срочно); 3) cron quarterly_rosreestr_sync на VPS — проверяет listing 16-го числа второго месяца после квартала; 4) ИНТЕГРАЦИЯ с NSPD GeoJSON для spatial join 'участок узера → кадастровый квартал → агрегат из rr_agg_cad_quarter'; 5) FastAPI router /api/v1/analytics/{ural|ekb|prinzip}","ОГРАНИЧЕНИЕ ДЛЯ Prinzip вкладки: связь 'сделки Росреестра → застройщик' НЕ ПРЯМАЯ. Нужен JOIN через quarter_cad_number → NSPD/ПКК polygon → ДОМ.РФ /сервисы/api/kn/flats?developers=6208_0®ions=66 для Prinzip-жк в этом кад.квартале. Эта связь — next sprint."]}
|
||
{"type":"entity","name":"DomRF_Analytics_Loaded_Prod_Apr26","entityType":"event","observations":["Дата: 26.04.2026 вечер. ВЕХА: ДОМ.РФ portal-analytics dashboard залит на ПРОД в PostgreSQL.","ИСТОЧНИК: https://xn--80az8a.xn--d1aqf.xn--p1ai/portal-analytics/api/* (наш.дом.рф). 6 endpoints, snapshot от 26.04.2026.","СКАЧАНО:","• /dictionaries/regions — 89 регионов в 9 ФО","• /dictionaries/developers — 2 734 застройщика (в т.ч. PRINZIP id=6208_0)","• /dashboard/by-region — 89 регионов с разбивкой по комнатности (ONE/TWO/THREE/FOUR)","• /dashboard/by-flat-area — 8 area-buckets × 4 комнатности = 40 рядов (FROM_0_TO_25 … FROM_100)","• /dashboard/by-developer — 2 734 застройщика с разбивкой по комнатности (~11K рядов)","• /dashboard/by-room-count — РФ totals (sanity check, не храним)","✅ ПОКРЫТИЕ: 2.4M квартир в строительстве МКД / 118.7M м² по всей РФ. Свердл.обл: 115 205 квартир / 5.67M м² (52% однушки, 35% двушки, 12% трёшки, 1% 4+).","⚠ ОГРАНИЧЕНИЕ: на страницах 'долевое_строительство' и 'показатели_жилищного_строительства' фильтр ?regionId=X ИГНОРИРУЕТСЯ — сервер всегда отдаёт РФ-агрегат. Разбивка по регионам идёт ЧЕРЕЗ by-region (не by-room-count). Для Prinzip-специфичных срезов по Свердл.обл нужны другие endpoints (не проверяли) или /сервисы/api/kn/flats?regions=66&developers=6208_0 с Basic-auth.","ОБХОД WAF: ServicePipe блокирует прямой curl (JS-challenge). Решение: использовали chrome-devtools MCP get_network_request с responseFilePath — берёт response ПРЯМО ИЗ БРАУЗЕРНОГО КАША, обходя WAF/cookies/mixed-content. Для обновления snapshot'а нужен открытый браузер и chrome-devtools MCP. Для production cron — Playwright/Selenium в headless режиме (пройдёт ServicePipe через JS-VM).","СХЕМА PG (5 таблиц):","• domrf_regions(region_id, region_name, federal_district) — 89","• domrf_developers(developer_id TEXT, developer_name) — 2 734. PK = developer_id (формат '6208_0' или '0_14583')","• domrf_snapshots(snapshot_date PK, fetched_at, notes)","• domrf_region_aggregates(region_id, snapshot_date, room_count_type, flat_count, area_sqm, percent) — 89×5=445 (храним TOTAL+ONE/TWO/THREE/FOUR), 439 по факту (у некоторых регионов нет FOUR)","• domrf_flat_area_distribution(snapshot_date, region_id, area_bucket, room_count_type, flat_count, area_sqm, percent) — 40 рядов (region_id=0 = РФ)","• domrf_developer_aggregates(developer_id, snapshot_date, region_id, room_count_type, flat_count, area_sqm, percent) — 11 063 рядов (region_id=0 = РФ)","КЛЮЧЕВЫЕ ЦИФРЫ PRINZIP (id=6208_0): 814 квартир / 31 040 м². Квартирография: 614 однушек (75%, 18 922 м²), 156 двушки (19%), 22 трешки (3%), 22 4+комн. (3%). Сравнение со Свердл.обл в целом (52/35/12/1) — PRINZIP сильно смещён в однушки (75% vs 52% benchmark).","ТОП-10 РФ застройщиков (по flat_count): Самолет 110 568 / ПИК 84 007 / DOGMA 66 308 / ТОЧНО 46 870 / Setl Group 44 817 / ФСК 39 888 / ССК 35 547 / ЮгСтройИнвест 35 471 / ЛСР 33 933 / Брусника 30 106","СВЕРДЛ.ОБЛ КОНКУРЕНТЫ PRINZIP в реестре: Атомстройкомплекс (5772_0), ЛСР (5653_0), КОРТРОС (5654_0), Стройтэк (4647_0), УГМК-ЗАСТРОЙЩИК (5786_0), Брусника (5791_0), СЗ ЛСР.ОСТРОВ (0_23239), Стройтэкс (5973_0). Отношение PRINZIP к Свердл.обл не хранится напрямую в ДОМ.РФ dashboard агрегатах (их by-region API не возвращает dev-детали), но видно что в Свердл.обл 115K квартир, PRINZIP 814 = ~0.7% рынка (маленький игрок)","СТРУКТУРА ПЛОЩАДЕЙ РФ (benchmark): 0-25м² 6%, 25-35м² 17%, 35-45м² 30% (мода!), 45-55м² 14%, 55-70м² 20%, 70-85м² 8%, 85-100м² 3%, >100м² 2%. Медиана ~45 м².","АРТЕФАКТЫ В РЕПО: data/sql/10_schema_domrf.sql, data/sql/11_load_domrf.py (Python loader через docker run psql), data/sql/upload_server.py (был использован но заблокирован Mixed-Content). data/raw/domrf/*.json — 6 файлов сырых (в .gitignore)","СЛЕДУЮЩИЕ ШАГИ: 1) искать endpoints с regionфильтром для разбивки по застройщикам в конкретном регионе (возможно другая страница или /flats/map?regions=66&developers=6208_0 с Basic MTpqd2U=); 2) /сервисы/api/kn/flats?regions=66 — поквартирный прайс-лист Свердл.обл (~24K квартир); 3) ДОМ.РФ ready-construction (sold%/ready%) — velocity для Tile3 Plan A; 4) ЦБ ипотека (Tab11) — желательно иметь отдельной таблицей; 5) MV «top_developers_in_region» после появления регионного среза"]}
|
||
{"type":"entity","name":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","entityType":"event","observations":["Дата: 26.04.2026 вечер (продолжение). ВЕХА: 7 файлов ДОМ.РФ (XLSX+PDF), скачанных юзером вручную через кнопку 'Скачать' на наш.дом.рф, залиты на ПРОД. Расширяет JSON-dashboard данные из DomRF_Analytics_Loaded_Prod_Apr26.","ИСТОЧНИКИ (C:\\Users\\user\\Downloads\\):","• developer_rf_26-04-2026.xlsx — 2746 застройщиков (2563 уникальных после дедупа), поля Площадь/Разрешения/Дома/Квартиры/доля%","• escrow_rf_26-04-2026.xlsx — 28 банков, эскроу-показатели (дома/разрешения/площадь/застройщики/регионы)","• guaranty_26-04-2026.xlsx — 99 территорий (РФ + 8 ФО + 89 регионов) с разбивкой всего/214-ФЗ/эскроу/ПП480","• housing_info_26-04-2026.pdf — РФ-разбивка по механизмам (все/эскроу/фонд/без) + топ-10 регионов + топ-10 городов + план ввода 2026-2035","• sold_out_info_26-04-2026.pdf — реализация МАРТ 2026 (отчёт от 11.04.2026), РФ итог + 8 регионов + разбивка по году ввода + распределение по % реализации","• Квартирография_жилищного_строительства_26-04-2026.pdf — топ-20 застройщиков + топ-20 регионов (дублирует JSON dashboard данные, не загружали отдельно)","• mortgage_rates_19-04-2026.pdf — ставки топ-20 банков на 19.04.2026","СХЕМА PG (9 таблиц + 4 индекса):","• domrf_developers_full(snap, name, area_th_sqm, permits, houses, flats, market_share_pct) — 2 563 ряда","• domrf_escrow_banks(snap, bank_name, houses, permits, area_th_sqm, devs, regions) — 28 рядов","• domrf_guaranty_regions(snap, territory, level, total_*, fz214_*, escrow_*, pp480_*) — 99 рядов, level∈{rf,fo,region}","• domrf_housing_summary(snap, territory, level, mechanism, devs, permits, decls, houses, area, flats) — 58 рядов, mechanism∈{all,escrow,fund,no_attraction}","• domrf_planned_commissioning(snap, plan_year, escrow_th, fund_th, no_attr_th, total_th) — 10 лет (2026-2035)","• domrf_sold_out(snap, territory, total/sold/unsold/not_open _area+%, avg_price_per_sqm, attracted_funds_mln) — 9 рядов","• domrf_sold_out_by_year(snap, plan_year, total, pct, sold/unsold/not_open %) — 6 рядов (2026..2031+)","• domrf_sold_out_by_progress(snap, progress_bucket, total, pct, sold/unsold within %) — 6 корзин (not_open..80+)","• domrf_mortgage_rates(snap, bank, primary_rate, secondary_rate, refinance_rate, note) — 20 банков","КЛЮЧЕВЫЕ ЦИФРЫ ПОСЛЕ ЗАГРУЗКИ:","• PRINZIP в полном реестре: 31.04 тыс м² / 2 дома / 814 квартир / доля рынка РФ 0.026% (совпадает с JSON dashboard)","• Свердл.обл guaranty: 5654 тысм² / 179 застройщиков (178 на эскроу) — НОВОЕ: теперь есть число застройщиков по каждому региону (раньше были только объёмы)","• Свердл.обл sold_out: 5686 тысм² / продано 29% / не продано 54% — НИЗКИЙ sold_rate (Москва 47%, СПб 40%) → структурная проблема рынка в РФ (по среднему 31% продано), в Свердл.обл хуже среднего","• РФ sold_out: 119M м² / 31% продано / 45% не продано / 24% продажи не открыты. Средняя цена МКД РФ: 216 316 ₽/м². Объём привлечённых средств: 7.95 трлн ₽","• ПРОГНОЗ ВВОДА: 2026 = 37.9M м² → 2027 = 35.4M → 2028 = 26.5M → 2029 = 11.0M → 2030 = 4.3M (РЕЗКОЕ ПАДЕНИЕ ПОСЛЕ 2028)","• ТОП-5 БАНКОВ ЭСКРОУ: Сбер 72.8M м² (61% рынка!), ВТБ 17.4M, ДОМ.РФ 13.3M, Альфа 5.7M, ГПБ 2.6M. СБЕР ДОМИНИРУЕТ эскроу-рынком","• СТАВКИ ИПОТЕКИ 19.04.2026: средневзвешенная 19.90% первичка / 19.59% вторичка / 18.81% рефинанс. Самые низкие: Кубань Кредит 16.4%, Т-Банк 16.9%, Уралсиб 17.89%, Металлинвест 18.1%. Самые высокие: Сбер 20.2%, Совком 19.99%, ВТБ 19.9%","НОВЫЕ СРЕЗЫ КОТОРЫХ НЕ БЫЛО:","1) ЧИСЛО ЗАСТРОЙЩИКОВ ПО КАЖДОМУ РЕГИОНУ (из guaranty.xlsx) — раньше этого не было в JSON dashboard. Свердл.обл 179, Москва ~1057 (ЦФО), Краснодарский …","2) РАСПРЕДЕЛЕНИЕ ПО МЕХАНИЗМАМ (эскроу/фонд/без) — в РФ 96% площади на эскроу, 1% фонд, <1% без. Активных застройщиков 4 336 всего","3) РЕАЛИЗАЦИЯ sold/unsold (Tile3 velocity) — был отложен в роадмапе как 'TODO ready-construction', теперь есть на уровне регионов/года-ввода/бакета-реализации","4) СРЕДНИЕ ЦЕНЫ ПЕРВИЧКИ РФ (216 316 ₽/м² на март 2026) — бенчмарк для Tile2 (раньше были только Росреестр ddu_median по кад.кварталам)","5) СТАВКИ ПО БАНКАМ — отдельный срез который не был в dashboard JSON, полезен для финмодели","6) ПЛАН ВВОДА ДО 2035 ГОДА — видно резкое падение после 2028 года (соответствует Domclick DDF '27 регионов строят меньше')","ОГРАНИЧЕНИЕ: все данные — РФ итоги или топ-N. НЕТ связи 'застройщик × регион' в PDF/XLSX — для Prinzip-специфичных срезов по Свердл.обл нужен /сервисы/api/kn/flats?regions=66&developers=6208_0 с Basic-auth (не выкачано ещё)","ОБХОД WAF: в этот раз юзер сам скачал файлы через кнопку в браузере (XLSX/PDF экспорт на портале), это обошло WAF без chrome-devtools MCP. Для cron — нужен Playwright (эмулировать клик + download)","АРТЕФАКТЫ: data/sql/20_schema_domrf_extras.sql, data/sql/21_load_domrf_extras.py. Исходные файлы остаются в C:\\Users\\user\\Downloads\\ (не копируем в репо — user-private)"]}
|
||
{"type":"entity","name":"DomRF_Playwright_Scraper_Apr26","entityType":"infrastructure","observations":["Дата: 26.04.2026 вечер. Продакшн-скрейпер ДОМ.РФ на Playwright + headless Chromium","АРТЕФАКТ: data/sql/30_scrape_domrf.py — проходит ServicePipe WAF, собирает все /api/* JSON ответы с 12 страниц наш.дом.рф. Поддерживает --headed для отладки, --page <name> для одной секции","РАБОТАЕТ БЕЗ ОТКРЫТОГО БРАУЗЕРА: Playwright сам запускает Chromium в headless режиме, проходит JS-challenge ServicePipe","ПОКРЫТИЕ: из 12 страниц успешно скачал 7 (launch / share_construction / escrow / sold_ready / quartirografia / commissioning / mortgage_stats)","НЕ СКАЧАЛОСЬ (5 страниц пустых): housing, housing_dev, realization, mortgage_rates, stat_series. Причина: эти страницы делают API-вызовы только при user-interaction (клики на фильтры/вкладки) или их инициируют из сервис-воркера. Требуется расширить скрейпер page-specific взаимодействиями (клик на вкладки, выбор фильтров)","СКАЧАНА СТАТИСТИКА: 64 JSON-файла, ~1.95 MB сырых данных в data/raw/domrf_full/<section>/","РАСШИРЕНИЕ size=15 → size=1000: скрейпер автоматически делает второй fetch с size=1000 для всех endpoint'ов где был size=15 — получаем все регионы/застройщики вместо топ-15","ИСПОЛЬЗОВАНИЕ ДЛЯ cron: pip install playwright + python -m playwright install chromium. Готов использоваться на VPS Beget — нужен ~300 MB для Chromium"]}
|
||
{"type":"entity","name":"DomRF_Scraped_Loaded_Prod_Apr26","entityType":"event","observations":["Дата: 26.04.2026 вечер. Нормализованные данные из Playwright-скрейпера загружены в 10 НОВЫХ PG-таблиц на ПРОДЕ","СХЕМА: data/sql/31_schema_domrf_full.sql + 32_load_domrf_full.py","НОВЫЕ ТАБЛИЦЫ (10 шт, не пересекаются с существующими):","• domrf_launch_top (1 410 рядов) — топ-N застройщиков/регионов/городов/ФО по запускам (app) и вводу (rnv). dim_type × metric_type × entity_id","• domrf_launch_obj_class (4) — разбивка запусков/ввода по классу (Типовой/Комфорт/Бизнес/Элитный)","• domrf_launch_monthly (75) — временной ряд год+месяц → app/rnv (2020-2026)","• domrf_sold_ready_index (1) — РФ итог на март 2026: 118.88M м² всего, продано 30.91%, готовность 43.1%, soldReady 71.73%","• domrf_sold_ready_breakdown (2 660 рядов) — распроданность по ФО/регионам/городам/застройщикам с squareSum/soldPerc/readyPerc/soldReadyPerc","• domrf_sold_ready_dynamics (300) — динамика 4 индикаторов (squareSum/sold%/ready%/soldReady%) по годам и месяцам с 2020 по 2026","• domrf_project_finance (99) — долевое стр-во по федэкроу/214-ФЗ/ПП480 для РФ+ФО+регионов (rns_cnt, dev_cnt, liv_sq_amt + guaranty_escrow_*)","• domrf_commissioning (1) — фактический ввод по регионам (multifamily/private)","• domrf_mortgage_dashboard (1) — ОБЩАЯ СТАТИСТИКА ИПОТЕКИ РФ: 68 714 кредитов (22 595 первичка + 46 119 вторичка), средние ставки: ПЕРВИЧКА 6.83% (субсидированная!), ВТОРИЧКА 12.95%","• domrf_mortgage_details (2) — разбивка по валюте RUB/OTH (средний кредит 4.22 млн ₽, 23.8 лет срок, просрочка 1.02%)","КЛЮЧЕВЫЕ ИНСАЙТЫ:","1) ТОП-5 РФ ПО ЗАПУСКАМ 2026: DOGMA 492K м², Setl Group 427K, Самолет 360K, ФСК 257K, ССК 257K. ПИК (лидер строительства) 6-е место по НОВЫМ запускам — значит доводят имеющееся, не расширяются","2) СВЕРДЛОВСКАЯ ОБЛ ЗАПУСКИ 2026: 492 478 м² (6-е место в РФ после МО/ЛО/Москвы/Краснодар/Башкортостан)","3) СВЕРДЛОВСКАЯ РАСПРОДАННОСТЬ (март 2026): 5 686 тыс м² / продано 29.04% / готовность 36.08% / soldReady 80.47%. soldReady > 80% = хороший баланс между продажами и стройкой (не затоварены)","4) РЕЙТИНГ ФО ПО soldReady%: ЦФО 84.4%, СЗФО 80.6%, ПФО 71.8%, ДФО 71.6%, СибФО 63.0%, СКФО 36.0% (плохо!), УрФО 66.4%, ЮФО 59.4%. СКФО строит быстро (ready 47.9%) но продаёт медленно (sold 17.2%)","5) КЛАСС ЖИЛЬЯ ПО ЗАПУСКАМ (м²): Типовой 1.965M, Комфорт 6.929M (ЛИДЕР!), Бизнес 1.340M, Элитный 326K. Комфорт = 67% всех запусков","6) СВЕРДЛ.ОБЛ PROJECT FINANCE: 266 разрешений на строительство / 179 застройщиков (178 на эскроу) / 5.65M м²","7) КЛЮЧЕВОЕ: СРЕДНЯЯ СТАВКА ПЕРВИЧКИ в РФ = 6.83% (субсидированная эскроу-ипотека). ВТОРИЧКа 12.95% — это средний реальный кредит (не рыночный 19.59% из mortgage_rates), то есть много льготных категорий (семейная 8%, IT 6% ит.д.)","НЕ СКАЧАНО (5 страниц из 12): housing, housing_dev, realization (поквартирный прайс-лист!), mortgage_rates, stat_series. Требуют page-specific user-interaction triggers. TODO в следующей сессии — расширить 30_scrape_domrf.py interactions (клик на вкладки/фильтры)"]}
|
||
{"type":"entity","name":"DomRF_Schema_Relations_Apr26","entityType":"infrastructure","observations":["Дата: 26.04.2026 вечер. Миграция data/sql/40_relations.sql — FK constraints + helper views между всеми таблицами DOM.РФ и Rosreestr на ПРОДЕ","BOOTSTRAP ДЛЯ FK:","• Добавлена region_id=0 ('Российская Федерация' / '_RF') в domrf_regions — этот ID используется как all-Russia placeholder в domrf_flat_area_distribution и domrf_developer_aggregates","• Бэкфилл 22 снапшотов в domrf_snapshots из всех дочерних таблиц с snapshot_date","FK CONSTRAINTS (27 шт):","• 23 × fk_snap_<table>: все domrf_* таблицы с snapshot_date → domrf_snapshots(snapshot_date) ON UPDATE CASCADE","• fk_region_aggregates_region: domrf_region_aggregates.region_id → domrf_regions(region_id)","• fk_flat_area_region: domrf_flat_area_distribution.region_id → domrf_regions(region_id)","• fk_developer_agg_region: domrf_developer_aggregates.region_id → domrf_regions(region_id)","• fk_developer_agg_developer: domrf_developer_aggregates.developer_id → domrf_developers(developer_id)","НЕ ДОБАВЛЯЛ FK (не подходят по типу):","• domrf_launch_top.entity_id — смешанные ID (developer_id − TEXT, region_id − numeric, area name) в одной TEXT колонке с dim_type-разбивкой","• domrf_sold_ready_breakdown.entity_key — тоже смешанный ключ (название по chartType)","• domrf_commissioning.region_id — ДРУГАЯ система ID (внутренняя НОМЕНКЛАТУРА commissioning API), не совпадает с domrf_regions(region_id)","• rosreestr_deals.region_code — SMALLINT в partitioned table; по значениям совпадает с domrf_regions.region_id, но формальный FK на partitioned-table сложен — JOIN с v_rosreestr_market_by_region","HELPER VIEWS (4 шт):","• v_region_master — ОДНА строка на регион со всеми ключевыми метриками: квартирография (DOM.РФ) + распроданность (PDF и API) + проектное финансирование + 214-ФЗ + запуски/ввод","• v_developer_master — Профиль застройщика: реестр + квартирография по комнатностям + запуски/ввод + распроданность. PRINZIP, Брусника, ЛСР и др. в одном выборке","• v_rosreestr_market_by_region — Цены сделок Росреестра (median/p10/p90 ₽/м²) по кварталам с DOM.РФ-именами регионов и ФО (только квартиры)","• v_market_pulse_rf — ОДНА СТРОКА: РФ pulse: 118.7M м² стр-ва, продано 30.91%, рыночная ставка 19.9% vs реальная 6.83% (разница 13 пп — субсидии), 68 714 кредитов на 290 млрд ₽, средняя цена 216 316 ₽/м²","КЛЮЧЕВЫЕ ИНСАЙТЫ ИЗ v_developer_master для PRINZIP вс конкуренты Свердл.обл:","• Брусника 30 106 квартир / 1 780 тыс м² / доля РФ 1.49% / sold% 46.6%","• ЛСР 33 933 / 1 270 / 1.07% / sold 48.1%","• КОРТРОС 9 815 / 484 / 0.41% / sold 28.4%","• Атомстройкомплекс 4 018 / 233 / 0.20% / sold 15.0% (ОЧЕНЬ МЕДЛЕННО ПРОДАЁТ)","• УГМК 1 883 / 138 / 0.12% / sold 41.5%","• Стройтэк 1 515 / 77 / 0.06% / sold 28.4%","• PRINZIP 814 / 31 / 0.026% / sold 48.4% (БЫСТРО ПРОДАЁТ!)","PRINZIP имеет НАИВЫСШИЙ sold_pct (48.4%) среди сравнимых застройщиков Свердл.обл. Несмотря на маленький портфель (814 кв-р), 75% однушки с хорошей absorption rate — продукт попадает в рыночный спрос ЛУЧШЕ чем КОРТРОС/Атомстройкомплекс с большими портфелями"]}
|
||
{"type":"entity","name":"DB_Schema_Final_Apr26","entityType":"infrastructure","observations":["Дата: 26.04.2026 конец дня. ИТОГОВАЯ схема ПРОД-БД после дня загрузок (Росреестр + ДОМ.РФ).","ОБЩИЕ ЦИФРЫ: 36 таблиц + 4 обычных view + 3 materialized view + 7 партиций + 28 FK constraint. Размер БД: 1855 MB.","ПОДКЛЮЧЕНИЕ: localhost:15432 через SSH-туннель до gendesign@46.173.16.127, в docker-compose postgis/postgis:16-3.4.","КЛЮЧ: все данные в волюме gendesign_postgres_data — переживут redeploy.","═════════════════════════════════════════════════","БЛОК 1: ROSREESTR PER-DEAL (1.1 GB)","═════════════════════════════════════════════════","• rosreestr_deals — ПАРТИЦИОНИРОВАННАЯ BY RANGE(period_start_date) на 7 квартальных партиций (2024Q3 — 2026Q1).","• 4 975 398 строк / 7 581 266 фактических сделок / 296 040 сделок Свердл.обл.","• Индексы: (region_code, quarter_cad_number), BRIN(period_start_date), partial idx на doc_type в ('ДКП','ДДУ').","• Партиции: rosreestr_deals_2024q3 … _2026q1 (каждая 120-200 MB).","• staging: rosreestr_deals_staging (UNLOGGED) — буфер для \\COPY из CSV.","═════════════════════════════════════════════════","БЛОК 2: ROSREESTR MATERIALIZED VIEWS (305 MB)","═════════════════════════════════════════════════","• rr_agg_cad_quarter (216 MB) — (region, cad_quarter, period, doc_type, area_bucket) → deals_count, p10/median/p90 ₽/м². Основная таблица для Tile2 GenDesign.","• rr_agg_region (680 KB) — (region, period, doc_type, realestate_type) → percentiles. Для региональных дашбордов.","• rr_agg_settlement (88 MB) — (region, settlement, period, doc_type, realestate_type) + distinct_cad_quarters. Для вкладки Екб.","═════════════════════════════════════════════════","БЛОК 3: DOM.РФ СПРАВОЧНИКИ / DIMENSIONS","═════════════════════════════════════════════════","• domrf_regions (90 строк) — регионы PK region_id (0=РФ placeholder + 89 реальных регионов). FK target для 3 таблиц.","• domrf_developers (2 734) — PK developer_id TEXT ('6208_0' = PRINZIP). FK target для 1 таблицы.","• domrf_snapshots (3) — PK snapshot_date. FK target для 23 таблиц.","═════════════════════════════════════════════════","БЛОК 4: DOM.РФ JSON DASHBOARD (первая загрузка)","═════════════════════════════════════════════════","• domrf_region_aggregates (439) — (region_id, snapshot, room_count_type) → flat_count, area_sqm, percent. Разбивка по комнатности на регион.","• domrf_developer_aggregates (11 063) — (developer_id, snapshot, region_id, room_count_type) → квартиры/площадь. PRINZIP здесь.","• domrf_flat_area_distribution (40) — распределение по бакетам площади (FROM_0_TO_25..FROM_100). РФ-вид.","═════════════════════════════════════════════════","БЛОК 5: DOM.РФ XLSX/PDF SNAPSHOTS (юзер-ручная выгрузка)","═════════════════════════════════════════════════","• domrf_developers_full (2 563) — полный реестр физ.юрлиц с площадью/разрешениями/квартирами/долей рынка.","• domrf_escrow_banks (28) — банки эскроу с объёмами. Сбер = 61% рынка.","• domrf_guaranty_regions (99) — РФ+8ФО+89 регионов с разбивкой 214-ФЗ/эскроу/ПП480.","• domrf_housing_summary (58) — разбивка по механизму (эскроу/фонд/без) для регионов и городов.","• domrf_planned_commissioning (10) — план ввода 2026-2035.","• domrf_sold_out (9) — РФ+8 регионов из PDF (sold_out_info), средняя цена 216 316 ₽/м².","• domrf_sold_out_by_year (6) — план-год × % продано/не продано/не открыто.","• domrf_sold_out_by_progress (6) — бакеты реализации (not_open .. 80+).","• domrf_mortgage_rates (20) — ставки топ-20 банков (PDF). Средневзвешенная 19.9% / 19.59% / 18.81%.","═════════════════════════════════════════════════","БЛОК 6: DOM.РФ PLAYWRIGHT-СКРЕЙП (АПИ-выгрузка)","═════════════════════════════════════════════════","• domrf_launch_top (1 410) — топ-N по запускам (app) и вводу (rnv). dim_type × metric_type × entity_id. DOGMA лидер 2026.","• domrf_launch_obj_class (4) — Комфорт 67% всех запусков РФ.","• domrf_launch_monthly (75) — time-series 2020-2026.","• domrf_sold_ready_index (1) — РФ итог: 118.88M м², sold 30.91%, ready 43.1%, soldReady 71.73%.","• domrf_sold_ready_breakdown (2 660) — разбивка по foChart/regionChart/cityChart/devChart. Основной вывод для Tile3 (velocity).","• domrf_sold_ready_dynamics (300) — 4 индикатора × год × месяц (2020-2026).","• domrf_project_finance (99) — ПР финансирование ПР / ФО / регионы. PRIMARY KEY id BIGSERIAL + UNIQUE INDEX (snap, subj_type, subj_name).","• domrf_commissioning (1) — фактический ввод (multifamily/private). region_id ДРУГАЯ система ID, НЕ совпадает с domrf_regions.","• domrf_mortgage_dashboard (1) — 68 714 кредитов, средняя первичка 6.83%, вторичка 12.95%.","• domrf_mortgage_details (2) — RUB и OTH валюты.","═════════════════════════════════════════════════","БЛОК 7: UNIVERSAL RAW BACKUP","═════════════════════════════════════════════════","• domrf_raw_endpoints (16) — (snapshot, section, endpoint, payload JSONB). GIN index на payload. Не все endpoints залиты — universal store оставлен на случай новых endpoints.","═════════════════════════════════════════════════","БЛОК 8: HELPER VIEWS (объединённые срезы)","═════════════════════════════════════════════════","• v_region_master — ONE ROW PER REGION: квартирография + sold_out (PDF) + sold_ready (API) + project_finance + guaranty + launch (app+rnv). Свердл.обл: 5.67M м² / 179 dev / sold 29% / soldReady 80%.","• v_developer_master — профиль застройщика. PRINZIP sold% 48.4% — ЛИДЕР Свердл.обл по скорости продаж.","• v_rosreestr_market_by_region — Росреестр cps + DOM.РФ имена. Свердл.обл ДДУ 2026Q1 = 149 377 ₽/м².","• v_market_pulse_rf — ОДНА СТРОКА: 118.7M м² стр-во РФ, sold 30.91%, Цена 216 316 ₽/м², ставка рыночная 19.9% vs реальная 6.83% (разница 13 пп).","═════════════════════════════════════════════════","БЛОК 9: FOREIGN KEY CONSTRAINTS (28 шт включая Rosreestr partition's parent)","═════════════════════════════════════════════════","• 23 × fk_snap_<table>: все domrf_* с snapshot_date → domrf_snapshots(snapshot_date) ON UPDATE CASCADE","• fk_region_aggregates_region / fk_flat_area_region / fk_developer_agg_region: → domrf_regions(region_id)","• fk_developer_agg_developer: domrf_developer_aggregates.developer_id → domrf_developers(developer_id)","═════════════════════════════════════════════════","ETL PIPELINE АРТЕФАКТЫ (data/sql/)","═════════════════════════════════════════════════","• 01_schema_rosreestr_deals.sql — partitioned table + staging.","• 02_load_all_quarters.sh — \\copy файлов (сеп. ~ и ; оба).","• 03_materialized_views.sql — 3 MV.","• 10_schema_domrf.sql + 11_load_domrf.py — JSON dashboard (regions/developers/aggregates).","• 20_schema_domrf_extras.sql + 21_load_domrf_extras.py — XLSX/PDF (ручная выгрузка).","• 30_scrape_domrf.py — Playwright headless Chromium scraper.","• 31_schema_domrf_full.sql + 32_load_domrf_full.py — нормализация scraper output.","• 40_relations.sql — FK constraints + 4 helper views.","• 31_schema_domrf_raw.sql — universal JSONB store (backup).","═════════════════════════════════════════════════","TODO — НЕДОСТАЮЩИЕ ДАННЫЕ","═════════════════════════════════════════════════","1) 5 страниц ДОМ.РФ не скачались (lazy-load с user-interaction): housing, housing_dev, realization, mortgage_rates, stat_series. Расширить 30_scrape_domrf.py page-specific click triggers.","2) /сервисы/api/kn/flats?regions=66&developers=6208_0 — поквартирный прайс-лист PRINZIP, требует Authorization: Basic MTpqd2U=. Идеальный источник для вкладки Prinzip.","3) NSPD GeoJSON кадастровых кварталов Свердл.обл → таблица cadastral_quarters с PostGIS для spatial join 'участок пользователя → кад.квартал → агрегат сделок'.","4) Cron quarterly_rosreestr_sync на VPS — 16-го числа 2-го месяца после квартала.","5) Cron domrf_daily_scrape на VPS — Playwright + chromium на Beget VM (~300 MB пространства).","6) FastAPI router /api/v1/analytics/{ural|ekb|prinzip} — используя v_region_master / v_developer_master / v_market_pulse_rf.","7) Alembic-миграции из *.sql файлов (воспроизводимость при wipe базы)."]}
|
||
{"type":"relation","from":"Project_GenDesign","to":"TechStack_v2.2","relationType":"uses"}
|
||
{"type":"relation","from":"Project_GenDesign","to":"NorthStar_DiscoveryMVP","relationType":"targets"}
|
||
{"type":"relation","from":"Project_GenDesign","to":"Phase0_DiscoveryMVP","relationType":"currently_executes"}
|
||
{"type":"relation","from":"Phase0_DiscoveryMVP","to":"NorthStar_DiscoveryMVP","relationType":"delivers"}
|
||
{"type":"relation","from":"Validation_Findings_Apr25","to":"Project_GenDesign","relationType":"reviews"}
|
||
{"type":"relation","from":"Validation_Findings_Apr25","to":"TechStack_v2.2","relationType":"validates"}
|
||
{"type":"relation","from":"SalesTracking_Strategy_Apr25","to":"Project_GenDesign","relationType":"strengthens"}
|
||
{"type":"relation","from":"SalesTracking_Strategy_Apr25","to":"DataSources_Pricing_Apr25","relationType":"extends"}
|
||
{"type":"relation","from":"SalesTracking_Strategy_Apr25","to":"Phase0_DiscoveryMVP","relationType":"modifies"}
|
||
{"type":"relation","from":"SalesTracking_Strategy_Apr25","to":"Stages_MVP_v1","relationType":"amends_stage_2a"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"Stages_MVP_v1","relationType":"supersedes"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"WorkSplit_Generative_Stage1","relationType":"needs_revision"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"SalesTracking_Strategy_Apr25","relationType":"depends_on"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"DataSources_Pricing_Apr25","relationType":"depends_on"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"Project_GenDesign","relationType":"reshapes"}
|
||
{"type":"relation","from":"Domain_Setup_Apr26","to":"Project_GenDesign","relationType":"infrastructure_for"}
|
||
{"type":"relation","from":"Domain_Setup_Apr26","to":"Hosting_Decision_Apr25","relationType":"extends"}
|
||
{"type":"relation","from":"Sentry_Setup_Apr26","to":"Project_GenDesign","relationType":"monitors"}
|
||
{"type":"relation","from":"Sentry_Setup_Apr26","to":"Phase0_DiscoveryMVP","relationType":"infrastructure_for"}
|
||
{"type":"relation","from":"OpsBundle_Apr26","to":"Project_GenDesign","relationType":"infrastructure_for"}
|
||
{"type":"relation","from":"OpsBundle_Apr26","to":"Stages_MVP_v1","relationType":"prepares_for"}
|
||
{"type":"relation","from":"Production_Wipe_Apr26","to":"Runbook_VPS_Setup_Beget","relationType":"refreshed_state_of"}
|
||
{"type":"relation","from":"DockerOps_Apr26","to":"Runbook_VPS_Setup_Beget","relationType":"extends"}
|
||
{"type":"relation","from":"HTTPS_Live_Apr26","to":"Domain_Setup_Apr26","relationType":"completes"}
|
||
{"type":"relation","from":"HTTPS_Live_Apr26","to":"Phase0_DiscoveryMVP","relationType":"infrastructure_milestone_for"}
|
||
{"type":"relation","from":"HTTPS_Live_Apr26","to":"Project_GenDesign","relationType":"deploys"}
|
||
{"type":"relation","from":"DataSources_Analysis_Apr26","to":"DataSources_Pricing_Apr25","relationType":"supersedes"}
|
||
{"type":"relation","from":"DataSources_Analysis_Apr26","to":"PlanA_AnalyticsFirst_Apr25","relationType":"unblocks"}
|
||
{"type":"relation","from":"DataSources_Analysis_Apr26","to":"SalesTracking_Strategy_Apr25","relationType":"downgrades"}
|
||
{"type":"relation","from":"DataSources_Analysis_Apr26","to":"Stages_MVP_v1","relationType":"amends_stage_2a"}
|
||
{"type":"relation","from":"DataSources_Analysis_Apr26","to":"Project_GenDesign","relationType":"data_strategy_for"}
|
||
{"type":"relation","from":"DomRF_Tab11_MortgageStats_Apr26","to":"DomRF_Tab10_MortgageRates_Apr26","relationType":"paired_with"}
|
||
{"type":"relation","from":"DomRF_API_PortalAnalytics_Apr26","to":"DomRF_Host_Apr26","relationType":"hosted_on"}
|
||
{"type":"relation","from":"DomRF_API_PortalKn_Apr26","to":"DomRF_Host_Apr26","relationType":"hosted_on"}
|
||
{"type":"relation","from":"DomRF_API_KnObject_Apr26","to":"DomRF_Host_Apr26","relationType":"hosted_on"}
|
||
{"type":"relation","from":"DomRF_API_KnFlats_Apr26","to":"DomRF_Host_Apr26","relationType":"hosted_on"}
|
||
{"type":"relation","from":"DomRF_API_KnDicts_Apr26","to":"DomRF_Host_Apr26","relationType":"hosted_on"}
|
||
{"type":"relation","from":"DomRF_API_Files_Apr26","to":"DomRF_Host_Apr26","relationType":"hosted_on"}
|
||
{"type":"relation","from":"DomRF_API_Registries_Apr26","to":"DomRF_Host_Apr26","relationType":"hosted_on"}
|
||
{"type":"relation","from":"DomRF_Tab1_HousingIndicators_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"DomRF_Tab2_LaunchAndCommissioning_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"DomRF_Tab4_DevelopersDashboard_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"DomRF_Tab7_ReadyConstruction_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"DomRF_Tab8_Quartirografia_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"DomRF_Tab9_BuildingCommissioning_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"DomRF_Tab11_MortgageStats_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"DomRF_Tab1_HousingIndicators_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab3_ProjectFinance_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab5_Escrow_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab6_Realization_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab10_MortgageRates_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab12_StatRows_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_PerFlat_Schema_Apr26","to":"DomRF_API_KnFlats_Apr26","relationType":"describes_schema_of"}
|
||
{"type":"relation","from":"DomRF_PerFlat_ETL_Apr26","to":"DomRF_PerFlat_Schema_Apr26","relationType":"uses_schema"}
|
||
{"type":"relation","from":"DomRF_PerFlat_VelocityTracker_Apr26","to":"DomRF_PerFlat_Schema_Apr26","relationType":"uses_field"}
|
||
{"type":"relation","from":"DomRF_PerFlat_VelocityTracker_Apr26","to":"DomRF_Tab6_Realization_Apr26","relationType":"alternative_to"}
|
||
{"type":"relation","from":"DomRF_PerFlat_VelocityTracker_Apr26","to":"DomRF_Tab7_ReadyConstruction_Apr26","relationType":"alternative_to"}
|
||
{"type":"relation","from":"DomRF_ExtractFlow_Objects_Apr26","to":"DomRF_API_PortalKn_Apr26","relationType":"step_1_uses"}
|
||
{"type":"relation","from":"DomRF_ExtractFlow_Objects_Apr26","to":"DomRF_API_KnObject_Apr26","relationType":"step_2_uses"}
|
||
{"type":"relation","from":"DomRF_Object_ETL_Apr26","to":"DomRF_ExtractFlow_Objects_Apr26","relationType":"implements"}
|
||
{"type":"relation","from":"DomRF_Object_ETL_Apr26","to":"DomRF_PerFlat_ETL_Apr26","relationType":"complements"}
|
||
{"type":"relation","from":"DomRF_BrokenEndpoints_Apr26","to":"DomRF_API_KnObject_Apr26","relationType":"failed_alternatives_to"}
|
||
{"type":"relation","from":"DomRF_Spec_SJS_v130","to":"DomRF_OfficialAuth_Apr26","relationType":"uses_auth"}
|
||
{"type":"relation","from":"DomRF_Spec_NSI_v101","to":"DomRF_OfficialAuth_Apr26","relationType":"uses_auth"}
|
||
{"type":"relation","from":"DomRF_Spec_UOPO_v102","to":"DomRF_OfficialAuth_Apr26","relationType":"uses_auth"}
|
||
{"type":"relation","from":"DomRF_Spec_APF_v22","to":"DomRF_OfficialAuth_Apr26","relationType":"uses_auth"}
|
||
{"type":"relation","from":"DomRF_OfficialVsFront_Comparison_Apr26","to":"DomRF_Spec_SJS_v130","relationType":"compares"}
|
||
{"type":"relation","from":"DomRF_OfficialVsFront_Comparison_Apr26","to":"DomRF_API_KnFlats_Apr26","relationType":"compares"}
|
||
{"type":"relation","from":"DomRF_KeyAndLegal_Apr26","to":"DomRF_API_KnObject_Apr26","relationType":"applies_to"}
|
||
{"type":"relation","from":"DomRF_KeyAndLegal_Apr26","to":"DomRF_API_KnFlats_Apr26","relationType":"applies_to"}
|
||
{"type":"relation","from":"DomRF_KeyAndLegal_Apr26","to":"DomRF_API_KnDicts_Apr26","relationType":"applies_to"}
|
||
{"type":"relation","from":"DomRF_Integration_Docs_Apr26","to":"DomRF_OfficialAuth_Apr26","relationType":"describes"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_Tab8_Quartirografia_Apr26","relationType":"tile1_uses"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_API_KnFlats_Apr26","relationType":"tile2_uses"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_Tab6_Realization_Apr26","relationType":"tile3_uses"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_Tab7_ReadyConstruction_Apr26","relationType":"tile3_uses"}
|
||
{"type":"relation","from":"DomRF_Tab9_BuildingCommissioning_Apr26","to":"DomRF_Tab11_MortgageStats_Apr26","relationType":"shares_backend_with"}
|
||
{"type":"relation","from":"DomRF_Recon_AcceptVersionLeak_Apr26","to":"DomRF_Recon_Summary_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DomRF_Recon_OIDC_Apr26","to":"DomRF_Recon_Summary_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DomRF_Recon_Stack_Apr26","to":"DomRF_Recon_Summary_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DomRF_Recon_RobotsTxt_Apr26","to":"DomRF_Recon_Summary_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DomRF_Recon_OptionsPost_Apr26","to":"DomRF_Recon_Summary_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DomRF_Recon_CORS_Apr26","to":"DomRF_Recon_Summary_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DomRF_Recon_PortalSitemap_Apr26","to":"DomRF_Recon_Summary_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DomRF_Recon_NoSourceMaps_Apr26","to":"DomRF_Recon_Summary_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DomRF_Recon_DisclosurePlan_Apr26","to":"DomRF_Recon_Summary_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DomRF_Recon_AcceptVersionLeak_Apr26","to":"DomRF_Host_Apr26","relationType":"annotates"}
|
||
{"type":"relation","from":"DomRF_Recon_AcceptVersionLeak_Apr26","to":"DomRF_Recon_Stack_Apr26","relationType":"evidence_for"}
|
||
{"type":"relation","from":"DomRF_Recon_OIDC_Apr26","to":"DomRF_OfficialAuth_Apr26","relationType":"extends"}
|
||
{"type":"relation","from":"DomRF_Recon_OIDC_Apr26","to":"DomRF_Recon_Stack_Apr26","relationType":"evidence_for"}
|
||
{"type":"relation","from":"DomRF_Recon_RobotsTxt_Apr26","to":"DomRF_Enums_Apr26","relationType":"complements"}
|
||
{"type":"relation","from":"DomRF_Recon_RobotsTxt_Apr26","to":"DomRF_Recon_PortalSitemap_Apr26","relationType":"leads_to"}
|
||
{"type":"relation","from":"DomRF_Recon_OptionsPost_Apr26","to":"DomRF_API_KnObject_Apr26","relationType":"annotates"}
|
||
{"type":"relation","from":"DomRF_Recon_CORS_Apr26","to":"DomRF_API_KnFlats_Apr26","relationType":"annotates"}
|
||
{"type":"relation","from":"DomRF_Recon_CORS_Apr26","to":"DomRF_API_KnObject_Apr26","relationType":"annotates"}
|
||
{"type":"relation","from":"DomRF_Recon_PortalSitemap_Apr26","to":"DomRF_API_Registries_Apr26","relationType":"complements"}
|
||
{"type":"relation","from":"DomRF_Recon_PortalSitemap_Apr26","to":"DomRF_ExtractFlow_Objects_Apr26","relationType":"alternative_to"}
|
||
{"type":"relation","from":"DomRF_Recon_DisclosurePlan_Apr26","to":"DomRF_Recon_AcceptVersionLeak_Apr26","relationType":"targets"}
|
||
{"type":"relation","from":"DomRF_Recon_DisclosurePlan_Apr26","to":"DomRF_Recon_OIDC_Apr26","relationType":"targets"}
|
||
{"type":"relation","from":"DomRF_Recon_Stack_Apr26","to":"DomRF_Architecture_Apr26","relationType":"annotates"}
|
||
{"type":"relation","from":"DataSource_CBR_Mortgage_Apr26","to":"DataSource_PerDeal_Reality_Apr26","relationType":"is_aggregate_for"}
|
||
{"type":"relation","from":"DataSource_Fedstat_Apr26","to":"DataSource_PerDeal_Reality_Apr26","relationType":"is_aggregate_for"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_OpenService_Apr26","to":"DataSource_PerDeal_Reality_Apr26","relationType":"is_aggregate_for"}
|
||
{"type":"relation","from":"DataSource_UPN_Ekb_Apr26","to":"DataSource_PerDeal_Reality_Apr26","relationType":"is_aggregate_for"}
|
||
{"type":"relation","from":"DataSource_DomRFAsPerDeal_Apr26","to":"DataSource_PerDeal_Reality_Apr26","relationType":"best_synthetic_approximation_for"}
|
||
{"type":"relation","from":"DataSource_DomRFAsPerDeal_Apr26","to":"DomRF_API_KnFlats_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"DataSource_DomRFAsPerDeal_Apr26","to":"DomRF_PerFlat_ETL_Apr26","relationType":"implements"}
|
||
{"type":"relation","from":"DataSource_DomRFAsPerDeal_Apr26","to":"DomRF_PerFlat_VelocityTracker_Apr26","relationType":"extends"}
|
||
{"type":"relation","from":"DataSource_CBR_Mortgage_Apr26","to":"DomRF_Tab10_MortgageRates_Apr26","relationType":"complements"}
|
||
{"type":"relation","from":"DataSource_CBR_Mortgage_Apr26","to":"DomRF_Tab11_MortgageStats_Apr26","relationType":"complements"}
|
||
{"type":"relation","from":"DataSource_Fedstat_Apr26","to":"DomRF_Tab1_HousingIndicators_Apr26","relationType":"cross_validates"}
|
||
{"type":"relation","from":"DataSource_UPN_Ekb_Apr26","to":"DomRF_API_KnFlats_Apr26","relationType":"regional_complement_for"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_OpenService_Apr26","to":"DataSource_Fedstat_Apr26","relationType":"publishes_aggregates_via"}
|
||
{"type":"relation","from":"DataSource_PerDeal_Reality_Apr26","to":"DomRF_PlanA_Mapping_Apr26","relationType":"informs"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Apr26","to":"DataSource_Rosreestr_OpenService_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Schema_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"describes_schema_of"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Sverdl_Q1_2026","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"validates"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_ETL_Plan_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"implements"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Limits_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"qualifies"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Apr26","to":"DataSource_PerDeal_Reality_Apr26","relationType":"primary_solution_for"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Apr26","to":"DataSource_DomRFAsPerDeal_Apr26","relationType":"supersedes_for_per_deal"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Apr26","to":"DomRF_PlanA_Mapping_Apr26","relationType":"tile2_primary"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_ETL_Plan_Apr26","to":"DomRF_PerFlat_ETL_Apr26","relationType":"complements"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Sverdl_Q1_2026","to":"DataSource_UPN_Ekb_Apr26","relationType":"ground_truth_for"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Sverdl_Q1_2026","to":"DataSource_Fedstat_Apr26","relationType":"ground_truth_for"}
|
||
{"type":"relation","from":"NSPD_OAuth_Architecture_Apr26","to":"NSPD_Architecture_Apr26","relationType":"extends"}
|
||
{"type":"relation","from":"NSPD_PhysicAccess_Apr26","to":"NSPD_OAuth_Architecture_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"NSPD_MarketAnalytics_API_Apr26","to":"NSPD_PhysicAccess_Apr26","relationType":"accessible_via"}
|
||
{"type":"relation","from":"NSPD_MarketAnalytics_API_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"based_on_same_source"}
|
||
{"type":"relation","from":"NSPD_AEGGIS_WMTS_Apr26","to":"NSPD_Architecture_Apr26","relationType":"extends"}
|
||
{"type":"relation","from":"NSPD_PII_Leak_Apr26","to":"NSPD_OAuth_Architecture_Apr26","relationType":"qualifies"}
|
||
{"type":"relation","from":"NSPD_PII_Leak_Apr26","to":"Rosreestr_Recon_Findings_Apr26","relationType":"complements"}
|
||
{"type":"relation","from":"NSPD_MarketAnalytics_API_Apr26","to":"DomRF_PlanA_Mapping_Apr26","relationType":"tile2_alternative"}
|
||
{"type":"relation","from":"NSPD_PhysicAccess_Apr26","to":"Rosreestr_SiteMap_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"NSPD_MarketAnalytics_FullArchitecture_Apr26","to":"NSPD_MarketAnalytics_API_Apr26","relationType":"supersedes"}
|
||
{"type":"relation","from":"NSPD_MarketAnalytics_FullArchitecture_Apr26","to":"NSPD_OAuth_Architecture_Apr26","relationType":"uses_auth_from"}
|
||
{"type":"relation","from":"NSPD_MarketAnalytics_FullArchitecture_Apr26","to":"NSPD_PhysicAccess_Apr26","relationType":"tested_with"}
|
||
{"type":"relation","from":"NSPD_OrgOnly_Endpoints_Apr26","to":"NSPD_MarketAnalytics_FullArchitecture_Apr26","relationType":"qualifies"}
|
||
{"type":"relation","from":"NSPD_OrgOnly_Endpoints_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"duplicates_data_of"}
|
||
{"type":"relation","from":"NSPD_DataValue_For_GenDesign_Apr26","to":"NSPD_MarketAnalytics_FullArchitecture_Apr26","relationType":"applies"}
|
||
{"type":"relation","from":"NSPD_DataValue_For_GenDesign_Apr26","to":"DomRF_PlanA_Mapping_Apr26","relationType":"tile2_alternative_to"}
|
||
{"type":"relation","from":"NSPD_DataValue_For_GenDesign_Apr26","to":"Stages_MVP_v1","relationType":"extends_stage_2a_for"}
|
||
{"type":"relation","from":"TechStack_v2.2","to":"Project_GenDesign","relationType":"defines_tech_stack_for"}
|
||
{"type":"relation","from":"Stages_MVP_v1","to":"Project_GenDesign","relationType":"defines_roadmap_for"}
|
||
{"type":"relation","from":"Team_Setup","to":"Project_GenDesign","relationType":"executes"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"Project_GenDesign","relationType":"pivot_decision_for"}
|
||
{"type":"relation","from":"WorkSplit_Generative_Stage1","to":"Stages_MVP_v1","relationType":"details_phase_of"}
|
||
{"type":"relation","from":"WorkSplit_Generative_Stage1","to":"Team_Setup","relationType":"assigns_work_in"}
|
||
{"type":"relation","from":"Hosting_Decision_Apr25","to":"Project_GenDesign","relationType":"hosting_choice_for"}
|
||
{"type":"relation","from":"Hosting_Decision_Apr25","to":"Hosting_Pricing_Apr25","relationType":"informed_by"}
|
||
{"type":"relation","from":"Runbook_VPS_Setup_Beget","to":"Hosting_Pricing_Apr25","relationType":"implements_choice_from"}
|
||
{"type":"relation","from":"Runbook_VPS_Setup_Beget","to":"Project_GenDesign","relationType":"production_runbook_for"}
|
||
{"type":"relation","from":"Sentry_Setup_Apr26","to":"Runbook_VPS_Setup_Beget","relationType":"deployed_on_top_of"}
|
||
{"type":"relation","from":"OpsBundle_Apr26","to":"DockerOps_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"OpsBundle_Apr26","to":"Production_Wipe_Apr26","relationType":"will_apply_after"}
|
||
{"type":"relation","from":"Production_Wipe_Apr26","to":"DockerOps_Apr26","relationType":"applied_changes_from"}
|
||
{"type":"relation","from":"DockerOps_Apr26","to":"Sentry_Setup_Apr26","relationType":"precedes"}
|
||
{"type":"relation","from":"DomRF_Tab2_LaunchAndCommissioning_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab4_DevelopersDashboard_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab7_ReadyConstruction_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab8_Quartirografia_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab9_BuildingCommissioning_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_Tab11_MortgageStats_Apr26","to":"DomRF_Architecture_Apr26","relationType":"follows"}
|
||
{"type":"relation","from":"DomRF_API_PortalAnalytics_Apr26","to":"DomRF_Architecture_Apr26","relationType":"implements_group_a_of"}
|
||
{"type":"relation","from":"DomRF_Enums_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"provides_enums_for"}
|
||
{"type":"relation","from":"DomRF_KeyAndLegal_Apr26","to":"DomRF_Architecture_Apr26","relationType":"documents_legal_status_of"}
|
||
{"type":"relation","from":"DomRF_KeyAndLegal_Apr26","to":"DomRF_Host_Apr26","relationType":"qualifies_auth_on"}
|
||
{"type":"relation","from":"DomRF_OfficialVsFront_Comparison_Apr26","to":"DomRF_Architecture_Apr26","relationType":"compares_against_official"}
|
||
{"type":"relation","from":"DomRF_OfficialVsFront_Comparison_Apr26","to":"DomRF_Spec_APF_v22","relationType":"compares"}
|
||
{"type":"relation","from":"DomRF_Recon_OptionsPost_Apr26","to":"DomRF_Architecture_Apr26","relationType":"annotates"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_Architecture_Apr26","relationType":"uses"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_Tab1_HousingIndicators_Apr26","relationType":"additional_source"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_Tab2_LaunchAndCommissioning_Apr26","relationType":"additional_source"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_Tab3_ProjectFinance_Apr26","relationType":"additional_source"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_Tab5_Escrow_Apr26","relationType":"additional_source"}
|
||
{"type":"relation","from":"DomRF_PlanA_Mapping_Apr26","to":"DomRF_KeyAndLegal_Apr26","relationType":"tile2_uses_auth_from"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"DomRF_PlanA_Mapping_Apr26","relationType":"tile_design_described_in"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"now_primary_data_source"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"DataSources_Analysis_Apr26","relationType":"data_layer_designed_in"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"Stages_MVP_v1","relationType":"modifies"}
|
||
{"type":"relation","from":"SalesTracking_Strategy_Apr25","to":"Stages_MVP_v1","relationType":"was_planned_for_stage_2a"}
|
||
{"type":"relation","from":"SalesTracking_Strategy_Apr25","to":"Project_GenDesign","relationType":"data_moat_for"}
|
||
{"type":"relation","from":"DataSources_Pricing_Apr25","to":"Project_GenDesign","relationType":"early_research_for"}
|
||
{"type":"relation","from":"DataSource_PerDeal_Reality_Apr26","to":"PlanA_AnalyticsFirst_Apr25","relationType":"unblocks_tile2_of"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Apr26","to":"Project_GenDesign","relationType":"primary_pricing_source_for"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_DealsCSV_Apr26","to":"DomRF_PlanA_Mapping_Apr26","relationType":"tile2_primary_alternative_to"}
|
||
{"type":"relation","from":"DataSource_Rosreestr_ETL_Plan_Apr26","to":"Stages_MVP_v1","relationType":"details_stage_2a_etl_for"}
|
||
{"type":"relation","from":"DataSource_UPN_Ekb_Apr26","to":"Project_GenDesign","relationType":"ekb_baseline_for"}
|
||
{"type":"relation","from":"Rosreestr_SiteMap_Apr26","to":"DataSource_Rosreestr_OpenService_Apr26","relationType":"lists"}
|
||
{"type":"relation","from":"Rosreestr_SiteMap_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"lists"}
|
||
{"type":"relation","from":"Rosreestr_SiteMap_Apr26","to":"Rosreestr_OpenData_17Sets_Apr26","relationType":"lists"}
|
||
{"type":"relation","from":"Rosreestr_SiteMap_Apr26","to":"NSPD_Architecture_Apr26","relationType":"lists"}
|
||
{"type":"relation","from":"Rosreestr_OpenData_17Sets_Apr26","to":"Rosreestr_SiteMap_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"Rosreestr_Recon_Findings_Apr26","to":"Rosreestr_SiteMap_Apr26","relationType":"security_annotation_for"}
|
||
{"type":"relation","from":"Rosreestr_Recon_Findings_Apr26","to":"NSPD_Architecture_Apr26","relationType":"annotates"}
|
||
{"type":"relation","from":"Rosreestr_TLS_Note_Apr26","to":"DataSource_Rosreestr_ETL_Plan_Apr26","relationType":"affects"}
|
||
{"type":"relation","from":"Rosreestr_TLS_Note_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"affects_download_of"}
|
||
{"type":"relation","from":"NSPD_Architecture_Apr26","to":"Rosreestr_SiteMap_Apr26","relationType":"is_part_of"}
|
||
{"type":"relation","from":"NSPD_OAuth_Architecture_Apr26","to":"NSPD_Architecture_Apr26","relationType":"auth_subsystem_of"}
|
||
{"type":"relation","from":"NSPD_PhysicAccess_Apr26","to":"NSPD_Architecture_Apr26","relationType":"tested_role_in"}
|
||
{"type":"relation","from":"NSPD_AEGGIS_WMTS_Apr26","to":"NSPD_Architecture_Apr26","relationType":"is_subsystem_of"}
|
||
{"type":"relation","from":"NSPD_AEGGIS_WMTS_Apr26","to":"NSPD_MarketAnalytics_FullArchitecture_Apr26","relationType":"provides_basemap_for"}
|
||
{"type":"relation","from":"NSPD_AEGGIS_WMTS_Apr26","to":"Project_GenDesign","relationType":"embeddable_basemap_for"}
|
||
{"type":"relation","from":"NSPD_PII_Leak_Apr26","to":"NSPD_OAuth_Architecture_Apr26","relationType":"security_annotation_for"}
|
||
{"type":"relation","from":"NSPD_PII_Leak_Apr26","to":"NSPD_PhysicAccess_Apr26","relationType":"annotates"}
|
||
{"type":"relation","from":"NSPD_MarketAnalytics_API_Apr26","to":"NSPD_Architecture_Apr26","relationType":"is_subsystem_of"}
|
||
{"type":"relation","from":"NSPD_MarketAnalytics_FullArchitecture_Apr26","to":"NSPD_Architecture_Apr26","relationType":"is_subsystem_of"}
|
||
{"type":"relation","from":"NSPD_MarketAnalytics_FullArchitecture_Apr26","to":"Project_GenDesign","relationType":"potential_data_source_for"}
|
||
{"type":"relation","from":"NSPD_DataValue_For_GenDesign_Apr26","to":"Project_GenDesign","relationType":"data_value_assessment_for"}
|
||
{"type":"relation","from":"NSPD_DataValue_For_GenDesign_Apr26","to":"PlanA_AnalyticsFirst_Apr25","relationType":"informs_tile2_of"}
|
||
{"type":"relation","from":"NSPD_DataValue_For_GenDesign_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"cross_validates_with"}
|
||
{"type":"relation","from":"NSPD_DataValue_For_GenDesign_Apr26","to":"NSPD_AEGGIS_WMTS_Apr26","relationType":"uses_basemap"}
|
||
{"type":"relation","from":"NSPD_OrgOnly_Endpoints_Apr26","to":"NSPD_PhysicAccess_Apr26","relationType":"qualifies_403_for"}
|
||
{"type":"relation","from":"DomRF_Recon_Stack_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"stack_annotation_for"}
|
||
{"type":"relation","from":"NorthStar_DiscoveryMVP","to":"Project_GenDesign","relationType":"goal_for"}
|
||
{"type":"relation","from":"Stages_MVP_v1","to":"NorthStar_DiscoveryMVP","relationType":"delivers_toward"}
|
||
{"type":"relation","from":"PlanA_AnalyticsFirst_Apr25","to":"NorthStar_DiscoveryMVP","relationType":"alternative_path_to"}
|
||
{"type":"relation","from":"Validation_Findings_Apr25","to":"Project_GenDesign","relationType":"validates_business_plan_for"}
|
||
{"type":"relation","from":"Validation_Findings_Apr25","to":"TechStack_v2.2","relationType":"flagged_drift_against"}
|
||
{"type":"relation","from":"Validation_Findings_Apr25","to":"NorthStar_DiscoveryMVP","relationType":"calibrates_kpi_of"}
|
||
{"type":"relation","from":"Validation_Findings_Apr25","to":"Stages_MVP_v1","relationType":"informed_scope_of"}
|
||
{"type":"relation","from":"Domain_Setup_Apr26","to":"Runbook_VPS_Setup_Beget","relationType":"configures_domain_for"}
|
||
{"type":"relation","from":"Domain_Setup_Apr26","to":"Project_GenDesign","relationType":"domain_for"}
|
||
{"type":"relation","from":"HTTPS_Live_Apr26","to":"Runbook_VPS_Setup_Beget","relationType":"milestone_of"}
|
||
{"type":"relation","from":"HTTPS_Live_Apr26","to":"DockerOps_Apr26","relationType":"completed_after"}
|
||
{"type":"relation","from":"HTTPS_Live_Apr26","to":"Project_GenDesign","relationType":"production_milestone_for"}
|
||
{"type":"relation","from":"HTTPS_Live_Apr26","to":"NorthStar_DiscoveryMVP","relationType":"infra_acceptance_for"}
|
||
{"type":"relation","from":"DataSource_Fedstat_Apr26","to":"Project_GenDesign","relationType":"baseline_pricing_for"}
|
||
{"type":"relation","from":"DataSource_Fedstat_Apr26","to":"DataSources_Analysis_Apr26","relationType":"described_in"}
|
||
{"type":"relation","from":"DataSource_Fedstat_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"cross_validates_with"}
|
||
{"type":"relation","from":"DataSource_CBR_Mortgage_Apr26","to":"Project_GenDesign","relationType":"mortgage_data_for"}
|
||
{"type":"relation","from":"DataSource_CBR_Mortgage_Apr26","to":"DataSource_PerDeal_Reality_Apr26","relationType":"cross_validation_for"}
|
||
{"type":"relation","from":"DataSource_CBR_Mortgage_Apr26","to":"DomRF_Tab11_MortgageStats_Apr26","relationType":"complements_supply_side_of"}
|
||
{"type":"relation","from":"DataSource_CBR_Mortgage_Apr26","to":"DataSources_Analysis_Apr26","relationType":"described_in"}
|
||
{"type":"relation","from":"DomRF_Recon_RobotsTxt_Apr26","to":"DomRF_Architecture_Apr26","relationType":"annotates"}
|
||
{"type":"relation","from":"DomRF_Recon_RobotsTxt_Apr26","to":"DomRF_Enums_Apr26","relationType":"expands_param_list_for"}
|
||
{"type":"relation","from":"DomRF_Integration_Docs_Apr26","to":"DomRF_OfficialVsFront_Comparison_Apr26","relationType":"supports_comparison"}
|
||
{"type":"relation","from":"DomRF_Integration_Docs_Apr26","to":"DomRF_Spec_APF_v22","relationType":"documents"}
|
||
{"type":"relation","from":"DomRF_Integration_Docs_Apr26","to":"DomRF_Spec_SJS_v130","relationType":"documents"}
|
||
{"type":"relation","from":"DomRF_Integration_Docs_Apr26","to":"DomRF_Spec_NSI_v101","relationType":"documents"}
|
||
{"type":"relation","from":"DomRF_Integration_Docs_Apr26","to":"DomRF_Spec_UOPO_v102","relationType":"documents"}
|
||
{"type":"relation","from":"DomRF_OfficialAuth_Apr26","to":"DomRF_Architecture_Apr26","relationType":"official_b2b_auth_for"}
|
||
{"type":"relation","from":"DomRF_Spec_SJS_v130","to":"DomRF_OfficialVsFront_Comparison_Apr26","relationType":"compared_in"}
|
||
{"type":"relation","from":"DomRF_Spec_NSI_v101","to":"DomRF_OfficialVsFront_Comparison_Apr26","relationType":"compared_in"}
|
||
{"type":"relation","from":"DomRF_Spec_UOPO_v102","to":"DomRF_OfficialVsFront_Comparison_Apr26","relationType":"compared_in"}
|
||
{"type":"relation","from":"DomRF_Spec_APF_v22","to":"DomRF_OfficialVsFront_Comparison_Apr26","relationType":"compared_in"}
|
||
{"type":"relation","from":"DataSources_Analysis_Apr26","to":"DomRF_PlanA_Mapping_Apr26","relationType":"concretized_into"}
|
||
{"type":"relation","from":"DataSources_Analysis_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"describes_priority_1"}
|
||
{"type":"relation","from":"DataSources_Analysis_Apr26","to":"DataSource_UPN_Ekb_Apr26","relationType":"lists_as_ekb_baseline"}
|
||
{"type":"relation","from":"Sentry_Setup_Apr26","to":"Project_GenDesign","relationType":"observability_for"}
|
||
{"type":"relation","from":"OpsBundle_Apr26","to":"Stages_MVP_v1","relationType":"prepares_alembic_for_stage_2a"}
|
||
{"type":"relation","from":"Domclick_DDF_Report_Nov2025","to":"Project_GenDesign","relationType":"industry_intelligence_for"}
|
||
{"type":"relation","from":"Domclick_DDF_Report_Nov2025","to":"DataSources_Analysis_Apr26","relationType":"extends"}
|
||
{"type":"relation","from":"Domclick_DDF_Report_Nov2025","to":"PlanA_AnalyticsFirst_Apr25","relationType":"validates_3_tile_thesis_for"}
|
||
{"type":"relation","from":"Affordability_Trends_DDF_Nov2025","to":"Domclick_DDF_Report_Nov2025","relationType":"is_section_of"}
|
||
{"type":"relation","from":"Affordability_Trends_DDF_Nov2025","to":"PlanA_AnalyticsFirst_Apr25","relationType":"informs_tile2_of"}
|
||
{"type":"relation","from":"Affordability_Trends_DDF_Nov2025","to":"DataSource_CBR_Mortgage_Apr26","relationType":"complements"}
|
||
{"type":"relation","from":"PriceGap_Quality_vs_Rate_Nov2025","to":"Domclick_DDF_Report_Nov2025","relationType":"is_section_of"}
|
||
{"type":"relation","from":"PriceGap_Quality_vs_Rate_Nov2025","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"explains_dkp_ddu_gap_in"}
|
||
{"type":"relation","from":"PriceGap_Quality_vs_Rate_Nov2025","to":"Sverdlovsk_Profile_DDF_Nov2025","relationType":"highlights_sverdlovsk_in"}
|
||
{"type":"relation","from":"AlternativeDeal_Trends_Nov2025","to":"Domclick_DDF_Report_Nov2025","relationType":"is_section_of"}
|
||
{"type":"relation","from":"AlternativeDeal_Trends_Nov2025","to":"PlanA_AnalyticsFirst_Apr25","relationType":"informs_tile2_of"}
|
||
{"type":"relation","from":"AlternativeDeal_Trends_Nov2025","to":"Sverdlovsk_Profile_DDF_Nov2025","relationType":"evaluates"}
|
||
{"type":"relation","from":"RepeatedMortgage_Nov2025","to":"Domclick_DDF_Report_Nov2025","relationType":"is_section_of"}
|
||
{"type":"relation","from":"RepeatedMortgage_Nov2025","to":"PlanA_AnalyticsFirst_Apr25","relationType":"informs_tile1_of"}
|
||
{"type":"relation","from":"RepeatedMortgage_Nov2025","to":"QualityShift_NewBuild_2021_2025","relationType":"explains_driver_of"}
|
||
{"type":"relation","from":"QualityShift_NewBuild_2021_2025","to":"Domclick_DDF_Report_Nov2025","relationType":"is_section_of"}
|
||
{"type":"relation","from":"QualityShift_NewBuild_2021_2025","to":"PlanA_AnalyticsFirst_Apr25","relationType":"redefines_tile1_for"}
|
||
{"type":"relation","from":"QualityShift_NewBuild_2021_2025","to":"DomRF_Tab8_Quartirografia_Apr26","relationType":"trend_signal_for"}
|
||
{"type":"relation","from":"QualityShift_NewBuild_2021_2025","to":"Stages_MVP_v1","relationType":"informs_unit_mix_defaults_for"}
|
||
{"type":"relation","from":"RegionGroups_BuildingDemand_Nov2025","to":"Domclick_DDF_Report_Nov2025","relationType":"is_section_of"}
|
||
{"type":"relation","from":"RegionGroups_BuildingDemand_Nov2025","to":"Sverdlovsk_Profile_DDF_Nov2025","relationType":"classifies"}
|
||
{"type":"relation","from":"RegionGroups_BuildingDemand_Nov2025","to":"Project_GenDesign","relationType":"expansion_strategy_for"}
|
||
{"type":"relation","from":"DemandIndex_Domclick_Nov2025","to":"Domclick_DDF_Report_Nov2025","relationType":"is_section_of"}
|
||
{"type":"relation","from":"DemandIndex_Domclick_Nov2025","to":"Project_GenDesign","relationType":"site_finder_blueprint_for"}
|
||
{"type":"relation","from":"DemandIndex_Domclick_Nov2025","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"uses_factor_from"}
|
||
{"type":"relation","from":"DemandIndex_Domclick_Nov2025","to":"DomRF_Tab7_ReadyConstruction_Apr26","relationType":"uses_velocity_from"}
|
||
{"type":"relation","from":"DemandIndex_Domclick_Nov2025","to":"Stages_MVP_v1","relationType":"informs_site_finder_scoring_for"}
|
||
{"type":"relation","from":"Regional_Migration_Buyers_Nov2025","to":"Domclick_DDF_Report_Nov2025","relationType":"is_section_of"}
|
||
{"type":"relation","from":"Regional_Migration_Buyers_Nov2025","to":"Sverdlovsk_Profile_DDF_Nov2025","relationType":"places"}
|
||
{"type":"relation","from":"Regional_Migration_Buyers_Nov2025","to":"PlanA_AnalyticsFirst_Apr25","relationType":"adds_buyer_origin_factor_to"}
|
||
{"type":"relation","from":"Sverdlovsk_Profile_DDF_Nov2025","to":"Domclick_DDF_Report_Nov2025","relationType":"is_section_of"}
|
||
{"type":"relation","from":"Sverdlovsk_Profile_DDF_Nov2025","to":"Project_GenDesign","relationType":"regional_market_profile_for"}
|
||
{"type":"relation","from":"Sverdlovsk_Profile_DDF_Nov2025","to":"DataSource_UPN_Ekb_Apr26","relationType":"complements"}
|
||
{"type":"relation","from":"Sverdlovsk_Profile_DDF_Nov2025","to":"DataSource_Rosreestr_DealsCSV_Sverdl_Q1_2026","relationType":"context_for"}
|
||
{"type":"relation","from":"Domclick_DDF_Report_Nov2025","to":"DataSource_Fedstat_Apr26","relationType":"uses_rosstat_data_via"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"DataSource_Rosreestr_DealsCSV_Apr26","relationType":"implements_etl_for"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"DataSource_Rosreestr_ETL_Plan_Apr26","relationType":"executes"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"Project_GenDesign","relationType":"data_layer_milestone_for"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"Runbook_VPS_Setup_Beget","relationType":"deployed_on"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"PlanA_AnalyticsFirst_Apr25","relationType":"unblocks_tile2_for"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"Stages_MVP_v1","relationType":"advances_stage_2a_data_layer_of"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"DataSource_Rosreestr_DealsCSV_Sverdl_Q1_2026","relationType":"validated_against"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"Domclick_DDF_Report_Nov2025","relationType":"cross_validated_with"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"PriceGap_Quality_vs_Rate_Nov2025","relationType":"confirms_with_real_deals"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"DataSource_Rosreestr_DealsCSV_Limits_Apr26","relationType":"encountered_issues_described_in"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"DataSource_Rosreestr_DealsCSV_Schema_Apr26","relationType":"applied_schema_from"}
|
||
{"type":"relation","from":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","to":"Rosreestr_TLS_Note_Apr26","relationType":"used_workaround_from"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"DomRF_Architecture_Apr26","relationType":"implements_etl_for"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"DomRF_API_PortalAnalytics_Apr26","relationType":"executes"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"Project_GenDesign","relationType":"data_layer_milestone_for"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"Runbook_VPS_Setup_Beget","relationType":"deployed_on"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"PlanA_AnalyticsFirst_Apr25","relationType":"unblocks_tile1_for"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","relationType":"complements_pricing_with_quartirografia"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"DataSources_Analysis_Apr26","relationType":"validates_priority1_choice_of"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"QualityShift_NewBuild_2021_2025","relationType":"snapshot_confirms_trend_of"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"DomRF_Tab8_Quartirografia_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_Analytics_Loaded_Prod_Apr26","to":"DomRF_KeyAndLegal_Apr26","relationType":"operates_under_legal_terms_of"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"DomRF_Analytics_Loaded_Prod_Apr26","relationType":"extends_with_xlsx_pdf"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"Project_GenDesign","relationType":"data_layer_milestone_for"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"Runbook_VPS_Setup_Beget","relationType":"deployed_on"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"PlanA_AnalyticsFirst_Apr25","relationType":"unblocks_tile3_for"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"DomRF_Tab7_ReadyConstruction_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"DomRF_Tab5_Escrow_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"DomRF_Tab11_MortgageStats_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"DomRF_Tab9_BuildingCommissioning_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"DomRF_Tab2_LaunchAndCommissioning_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","relationType":"complements_with_supply_side"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"Domclick_DDF_Report_Nov2025","relationType":"confirms_industry_thesis_of"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"DataSource_CBR_Mortgage_Apr26","relationType":"complements_with_bank_rates"}
|
||
{"type":"relation","from":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","to":"Sverdlovsk_Profile_DDF_Nov2025","relationType":"validates_with_real_market_data"}
|
||
{"type":"relation","from":"DomRF_Playwright_Scraper_Apr26","to":"Project_GenDesign","relationType":"production_etl_for"}
|
||
{"type":"relation","from":"DomRF_Playwright_Scraper_Apr26","to":"DomRF_Architecture_Apr26","relationType":"automates_scraping_of"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"DomRF_Playwright_Scraper_Apr26","relationType":"uses_output_of"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"Runbook_VPS_Setup_Beget","relationType":"deployed_on"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"DomRF_Tab2_LaunchAndCommissioning_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"DomRF_Tab7_ReadyConstruction_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"DomRF_Tab3_ProjectFinance_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"DomRF_Tab9_BuildingCommissioning_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"DomRF_Tab11_MortgageStats_Apr26","relationType":"concrete_implementation_of"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"DomRF_Analytics_Loaded_Prod_Apr26","relationType":"extends_with_normalized_endpoints"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","relationType":"extends_with_full_api_data"}
|
||
{"type":"relation","from":"DomRF_Scraped_Loaded_Prod_Apr26","to":"PlanA_AnalyticsFirst_Apr25","relationType":"unblocks_full_data_layer_for"}
|
||
{"type":"relation","from":"DomRF_Schema_Relations_Apr26","to":"Project_GenDesign","relationType":"data_layer_integration_for"}
|
||
{"type":"relation","from":"DomRF_Schema_Relations_Apr26","to":"DomRF_Scraped_Loaded_Prod_Apr26","relationType":"links_tables_of"}
|
||
{"type":"relation","from":"DomRF_Schema_Relations_Apr26","to":"DomRF_Analytics_Loaded_Prod_Apr26","relationType":"links_tables_of"}
|
||
{"type":"relation","from":"DomRF_Schema_Relations_Apr26","to":"DomRF_XLSX_PDF_Snapshot_Loaded_Apr26","relationType":"links_tables_of"}
|
||
{"type":"relation","from":"DomRF_Schema_Relations_Apr26","to":"Rosreestr_DealsCSV_Loaded_Prod_Apr26","relationType":"joins_pricing_with_quartirografia_via_view"}
|
||
{"type":"relation","from":"DomRF_Schema_Relations_Apr26","to":"PlanA_AnalyticsFirst_Apr25","relationType":"enables_unified_query_for"}
|