Complete Dominican tax localization metadata

This commit is contained in:
José Arturo García
2026-08-09 12:19:52 -04:00
parent dfd6fa48fd
commit fa3712bbfc
9 changed files with 794 additions and 352 deletions
+12 -12
View File
@@ -77,7 +77,7 @@ se determina al cierre del año y se aplica al año siguiente.
| Tasa | 18% | | Tasa | 18% |
| Tipo de operación | Ventas (débito fiscal) | | Tipo de operación | Ventas (débito fiscal) |
| Aplica a | Personas Jurídicas y Personas Físicas | | Aplica a | Personas Jurídicas y Personas Físicas |
| Cuenta contable | 210201 — ITBIS cobrado por pagar | | Cuenta contable | 21020101 — ITBIS cobrado por pagar 18% |
| Formulario | IT-1 (plazo día 20) | | Formulario | IT-1 (plazo día 20) |
**Base legal:** **Base legal:**
@@ -110,7 +110,7 @@ lo requieran. No se marcan como inactivas.
| ID plantilla | `do_tax_itbis_16_venta` | | ID plantilla | `do_tax_itbis_16_venta` |
| Tasa | 16% | | Tasa | 16% |
| Estado | Tasa especial disponible | | Estado | Tasa especial disponible |
| Cuenta contable | 210201 — ITBIS cobrado por pagar | | Cuenta contable | 21020102 — ITBIS cobrado por pagar 16% |
**Base legal:** Art. 345 CT (Ley 11-92), modificado por Ley 253-12. **Base legal:** Art. 345 CT (Ley 11-92), modificado por Ley 253-12.
@@ -127,7 +127,7 @@ tasa especial distinta del 18% general.
| Tasa | 18% | | Tasa | 18% |
| Tipo de operación | Compras (crédito fiscal) | | Tipo de operación | Compras (crédito fiscal) |
| Aplica a | Personas Jurídicas y Personas Físicas | | Aplica a | Personas Jurídicas y Personas Físicas |
| Cuenta contable | 110401 — ITBIS adelantado en compras | | Cuenta contable | 11040101 — ITBIS adelantado en compras 18% |
| Formulario | IT-1 (plazo día 20) | | Formulario | IT-1 (plazo día 20) |
**Base legal:** Arts. 349-357 CT (Ley 11-92) — Crédito fiscal ITBIS | Decreto 293-11. **Base legal:** Arts. 349-357 CT (Ley 11-92) — Crédito fiscal ITBIS | Decreto 293-11.
@@ -156,7 +156,7 @@ Los exportadores (tasa cero) pueden solicitar devolución mediante formulario IT
| ID plantilla | `do_tax_itbis_16_compra` | | ID plantilla | `do_tax_itbis_16_compra` |
| Tasa | 16% | | Tasa | 16% |
| Estado | Tasa especial disponible | | Estado | Tasa especial disponible |
| Cuenta contable | 110401 — ITBIS adelantado en compras | | Cuenta contable | 11040102 — ITBIS adelantado en compras 16% |
**Base legal:** Art. 345 CT (Ley 11-92), modificado por Ley 253-12. **Base legal:** Art. 345 CT (Ley 11-92), modificado por Ley 253-12.
@@ -173,7 +173,7 @@ tasa especial distinta del 18% general. Ver nota en [ITBIS 16% Ventas](#itbis-16
| Tasa | 8% | | Tasa | 8% |
| Tipo de operación | Ventas — tasa reducida (débito fiscal) | | Tipo de operación | Ventas — tasa reducida (débito fiscal) |
| Aplica a | Personas Jurídicas y Personas Físicas | | Aplica a | Personas Jurídicas y Personas Físicas |
| Cuenta contable | 210201 — ITBIS cobrado por pagar | | Cuenta contable | 21020104 — ITBIS cobrado por pagar 8% |
| Formulario | IT-1 (plazo día 20) | | Formulario | IT-1 (plazo día 20) |
**Base legal:** Art. 345 CT (Ley 11-92) | Ley 253-12 | Decreto 293-11 | NG 12-22. **Base legal:** Art. 345 CT (Ley 11-92) | Ley 253-12 | Decreto 293-11 | NG 12-22.
@@ -201,13 +201,13 @@ reducida (8%) o exento (0%). Una clasificación incorrecta puede generar ajustes
| Tasa | 8% | | Tasa | 8% |
| Tipo de operación | Compras — tasa reducida (crédito fiscal) | | Tipo de operación | Compras — tasa reducida (crédito fiscal) |
| Aplica a | Personas Jurídicas y Personas Físicas | | Aplica a | Personas Jurídicas y Personas Físicas |
| Cuenta contable | 110401 — ITBIS adelantado en compras | | Cuenta contable | 11040104 — ITBIS adelantado en compras 8% |
| Formulario | IT-1 (plazo día 20) | | Formulario | IT-1 (plazo día 20) |
**Base legal:** Arts. 349-357 CT (Ley 11-92) | Ley 253-12 | Decreto 293-11. **Base legal:** Arts. 349-357 CT (Ley 11-92) | Ley 253-12 | Decreto 293-11.
El ITBIS al 8% pagado en compras de bienes con tasa reducida genera crédito fiscal acreditable El ITBIS al 8% pagado en compras de bienes con tasa reducida genera crédito fiscal acreditable
contra el débito ITBIS de ventas. Se registra en la misma cuenta 110401 junto con el crédito al 18%. contra el débito ITBIS de ventas. Se registra en la subcuenta 11040104 para mantener separación por tasa y permitir reportes fiscales consistentes.
Aplican las mismas reglas de proporcionalidad del Art. 352 CT en caso de operaciones mixtas. Aplican las mismas reglas de proporcionalidad del Art. 352 CT en caso de operaciones mixtas.
--- ---
@@ -262,7 +262,7 @@ derecho a crédito fiscal (ver sección siguiente).
| Tasa | 0% | | Tasa | 0% |
| Tipo de operación | Ventas exportación / Zona Franca | | Tipo de operación | Ventas exportación / Zona Franca |
| Aplica a | Personas Jurídicas y Personas Físicas | | Aplica a | Personas Jurídicas y Personas Físicas |
| Cuenta contable | 210201 — ITBIS cobrado por pagar (registra $0) | | Cuenta contable | 21020105 — ITBIS tasa cero ventas y exportaciones |
| NCF aplicable | B14 / e-CF E44 (Zonas Francas) | B16 / e-CF E46 (Exportaciones) | | NCF aplicable | B14 / e-CF E44 (Zonas Francas) | B16 / e-CF E46 (Exportaciones) |
**Base legal:** Art. 342 CT (Ley 11-92) | Ley 557-05 | Ley 8-90 (Zonas Francas) | NG 05-19 DGII. **Base legal:** Art. 342 CT (Ley 11-92) | Ley 557-05 | Ley 8-90 (Zonas Francas) | NG 05-19 DGII.
@@ -1006,7 +1006,7 @@ servicio de telecom.
| ID plantilla | `do_tax_propina_10` | | ID plantilla | `do_tax_propina_10` |
| Tasa | 10% | | Tasa | 10% |
| Aplica a | Restaurantes, bares, hoteles, servicios de catering | | Aplica a | Restaurantes, bares, hoteles, servicios de catering |
| Cuenta contable | 210205 — Otros impuestos por pagar | | Cuenta contable | 21021901 — impuesto 0.15% histórico; 21021902 — impuesto 0.20% vigente |
**Base legal:** Ley 4-11 y Resoluciones del Ministerio de Trabajo. **Base legal:** Ley 4-11 y Resoluciones del Ministerio de Trabajo.
@@ -1043,12 +1043,12 @@ debe incluirse en la base del ITBIS. Consultar con asesor fiscal.
| ID plantilla histórica | `do_tax_cheques_015` | | ID plantilla histórica | `do_tax_cheques_015` |
| ID plantilla vigente/alternativa | `do_tax_cheques_020` | | ID plantilla vigente/alternativa | `do_tax_cheques_020` |
| Tasa histórica | 0.15% (1.5 por mil) | | Tasa histórica | 0.15% (1.5 por mil) |
| Tasa vigente/alternativa | 0.20% (2.0 por mil) | | Tasa vigente | 0.20% (2.0 por mil) desde 2026-07-03 |
| Quién lo paga | El titular de la cuenta bancaria (empresa o persona) | | Quién lo paga | El titular de la cuenta bancaria (empresa o persona) |
| Quién lo recauda | El banco, de forma automática | | Quién lo recauda | El banco, de forma automática |
| Cuenta contable | 210205 — Otros impuestos por pagar | | Cuenta contable | 21021901 — impuesto 0.15% histórico; 21021902 — impuesto 0.20% vigente |
**Base legal:** Art. 382-D CT (Ley 11-92, modificado por Ley 288-04). **Base legal:** Art. 382-D CT (Ley 11-92, modificado por Ley 288-04); Ley 30-26 Art. 40 y aviso DGII de implementación para la tasa 0.20% desde 2026-07-03.
**Descripción:** Impuesto que el banco descuenta automáticamente sobre: **Descripción:** Impuesto que el banco descuenta automáticamente sobre:
- Cada cheque emitido - Cada cheque emitido
+3 -1
View File
@@ -10,7 +10,9 @@ Cobertura funcional
* Catálogo de impuestos y códigos fiscales. * Catálogo de impuestos y códigos fiscales.
* Reglas fiscales de venta, compra, tasas especiales y retenciones para escenarios dominicanos comunes. * Reglas fiscales de venta, compra, tasas especiales y retenciones para escenarios dominicanos comunes.
* Campo ``tax_kind`` para clasificar ITBIS, retenciones, ISC, CDT, propina legal y otros impuestos. * Campo ``tax_kind`` para clasificar ITBIS, retenciones, ISC, CDT, propina legal y otros impuestos.
* Campos ``tax_fiscal_type`` y ``tax_application`` para clasificar fiscalmente cada impuesto con mayor granularidad sin romper integraciones que usan ``tax_kind``. * Campos ``tax_fiscal_type``, ``tax_application`` y metadata DGII para clasificar fiscalmente cada impuesto con mayor granularidad sin romper integraciones que usan ``tax_kind``.
* Vigencias fiscales nativas en plantillas de impuesto y reglas, incluyendo impuesto de cheques/transferencias 0.15% histórico y 0.20% vigente desde 2026-07-03.
* Las casillas y formularios DGII no se duplican aquí: ``account_do`` define cuentas/impuestos/reglas base y ``dgii_reports`` consume esa base para 606, 607, IT-1, IR-17, IR-2, ACT, ISC y formularios relacionados.
* Cuentas fiscales auxiliares para retenciones ITBIS, retenciones ISR, adquirencias, pagos al exterior, ISC, CDT e impuestos especiales. * Cuentas fiscales auxiliares para retenciones ITBIS, retenciones ISR, adquirencias, pagos al exterior, ISC, CDT e impuestos especiales.
* Documentación técnica en ``doc/index.rst`` y escenario funcional en ``tests/scenario_account_do.rst``. * Documentación técnica en ``doc/index.rst`` y escenario funcional en ``tests/scenario_account_do.rst``.
+72
View File
@@ -34,6 +34,78 @@ msgctxt "field:account.tax.template,tax_application:"
msgid "Tax Application" msgid "Tax Application"
msgstr "Aplicación del impuesto" msgstr "Aplicación del impuesto"
msgctxt "field:account.tax,dgii_fiscal_status:"
msgid "DGII Fiscal Status"
msgstr "Estado fiscal DGII"
msgctxt "field:account.tax.template,dgii_fiscal_status:"
msgid "DGII Fiscal Status"
msgstr "Estado fiscal DGII"
msgctxt "field:account.tax,dgii_form_hint:"
msgid "DGII Form Hint"
msgstr "Formulario DGII sugerido"
msgctxt "field:account.tax.template,dgii_form_hint:"
msgid "DGII Form Hint"
msgstr "Formulario DGII sugerido"
msgctxt "field:account.tax,dgii_legal_article:"
msgid "DGII Legal Article"
msgstr "Artículo/base legal DGII"
msgctxt "field:account.tax.template,dgii_legal_article:"
msgid "DGII Legal Article"
msgstr "Artículo/base legal DGII"
msgctxt "field:account.tax,dgii_legal_reference:"
msgid "DGII Legal Reference"
msgstr "Referencia legal DGII"
msgctxt "field:account.tax.template,dgii_legal_reference:"
msgid "DGII Legal Reference"
msgstr "Referencia legal DGII"
msgctxt "selection:account.tax,dgii_fiscal_status:current"
msgid "Vigente"
msgstr "Vigente"
msgctxt "selection:account.tax,dgii_fiscal_status:deprecated"
msgid "Derogado"
msgstr "Derogado"
msgctxt "selection:account.tax,dgii_fiscal_status:future"
msgid "Futuro"
msgstr "Futuro"
msgctxt "selection:account.tax,dgii_fiscal_status:historical"
msgid "Histórico"
msgstr "Histórico"
msgctxt "selection:account.tax,dgii_fiscal_status:special"
msgid "Especial"
msgstr "Especial"
msgctxt "selection:account.tax.template,dgii_fiscal_status:current"
msgid "Vigente"
msgstr "Vigente"
msgctxt "selection:account.tax.template,dgii_fiscal_status:deprecated"
msgid "Derogado"
msgstr "Derogado"
msgctxt "selection:account.tax.template,dgii_fiscal_status:future"
msgid "Futuro"
msgstr "Futuro"
msgctxt "selection:account.tax.template,dgii_fiscal_status:historical"
msgid "Histórico"
msgstr "Histórico"
msgctxt "selection:account.tax.template,dgii_fiscal_status:special"
msgid "Especial"
msgstr "Especial"
msgctxt "selection:account.tax,tax_application:" msgctxt "selection:account.tax,tax_application:"
msgid "Annual Declaration" msgid "Annual Declaration"
msgstr "Declaración anual" msgstr "Declaración anual"
+72
View File
@@ -26,6 +26,78 @@ msgctxt "field:account.tax.template,tax_application:"
msgid "Tax Application" msgid "Tax Application"
msgstr "Aplicación del impuesto" msgstr "Aplicación del impuesto"
msgctxt "field:account.tax,dgii_fiscal_status:"
msgid "DGII Fiscal Status"
msgstr "Estado fiscal DGII"
msgctxt "field:account.tax.template,dgii_fiscal_status:"
msgid "DGII Fiscal Status"
msgstr "Estado fiscal DGII"
msgctxt "field:account.tax,dgii_form_hint:"
msgid "DGII Form Hint"
msgstr "Formulario DGII sugerido"
msgctxt "field:account.tax.template,dgii_form_hint:"
msgid "DGII Form Hint"
msgstr "Formulario DGII sugerido"
msgctxt "field:account.tax,dgii_legal_article:"
msgid "DGII Legal Article"
msgstr "Artículo/base legal DGII"
msgctxt "field:account.tax.template,dgii_legal_article:"
msgid "DGII Legal Article"
msgstr "Artículo/base legal DGII"
msgctxt "field:account.tax,dgii_legal_reference:"
msgid "DGII Legal Reference"
msgstr "Referencia legal DGII"
msgctxt "field:account.tax.template,dgii_legal_reference:"
msgid "DGII Legal Reference"
msgstr "Referencia legal DGII"
msgctxt "selection:account.tax,dgii_fiscal_status:current"
msgid "Vigente"
msgstr "Vigente"
msgctxt "selection:account.tax,dgii_fiscal_status:deprecated"
msgid "Derogado"
msgstr "Derogado"
msgctxt "selection:account.tax,dgii_fiscal_status:future"
msgid "Futuro"
msgstr "Futuro"
msgctxt "selection:account.tax,dgii_fiscal_status:historical"
msgid "Histórico"
msgstr "Histórico"
msgctxt "selection:account.tax,dgii_fiscal_status:special"
msgid "Especial"
msgstr "Especial"
msgctxt "selection:account.tax.template,dgii_fiscal_status:current"
msgid "Vigente"
msgstr "Vigente"
msgctxt "selection:account.tax.template,dgii_fiscal_status:deprecated"
msgid "Derogado"
msgstr "Derogado"
msgctxt "selection:account.tax.template,dgii_fiscal_status:future"
msgid "Futuro"
msgstr "Futuro"
msgctxt "selection:account.tax.template,dgii_fiscal_status:historical"
msgid "Histórico"
msgstr "Histórico"
msgctxt "selection:account.tax.template,dgii_fiscal_status:special"
msgid "Especial"
msgstr "Especial"
msgctxt "selection:account.tax,tax_application:" msgctxt "selection:account.tax,tax_application:"
msgid "Annual Declaration" msgid "Annual Declaration"
msgstr "Declaración anual" msgstr "Declaración anual"
+23 -1
View File
@@ -84,6 +84,15 @@ TAX_APPLICATION = [
('asset_transfer', 'Transferencia de activos'), ('asset_transfer', 'Transferencia de activos'),
] ]
DGII_FISCAL_STATUS = [
('', ''),
('current', 'Vigente'),
('special', 'Especial'),
('historical', 'Histórico'),
('future', 'Futuro'),
('deprecated', 'Derogado'),
]
MODEL_DATA_RENAMES = { MODEL_DATA_RENAMES = {
'do_tax_group_otros': 'do_tax_group_others', 'do_tax_group_otros': 'do_tax_group_others',
'do_tc_otros': 'do_tc_others', 'do_tc_otros': 'do_tc_others',
@@ -122,6 +131,11 @@ class TaxTemplate(metaclass=PoolMeta):
TAX_FISCAL_TYPE, 'Fiscal Tax Type', sort=False) TAX_FISCAL_TYPE, 'Fiscal Tax Type', sort=False)
tax_application = fields.Selection( tax_application = fields.Selection(
TAX_APPLICATION, 'Tax Application', sort=False) TAX_APPLICATION, 'Tax Application', sort=False)
dgii_legal_reference = fields.Char('DGII Legal Reference')
dgii_legal_article = fields.Char('DGII Legal Article')
dgii_form_hint = fields.Char('DGII Form Hint')
dgii_fiscal_status = fields.Selection(
DGII_FISCAL_STATUS, 'DGII Fiscal Status', sort=False)
@classmethod @classmethod
def __register__(cls, module_name): def __register__(cls, module_name):
@@ -137,7 +151,10 @@ class TaxTemplate(metaclass=PoolMeta):
def _get_tax_value(self, tax=None): def _get_tax_value(self, tax=None):
values = super()._get_tax_value(tax=tax) values = super()._get_tax_value(tax=tax)
for field in ['tax_kind', 'tax_fiscal_type', 'tax_application']: for field in [
'tax_kind', 'tax_fiscal_type', 'tax_application',
'dgii_legal_reference', 'dgii_legal_article',
'dgii_form_hint', 'dgii_fiscal_status']:
if not tax or getattr(tax, field) != getattr(self, field): if not tax or getattr(tax, field) != getattr(self, field):
values[field] = getattr(self, field) values[field] = getattr(self, field)
return values return values
@@ -151,6 +168,11 @@ class Tax(metaclass=PoolMeta):
TAX_FISCAL_TYPE, 'Fiscal Tax Type', sort=False) TAX_FISCAL_TYPE, 'Fiscal Tax Type', sort=False)
tax_application = fields.Selection( tax_application = fields.Selection(
TAX_APPLICATION, 'Tax Application', sort=False) TAX_APPLICATION, 'Tax Application', sort=False)
dgii_legal_reference = fields.Char('DGII Legal Reference')
dgii_legal_article = fields.Char('DGII Legal Article')
dgii_form_hint = fields.Char('DGII Form Hint')
dgii_fiscal_status = fields.Selection(
DGII_FISCAL_STATUS, 'DGII Fiscal Status', sort=False)
@classmethod @classmethod
def __register__(cls, module_name): def __register__(cls, module_name):
+495 -336
View File
File diff suppressed because it is too large Load Diff
+22
View File
@@ -283,6 +283,28 @@
<field name="sequence" eval="20"/> <field name="sequence" eval="20"/>
</record> </record>
<record id="do_tax_rule_bank_check_transfer" model="account.tax.rule.template">
<field name="name">Regla Bancaria Cheques / Transferencias Electrónicas (RD)</field>
<field name="kind">both</field>
<field name="account" ref="do_account_root"/>
</record>
<record id="do_trline_bank_check_transfer_015" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_bank_check_transfer"/>
<field name="group" ref="do_tax_group_others"/>
<field name="origin_tax" ref="do_tax_cheques_015"/>
<field name="tax" ref="do_tax_cheques_015"/>
<field name="end_date" eval="datetime.date(2026, 7, 2)"/>
<field name="sequence" eval="10"/>
</record>
<record id="do_trline_bank_check_transfer_020" model="account.tax.rule.line.template">
<field name="rule" ref="do_tax_rule_bank_check_transfer"/>
<field name="group" ref="do_tax_group_others"/>
<field name="origin_tax" ref="do_tax_cheques_015"/>
<field name="tax" ref="do_tax_cheques_020"/>
<field name="start_date" eval="datetime.date(2026, 7, 3)"/>
<field name="sequence" eval="20"/>
</record>
<record id="do_tax_rule_supplier_informal_services" model="account.tax.rule.template"> <record id="do_tax_rule_supplier_informal_services" model="account.tax.rule.template">
<field name="name">Regla Proveedor Informal Servicios (RD)</field> <field name="name">Regla Proveedor Informal Servicios (RD)</field>
<field name="kind">purchase</field> <field name="kind">purchase</field>
+86 -1
View File
@@ -1,11 +1,12 @@
import unittest import unittest
import datetime
from collections import Counter from collections import Counter
from decimal import Decimal from decimal import Decimal
from pathlib import Path from pathlib import Path
from xml.etree import ElementTree as ET from xml.etree import ElementTree as ET
from trytond.modules.account_do.tax import ( from trytond.modules.account_do.tax import (
TAX_APPLICATION, TAX_FISCAL_TYPE, TAX_KIND) DGII_FISCAL_STATUS, TAX_APPLICATION, TAX_FISCAL_TYPE, TAX_KIND)
from trytond.pool import Pool from trytond.pool import Pool
from trytond.tests.test_tryton import ModuleTestCase, with_transaction from trytond.tests.test_tryton import ModuleTestCase, with_transaction
from trytond.transaction import Transaction from trytond.transaction import Transaction
@@ -151,6 +152,34 @@ class AccountDoTestCase(ModuleTestCase):
('tax_fiscal_type', '=', 'itbis_withholding_75_informal'), ('tax_fiscal_type', '=', 'itbis_withholding_75_informal'),
('rate', '=', Decimal('-0.135')), ('rate', '=', Decimal('-0.135')),
], limit=1)) ], limit=1))
check_015, = Tax.search([
('company', '=', company.id),
('description', '=', 'Impuesto Cheques y Transferencias 0.15%'),
], limit=1)
check_020, = Tax.search([
('company', '=', company.id),
('description', '=', 'Impuesto Cheques y Transferencias 0.20%'),
], limit=1)
bank_rule, = TaxRule.search([
('company', '=', company.id),
('name', '=', (
'Regla Bancaria Cheques / Transferencias '
'Electrónicas (RD)')),
], limit=1)
self.assertEqual(check_015.end_date, datetime.date(2026, 7, 2))
self.assertEqual(check_015.dgii_fiscal_status, 'historical')
self.assertEqual(check_020.start_date, datetime.date(2026, 7, 3))
self.assertEqual(check_020.dgii_fiscal_status, 'current')
self.assertEqual(
bank_rule.apply(check_015, {
'date': datetime.date(2026, 7, 2),
}),
[check_015.id])
self.assertEqual(
bank_rule.apply(check_015, {
'date': datetime.date(2026, 7, 3),
}),
[check_020.id])
chart.properties.company = company chart.properties.company = company
chart.properties.account_receivable = receivable chart.properties.account_receivable = receivable
@@ -248,6 +277,15 @@ class AccountDoUnitTestCase(unittest.TestCase):
self.assertFalse([ self.assertFalse([
record_id for record_id, values in taxes.items() record_id for record_id, values in taxes.items()
if not values.get('tax_application')]) if not values.get('tax_application')])
for field_name in [
'dgii_legal_reference',
'dgii_legal_article',
'dgii_form_hint',
'dgii_fiscal_status',
]:
self.assertFalse([
record_id for record_id, values in taxes.items()
if not values.get(field_name)])
self.assertEqual( self.assertEqual(
taxes['do_tax_itbis_18_venta']['invoice_account'], taxes['do_tax_itbis_18_venta']['invoice_account'],
'do_account_21020101') 'do_account_21020101')
@@ -354,6 +392,18 @@ class AccountDoUnitTestCase(unittest.TestCase):
'isc_fossil_fuel_16') 'isc_fossil_fuel_16')
self.assertEqual( self.assertEqual(
taxes['do_tax_cheques_020']['tax_kind'], 'others') taxes['do_tax_cheques_020']['tax_kind'], 'others')
self.assertEqual(
taxes['do_tax_cheques_015']['end_date'],
'datetime.date(2026, 7, 2)')
self.assertEqual(
taxes['do_tax_cheques_015']['dgii_fiscal_status'],
'historical')
self.assertEqual(
taxes['do_tax_cheques_020']['start_date'],
'datetime.date(2026, 7, 3)')
self.assertEqual(
taxes['do_tax_cheques_020']['dgii_fiscal_status'],
'current')
self.assertEqual( self.assertEqual(
taxes['do_tax_cheques_020']['invoice_account'], taxes['do_tax_cheques_020']['invoice_account'],
'do_account_21021902') 'do_account_21021902')
@@ -416,6 +466,39 @@ class AccountDoUnitTestCase(unittest.TestCase):
self.assertEqual(lines['do_tcl_isc_comb_inv']['operator'], '+') self.assertEqual(lines['do_tcl_isc_comb_inv']['operator'], '+')
self.assertEqual(lines['do_tcl_prop_inv']['code'], 'do_tc_others_tip') self.assertEqual(lines['do_tcl_prop_inv']['code'], 'do_tc_others_tip')
def test_tax_rule_templates_include_date_sensitive_bank_tax(self):
rules = {
record_id: values
for _, record_id, model, values in _iter_xml_records(
'tax_rule_do.xml')
if model == 'account.tax.rule.template'
}
lines = {
record_id: values
for _, record_id, model, values in _iter_xml_records(
'tax_rule_do.xml')
if model == 'account.tax.rule.line.template'
}
self.assertIn('do_tax_rule_bank_check_transfer', rules)
self.assertEqual(
lines['do_trline_bank_check_transfer_015']['origin_tax'],
'do_tax_cheques_015')
self.assertEqual(
lines['do_trline_bank_check_transfer_015']['tax'],
'do_tax_cheques_015')
self.assertEqual(
lines['do_trline_bank_check_transfer_015']['end_date'],
'datetime.date(2026, 7, 2)')
self.assertEqual(
lines['do_trline_bank_check_transfer_020']['origin_tax'],
'do_tax_cheques_015')
self.assertEqual(
lines['do_trline_bank_check_transfer_020']['tax'],
'do_tax_cheques_020')
self.assertEqual(
lines['do_trline_bank_check_transfer_020']['start_date'],
'datetime.date(2026, 7, 3)')
def test_tax_kind_contains_dominican_tax_categories(self): def test_tax_kind_contains_dominican_tax_categories(self):
codes = {code for code, _ in TAX_KIND} codes = {code for code, _ in TAX_KIND}
self.assertEqual(codes, { self.assertEqual(codes, {
@@ -437,8 +520,10 @@ class AccountDoUnitTestCase(unittest.TestCase):
def test_fiscal_classification_codes_are_unique(self): def test_fiscal_classification_codes_are_unique(self):
fiscal_codes = [code for code, _ in TAX_FISCAL_TYPE] fiscal_codes = [code for code, _ in TAX_FISCAL_TYPE]
application_codes = [code for code, _ in TAX_APPLICATION] application_codes = [code for code, _ in TAX_APPLICATION]
status_codes = [code for code, _ in DGII_FISCAL_STATUS]
self.assertEqual(len(fiscal_codes), len(set(fiscal_codes))) self.assertEqual(len(fiscal_codes), len(set(fiscal_codes)))
self.assertEqual(len(application_codes), len(set(application_codes))) self.assertEqual(len(application_codes), len(set(application_codes)))
self.assertEqual(len(status_codes), len(set(status_codes)))
del ModuleTestCase del ModuleTestCase
+8
View File
@@ -7,5 +7,13 @@
<field name="tax_fiscal_type"/> <field name="tax_fiscal_type"/>
<label name="tax_application"/> <label name="tax_application"/>
<field name="tax_application"/> <field name="tax_application"/>
<label name="dgii_fiscal_status"/>
<field name="dgii_fiscal_status"/>
<label name="dgii_form_hint"/>
<field name="dgii_form_hint"/>
<label name="dgii_legal_reference"/>
<field name="dgii_legal_reference"/>
<label name="dgii_legal_article"/>
<field name="dgii_legal_article"/>
</xpath> </xpath>
</data> </data>