# Projet : AIR — Accounting Intermediate Representation # Auteur : Simon-Pierre Boucher # Contact : contact@spboucher.ai # # Golden cases — FX conversion (IAS 21 transaction-date rate), realized FX # gains/losses on settlement, settlements, equity and loan events. # FX semantics per docs/research/fx-handling.md and accounting-standards.md. # Rates in events are observed input data (e.g. Bank of Canada Valet), never # constants of the engine. cases: - name: sale_usd_export description: "1000.00 USD export sale (zero-rated), booked at the 1.3500 transaction-date rate" air: events: - id: evt_sale_usd type: Sale date: 2026-07-02 amount: {amount: "1000.00", currency: USD} tax: {jurisdiction: CA-QC, exempt: true} fx: {rate: "1.3500", source: "bankofcanada.valet:FXUSDCAD", rate_date: 2026-07-02} expected_entries: - id: je_evt_sale_usd lines: - ["1100", debit, "1350.00", CAD] - ["4000", credit, "1350.00", CAD] - name: purchase_eur_fx description: "500.00 EUR foreign purchase at 1.4800: booked at 740.00 CAD" air: events: - id: evt_purch_eur type: Purchase date: 2026-07-03 amount: {amount: "500.00", currency: EUR} tax: {jurisdiction: CA-QC, exempt: true} fx: {rate: "1.4800", source: "bankofcanada.valet:FXEURCAD", rate_date: 2026-07-03} expected_entries: - id: je_evt_purch_eur lines: - ["5000", debit, "740.00", CAD] - ["2000", credit, "740.00", CAD] - name: payment_received_cad description: "Customer settles the 1149.75 receivable, same currency: no FX" air: events: - id: evt_pay_in type: PaymentReceived date: 2026-07-30 related_event: evt_sale_simple amount: {amount: "1149.75", currency: CAD} expected_entries: - id: je_evt_pay_in lines: - ["1000", debit, "1149.75", CAD] - ["1100", credit, "1149.75", CAD] - name: payment_sent_cad description: "We settle the 459.90 payable, same currency: no FX" air: events: - id: evt_pay_out type: PaymentSent date: 2026-07-31 related_event: evt_purch_supplies amount: {amount: "459.90", currency: CAD} expected_entries: - id: je_evt_pay_out lines: - ["2000", debit, "459.90", CAD] - ["1000", credit, "459.90", CAD] - name: fx_gain_on_receipt description: "USD sale booked at 1.3000; collected at 1.3500 -> realized FX gain 50.00" air: events: - id: evt_sale_usd_g type: Sale date: 2026-06-01 amount: {amount: "1000.00", currency: USD} tax: {jurisdiction: CA-QC, exempt: true} fx: {rate: "1.3000", source: "bankofcanada.valet:FXUSDCAD", rate_date: 2026-06-01} - id: evt_pay_usd_g type: PaymentReceived date: 2026-06-30 related_event: evt_sale_usd_g amount: {amount: "1000.00", currency: USD} fx: {rate: "1.3500", source: "bankofcanada.valet:FXUSDCAD", rate_date: 2026-06-30} expected_entries: - id: je_evt_sale_usd_g lines: - ["1100", debit, "1300.00", CAD] - ["4000", credit, "1300.00", CAD] - id: je_evt_pay_usd_g lines: - ["1000", debit, "1350.00", CAD] - ["1100", credit, "1300.00", CAD] - ["4500", credit, "50.00", CAD] - name: fx_loss_on_receipt description: "USD sale booked at 1.3500; collected at 1.3000 -> realized FX loss 50.00" air: events: - id: evt_sale_usd_l type: Sale date: 2026-06-05 amount: {amount: "1000.00", currency: USD} tax: {jurisdiction: CA-QC, exempt: true} fx: {rate: "1.3500", source: "bankofcanada.valet:FXUSDCAD", rate_date: 2026-06-05} - id: evt_pay_usd_l type: PaymentReceived date: 2026-07-05 related_event: evt_sale_usd_l amount: {amount: "1000.00", currency: USD} fx: {rate: "1.3000", source: "bankofcanada.valet:FXUSDCAD", rate_date: 2026-07-05} expected_entries: - id: je_evt_sale_usd_l lines: - ["1100", debit, "1350.00", CAD] - ["4000", credit, "1350.00", CAD] - id: je_evt_pay_usd_l lines: - ["1000", debit, "1300.00", CAD] - ["5500", debit, "50.00", CAD] - ["1100", credit, "1350.00", CAD] - name: fx_loss_on_payment_sent description: "2000 USD purchase booked at 1.3000 (AP 2600.00); paid at 1.3400 (2680.00) -> FX loss 80.00" air: events: - id: evt_purch_usd type: Purchase date: 2026-06-10 amount: {amount: "2000.00", currency: USD} tax: {jurisdiction: CA-QC, exempt: true} fx: {rate: "1.3000", source: "bankofcanada.valet:FXUSDCAD", rate_date: 2026-06-10} - id: evt_pay_usd_out type: PaymentSent date: 2026-07-10 related_event: evt_purch_usd amount: {amount: "2000.00", currency: USD} fx: {rate: "1.3400", source: "bankofcanada.valet:FXUSDCAD", rate_date: 2026-07-10} expected_entries: - id: je_evt_purch_usd lines: - ["5000", debit, "2600.00", CAD] - ["2000", credit, "2600.00", CAD] - id: je_evt_pay_usd_out lines: - ["2000", debit, "2600.00", CAD] - ["5500", debit, "80.00", CAD] - ["1000", credit, "2680.00", CAD] - name: owner_contribution description: "Owner injects 10000.00: cash up, equity up" air: events: - id: evt_owner type: OwnerContribution date: 2026-01-01 amount: {amount: "10000.00", currency: CAD} expected_entries: - id: je_evt_owner lines: - ["1000", debit, "10000.00", CAD] - ["3000", credit, "10000.00", CAD] - name: loan_received description: "Bank loan 25000.00: cash up, liability up" air: events: - id: evt_loan type: LoanReceived date: 2026-01-02 amount: {amount: "25000.00", currency: CAD} expected_entries: - id: je_evt_loan lines: - ["1000", debit, "25000.00", CAD] - ["2500", credit, "25000.00", CAD]