Skip to content

1.11.2

Released: TBD

Highlights

  • ITBMS worksheet accuracy. Invoice and supplier-invoice lines created before the add_tax_rate_id_to_details migration now have a tax_rate_id assigned, so they appear in the correct ITBMS rate bucket (7 % / 10 % / 15 % / exempt) instead of the ITBMS_UNCLASSIFIED catch-all.

Added

  • Backfill script scripts/backfill_tax_rate_id_invoice_details.py — infers TaxRateCode from each line's stored tax_rate percentage and the parent invoice date, then resolves the effective TaxRate row and writes its id. See feature page.

Changed

-

Fixed

  • Legacy invoice_details / supplier_invoice_details rows with NULL tax_rate_id no longer show up as ITBMS_UNCLASSIFIED in the worksheet after the backfill script is run.

Migrations

  • No new alembic revision. The tax_rate_id column already exists (added in add_tax_rate_id_to_details, 2026-05-17). This release only provides the one-off data backfill script.

Run the script once after deploy:

uv run python scripts/backfill_tax_rate_id_invoice_details.py --apply

Frontend impact

  • No GraphQL surface changes. The taxRateId field on InvoiceDetailResponse and SupplierInvoiceDetailResponse was already exposed; it will now return a non-null value for previously-unclassified lines after the backfill. The ITBMS worksheet ITBMS_UNCLASSIFIED bucket should be empty for historical periods once the script runs.

Versioning notes

  • Patch bump (data fix, no schema or API changes). Bumped with uv run python scripts/bump_version.py 1.11.2 --changelog-stub.