gendesign/docs/MVP_Goals_Python.md

386 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Цели Discovery MVP — Python-стек
**Версия:** 2.2
**Дата:** апрель 2026
**Статус:** Discovery MVP, месяцы 13
**Изменение vs v2.1:** переход с .NET на Python для backend, TypeScript для frontend
---
## 1. North Star Metric
**К концу месяца 3 получить 3 платящих пилотных клиента (≥30 тыс. ₽/мес каждый) и подать заявку в реестр российского ПО — это даст право пройти в Раунд А на 2025 млн ₽.**
Этот критерий не зависит от стека и остаётся неизменным.
---
## 2. Технический стек MVP
### Backend
- **Язык:** Python 3.12
- **Web-фреймворк:** FastAPI 0.115+
- **ORM:** SQLAlchemy 2.0 + GeoAlchemy2 (для PostGIS)
- **Миграции:** Alembic
- **Валидация:** Pydantic v2
- **Background tasks:** Celery + Redis (или RQ для простоты)
- **HTTP-клиент:** httpx (async)
### Геометрия и геоданные
- **Shapely 2.0** — основная геометрия (полигоны, отступы, пересечения)
- **GeoPandas 1.0** — работа с табличными геоданными
- **Pyproj** — преобразования систем координат (WGS84 ↔ UTM ↔ МСК-66 для Свердловской обл.)
- **Rasterio** — если будем работать с растровыми данными (DEM, спутник)
### ML
- **XGBoost** — основной алгоритм скоринга участков
- **scikit-learn** — препроцессинг, метрики, простые модели
- **pandas** — обработка табличных данных
- **NumPy** — численные расчёты
### Экспорт документов
- **ReportLab** или **WeasyPrint** — PDF-отчёты (WeasyPrint удобнее для HTML-вёрстки)
- **ezdxf** — экспорт в DXF для архитекторов
- **openpyxl** — экспорт в Excel
### База данных
- **PostgreSQL 16** + **PostGIS 3.4** — основная БД
- **Redis 7** — кэш и очереди
### Frontend
- **Next.js 15** + **React 19** + **TypeScript 5**
- **Tailwind CSS 4** — стили
- **shadcn/ui** — базовые компоненты
- **TanStack Query** — работа с API
- **Mapbox GL JS** или **Leaflet + OSM** — карты
### Инфраструктура
- **Yandex Cloud** или **VK Cloud** (российские)
- **Docker + Docker Compose** для разработки
- **GitHub Actions** для CI/CD
- **Sentry** для мониторинга ошибок
### Dev tools
- **uv** или **poetry** — менеджер зависимостей (uv быстрее)
- **ruff** — линтер + форматтер (заменяет black + flake8 + isort)
- **mypy** — статическая типизация
- **pytest** — тесты
---
## 3. Цели по модулю A: Site Finder
### Функциональные цели (Discovery MVP)
**Загрузка данных**
- Парсер Росреестра ПКК для Свердловской области
- Сохранение ≥ 1000 участков в PostgreSQL/PostGIS
- Атрибуты: кадастровый номер, ВРИ, площадь, границы (геометрия), адрес
- Скрипт ежесуточной синхронизации (Celery beat)
**Фильтрация**
- 3 базовых фильтра: ВРИ, площадь (от-до), регион/город
- Геопространственный фильтр: участки внутри произвольно нарисованного полигона
- Текстовый поиск по адресу/кадастровому номеру
**Скоринг**
- 3 критерия в Discovery: расстояние до центра города, наличие инфраструктуры в радиусе 1 км (POI из OSM), средняя цена жилья в районе (ДОМ.РФ)
- Веса критериев настраиваемые пользователем
- Итоговый рейтинг 0100 с разбивкой по компонентам
**Отображение**
- Карта (Mapbox/Leaflet) с участками-полигонами
- Цветовая градация по рейтингу
- Табличный список с сортировкой по любому параметру
- Детальная карточка участка с обоснованием рейтинга
**Интеграция с Generative Design**
- Кнопка «Обсчитать концепцию» в детальной карточке
- Передача геометрии участка через внутренний API в модуль B
- Возврат результатов в карточку
### Что НЕ делаем в Discovery MVP
- API ЕГРН с собственниками (требует платежей и юридического оформления — отложено на Фазу 1)
- Изохроны Яндекс.Карт (хорошо бы иметь, но не критично — Фаза 1)
- Скоринг по 15+ параметрам — Фаза 1
- Множественные регионы (только Свердловская обл.) — Фаза 1
- Алертинг на новые подходящие участки — Фаза 2
---
## 4. Цели по модулю B: Generative Design (пятно застройки)
### Функциональные цели (Discovery MVP)
**Вход**
- Полигон участка (ручная отрисовка на карте или передача из Site Finder)
- Параметры пользователя: класс жилья (эконом/комфорт/бизнес), целевая этажность, тип застройки (точечная/средне-этажная/многоэтажная)
- Региональные нормативы (для Discovery — Свердловская обл., ПЗЗ Екатеринбурга)
**Алгоритм генерации**
- Расчёт нормативных отступов от границ участка (через Shapely buffer)
- Размещение прямоугольных корпусов МКД методом «жадного заполнения»: подбор сетки положений, проверка отступов между корпусами и от границ
- 3 варианта: «максимум площади», «максимум инсоляции дворов», «оптимальный микс»
- Время генерации одного варианта ≤ 10 секунд
**Расчёт ТЭП**
- Площадь застройки, общая площадь корпусов
- Жилая площадь по типам квартир (1/2/3-комн в задаваемых пропорциях)
- Количество квартир, средняя площадь
- КЭП (коэффициент использования территории), плотность застройки
- Площадь придомовой территории, парковка (упрощённо: норматив × количество квартир)
**Финансовая модель**
- Выручка: жилая площадь × средняя цена м² по району (из ДОМ.РФ)
- Себестоимость: квадратный метр × норматив (из ФАУ «Главгосэкспертиза»)
- Стоимость земли (вход параметром)
- Валовая маржа, чистая прибыль (упрощённая модель без налогов)
- Базовый IRR (без дисконтирования cash flow по периодам — это в Фазе 1)
**Экспорт**
- PDF-отчёт с тремя вариантами, графиками, ТЭП и финмоделью (WeasyPrint)
- Excel с расчётами (openpyxl)
- DXF упрощённой схемы участка (ezdxf) — для передачи архитектору
### Что НЕ делаем в Discovery MVP
- Расчёт инсоляции по СП 52.13330 — Фаза 1, месяцы 79
- Произвольная форма корпусов (только прямоугольники) — Фаза 1
- Парковка по детальному нормативу — Фаза 1
- УДС (улично-дорожная сеть) — Фаза 1
- Социнфраструктура (школы, сады, поликлиники) — Фаза 1
- 3D-визуализация (Three.js) — Фаза 2 (год 2)
- Квартирография (планировки квартир внутри корпусов) — Фаза 2
- Фотореалистичный рендер — Год 2+
---
## 5. Цели по продажам и валидации
### Месяц 1
- 50 целевых клиентов в CRM (можно использовать Notion/AmoCRM/HubSpot Free)
- 5 cold-outreach писем отправлено
- 3 встречи назначено
- ООО зарегистрировано, расчётный счёт открыт
- Прототип Site Finder работает локально с 1000 участков
### Месяц 2
- 15 встреч кумулятивно проведено
- 2 LOI (Letters of Intent) подписано
- 1 платящий пилот подписан (≥ 30 тыс. ₽/мес)
- Демо прототипа на реальных участках клиентов
- Первая статья в профильном медиа (DigitalDeveloper, vc.ru, Bisnow Russia)
### Месяц 3
- 20+ встреч кумулятивно
- 3 платящих пилота
- 7+ LOI
- 1 региональная администрация в активных переговорах
- Заявка в реестр российского ПО подана
- Подготовлен инвестиционный deck для Раунда А (12 слайдов)
- Финансовая модель в Excel на 5 лет
- Data room для инвесторов
---
## 6. Технические цели MVP
### Качество кода
- Все публичные API эндпоинты типизированы (Pydantic)
- Покрытие тестами ключевой бизнес-логики ≥ 60%
- Линтер ruff проходит без ошибок
- mypy --strict проходит для core-модулей
### Производительность
- Time to First Value ≤ 10 минут (от регистрации до первого обсчёта)
- Загрузка участков по фильтру ≤ 2 секунд
- Генерация одного варианта концепции ≤ 10 секунд
- Генерация PDF-отчёта ≤ 5 секунд
### Надёжность
- 99% uptime в рабочие часы (для демо клиентам)
- Все ошибки в Sentry
- Бэкап БД ежедневно
- Recovery time ≤ 2 часов
### Безопасность
- Все данные пользователей шифруются at rest (PostgreSQL TDE или приложением)
- HTTPS обязательно
- API Rate limiting
- JWT-авторизация с refresh-токенами
- Логирование всех доступов к чувствительным данным (требование под реестр ПО)
---
## 7. Структура репозитория (предлагаемая)
```
project-root/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI entrypoint
│ │ ├── api/
│ │ │ ├── v1/
│ │ │ │ ├── parcels.py # Site Finder endpoints
│ │ │ │ ├── concepts.py # Generative Design endpoints
│ │ │ │ └── auth.py
│ │ ├── core/
│ │ │ ├── config.py # Pydantic Settings
│ │ │ ├── security.py # JWT, hashing
│ │ │ └── db.py # SQLAlchemy session
│ │ ├── models/ # SQLAlchemy ORM
│ │ ├── schemas/ # Pydantic schemas
│ │ ├── services/
│ │ │ ├── site_finder/
│ │ │ │ ├── parser.py # Росреестр, ФИАС
│ │ │ │ ├── scorer.py # XGBoost скоринг
│ │ │ │ └── filters.py
│ │ │ ├── generative/
│ │ │ │ ├── geometry.py # Shapely алгоритмы
│ │ │ │ ├── teap.py # Расчёт ТЭП
│ │ │ │ └── financial.py # Финмодель
│ │ │ └── exporters/
│ │ │ ├── pdf.py # WeasyPrint
│ │ │ ├── excel.py # openpyxl
│ │ │ └── dxf.py # ezdxf
│ │ └── workers/ # Celery tasks
│ ├── tests/
│ ├── alembic/ # миграции
│ ├── pyproject.toml # uv/poetry
│ └── Dockerfile
├── frontend/
│ ├── app/ # Next.js 15 App Router
│ ├── components/
│ ├── lib/
│ └── package.json
├── docker-compose.yml # dev окружение
├── .github/workflows/ # CI/CD
└── README.md
```
---
## 8. План на первый месяц (под Python)
### Неделя 1
- Установить **uv** (`pip install uv`)
- Создать проект: `uv init project-root && uv add fastapi sqlalchemy geoalchemy2 shapely pydantic`
- Поднять PostgreSQL + PostGIS в Docker (`postgis/postgis:16-3.4`)
- Первый эндпоинт `GET /parcels` возвращает заглушку
- Зарегистрировать ИТ-ООО (УСН 6%, ESOP пул в устав)
### Неделя 2
- Парсер Росреестра ПКК на httpx (асинхронный)
- Загрузка 1000 участков Екатеринбурга в БД
- Базовая модель `Parcel` в SQLAlchemy с PostGIS-геометрией
- Первый фильтр по площади и ВРИ
- Дизайнер-фрилансер делает 7 экранов в Figma
### Неделя 3
- Frontend Next.js: страница «Site Finder» с картой Leaflet
- API endpoint `POST /parcels/search` с фильтрами
- 5 cold-outreach писем целевым клиентам
- 3 встречи назначены
### Неделя 4
- Базовый скоринг (расстояние до центра + цена района)
- Первый прототип задеплоен в Yandex Cloud
- 5 встреч проведено
- Лендинг опубликован
- Первая статья в DigitalDeveloper или vc.ru опубликована
---
## 9. Что меняется в Custom Instructions проекта
В системный промпт проекта в Claude добавьте:
```
ТЕХНИЧЕСКИЙ СТЕК (актуальный с v2.2)
- Backend: Python 3.12 + FastAPI + SQLAlchemy 2.0 + Pydantic v2
- Геометрия: Shapely 2.0 + GeoPandas + GeoAlchemy2
- ML: XGBoost + scikit-learn + pandas
- БД: PostgreSQL 16 + PostGIS 3.4
- Очереди: Redis + Celery
- Frontend: Next.js 15 + React 19 + TypeScript + Tailwind + shadcn/ui
- Карты: Mapbox GL JS или Leaflet
- Экспорт: WeasyPrint (PDF), ezdxf (DXF), openpyxl (Excel)
- Облако: Yandex Cloud
- Dev: uv (зависимости), ruff (линт+формат), mypy (типы), pytest
КОММЕНТАРИЙ
Я перешёл с .NET на Python для MVP, потому что геометрия и ML
в Python-экосистеме намного сильнее. Опыт в C#/.NET 6 лет —
это база, на Python переключаюсь сейчас. При написании кода
учитывай, что я понимаю backend архитектуру отлично, но
синтаксис и идиомы Python ещё догоняю — давай явный type-hints
и комментарии к pythonic-конструкциям, которые могут быть
непривычны после C#.
```
---
## 10. Cost of switching: что реально потратите
### Время на «вкатывание»
- Неделя 1: 60% производительности vs привычный .NET
- Недели 23: 80%
- С недели 4: 100% и быстрее, чем на .NET (за счёт экосистемы)
### Что почитать в первую очередь
- **«Python for C# Developers»** (бесплатные статьи на Real Python)
- Документация **FastAPI** — отличная, начать с tutorial
- **Shapely manual** — для понимания геометрии
- **SQLAlchemy 2.0 docs** — async раздел
### Что НЕ читать сразу
- Книги «Python для начинающих» — вы не начинающий программист
- Гайды по Django — вам нужен FastAPI
- Старые туториалы (Python 3.8 и ниже) — слишком много изменилось
### Полезные привычки от .NET, которые работают и в Python
- Dependency Injection (FastAPI поддерживает через Depends)
- Strong typing (Pydantic + mypy)
- Repository pattern (через SQLAlchemy)
- Async/await (есть и работает)
### Что отучиться
- `Dictionary<string, object>` → используй Pydantic-модели
- LINQ → list comprehensions + библиотека `more_itertools`
- async всегда — в Python async только когда нужно (I/O bound)
- Heavy interfaces — Python предпочитает duck typing и Protocol
---
## 11. Acceptance Criteria для MVP
К концу месяца 3 продукт считается готовым к Раунду А, если:
**Функционально:**
- [ ] Site Finder загружает и показывает 1000+ участков Свердловской обл.
- [ ] Фильтр работает по 3 параметрам
- [ ] Скоринг по 3 критериям с настраиваемыми весами
- [ ] Generative Design генерирует 3 варианта за ≤ 10 секунд
- [ ] Расчёт ТЭП и базовая финмодель работают
- [ ] PDF/Excel/DXF экспорт работает
- [ ] Связь модулей (передача участка) работает
**Бизнесово:**
- [ ] 3 платящих пилота
- [ ] 7+ LOI
- [ ] Заявка в реестр ПО подана
- [ ] 1 администрация в переговорах
- [ ] Инвестиционный deck готов
- [ ] Финмодель на 5 лет готова
**Технически:**
- [ ] 60%+ покрытие тестами core-логики
- [ ] mypy --strict проходит
- [ ] Деплой в Yandex Cloud работает
- [ ] Sentry подключен
- [ ] Бэкапы БД ежедневно
Если все три блока выполнены — идём в Раунд А. Если выполнены 2 из 3 (например, технически + функционально, но только 2 пилота) — возможно продление Фазы 0 на 12 месяца за счёт собственных средств. Если выполнен только 1 блок или меньше — стоп проекта.
---
**Документ создан в апреле 2026. Версия 2.2 (Python-стек).**