mirror of
https://github.com/we-promise/sure.git
synced 2026-04-19 12:04:08 +00:00
API v1: add amount_cents + signed_amount_cents to transactions (#899)
* feat(api): add amount_cents + signed_amount_cents to transactions * fix: use currency.minor_unit_conversion for amount_cents - Replace hardcoded *100 with currency.minor_unit_conversion - Handles JPY (0 decimals), KWD/BHD (3 decimals), etc. correctly - Add assert_amount_cents_fields helper to validate sign/scale invariants
This commit is contained in:
@@ -3,6 +3,17 @@
|
||||
json.id transaction.id
|
||||
json.date transaction.entry.date
|
||||
json.amount transaction.entry.amount_money.format
|
||||
|
||||
# Agent/automation-friendly numeric fields (avoid localized parsing and clarify sign)
|
||||
# `amount` in v1 is a localized string and may follow an accounting sign convention.
|
||||
# Expose minor units (cents) as integers to make the API agent-friendly.
|
||||
# Uses currency.minor_unit_conversion (e.g. 100 for USD/EUR, 1 for JPY, 1000 for KWD).
|
||||
amount_money = transaction.entry.amount_money
|
||||
conversion_factor = amount_money.currency.minor_unit_conversion
|
||||
amount_cents = (amount_money.amount * conversion_factor).round(0).to_i.abs
|
||||
json.amount_cents amount_cents
|
||||
json.signed_amount_cents(transaction.entry.classification == "income" ? amount_cents : -amount_cents)
|
||||
|
||||
json.currency transaction.entry.currency
|
||||
json.name transaction.entry.name
|
||||
json.notes transaction.entry.notes
|
||||
|
||||
Reference in New Issue
Block a user