Финальная часть эпика #1953: пользователь выбирает типовые дома (тип × этажность × число секций) вместо авто max-FAR раскладки, формируя building_program из Stage 3a. Бэкенд: - GET /api/v1/concepts/house-types — read-only каталог HOUSE_TYPES (section_type, label_ru, footprint w×d + sqm, default_floors, housing_class) как single source of truth; фронт ничего не хардкодит. - Схема HouseTypeCatalog / HouseTypeCatalogItem в schemas/concept.py. - Тесты эндпоинта: полнота каталога + совпадение ключей с available_section_types. Кодген: api-types.ts перегенерён (dump OpenAPI → openapi-typescript → project-local prettier 3.9.0); 2-й прогон без диффа. Фронтенд: - useHouseTypes() (TanStack useQuery, staleTime Infinity) в concept-api.ts; building_program в ConceptInput, placed_count/requested_count в ConceptVariant. - HouseProgramPicker: toggle «Авто (max-FAR)» (default, program omit → greedy) vs «Выбрать дома» (список каталожных типов, count 1-50 / floors 1-40, дефолт из каталога; габариты/этажность/класс как подсказка). Смонтирован в Section7Concept и на странице /concept. - Partial-fit заметка в ConceptVariantsResult: при placed<requested честное «Разместилось N из M секций — участок вмещает меньше» (нейтрально, не ошибка). |
||
|---|---|---|
| .. | ||
| api | ||
| core | ||
| models | ||
| observability | ||
| schemas | ||
| scrapers | ||
| services | ||
| templates | ||
| workers | ||
| __init__.py | ||
| main.py | ||