oqyude
541a76835f
T5: Dependency Injection — services через composition root
...
- AssistantService теперь принимает ForecastService в конструкторе
(раньше создавал new ForecastService() внутри analyze/advice)
- infrastructure/cli/main.py: _build_services() — composition root,
собирает граф ForecastService, ScenarioService, AssistantService, CurrencyConverter
- Все CLI-команды используют _build_services(model) вместо прямого new
- test_ai.py: обновлён под новый контракт AssistantService
Tests: 67/67 pass.
2026-10-08 16:53:04 +03:00
oqyude
363d440d53
T3: Decimal for money — all monetary fields migrated from float
...
- All domain monetary fields now use Decimal:
- Account.balance, Asset.value, Asset.growth_rate
- Liability.balance, Liability.interest, Liability.payment
- Transaction.amount, RecurringCashflow.amount
- ExchangeRate.rate
- ForecastScenario.income_multiplier, expense_multiplier, growth_multiplier
- CurrencyConverter: all arithmetic in Decimal, quantize to 0.01 with ROUND_HALF_UP
- ForecastService: Decimal arithmetic throughout (income, expenses, balance, growth, liability cost)
- ScenarioService: Decimal multipliers, deepcopy safe with Decimal fields
- assistant.py: _DecimalEncoder for json.dumps (Decimal -> str in JSON)
Pydantic v2 + Decimal:
- model_dump(mode='json') converts Decimal to str (JSON-safe)
- model_validate() parses str back to Decimal
- Round-trip preserves precision (100.50 stays 100.50)
Tests: 63/63 pass.
2026-10-08 16:44:59 +03:00
oqyude
feb77ef217
T1: restructure to domain/application/infrastructure + schema version 1
...
- Move cashflow_model/ -> domain/
- Move engine/ -> application/
- Move cli/, sync/, ai/ -> infrastructure/
- Update all imports across codebase and tests
- Add version=1 to FinancialModel.to_dict() with migration hook in from_dict
- Update pyproject.toml: cf entry point and packages.find
Tests: 63/63 pass.
2026-10-08 16:34:10 +03:00