{ "$schema": "metaagent-task-manifest", "version": "1.0", "session_id": "metaagent-001", "goal": "Спроектируй и реализуй MVP по README", "created_at": "2026-07-12T12:00:00Z", "tasks": [ { "id": "T1", "title": "Инициализация проекта и зависимостей", "description": "Создать структуру директорий, pyproject.toml, venv, установить зависимости (openpyxl, typer, pytest, ruff), настроить ruff", "type": "config", "files": [ "pyproject.toml", "cashflow_model/__init__.py", "sync/__init__.py", "engine/__init__.py", "ai/__init__.py", "cli/__init__.py", "data/.gitkeep", "exports/.gitkeep" ], "depends_on": [], "acceptance_criteria": [ "pyproject.toml создан с правильными зависимостями", "Все директории модулей созданы с __init__.py", "ruff lint проходит без ошибок на пустых модулях", "pytest запускается (0 tests, exit code 0)" ], "context": "Стек: Python 3.11+, openpyxl, typer, pytest, ruff. Структура из design-report.md раздел 3.", "status": "pending" }, { "id": "T2", "title": "Модель данных (dataclass + JSON serialization)", "description": "Реализовать все сущности: Account, Transaction, RecurringCashflow, Asset, Liability, ForecastScenario, FinancialModel. Каждая — dataclass с методами to_dict/from_dict. FinancialModel — корневой объект с методами save/load JSON.", "type": "feature", "files": [ "cashflow_model/__init__.py", "cashflow_model/account.py", "cashflow_model/transaction.py", "cashflow_model/recurring.py", "cashflow_model/asset.py", "cashflow_model/liability.py", "cashflow_model/scenario.py", "cashflow_model/model.py" ], "depends_on": ["T1"], "acceptance_criteria": [ "Все сущности — dataclass с правильными полями и типами", "FinancialModel корректно сохраняется и загружается из JSON", "Создание Account, Transaction, Asset, Liability через конструктор работает", "demo-скрипт создаёт модель с тестовыми данными" ], "context": "Модели определены в design-report.md раздел 4. Использовать uuid4 для id.", "status": "pending" }, { "id": "T3", "title": "Forecast Engine (базовый прогноз)", "description": "Реализовать ForecastService с методами: forecast_cashflow (на N месяцев), apply_recurring (генерация recurring-транзакций), project_balance. Алгоритм: начальный баланс + доходы - расходы + изменения по активам/обязательствам.", "type": "feature", "files": [ "engine/__init__.py", "engine/forecast.py" ], "depends_on": ["T2"], "acceptance_criteria": [ "forecast_cashflow(months=12) возвращает список помесячных балансов", "Регулярные платежи корректно проецируются на будущие периоды", "Активы учитываются с ростом (growth_rate)", "Обязательства учитываются с процентами и платежами" ], "context": "Расчёт: balance_{t+1} = balance_t + income_t - expense_t + asset_growth_t - liability_change_t. См. design-report раздел 2.", "status": "pending" }, { "id": "T4", "title": "Scenario Analysis", "description": "Реализовать ScenarioService с методами: сценарии (optimistic, pessimistic, baseline), what-if модификация параметров, сравнение результатов сценариев.", "type": "feature", "files": [ "engine/__init__.py", "engine/scenarios.py" ], "depends_on": ["T3"], "acceptance_criteria": [ "Три предустановленных сценария (baseline, optimistic, pessimistic)", "What-if: изменение параметров (доход +10%, расход -5%)", "Сравнение сценариев возвращает сводку различий" ], "context": "Сценарии меняют параметры модели перед прогнозом. Использовать copy модели для каждого сценария.", "status": "pending" }, { "id": "T5", "title": "Excel Sync (import/export)", "description": "Реализовать ExcelSync: чтение модели из .xlsx (листы: Accounts, Transactions, Assets, Liabilities, Recurring), запись результатов прогноза в новый .xlsx. Использовать openpyxl.", "type": "feature", "files": [ "sync/__init__.py", "sync/excel_sync.py" ], "depends_on": ["T2"], "acceptance_criteria": [ "Импорт из Excel заполняет FinancialModel", "Экспорт FinancialModel в Excel создаёт корректный .xlsx", "Обработка ошибок при невалидном формате Excel" ], "context": "Каждая сущность — отдельный лист. Заголовки колонок = поля dataclass. См. design-report раздел 5.", "status": "pending" }, { "id": "T6", "title": "CLI (Typer) — все команды", "description": "Реализовать CLI через Typer с командами: init, import, export, forecast, scenario, analyze. Главный entry point — консольная команда 'cf'.", "type": "feature", "files": [ "cli/__init__.py", "cli/main.py", "pyproject.toml" ], "depends_on": ["T2", "T3", "T4", "T5", "T7"], "acceptance_criteria": [ "Команда 'cf init' создаёт пустую модель и JSON", "Команда 'cf forecast --months 12' выводит таблицу прогноза", "Команда 'cf analyze' вызывает AI Assistant", "Команда 'cf import' и 'cf export' работают с Excel", "Команда 'cf scenario' применяет и выводит сценарий" ], "context": "Typer entry point. Команды описаны в design-report раздел 5. rich для форматирования таблиц.", "status": "pending" }, { "id": "T7", "title": "AI Assistant (промпты + интерфейс)", "description": "Реализовать AssistantService: генерация промптов для AI на основе модели и прогноза, форматирование контекста (JSON-дамп модели + результаты forecast), заглушка для вызова AI API. Промпты на русском языке для анализа фин. состояния.", "type": "feature", "files": [ "ai/__init__.py", "ai/prompts.py", "ai/assistant.py" ], "depends_on": ["T3"], "acceptance_criteria": [ "Промпт 'analyze' включает модель и прогноз в JSON", "Промпт 'advice' формирует запрос на финансовые рекомендации", "AssistantService возвращает структурированный ответ (заглушка)" ], "context": "AI — заглушка для MVP. Промпты должны быть готовы для реального API. См. design-report раздел 7.", "status": "pending" }, { "id": "T8", "title": "Тесты на все модули", "description": "Написать pytest-тесты для cashflow_model (сериализация), engine (forecast + scenarios), sync (excel roundtrip), ai (prompts), cli (invocation).", "type": "test", "files": [ "tests/test_model.py", "tests/test_forecast.py", "tests/test_scenarios.py", "tests/test_excel_sync.py", "tests/test_cli.py", "tests/test_ai.py", "tests/conftest.py" ], "depends_on": ["T2", "T3", "T4", "T5", "T6", "T7"], "acceptance_criteria": [ "pytest запускается и все тесты проходят", "Покрытие базовых сценариев для каждой сущности", "Roundtrip-тест Excel: export → import → compare", "Forecast-тест: известные входные данные → ожидаемый результат" ], "context": "Использовать tmp_path для временных файлов. conftest.py с fixture для тестовой модели.", "status": "pending" } ] }