# Roadmap Sources **Дата:** 2026-10-08 **Goal:** Обсуждение архитектуры и серьёзный refactor **Project type:** `existing` --- ## FUTURE Plans ❌ Директория `FUTURE/` отсутствует. Долгосрочные планы в `README.arch.md` (раздел "Будущие возможности"). После сессии 2026-10-08 (обсуждение архитектуры) пользователь **исключил** из roadmap: - ❌ **AI Financial Assistant** (полная реализация) — нет смысла сейчас (`user:direct`) - ❌ **AI-интеграция** (R-001) — отложено Остальные долгосрочные планы (тоже не в этой сессии): - Monte-Carlo Simulation - FIRE Planning - Инвестиционный прогноз - Импорт банковских выписок / брокерских отчётов - REST API - Web UI - Mobile App Эти направления — **не основной фокус текущей сессии** (цель — refactor, не новые фичи). ## ADR-Derived Tasks ❌ `.agent/decisions/index.json` отсутствует — ADR-ов ещё нет. ## User Requests | Запрос | Приоритет | Источник | |--------|-----------|----------| | Обсуждение архитектуры + серьёзный refactor | **P0** | `user:direct` (current session) | ## Agent-Identified Improvements (из ANALYSE) Эти проблемы выявлены в `analysis-report.md` / `project-state.md` и требуют архитектурного обсуждения. ### Архитектурные проблемы (кандидаты на рефактор) | ID | Проблема | Серьёзность | Затронутые слои | |---|---|---|---| | **A1** | **Слои не выделены явно.** `engine/` импортирует `cashflow_model/`, `cli/` импортирует всё. Нет разделения domain / application / infrastructure. | высокая | все пакеты | | **A2** | **Ручная сериализация** (`to_dict` / `from_dict`) в каждой модели. 7 моделей × 2 метода = 14 boilerplate-методов. | высокая | `cashflow_model/` | | **A3** | **Dataclass vs pydantic** — нет валидации при загрузке JSON, дублирование правил между моделями и Excel-sync. | высокая | `cashflow_model/`, `sync/` | | **A4** | **`float` для денег** — потеря точности при больших суммах. `Decimal` нужен для финансовых расчётов. | средняя | `cashflow_model/`, `engine/`, `sync/` | | **A5** | **CLI-файлы разрослись** — `cli/main.py` 330 LOC, `cli/config.py` 428 LOC. Слишком много в одном файле. | средняя | `cli/` | | **A6** | **i18n — строки разбросаны** по `_r()`-вызовам в `cli/i18n.py`. Нет единого механизма для engine/sync. | низкая | `cli/`, частично `engine/`, `sync/` | | **A7** | **Нет dependency injection** — `ForecastService` создаётся внутри `AssistantService.analyze()`. Тяжело тестировать. | средняя | `ai/`, `engine/` | | **A8** | **Сервисы не абстрагированы** — `ExcelSync` — конкретный класс, нет интерфейса для других storage. | средняя | `sync/`, `cashflow_model/` | | **A9** | **Нет репозиториев** — `FinancialModel.save/load` напрямую работает с файлом. Не расширяется (БД, S3, etc.). | средняя | `cashflow_model/` | | **A10** | **Нет версионирования модели** — `model.json` без `version` поля. Миграции схемы невозможны. | высокая | `cashflow_model/model.py` | ### Технический долг | ID | Что | Из `project-state.md` | |---|---|---| | T1 | Нет CI/CD | R-003 | | T2 | Лицензия не выбрана | R-004 | | T3 | mypy не настроен | R-005 | | T4 | Нет логирования | — | | T5 | Нет pre-commit hooks | — | ## Consolidated Priority Queue ### P0 — Архитектурный рефактор (цель сессии) Кандидаты на обсуждение (выбрать 1-3 направления): 1. **A1+A10: Введение явных слоёв + версионирование модели** - Выделить domain (модели), application (сервисы), infrastructure (CLI, Excel-sync, AI) - Добавить `version: 1` в `FinancialModel.to_dict()` - Подготовить инфраструктуру миграций схемы 2. **A2+A3: Pydantic-миграция** - Заменить `@dataclass` на `BaseModel` - Убрать ручные `to_dict` / `from_dict` (pydantic делает сам) - Добавить валидацию при загрузке JSON - ⚠️ Может потребовать `pydantic>=2.0` (новая зависимость) 3. **A4: Decimal для денег** - Мигрировать `amount`, `balance`, `value`, `rate` с `float` на `Decimal` - Обновить прогноз, Excel-sync, форматтеры - ⚠️ Большой рефактор: ~10 файлов, 50+ полей 4. **A5: Декомпозиция CLI** - `cli/main.py` → `cli/commands/init.py`, `cli/commands/forecast.py`, ... - `cli/config.py` → `cli/paths.py` + `cli/services.py` - Улучшает читаемость, не меняет поведение 5. **A7+A8+A9: DI + Repository pattern + абстракции** - Ввести `ForecastRepository`, `ExcelRepository` - Передавать зависимости в сервисы через конструктор - Упрощает тестирование, подготовка к БД/API ### P1 — Качество и инфраструктура 6. T1: GitHub Actions CI (pytest + ruff) 7. T3: mypy в строгом режиме 8. T4: заменить `rich.print` на `logging` для домена ### P2 — Полировка 9. T2: выбрать лицензию 10. T5: pre-commit hooks ### P3 — Долгосрочно (не в этой сессии) - Monte-Carlo, FIRE, REST API, Web UI, Mobile — из `README.arch.md` - ~~AI-интеграция (R-001)~~ — **отклонено пользователем 2026-10-08** ## Следующие шаги → **DECOMPOSITION** с выбранным направлением рефактора. → Пользователь должен выбрать 1-3 направления из P0-списка. → Если ни одно не подходит — описать желаемый результат.