| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 7784 |
| Technical Name |
eh_account_l10n_au_bas |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 7784 |
| Technical Name |
eh_account_l10n_au_bas |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
AU BAS Reporting
A locked, auditable quarterly Business Activity Statement worksheet for Odoo 19 Community, with the full ATO label set and a mod-89 ABN validator.
Why this module
AU BAS Reporting
Lodged means locked
Once a BAS run is marked lodged it is read-only. Recompute and reset-to-draft are both refused, lodged_at and lodged_by are stamped, and a re-run raises rather than quietly changing a figure you already filed. The number you lodged is the number that stays on record.
Tag-driven, side-aware compute
Each label maps to account.tax tags and is summed by a single SQL pass that separates credit and debit base and tax. Recompute deletes existing run lines first, so a re-run never double-counts or leaves a stale label behind, and a credit note is never conflated with a sale.
Yours to keep
LGPL-3 source on disk. No activation key, no phone-home, no recurring licence. Read it, configure the tag mapping to your chart of accounts, extend it. Free today, free at renewal, because there is no renewal.
Day in the life
A bookkeeper prepares the March quarter BAS.
She opens the run for the company and quarter; the 33-label worksheet is already there. The G, W and T labels she configured during onboarding compute straight from posted journal items, side-aware so credit notes net correctly; the F, FTC, WET and LCT rows she types in by hand. Before lodging she opens the GST control reconciliation: 1A reconciles cleanly against the credit movement on the GST-collected account, and the small 1B variance flags an account carrying mixed input and output tax, which she checks. A supplier ABN with hyphens is normalised and check-digit verified on save. She transfers the figures to the ATO form, marks the run lodged, and it locks: lodged_at and lodged_by are stamped, and a stray recompute next week is simply refused.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
Recompute is deterministic. Existing run lines are deleted before a recompute, so re-running Compute never double-counts and never leaves a stale label behind.
Lodged-run protection covers more than recompute. Reset-to-draft is also blocked on a lodged run, so a lodged figure cannot be unwound by clearing its lines.
Aggregation avoids the absolute-value trap. Base and tax sums are taken per ledger side, so a credit note and a sale (same sign, opposite side) are not conflated into a wrong total.
A mid-compute failure is recorded, not swallowed. The error is written to the audit-execution row and the exception is re-raised, so there is no half-written silent state.
The audit pipeline is a soft dependency. If the dynamic-report catalog record is missing, the run still computes its lines and proceeds rather than crashing.
ABN input is normalised on both create and write. Whitespace, hyphens and punctuation are stripped to the canonical 11-digit form before the mod-89 check digit is verified.
Financial-year label parsing is defensive. A malformed FY label yields empty period dates instead of a traceback, so a bad input never breaks the run.
What is inside
Built to do the job, end to end.
- 33-label ATO worksheet, seeded. The full G, W, T, F, FTC, WET and LCT label set ships as records: total and GST-free sales, acquisitions, 1A and 1B GST, W1 and W2 withholding, and the instalment labels. A no-silent-fallback constraint forces tag configuration on any label set to auto-compute.
- Tag-driven single-SQL compute. Each label maps to one or more account.tax tags and is summed by one SQL pass per label, joined over the tag-to-move-line relation. Labels ship as manual entry; configure an aggregation mode and tags during onboarding to switch the relevant labels to auto-compute, after which the run recomputes deterministically from posted entries in the period.
- Lock-on-lodge with stamped audit. Marking a run lodged makes it read-only, stamps lodged_at and lodged_by, and refuses both recompute and reset. Every render writes a start, complete or fail row to the shared report-execution audit trail.
- GST control reconciliation. Posted movement on the tax control accounts is summed over the BAS period and any non-zero variance is flagged before lodgement. The 1A (collected) side reconciles against credit movement; the 1B (paid) side uses gross debit movement and is approximate on accounts with mixed input and output tax. The result lists the control accounts considered.
- Mod-89 ABN validator on partners. Partners carry a validated ABN field. The mod-89 weighted check digit is verified on save, and hyphens, spaces and punctuation are normalised to the canonical 11-digit form, so an invalid ABN never reaches the lodgement payload.
Honest about the edges
What this does not do, so nothing surprises you.
- Out of the box every label ships as manual entry, so a fresh install is a structured worksheet you fill in. You configure an aggregation mode and tax tags per label during onboarding to enable the auto-compute on the G, W and T labels.
- The F, FTC, WET and LCT rows, plus the W5 sum and the T7 instalment line, are manual-entry fields. They are not auto-computed; the operator types these amounts.
- Simpler BAS is a marker field on the run for record-keeping. It flags the run but does not yet alter the computed or lodged label set.
- The reporting basis is a marker field. The compute currently uses the posting-date (accruals) basis regardless of the setting; cash-basis recognition is not yet implemented, so selecting Cash yields the same figures as Accruals.
- The 1B (GST paid) reconciliation uses the gross debit movement and is approximate on accounts that carry both input and output tax; the 1A (collected) side is exact.
- The GST reconciliation surfaces a variance figure and the list of tax control accounts considered. It does not drill through to an individual journal entry.
- Only the partner record carries the validated ABN field; the company record does not. The GST-registered flag on a partner is informational; no automatic supplier-bill withholding gate is enforced.
- Lodgement transport to the ATO (SBR) is out of scope: the module produces the figures, not the wire transmission. PAYG monthly variants and the IAS for non-GST registrants are not produced.
Odoo 19 Australian BAS, Business Activity Statement Odoo Community, Odoo GST BAS report Australia, ABN validator Odoo, ABN checksum validation Odoo partner, Odoo 19 GST control reconciliation, quarterly BAS run Odoo, Australian tax localization Odoo Community, BAS label G1 1A 1B Odoo, PAYG withholding BAS Odoo
Please log in to comment on this module