XML defines 8 positions with auto-detection by country/state: - CA Ontario (default), CA Atlantic, CA Quebec, CA BC, CA Prairies/Territories - Export US, Export International, Tax Exempt post_init hook _configure_fiscal_position_tax_maps sets up bidirectional tax routing (sale + purchase) from the default '5% GST' to the appropriate provincial tax via Odoo 19's account.fiscal.position.tax_ids / account.tax.original_tax_ids relation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
65 lines
3.2 KiB
XML
65 lines
3.2 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data noupdate="0">
|
|
|
|
<!-- Tax substitutions on each fiscal position are configured by the
|
|
post_init_hook (_configure_fiscal_position_tax_maps) because the
|
|
source/destination tax IDs are resolved at runtime from the
|
|
curated active tax set. -->
|
|
|
|
<record id="fp_ca_ontario" model="account.fiscal.position">
|
|
<field name="name">CA — Ontario (Default)</field>
|
|
<field name="auto_apply" eval="True"/>
|
|
<field name="country_id" ref="base.ca"/>
|
|
<field name="state_ids" eval="[(6, 0, [ref('base.state_ca_on')])]"/>
|
|
</record>
|
|
|
|
<record id="fp_ca_atlantic" model="account.fiscal.position">
|
|
<field name="name">CA — Atlantic (HST 15%)</field>
|
|
<field name="auto_apply" eval="True"/>
|
|
<field name="country_id" ref="base.ca"/>
|
|
<field name="state_ids" eval="[(6, 0, [ref('base.state_ca_nb'), ref('base.state_ca_ns'), ref('base.state_ca_pe'), ref('base.state_ca_nl')])]"/>
|
|
</record>
|
|
|
|
<record id="fp_ca_quebec" model="account.fiscal.position">
|
|
<field name="name">CA — Quebec (GST + QST)</field>
|
|
<field name="auto_apply" eval="True"/>
|
|
<field name="country_id" ref="base.ca"/>
|
|
<field name="state_ids" eval="[(6, 0, [ref('base.state_ca_qc')])]"/>
|
|
</record>
|
|
|
|
<record id="fp_ca_bc" model="account.fiscal.position">
|
|
<field name="name">CA — British Columbia (GST 5%, PST per-product)</field>
|
|
<field name="auto_apply" eval="True"/>
|
|
<field name="country_id" ref="base.ca"/>
|
|
<field name="state_ids" eval="[(6, 0, [ref('base.state_ca_bc')])]"/>
|
|
</record>
|
|
|
|
<record id="fp_ca_prairies_territories" model="account.fiscal.position">
|
|
<field name="name">CA — Prairies / Territories (GST 5% only)</field>
|
|
<field name="auto_apply" eval="True"/>
|
|
<field name="country_id" ref="base.ca"/>
|
|
<field name="state_ids" eval="[(6, 0, [ref('base.state_ca_ab'), ref('base.state_ca_mb'), ref('base.state_ca_sk'), ref('base.state_ca_yt'), ref('base.state_ca_nt'), ref('base.state_ca_nu')])]"/>
|
|
</record>
|
|
|
|
<record id="fp_export_us" model="account.fiscal.position">
|
|
<field name="name">Export — United States (Zero-rated)</field>
|
|
<field name="auto_apply" eval="True"/>
|
|
<field name="country_id" ref="base.us"/>
|
|
</record>
|
|
|
|
<record id="fp_export_intl" model="account.fiscal.position">
|
|
<field name="name">Export — International (Zero-rated)</field>
|
|
<field name="auto_apply" eval="False"/>
|
|
<field name="note">Manually apply for non-CA / non-US customers. Auto-apply by country-group requires a custom rule.</field>
|
|
</record>
|
|
|
|
<record id="fp_tax_exempt" model="account.fiscal.position">
|
|
<field name="name">Tax Exempt (cert-holder)</field>
|
|
<field name="auto_apply" eval="False"/>
|
|
<field name="note">Apply manually to customers with a valid exemption certificate on file. Record certificate details in the partner notes.</field>
|
|
</record>
|
|
|
|
</data>
|
|
</odoo>
|