Update foreign withholding and tax rules

This commit is contained in:
José Arturo García
2026-08-10 08:18:26 -04:00
parent 22281ed4a6
commit 6581a4b8af
14 changed files with 216 additions and 52 deletions
+4
View File
@@ -8,3 +8,7 @@ Version 8.1.0 - 2026-08-10
(``es_419``) accounting charts, pending availability of ``es_DO``.
* Preserve 8.0.0 chart records when migrating to language-scoped identifiers.
* Normalize the English chart to standard accounting terminology.
* Add the 15% foreign-payment withholding introduced by Law 30-26 and keep
technical assistance out of the 10% interest category.
* Split tax rules whose duplicate match patterns made later alternatives
unreachable.
+8 -2
View File
@@ -1716,13 +1716,19 @@
<data language="en" grouped="1">
<record id="do_account_21020701_en" model="account.account.template">
<field name="code">21020701</field>
<field name="name">Foreign ISR services and royalties 27% payable</field>
<field name="name">Foreign ISR other taxable payments 27% payable</field>
<field name="parent" ref="do_account_210207_en"/>
<field name="type" ref="do_type_tax_payable_en"/>
</record>
<record id="do_account_21020702_en" model="account.account.template">
<field name="code">21020702</field>
<field name="name">Foreign ISR interest and assistance 10% payable</field>
<field name="name">Foreign ISR interest 10% payable</field>
<field name="parent" ref="do_account_210207_en"/>
<field name="type" ref="do_type_tax_payable_en"/>
</record>
<record id="do_account_21020703_en" model="account.account.template">
<field name="code">21020703</field>
<field name="name">Foreign ISR royalties, software and online services 15% payable</field>
<field name="parent" ref="do_account_210207_en"/>
<field name="type" ref="do_type_tax_payable_en"/>
</record>
+8 -2
View File
@@ -1708,13 +1708,19 @@
<data language="es_419" grouped="1">
<record id="do_account_21020701_es_419" model="account.account.template">
<field name="code">21020701</field>
<field name="name">ISR exterior servicios y regalías 27% por pagar</field>
<field name="name">ISR exterior otros pagos gravados 27% por pagar</field>
<field name="parent" ref="do_account_210207_es_419" />
<field name="type" ref="do_type_tax_payable_es_419" />
</record>
<record id="do_account_21020702_es_419" model="account.account.template">
<field name="code">21020702</field>
<field name="name">ISR exterior intereses y asistencia 10% por pagar</field>
<field name="name">ISR exterior intereses 10% por pagar</field>
<field name="parent" ref="do_account_210207_es_419" />
<field name="type" ref="do_type_tax_payable_es_419" />
</record>
<record id="do_account_21020703_es_419" model="account.account.template">
<field name="code">21020703</field>
<field name="name">ISR exterior regalías, software y servicios en línea 15% por pagar</field>
<field name="parent" ref="do_account_210207_es_419" />
<field name="type" ref="do_type_tax_payable_es_419" />
</record>
+3 -3
View File
@@ -19,7 +19,7 @@ the reviewer and review date rather than claiming certification in module data.
Chart Size and Provenance
-------------------------
The chart has 281 templates: 70 grouping nodes and 211 posting leaves. Of the
The chart has 282 templates: 70 grouping nodes and 212 posting leaves. Of the
posting leaves, 61 are tax control accounts (45 payable and 16 recoverable).
Those controls deliberately provide stable identifiers for accounting and
reporting modules. The remaining leaves cover cash, receivables, payables,
@@ -36,7 +36,7 @@ designed Tryton baseline using these objective inclusion rules:
* separate presentation is needed for a documented IFRS accounting policy.
Grouping nodes are closed and cannot receive postings. The test suite checks
281 unique templates, required optional-module accounts, account types and the
282 unique templates, required optional-module accounts, account types and the
IFRS policy coverage map. This is a transparent functional justification,
which is the appropriate evidence where no official general chart exists.
@@ -45,7 +45,7 @@ accounts. That is not decidable from Dominican law because no mandatory
general catalogue supplies a target count. If requested during review, the
safe reduction is to merge control accounts only after confirming that
``dgii_reports`` does not depend on their stable identifiers; claiming that
281 codes are official would be incorrect.
282 codes are official would be incorrect.
Upstream Repository
-------------------
+3 -1
View File
@@ -56,8 +56,10 @@ Official References
<https://dgii.gov.do/legislacion/normasGenerales/Documents/NG%20sobre%20Veh%C3%ADculos%20de%20Motor/norma06-12.pdf>`_
* `General Rule 04-2025 (bovine subsector withholding)
<https://dgii.gov.do/legislacion/normasGenerales/Documents/Normas%20Sectoriales/Norma04-25.pdf>`_
* `Law 30-26 (bank checks and electronic transfers)
* `Law 30-26 (foreign payments, bank checks and electronic transfers)
<https://dgii.gov.do/transparencia/baseLegal/Documents/Leyes/30-26.pdf>`_
* `DGII implementation calendar for Law 30-26
<https://dgii.gov.do/publicacionesOficiales/avisosInformativos/Documents/2026/10-26.pdf>`_
Review Record
-------------
+7
View File
@@ -87,6 +87,13 @@ The check and electronic-transfer templates preserve 0.15% through 2 July
2026 and 0.20% from 3 July 2026 under Law 30-26. Their tax rule switches rates
by accounting date.
Law 30-26 also introduced articles 305-1 and 305-2 of the Tax Code. From
1 July 2026, royalties or rights, software licences, online advertising and
the right to use or store data paid abroad are subject to a distinct 15%
withholding. Other taxable payments abroad remain at 27%, while article 306
interest remains at 10%. Technical assistance must therefore not be
classified as article 306 interest.
Validation Boundary
-------------------
+2 -1
View File
@@ -62,7 +62,8 @@ ISR Withholdings
* ``do_tax_ret_isr_premios_15`` — 15% qualifying prize band.
* ``do_tax_ret_isr_tragamonedas_10`` — 10% slot-machine prize case.
* ``do_tax_ret_isr_other_income_10`` — 10% residual income case under article 309.
* ``do_tax_ret_isr_ext_27`` — 27% qualifying service or royalty paid abroad.
* ``do_tax_ret_isr_ext_27`` — 27% qualifying payment abroad not governed by a special rate.
* ``do_tax_ret_isr_ext_15`` — 15% royalties or rights, software licences, online advertising and data use or storage paid abroad from 1 July 2026.
* ``do_tax_ret_isr_ext_10`` — 10% qualifying interest paid abroad.
Selective and Sector Charges
+16
View File
@@ -740,6 +740,22 @@
<field name="type">credit</field>
</record>
<!-- ISR Exterior 15% -->
<record id="do_tcl_isr_ext15_inv_en" model="account.tax.code.line.template">
<field name="code" ref="do_tc_isr_ext_en"/>
<field name="operator">-</field>
<field name="tax" ref="do_tax_ret_isr_ext_15_en"/>
<field name="amount">tax</field>
<field name="type">invoice</field>
</record>
<record id="do_tcl_isr_ext15_cr_en" model="account.tax.code.line.template">
<field name="code" ref="do_tc_isr_ext_en"/>
<field name="operator">+</field>
<field name="tax" ref="do_tax_ret_isr_ext_15_en"/>
<field name="amount">tax</field>
<field name="type">credit</field>
</record>
<!-- ISR Exterior 10% -->
<record id="do_tcl_isr_ext10_inv_en" model="account.tax.code.line.template">
<field name="code" ref="do_tc_isr_ext_en"/>
+14
View File
@@ -661,6 +661,20 @@
<field name="amount">tax</field>
<field name="type">credit</field>
</record>
<record id="do_tcl_isr_ext15_inv_es_419" model="account.tax.code.line.template">
<field name="code" ref="do_tc_isr_ext_es_419" />
<field name="operator">-</field>
<field name="tax" ref="do_tax_ret_isr_ext_15_es_419" />
<field name="amount">tax</field>
<field name="type">invoice</field>
</record>
<record id="do_tcl_isr_ext15_cr_es_419" model="account.tax.code.line.template">
<field name="code" ref="do_tc_isr_ext_es_419" />
<field name="operator">+</field>
<field name="tax" ref="do_tax_ret_isr_ext_15_es_419" />
<field name="amount">tax</field>
<field name="type">credit</field>
</record>
<record id="do_tcl_isr_ext10_inv_es_419" model="account.tax.code.line.template">
<field name="code" ref="do_tc_isr_ext_es_419" />
<field name="operator">-</field>
+16 -4
View File
@@ -288,7 +288,7 @@
</record>
<!-- ══════ ISR PAGOS AL EXTERIOR — Arts. 305-306 CT Ley 11-92 ══════ -->
<record id="do_tax_ret_isr_ext_27_en" model="account.tax.template">
<field name="name">ISR Withholding 27% — Payments Abroad: Services and Royalties (Non-Residents)</field>
<field name="name">ISR Withholding 27% — Other Taxable Payments Abroad (Non-Residents)</field>
<field name="description">Foreign ISR Withholding 27%</field>
<field name="type">percentage</field>
<field name="rate" eval="Decimal('-27')/100" />
@@ -296,10 +296,22 @@
<field name="account" ref="do_account_root_en" />
<field name="invoice_account" ref="do_account_21020701_en" />
<field name="credit_note_account" ref="do_account_21020701_en" />
<field name="legal_notice">Art. 305 CT Ley 11-92 — Servicios y regalías a no residentes 27%</field>
<field name="legal_notice">Art. 305 CT Ley 11-92 — pagos gravados no sujetos a una tasa especial</field>
</record>
<record id="do_tax_ret_isr_ext_15_en" model="account.tax.template">
<field name="name">ISR Withholding 15% — Foreign Royalties, Software and Online Services</field>
<field name="description">Foreign ISR Withholding 15%</field>
<field name="type">percentage</field>
<field name="rate" eval="Decimal('-15')/100" />
<field name="start_date" eval="datetime.date(2026, 7, 1)" />
<field name="group" ref="do_tax_group_isr_ext_en" />
<field name="account" ref="do_account_root_en" />
<field name="invoice_account" ref="do_account_21020703_en" />
<field name="credit_note_account" ref="do_account_21020703_en" />
<field name="legal_notice">Arts. 305-1 and 305-2 CT, introduced by Law 30-26 — royalties or rights, software licences, online advertising and data use or storage</field>
</record>
<record id="do_tax_ret_isr_ext_10_en" model="account.tax.template">
<field name="name">ISR Withholding 10% — Payments Abroad: Interest and Technical Assistance (Non-Residents)</field>
<field name="name">ISR Withholding 10% — Interest Paid Abroad (Non-Residents)</field>
<field name="description">Foreign ISR Withholding 10%</field>
<field name="type">percentage</field>
<field name="rate" eval="Decimal('-10')/100" />
@@ -307,7 +319,7 @@
<field name="account" ref="do_account_root_en" />
<field name="invoice_account" ref="do_account_21020702_en" />
<field name="credit_note_account" ref="do_account_21020702_en" />
<field name="legal_notice">Arts. 305-306 CT — Intereses y asistencia técnica a no residentes</field>
<field name="legal_notice">Art. 306 CT — interest paid or credited abroad</field>
</record>
<!-- ══════ ITBIS ADICIONAL — Retenciones especiales DGII ══════ -->
<!-- Servicios gravados con retención del 100% del ITBIS según NG 01-11. -->
+16 -4
View File
@@ -279,7 +279,7 @@
<field name="legal_notice">Art. 309 CT mod. Ley 253-12 — otras rentas no contempladas 10%</field>
</record>
<record id="do_tax_ret_isr_ext_27_es_419" model="account.tax.template">
<field name="name">Retención ISR 27% — Pagos al Exterior: Servicios y Regalías (No Residentes)</field>
<field name="name">Retención ISR 27% — Otros Pagos Gravados al Exterior (No Residentes)</field>
<field name="description">Retención ISR Exterior 27%</field>
<field name="type">percentage</field>
<field name="rate" eval="Decimal('-27')/100" />
@@ -287,10 +287,22 @@
<field name="account" ref="do_account_root_es_419" />
<field name="invoice_account" ref="do_account_21020701_es_419" />
<field name="credit_note_account" ref="do_account_21020701_es_419" />
<field name="legal_notice">Art. 305 CT Ley 11-92 — Servicios y regalías a no residentes 27%</field>
<field name="legal_notice">Art. 305 CT Ley 11-92 — pagos gravados no sujetos a una tasa especial</field>
</record>
<record id="do_tax_ret_isr_ext_15_es_419" model="account.tax.template">
<field name="name">Retención ISR 15% — Regalías, Software y Servicios en Línea al Exterior</field>
<field name="description">Retención ISR Exterior 15%</field>
<field name="type">percentage</field>
<field name="rate" eval="Decimal('-15')/100" />
<field name="start_date" eval="datetime.date(2026, 7, 1)" />
<field name="group" ref="do_tax_group_isr_ext_es_419" />
<field name="account" ref="do_account_root_es_419" />
<field name="invoice_account" ref="do_account_21020703_es_419" />
<field name="credit_note_account" ref="do_account_21020703_es_419" />
<field name="legal_notice">Arts. 305-1 y 305-2 CT, introducidos por Ley 30-26 — regalías o derechos, licencias de software, publicidad en línea y uso o almacenamiento de datos</field>
</record>
<record id="do_tax_ret_isr_ext_10_es_419" model="account.tax.template">
<field name="name">Retención ISR 10% — Pagos al Exterior: Intereses y Asistencia Técnica (No Residentes)</field>
<field name="name">Retención ISR 10% — Intereses Pagados al Exterior (No Residentes)</field>
<field name="description">Retención ISR Exterior 10%</field>
<field name="type">percentage</field>
<field name="rate" eval="Decimal('-10')/100" />
@@ -298,7 +310,7 @@
<field name="account" ref="do_account_root_es_419" />
<field name="invoice_account" ref="do_account_21020702_es_419" />
<field name="credit_note_account" ref="do_account_21020702_es_419" />
<field name="legal_notice">Arts. 305-306 CT — Intereses y asistencia técnica a no residentes</field>
<field name="legal_notice">Art. 306 CT — intereses pagados o acreditados al exterior</field>
</record>
<record id="do_tax_ret_itbis_100_inf_es_419" model="account.tax.template">
<field name="name">Retención ITBIS 100% — Servicios Gravados Sujetos a Retención</field>
+43 -11
View File
@@ -67,6 +67,18 @@
<field name="tax" ref="do_tax_ret_isr_ext_27_en"/>
<field name="sequence" eval="10"/>
</record>
<record id="do_tax_rule_supplier_ext_digital_en" model="account.tax.rule.template">
<field name="name">Foreign Royalties, Software and Online Services 15% Rule (RD)</field>
<field name="kind">purchase</field>
<field name="account" ref="do_account_root_en"/>
</record>
<record id="do_trline_supp_ext_isr15_en" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_supplier_ext_digital_en"/>
<field name="group" ref="do_tax_group_isr_ext_en"/>
<field name="tax" ref="do_tax_ret_isr_ext_15_en"/>
<field name="start_date" eval="datetime.date(2026, 7, 1)"/>
<field name="sequence" eval="10"/>
</record>
<!-- Tasas especiales ITBIS -->
<record id="do_tax_rule_customer_itbis16_en" model="account.tax.rule.template">
@@ -219,11 +231,16 @@
<field name="tax" ref="do_tax_isc_combustibles_16_en"/>
<field name="sequence" eval="10"/>
</record>
<record id="do_tax_rule_customer_isc_fuel_rd2_en" model="account.tax.rule.template">
<field name="name">ISC Rule Additional RD$2 per Gallon of Fuel (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_en"/>
</record>
<record id="do_trline_cust_isc_fuel_rd2_en" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_isc_fuel_en"/>
<field name="rule" ref="do_tax_rule_customer_isc_fuel_rd2_en"/>
<field name="group" ref="do_tax_group_isc_en"/>
<field name="tax" ref="do_tax_isc_fuel_rd2_gallon_en"/>
<field name="sequence" eval="20"/>
<field name="sequence" eval="10"/>
</record>
<record id="do_tax_rule_bank_check_transfer_en" model="account.tax.rule.template">
@@ -299,38 +316,53 @@
<field name="sequence" eval="20"/>
</record>
<record id="do_tax_rule_customer_sectorial_retention_en" model="account.tax.rule.template">
<field name="name">Customer Rule with ITBIS Sectoral Withholding (RD)</field>
<record id="do_tax_rule_customer_sectorial_society_en" model="account.tax.rule.template">
<field name="name">ITBIS Withheld by Companies 30% Customer Rule (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_en"/>
</record>
<record id="do_trline_cust_sectorial_society_en" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_sectorial_retention_en"/>
<field name="rule" ref="do_tax_rule_customer_sectorial_society_en"/>
<field name="group" ref="do_tax_group_itbis_en"/>
<field name="tax" ref="do_tax_ret_itbis_society_30_suf_en"/>
<field name="keep_origin" eval="True"/>
<field name="sequence" eval="10"/>
</record>
<record id="do_tax_rule_customer_sectorial_airline_en" model="account.tax.rule.template">
<field name="name">ITBIS Withheld by Airlines Customer Rule (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_en"/>
</record>
<record id="do_trline_cust_sectorial_airline_en" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_sectorial_retention_en"/>
<field name="rule" ref="do_tax_rule_customer_sectorial_airline_en"/>
<field name="group" ref="do_tax_group_itbis_en"/>
<field name="tax" ref="do_tax_ret_itbis_airline_100_en"/>
<field name="keep_origin" eval="True"/>
<field name="sequence" eval="20"/>
<field name="sequence" eval="10"/>
</record>
<record id="do_tax_rule_customer_sectorial_hotel_en" model="account.tax.rule.template">
<field name="name">ITBIS Withheld by Hotels Customer Rule (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_en"/>
</record>
<record id="do_trline_cust_sectorial_hotel_en" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_sectorial_retention_en"/>
<field name="rule" ref="do_tax_rule_customer_sectorial_hotel_en"/>
<field name="group" ref="do_tax_group_itbis_en"/>
<field name="tax" ref="do_tax_ret_itbis_hotel_100_en"/>
<field name="keep_origin" eval="True"/>
<field name="sequence" eval="30"/>
<field name="sequence" eval="10"/>
</record>
<record id="do_tax_rule_customer_sectorial_state_en" model="account.tax.rule.template">
<field name="name">ITBIS Withheld by State Entities Customer Rule (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_en"/>
</record>
<record id="do_trline_cust_sectorial_state_en" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_sectorial_retention_en"/>
<field name="rule" ref="do_tax_rule_customer_sectorial_state_en"/>
<field name="group" ref="do_tax_group_itbis_en"/>
<field name="tax" ref="do_tax_ret_itbis_state_100_en"/>
<field name="keep_origin" eval="True"/>
<field name="sequence" eval="40"/>
<field name="sequence" eval="10"/>
</record>
</data>
</tryton>
+43 -11
View File
@@ -56,6 +56,18 @@
<field name="tax" ref="do_tax_ret_isr_ext_27_es_419" />
<field name="sequence" eval="10" />
</record>
<record id="do_tax_rule_supplier_ext_digital_es_419" model="account.tax.rule.template">
<field name="name">Regla Regalías, Software y Servicios en Línea al Exterior 15% (RD)</field>
<field name="kind">purchase</field>
<field name="account" ref="do_account_root_es_419" />
</record>
<record id="do_trline_supp_ext_isr15_es_419" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_supplier_ext_digital_es_419" />
<field name="group" ref="do_tax_group_isr_ext_es_419" />
<field name="tax" ref="do_tax_ret_isr_ext_15_es_419" />
<field name="start_date" eval="datetime.date(2026, 7, 1)" />
<field name="sequence" eval="10" />
</record>
<record id="do_tax_rule_customer_itbis16_es_419" model="account.tax.rule.template">
<field name="name">Regla Clientes ITBIS 16% Tasa Especial (RD)</field>
<field name="kind">sale</field>
@@ -202,11 +214,16 @@
<field name="tax" ref="do_tax_isc_combustibles_16_es_419" />
<field name="sequence" eval="10" />
</record>
<record id="do_tax_rule_customer_isc_fuel_rd2_es_419" model="account.tax.rule.template">
<field name="name">Regla ISC Adicional RD$2 por Galón de Combustible (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_es_419" />
</record>
<record id="do_trline_cust_isc_fuel_rd2_es_419" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_isc_fuel_es_419" />
<field name="rule" ref="do_tax_rule_customer_isc_fuel_rd2_es_419" />
<field name="group" ref="do_tax_group_isc_es_419" />
<field name="tax" ref="do_tax_isc_fuel_rd2_gallon_es_419" />
<field name="sequence" eval="20" />
<field name="sequence" eval="10" />
</record>
<record id="do_tax_rule_bank_check_transfer_es_419" model="account.tax.rule.template">
<field name="name">Regla Bancaria Cheques / Transferencias Electrónicas (RD)</field>
@@ -277,38 +294,53 @@
<field name="tax" ref="do_tax_ret_isc_insurance_100_es_419" />
<field name="sequence" eval="20" />
</record>
<record id="do_tax_rule_customer_sectorial_retention_es_419" model="account.tax.rule.template">
<field name="name">Regla Cliente con Retención Sectorial ITBIS (RD)</field>
<record id="do_tax_rule_customer_sectorial_society_es_419" model="account.tax.rule.template">
<field name="name">Regla Cliente ITBIS Retenido por Sociedades 30% (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_es_419" />
</record>
<record id="do_trline_cust_sectorial_society_es_419" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_sectorial_retention_es_419" />
<field name="rule" ref="do_tax_rule_customer_sectorial_society_es_419" />
<field name="group" ref="do_tax_group_itbis_es_419" />
<field name="tax" ref="do_tax_ret_itbis_society_30_suf_es_419" />
<field name="keep_origin" eval="True" />
<field name="sequence" eval="10" />
</record>
<record id="do_tax_rule_customer_sectorial_airline_es_419" model="account.tax.rule.template">
<field name="name">Regla Cliente ITBIS Retenido por Aerolíneas (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_es_419" />
</record>
<record id="do_trline_cust_sectorial_airline_es_419" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_sectorial_retention_es_419" />
<field name="rule" ref="do_tax_rule_customer_sectorial_airline_es_419" />
<field name="group" ref="do_tax_group_itbis_es_419" />
<field name="tax" ref="do_tax_ret_itbis_airline_100_es_419" />
<field name="keep_origin" eval="True" />
<field name="sequence" eval="20" />
<field name="sequence" eval="10" />
</record>
<record id="do_tax_rule_customer_sectorial_hotel_es_419" model="account.tax.rule.template">
<field name="name">Regla Cliente ITBIS Retenido por Hoteles (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_es_419" />
</record>
<record id="do_trline_cust_sectorial_hotel_es_419" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_sectorial_retention_es_419" />
<field name="rule" ref="do_tax_rule_customer_sectorial_hotel_es_419" />
<field name="group" ref="do_tax_group_itbis_es_419" />
<field name="tax" ref="do_tax_ret_itbis_hotel_100_es_419" />
<field name="keep_origin" eval="True" />
<field name="sequence" eval="30" />
<field name="sequence" eval="10" />
</record>
<record id="do_tax_rule_customer_sectorial_state_es_419" model="account.tax.rule.template">
<field name="name">Regla Cliente ITBIS Retenido por Instituciones del Estado (RD)</field>
<field name="kind">sale</field>
<field name="account" ref="do_account_root_es_419" />
</record>
<record id="do_trline_cust_sectorial_state_es_419" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_customer_sectorial_retention_es_419" />
<field name="rule" ref="do_tax_rule_customer_sectorial_state_es_419" />
<field name="group" ref="do_tax_group_itbis_es_419" />
<field name="tax" ref="do_tax_ret_itbis_state_100_es_419" />
<field name="keep_origin" eval="True" />
<field name="sequence" eval="40" />
<field name="sequence" eval="10" />
</record>
</data>
</tryton>
+31 -11
View File
@@ -557,35 +557,35 @@ class AccountDoUnitTestCase(unittest.TestCase):
expected = {
'account_chart_do_en.xml': {
'account.account.type.template': 36,
'account.account.template': 281,
'account.account.template': 282,
},
'tax_do_en.xml': {
'account.tax.group': 7,
'account.tax.template': 50,
'account.tax.template': 51,
},
'tax_code_do_en.xml': {
'account.tax.code.template': 44,
'account.tax.code.line.template': 93,
'account.tax.code.line.template': 95,
},
'tax_rule_do_en.xml': {
'account.tax.rule.template': 23,
'account.tax.rule.line.template': 30,
'account.tax.rule.template': 28,
'account.tax.rule.line.template': 31,
},
'account_chart_do_es_419.xml': {
'account.account.type.template': 36,
'account.account.template': 281,
'account.account.template': 282,
},
'tax_do_es_419.xml': {
'account.tax.group': 7,
'account.tax.template': 50,
'account.tax.template': 51,
},
'tax_code_do_es_419.xml': {
'account.tax.code.template': 44,
'account.tax.code.line.template': 93,
'account.tax.code.line.template': 95,
},
'tax_rule_do_es_419.xml': {
'account.tax.rule.template': 23,
'account.tax.rule.line.template': 30,
'account.tax.rule.template': 28,
'account.tax.rule.line.template': 31,
},
}
for filename, expected_counts in expected.items():
@@ -829,7 +829,7 @@ class AccountDoUnitTestCase(unittest.TestCase):
'account_chart_do_en.xml')
if model == 'account.account.template'
}
self.assertEqual(len(taxes), 50)
self.assertEqual(len(taxes), 51)
for record_id, values in taxes.items():
with self.subTest(record_id=record_id):
self.assertEqual(
@@ -991,6 +991,12 @@ class AccountDoUnitTestCase(unittest.TestCase):
self.assertEqual(
lines['do_trline_supp_ext_isr27']['group'],
'do_tax_group_isr_ext')
self.assertEqual(
lines['do_trline_supp_ext_isr15']['tax'],
'do_tax_ret_isr_ext_15')
self.assertEqual(
lines['do_trline_supp_ext_isr15']['start_date'],
'datetime.date(2026, 7, 1)')
self.assertEqual(
lines['do_trline_bank_check_transfer_015']['origin_tax'],
'do_tax_cheques_015')
@@ -1010,5 +1016,19 @@ class AccountDoUnitTestCase(unittest.TestCase):
lines['do_trline_bank_check_transfer_020']['start_date'],
'datetime.date(2026, 7, 3)')
def test_tax_rule_lines_have_reachable_match_patterns(self):
"""A rule must not contain two lines with the same match pattern."""
patterns = {}
for _, record_id, model, values in _iter_xml_records(
'tax_rule_do_en.xml'):
if model != 'account.tax.rule.line.template':
continue
pattern = tuple(values.get(field) for field in [
'rule', 'group', 'origin_tax', 'start_date', 'end_date'])
self.assertNotIn(
pattern, patterns,
msg=f'{record_id} is shadowed by {patterns.get(pattern)}')
patterns[pattern] = record_id
del ModuleTestCase