- calculations.py: Use Decimal for commission percentages, exchange rates,
and client balances. Added to_decimal() helper for safe float conversion.
Changed from banker's rounding to ROUND_HALF_UP.
- models.py: Changed all fiat amounts, percentages, and exchange rates to
Decimal. Added json_encoders for API serialization.
- transaction_processor.py: Convert to Decimal at data ingestion boundary
(CSV parsing). Updated all defaults and calculations to use Decimal.
- tests: Updated to work with Decimal return types.
This prevents floating-point precision issues in financial calculations.
All 23 tests pass.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Extract pure calculation functions to calculations.py (no lnbits deps)
- transaction_processor.py now imports from calculations.py (DRY)
- Add 22 tests covering commission, distribution, and fiat round-trip
- Include real Lamassu transaction data (8.75%, 5.5% commission rates)
- Test edge cases: discounts (90%, 100%), zero commission, small amounts
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>