{ "request_id": "req-T3", "task_id": "T3", "title": "Decimal for money", "status": "ready_for_review", "goal": "Точность финансовых расчётов — float → Decimal", "changes": { "summary": "Все денежные поля в domain/ переведены с float на Decimal. CurrencyConverter использует Decimal арифметику с ROUND_HALF_UP до 2 знаков. ForecastService и ScenarioService переписаны для работы с Decimal. assistant.py получил _DecimalEncoder для json.dumps (Decimal → str в JSON).", "commits": ["363d440"], "files_changed": [ "domain/account.py, asset.py, currency.py, liability.py, recurring.py, scenario.py, transaction.py", "application/forecast.py, scenarios.py", "infrastructure/ai/assistant.py" ] }, "verification": { "tests_passed": "63/63", "decimal_preserved": "100.50 round-trip exact (no float drift)", "json_safe": "Decimal → str via model_dump(mode='json'), back via model_validate", "cf_init_forecast_scenario_works": true }, "fulfills_ac": [ "Все monetary поля — Decimal", "CurrencyConverter работает с Decimal", "ForecastService арифметика — Decimal", "Excel-sync продолжает работать", "rich.print/f-strings форматируют Decimal", "JSON-сериализация Decimal работает (через pydantic и _DecimalEncoder)", "pytest 63/63" ] }