2.2.0¶
Released: TBD
Highlights¶
- Tax-rate GL accounts can now be seeded onto the unified rates. The EXPAND migration created the ITBMS rate rows with NULL GL accounts (a migration can't create accounts); this adds the service + mutation that wires them, so ITBMS posting books the full output/input legs and the withholding-asset retention leg instead of falling back. Part of the Unify Tax-Rate Models rollout (MIGRATE phase, step 1).
Added¶
seedItbmsTaxRateGlAccountsmutation (TAX_FILINGS-gated) →TaxRateService.ensure_itbms_sale_gl_accounts(). Idempotent; for each effective ITBMS sale rate (ITBMS_EXEMPT/7/10/15) it fills any NULL GL account viaget_or_create_account— output / withholding-payable →TAX_PAYABLE, input / withholding-asset →OTHER_CURRENT_ASSET. Returns the number of rates updated.
Changed¶
- None (read paths unchanged).
Fixed¶
- None.
Migrations¶
- None (data-only; run the
seedItbmsTaxRateGlAccountsmutation per tenant to populate GL accounts on the rate rows seeded by the EXPAND migration).
Frontend impact¶
- New optional accountant mutation
seedItbmsTaxRateGlAccounts. No required frontend changes; an accountant can run it once per tenant to wire the rate GL accounts (or it can be triggered from settings). Until run, ITBMS still posts via the client/supplier fallback as before — no regression.
Versioning notes¶
- Bumped with
uv run python scripts/bump_version.py 2.2.0 --changelog-stub. MINOR — additive mutation, no breaking change. This is the safe, self-contained first step of the MIGRATE phase; the behavioral read-flip (items/invoicing reading the unified rate, with therate_percentfraction-vs-percent guards) is a separate later change.