Complete Dominican tax localization metadata
This commit is contained in:
+12
-12
@@ -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
@@ -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``.
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user