6b63df8c3d64421d868ec5595ae63f2085ef6590
Surfaced by the nexamain dry-run against real data:
- reader: cast invoice_items.invoice_id::text (uuid = text[] mismatch).
- readers: set_client_encoding('UTF8') — invoice descriptions contain "×".
- ingest: add a balancing line when invoice.subtotal != sum(items). 9 paid
base-plan invoices store the charge in subtotal with NO invoice_items, so
itemized ingestion under-recorded revenue by ~$1,143 (37%); the reconciling
line makes the Odoo invoice total match what Stripe billed.
74 tests green on odoo-trial.
docs(billing): TDD plan for NexaCloud invoice ledger (ingest -> account.move, posted+reconciled+HST)
Description
Odoo 19 custom modules
Languages
Python
57.1%
HTML
24.8%
JavaScript
14.7%
SCSS
2.2%
CSS
0.8%
Other
0.3%