oqyude b6b64a9878 T6: Decompose CLI — main.py → 9 command files, config.py → config_cmd.py
Split infrastructure/cli/:
- main.py (330 LOC) → 9 files in infrastructure/cli/commands/:
  * init.py, forecast.py, scenario.py, whatif.py, compare.py
  * import_xlsx.py, export_xlsx.py, analyze.py, info.py
- config.py (428 LOC) → commands/config_cmd.py (15 sub-commands)
- main.py → app.py (entry point: registers all commands)
- New: paths.py (MODEL_PATH, DATA_DIR)
- New: services.py (composition root + helpers: load_model, save_model,
  build_services, resolve_currency, convert_value, fmt_amount)
- cli/__init__.py (empty) удалён

Each command module: <100 LOC.
pyproject.toml: cf = infrastructure.cli.app:app
tests/test_cli.py: import обновлён на infrastructure.cli.app

CLI behavior идентично, все команды работают.
Tests: 67/67 pass.
2026-10-08 16:56:49 +03:00
2026-10-08 15:40:35 +03:00
2026-07-22 12:40:42 +03:00
2026-07-22 12:40:42 +03:00
2026-07-22 12:40:42 +03:00
2026-07-22 12:40:42 +03:00
2026-07-12 19:46:07 +03:00
2026-07-22 12:40:42 +03:00
2026-07-12 19:25:40 +03:00
2026-10-08 15:40:35 +03:00
2026-10-08 15:40:35 +03:00
2026-07-12 19:51:00 +03:00
2026-07-12 19:51:00 +03:00

CashFlow Forecast

Личная финансовая модель с прогнозом денежных потоков, сценарным анализом и AI-ассистентом.

Python + JSON + Excel + AI.

Установка

git clone <repo>
cd cashflow-forecast
python -m venv .venv
source .venv/bin/activate    # Linux/Mac
# .venv\Scripts\activate     # Windows
pip install -e .

Использование

# Инициализация пустой модели
cf init

# Прогноз на 12 месяцев
cf forecast --months 12

# Сценарии
cf scenario baseline
cf scenario optimistic
cf scenario pessimistic

# What-if анализ
cf whatif --income 1.2 --expense 0.9 --growth 1.0 --months 12

# Сравнение всех сценариев
cf compare --months 12

# Импорт/экспорт Excel
cf import data.xlsx
cf export exports/report.xlsx

# AI-анализ (заглушка, генерация промпта)
cf analyze

Пример: создание тестовых данных

Подготовьте Excel-файл с листами: Accounts, Transactions, Recurring, Assets, Liabilities. Заголовки колонок соответствуют полям моделей. Затем импортируйте:

cf import my_finances.xlsx
cf forecast --months 12

Структура проекта

├── cashflow_model/         # Модели данных (dataclass + JSON)
│   ├── account.py          # Account
│   ├── transaction.py      # Transaction
│   ├── recurring.py        # RecurringCashflow
│   ├── asset.py            # Asset
│   ├── liability.py        # Liability
│   ├── scenario.py         # ForecastScenario
│   └── model.py            # FinancialModel (корень, save/load JSON)
├── engine/                 # Вычислительное ядро
│   ├── forecast.py         # ForecastService — прогноз
│   └── scenarios.py        # ScenarioService — сценарии + what-if
├── sync/                   # Синхронизация с Excel
│   └── excel_sync.py       # ExcelSync — import/export .xlsx
├── ai/                     # AI-ассистент
│   ├── prompts.py          # Шаблоны промптов
│   └── assistant.py        # AssistantService (заглушка)
├── cli/                    # CLI (Typer)
│   └── main.py             # Команды: cf init/forecast/scenario/...
├── tests/                  # Тесты pytest
│   ├── conftest.py         # Фикстуры
│   ├── test_model.py
│   ├── test_forecast.py
│   ├── test_scenarios.py
│   ├── test_excel_sync.py
│   ├── test_ai.py
│   └── test_cli.py
├── data/                   # JSON-модели
├── exports/                # Экспортированные .xlsx
├── .agent/                 # Артефакты MetaAgent (планирование)
├── pyproject.toml          # Зависимости и конфигурация
└── README.arch.md          # Оригинальная архитектурная концепция

Разработка

# Тесты
pytest

# Линтер
ruff check .

# Автоформат
ruff format .

Зависимости

  • Python >= 3.11
  • openpyxl — работа с Excel
  • typer — CLI
  • rich — форматирование вывода
  • pytest — тесты
  • ruff — линтер

Известные ограничения (MVP)

  • AI-ассистент — заглушка. Промпты готовы, но не подключены к API.
  • База данных — JSON-файлы (не подходит для многопользовательской работы).
  • Excel — только .xlsx через openpyxl.
  • Лицензия — не выбрана.
S
Description
No description provided
Readme
465 KiB
Languages
Python 77.4%
PowerShell 12.1%
Shell 10.5%