Follow-up sweep to #1842 for sibling bugs of both classes.
FX denomination (same defect as categorize's vat_amount):
- mapping-engine buildResult computed input VAT, reverse-charge fiktiv
moms AND the rutor 20-24 basbelopp pair from the transaction-currency
amount while journal lines are SEK. Now resolved through the same
lenient SEK ladder buildTransactionEntryLines uses for the gross.
Reachable at the ledger only via env-gated auto-book (dev/test) and
the mapping-rules evaluate API, but one flag from production.
- categorize-core's header doc claimed transaction.amount already IS
SEK; rewritten, it was license for exactly this bug class.
Output-schema nullability (same defect as matched_supplier_id):
- get_payslip.calculation_breakdown: returned as explicit null before
calculation (the schema description even said so) but typed object.
- get_document_content.mime_type/size_bytes: verbatim nullable columns.
- export_sie: company_name nullable, and org_number was returned but
never declared under additionalProperties:false, so strict clients
failed EVERY successful export.
- currency (two transaction listings) and voucher_series (verifikat
listing): nullable columns with defaults, loosened defensively.
- New declaration-pinning test in output-schema.test.ts.
Known and deliberately not fixed here: skatteverket bank-counterpart
hint compares a foreign amount to SEK (display-only, missed hint);
own-account-detector cross-currency magnitude tie-break (heuristic);
invoice-inbox still withholds rule proposals on foreign rows (guard
can be lifted separately now that the defect it guards is fixed).
Claude-Session: https://claude.ai/code/session_01ScVhg6XsDtNXkiEQNV7LaZ
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>