Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29e236de97 | ||
|
|
8e0d90afae | ||
|
|
c4765f1469 | ||
|
|
c07f98508f | ||
|
|
088e895151 | ||
|
|
100502f7cc | ||
|
|
e188a188be | ||
|
|
3823f4ae89 | ||
|
|
4f16961758 | ||
|
|
3fab54339d | ||
|
|
03d30589cb | ||
|
|
f3d942a6e4 | ||
|
|
609b312611 | ||
|
|
1583dd3387 | ||
|
|
e646947a6e | ||
|
|
6f12c82ce1 | ||
|
|
59f8dc0ede |
@@ -0,0 +1,190 @@
|
||||
name: Publish Package
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "**"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Detect package branch
|
||||
run: |
|
||||
python - <<'PY'
|
||||
import os
|
||||
import re
|
||||
|
||||
branch = (
|
||||
os.environ.get('GITHUB_REF_NAME')
|
||||
or os.environ.get('GITHUB_HEAD_REF')
|
||||
or '')
|
||||
publish = bool(re.fullmatch(r'\d+\.\d+', branch))
|
||||
with open(os.environ['GITHUB_ENV'], 'a') as env:
|
||||
env.write(f'PUBLISH_PACKAGE={"true" if publish else "false"}\n')
|
||||
if publish:
|
||||
env.write(f'PACKAGE_SERIES={branch}\n')
|
||||
if publish:
|
||||
print(f'Publishing package series: {branch}')
|
||||
else:
|
||||
print(f'Skipping package publish for branch: {branch}')
|
||||
PY
|
||||
|
||||
- name: Set up Python
|
||||
if: env.PUBLISH_PACKAGE == 'true'
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.11"
|
||||
|
||||
- name: Install build tools
|
||||
if: env.PUBLISH_PACKAGE == 'true'
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install 'build>=1.2' 'twine>=7' 'packaging>=26'
|
||||
|
||||
- name: Check publishing credentials
|
||||
if: env.PUBLISH_PACKAGE == 'true'
|
||||
env:
|
||||
TWINE_USERNAME: ${{ secrets.REGISTRY_USER }}
|
||||
TWINE_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
||||
run: |
|
||||
test -n "$TWINE_USERNAME" || { echo "Missing REGISTRY_USER secret"; exit 1; }
|
||||
test -n "$TWINE_PASSWORD" || { echo "Missing REGISTRY_PASSWORD secret"; exit 1; }
|
||||
|
||||
- name: Set CI package version
|
||||
if: env.PUBLISH_PACKAGE == 'true'
|
||||
env:
|
||||
TWINE_USERNAME: ${{ secrets.REGISTRY_USER }}
|
||||
TWINE_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
||||
run: |
|
||||
python - <<'PY'
|
||||
from pathlib import Path
|
||||
from urllib.error import HTTPError
|
||||
from urllib.parse import urlencode
|
||||
from urllib.request import Request, urlopen
|
||||
import base64
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
|
||||
OWNER = 'tryton-do'
|
||||
PACKAGE_TYPE = 'pypi'
|
||||
API_ROOT = 'https://code.unpaismejor.org.do/api/v1'
|
||||
|
||||
def normalize(name):
|
||||
return re.sub(r'[-_.]+', '-', name).lower()
|
||||
|
||||
cfg_path = Path('tryton.cfg')
|
||||
cfg_text = cfg_path.read_text()
|
||||
cfg_match = re.search(r'(?m)^version=(.+)$', cfg_text)
|
||||
if not cfg_match:
|
||||
raise SystemExit('tryton.cfg has no version entry')
|
||||
|
||||
series = os.environ['PACKAGE_SERIES']
|
||||
major, minor = map(int, series.split('.'))
|
||||
|
||||
package_name = 'unpaismejor_account_do'
|
||||
normalized_name = normalize(package_name)
|
||||
|
||||
username = os.environ['TWINE_USERNAME']
|
||||
password = os.environ['TWINE_PASSWORD']
|
||||
token = base64.b64encode(
|
||||
f'{username}:{password}'.encode()).decode()
|
||||
|
||||
def request_json(path, params=None, missing_ok=False):
|
||||
url = f'{API_ROOT}{path}'
|
||||
if params:
|
||||
url = f'{url}?{urlencode(params)}'
|
||||
request = Request(url, headers={
|
||||
'Accept': 'application/json',
|
||||
'Authorization': f'Basic {token}',
|
||||
})
|
||||
try:
|
||||
with urlopen(request, timeout=30) as response:
|
||||
return json.load(response)
|
||||
except HTTPError as error:
|
||||
if missing_ok and error.code == 404:
|
||||
return []
|
||||
raise
|
||||
|
||||
def collect_versions(payload, package_specific=False):
|
||||
versions = []
|
||||
if isinstance(payload, list):
|
||||
for item in payload:
|
||||
versions.extend(collect_versions(item, package_specific))
|
||||
elif isinstance(payload, dict):
|
||||
item_name = payload.get('name') or payload.get('package_name')
|
||||
item_type = payload.get('type') or payload.get('package_type')
|
||||
item_version = payload.get('version')
|
||||
if item_version and (
|
||||
package_specific
|
||||
or (item_type == PACKAGE_TYPE
|
||||
and normalize(item_name or '') == normalized_name)):
|
||||
versions.append(str(item_version))
|
||||
for value in payload.values():
|
||||
if isinstance(value, (list, dict)):
|
||||
versions.extend(collect_versions(value, package_specific))
|
||||
return versions
|
||||
|
||||
versions = []
|
||||
for page in range(1, 11):
|
||||
payload = request_json(
|
||||
f'/packages/{OWNER}/{PACKAGE_TYPE}/{package_name}',
|
||||
{'page': page, 'limit': 100},
|
||||
missing_ok=True)
|
||||
page_versions = collect_versions(payload, package_specific=True)
|
||||
versions.extend(page_versions)
|
||||
if not page_versions:
|
||||
break
|
||||
|
||||
for page in range(1, 11):
|
||||
payload = request_json(
|
||||
f'/packages/{OWNER}',
|
||||
{'page': page, 'limit': 100, 'type': PACKAGE_TYPE,
|
||||
'q': package_name})
|
||||
page_versions = collect_versions(payload)
|
||||
versions.extend(page_versions)
|
||||
if not page_versions:
|
||||
break
|
||||
|
||||
patch_pattern = re.compile(rf'^{major}\.{minor}\.(\d+)$')
|
||||
patches = []
|
||||
for version in set(versions):
|
||||
match = patch_pattern.fullmatch(version)
|
||||
if match:
|
||||
patches.append(int(match.group(1)))
|
||||
|
||||
next_patch = max(patches) + 1 if patches else 0
|
||||
ci_version = f'{major}.{minor}.{next_patch}'
|
||||
cfg_text = re.sub(
|
||||
r'(?m)^version=.+$', f'version={ci_version}', cfg_text)
|
||||
cfg_path.write_text(cfg_text)
|
||||
print(f'Package name: {package_name}')
|
||||
print(f'Published versions found: {sorted(set(versions))}')
|
||||
print(f'Package version: {ci_version}')
|
||||
PY
|
||||
|
||||
- name: Build package
|
||||
if: env.PUBLISH_PACKAGE == 'true'
|
||||
run: |
|
||||
python -m build
|
||||
|
||||
- name: Check package
|
||||
if: env.PUBLISH_PACKAGE == 'true'
|
||||
run: |
|
||||
python -m twine check dist/*
|
||||
|
||||
- name: Publish to Gitea PyPI registry
|
||||
if: env.PUBLISH_PACKAGE == 'true'
|
||||
env:
|
||||
TWINE_USERNAME: ${{ secrets.REGISTRY_USER }}
|
||||
TWINE_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
||||
run: |
|
||||
python -m twine upload \
|
||||
--repository-url https://code.unpaismejor.org.do/api/packages/tryton-do/pypi \
|
||||
dist/*
|
||||
@@ -1,6 +1,31 @@
|
||||
Version 8.0.5 - 2026-08-10
|
||||
--------------------------
|
||||
* Translate every field and selection introduced by the module into Spanish
|
||||
and Latin American Spanish.
|
||||
* Include translation catalogs in built distributions.
|
||||
|
||||
Version 8.0.4 - 2026-08-10
|
||||
--------------------------
|
||||
* Display the Dominican tax classification on tax and tax-template forms and
|
||||
lists.
|
||||
|
||||
Version 8.0.3 - 2026-08-10
|
||||
--------------------------
|
||||
* Restore the shared Dominican tax classification required by invoicing, NCF
|
||||
management and electronic fiscal documents.
|
||||
* Populate tax classifications for existing charts and language-scoped tax
|
||||
templates.
|
||||
|
||||
Version 8.0.2 - 2026-08-10
|
||||
--------------------------
|
||||
* Structure income-statement types under current-period profit or loss, with
|
||||
operating and non-operating sections compatible with Tryton core reports.
|
||||
|
||||
Version 8.0.1 - 2026-08-09
|
||||
--------------------------
|
||||
* Initial release.
|
||||
* Include project metadata and review documentation in the wheel so the
|
||||
installed package and its test suite are reproducible.
|
||||
* Document tax requirements and official source provenance.
|
||||
* Correct asset, real-estate transfer, legal-tip, vehicle and bovine tax data.
|
||||
* Remove unsupported or unsafe ITBIS templates and their dependent records.
|
||||
@@ -8,3 +33,11 @@ Version 8.0.1 - 2026-08-09
|
||||
(``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.
|
||||
* Apply the article 309 withholding rates introduced by Law 30-26 from
|
||||
1 July 2026 while preserving the preceding rates for historical entries.
|
||||
* Split tax rules whose duplicate match patterns made later alternatives
|
||||
unreachable.
|
||||
* Remove unused tax-group and tax-code records from the initial data set.
|
||||
* Translate every user-visible legal notice in the English tax catalog.
|
||||
|
||||
@@ -1 +1 @@
|
||||
Copyright (C) 2026 Solutema
|
||||
Copyright (C) 2026 Fundación Un País Mejor
|
||||
|
||||
+19
@@ -1,2 +1,21 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.pool import Pool
|
||||
|
||||
from . import account, invoice, ir, tax
|
||||
|
||||
__all__ = ['register']
|
||||
|
||||
|
||||
def register():
|
||||
Pool.register(
|
||||
ir.ModelData,
|
||||
invoice.Invoice,
|
||||
invoice.InvoiceLine,
|
||||
tax.TaxTemplate,
|
||||
tax.Tax,
|
||||
module='account_do', type_='model')
|
||||
Pool.register(
|
||||
account.CreateChart,
|
||||
module='account_do', type_='wizard')
|
||||
|
||||
+10
-8
@@ -3,6 +3,15 @@
|
||||
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
|
||||
CHART_DEFAULT_ACCOUNTS = {
|
||||
'account_do.do_account_root_en': (
|
||||
'account_do.do_account_110201_en',
|
||||
'account_do.do_account_210101_en'),
|
||||
'account_do.do_account_root_es_419': (
|
||||
'account_do.do_account_110201_es_419',
|
||||
'account_do.do_account_210101_es_419'),
|
||||
}
|
||||
|
||||
|
||||
class CreateChart(metaclass=PoolMeta):
|
||||
__name__ = 'account.create_chart'
|
||||
@@ -12,14 +21,7 @@ class CreateChart(metaclass=PoolMeta):
|
||||
ModelData = pool.get('ir.model.data')
|
||||
defaults = super().default_properties(fields)
|
||||
chart_defaults = {}
|
||||
for root, accounts in [
|
||||
('account_do.do_account_root_en', (
|
||||
'account_do.do_account_110201_en',
|
||||
'account_do.do_account_210101_en')),
|
||||
('account_do.do_account_root_es_419', (
|
||||
'account_do.do_account_110201_es_419',
|
||||
'account_do.do_account_210101_es_419')),
|
||||
]:
|
||||
for root, accounts in CHART_DEFAULT_ACCOUNTS.items():
|
||||
try:
|
||||
chart_defaults[ModelData.get_id(root)] = accounts
|
||||
except KeyError:
|
||||
|
||||
+88
-27
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- account_do: Tipos de cuenta y Plan de cuentas NIIF - República Dominicana -->
|
||||
<!-- account_do: Account types and IFRS chart of accounts - Dominican Republic -->
|
||||
<tryton>
|
||||
<data language="en">
|
||||
<!-- ===== Tipos de cuenta ===== -->
|
||||
<!-- ===== Account types ===== -->
|
||||
<record id="do_type_root_en" model="account.account.type.template">
|
||||
<field name="name">IFRS Chart of Accounts - Dominican Republic</field>
|
||||
<field name="sequence" eval="10"/>
|
||||
@@ -180,7 +180,7 @@
|
||||
<field name="statement">balance</field>
|
||||
</record>
|
||||
<record id="do_type_retained_earnings_en" model="account.account.type.template">
|
||||
<field name="name">Withheld Earnings</field>
|
||||
<field name="name">Retained Earnings</field>
|
||||
<field name="parent" ref="do_type_equity_en"/>
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="statement">balance</field>
|
||||
@@ -191,45 +191,70 @@
|
||||
<field name="sequence" eval="30"/>
|
||||
<field name="statement">balance</field>
|
||||
</record>
|
||||
<record id="do_type_profit_loss_en" model="account.account.type.template">
|
||||
<field name="name">Current Period Profit or Loss</field>
|
||||
<field name="parent" ref="do_type_equity_en"/>
|
||||
<field name="sequence" eval="40"/>
|
||||
<field name="statement">income</field>
|
||||
</record>
|
||||
<record id="do_type_operating_section_en" model="account.account.type.template">
|
||||
<field name="name">Operating profit or loss</field>
|
||||
<field name="parent" ref="do_type_profit_loss_en"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="statement">income</field>
|
||||
</record>
|
||||
<record id="do_type_revenue_en" model="account.account.type.template">
|
||||
<field name="name">Revenue</field>
|
||||
<field name="parent" ref="do_type_root_en"/>
|
||||
<field name="sequence" eval="40"/>
|
||||
<field name="parent" ref="do_type_operating_section_en"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="statement">income</field>
|
||||
<field name="revenue" eval="True"/>
|
||||
</record>
|
||||
<record id="do_type_other_income_en" model="account.account.type.template">
|
||||
<field name="name">Other Income and Gains</field>
|
||||
<field name="parent" ref="do_type_root_en"/>
|
||||
<field name="sequence" eval="50"/>
|
||||
<record id="do_type_expenses_en" model="account.account.type.template">
|
||||
<field name="name">Operating costs and expenses</field>
|
||||
<field name="parent" ref="do_type_operating_section_en"/>
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="statement">income</field>
|
||||
<field name="revenue" eval="True"/>
|
||||
<field name="expense" eval="True"/>
|
||||
</record>
|
||||
<record id="do_type_cogs_en" model="account.account.type.template">
|
||||
<field name="name">Cost of Sales and Services</field>
|
||||
<field name="parent" ref="do_type_root_en"/>
|
||||
<field name="sequence" eval="60"/>
|
||||
<field name="parent" ref="do_type_expenses_en"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="statement">income</field>
|
||||
<field name="expense" eval="True"/>
|
||||
</record>
|
||||
<record id="do_type_expense_en" model="account.account.type.template">
|
||||
<field name="name">Operational expenses</field>
|
||||
<field name="parent" ref="do_type_root_en"/>
|
||||
<field name="sequence" eval="70"/>
|
||||
<field name="parent" ref="do_type_expenses_en"/>
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="statement">income</field>
|
||||
<field name="expense" eval="True"/>
|
||||
</record>
|
||||
<record id="do_type_non_operating_section_en" model="account.account.type.template">
|
||||
<field name="name">Non-operating profit or loss</field>
|
||||
<field name="parent" ref="do_type_profit_loss_en"/>
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="statement">income</field>
|
||||
</record>
|
||||
<record id="do_type_other_income_en" model="account.account.type.template">
|
||||
<field name="name">Other Income and Gains</field>
|
||||
<field name="parent" ref="do_type_non_operating_section_en"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="statement">income</field>
|
||||
<field name="revenue" eval="True"/>
|
||||
</record>
|
||||
<record id="do_type_financial_expense_en" model="account.account.type.template">
|
||||
<field name="name">Financial expenses</field>
|
||||
<field name="parent" ref="do_type_root_en"/>
|
||||
<field name="sequence" eval="80"/>
|
||||
<field name="parent" ref="do_type_non_operating_section_en"/>
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="statement">income</field>
|
||||
<field name="expense" eval="True"/>
|
||||
</record>
|
||||
<record id="do_type_income_tax_en" model="account.account.type.template">
|
||||
<field name="name">Income Tax</field>
|
||||
<field name="parent" ref="do_type_root_en"/>
|
||||
<field name="sequence" eval="90"/>
|
||||
<field name="parent" ref="do_type_non_operating_section_en"/>
|
||||
<field name="sequence" eval="30"/>
|
||||
<field name="statement">income</field>
|
||||
<field name="expense" eval="True"/>
|
||||
</record>
|
||||
@@ -241,7 +266,7 @@
|
||||
</record>
|
||||
</data>
|
||||
<data language="en">
|
||||
<!-- ===== Cuenta raíz del plan ===== -->
|
||||
<!-- ===== Chart root account ===== -->
|
||||
<record id="do_account_root_en" model="account.account.template">
|
||||
<field name="name">IFRS Chart of Accounts - Dominican Republic</field>
|
||||
<field name="type" ref="do_type_root_en"/>
|
||||
@@ -249,7 +274,7 @@
|
||||
</record>
|
||||
</data>
|
||||
<data language="en" grouped="1">
|
||||
<!-- ===== Nivel 1: 7 cuentas ===== -->
|
||||
<!-- ===== Level 1: 7 accounts ===== -->
|
||||
<record id="do_account_1_en" model="account.account.template">
|
||||
<field name="code">1</field>
|
||||
<field name="name">ASSETS</field>
|
||||
@@ -294,7 +319,7 @@
|
||||
</record>
|
||||
</data>
|
||||
<data language="en" grouped="1">
|
||||
<!-- ===== Nivel 2: 12 cuentas ===== -->
|
||||
<!-- ===== Level 2: 12 accounts ===== -->
|
||||
<record id="do_account_11_en" model="account.account.template">
|
||||
<field name="code">11</field>
|
||||
<field name="name">Current Assets</field>
|
||||
@@ -369,7 +394,7 @@
|
||||
</record>
|
||||
</data>
|
||||
<data language="en" grouped="1">
|
||||
<!-- ===== Nivel 3: 89 cuentas ===== -->
|
||||
<!-- ===== Level 3: 89 accounts ===== -->
|
||||
<record id="do_account_1101_en" model="account.account.template">
|
||||
<field name="code">1101</field>
|
||||
<field name="name">Cash and Cash Equivalents</field>
|
||||
@@ -559,7 +584,7 @@
|
||||
</record>
|
||||
<record id="do_account_3104_en" model="account.account.template">
|
||||
<field name="code">3104</field>
|
||||
<field name="name">Withheld Earnings</field>
|
||||
<field name="name">Retained Earnings</field>
|
||||
<field name="parent" ref="do_account_31_en"/>
|
||||
<field name="type" ref="do_type_retained_earnings_en"/>
|
||||
</record>
|
||||
@@ -914,7 +939,7 @@
|
||||
</record>
|
||||
</data>
|
||||
<data language="en" grouped="1">
|
||||
<!-- ===== Nivel 4: 100 cuentas ===== -->
|
||||
<!-- ===== Level 4: 100 accounts ===== -->
|
||||
<record id="do_account_110101_en" model="account.account.template">
|
||||
<field name="code">110101</field>
|
||||
<field name="name">Cash on Hand</field>
|
||||
@@ -1639,7 +1664,7 @@
|
||||
<field name="parent" ref="do_account_3106_en"/>
|
||||
<field name="type" ref="do_type_oci_en"/>
|
||||
</record>
|
||||
<!-- Cuentas fiscales adicionales -->
|
||||
<!-- Additional tax accounts -->
|
||||
<record id="do_account_110406_en" model="account.account.template">
|
||||
<field name="code">110406</field>
|
||||
<field name="name">Recoverable ITBIS Withheld on Acquisitions</field>
|
||||
@@ -1716,13 +1741,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>
|
||||
@@ -1852,6 +1883,12 @@
|
||||
<field name="parent" ref="do_account_210213_en"/>
|
||||
<field name="type" ref="do_type_tax_payable_en"/>
|
||||
</record>
|
||||
<record id="do_account_21021303_en" model="account.account.template">
|
||||
<field name="code">21021303</field>
|
||||
<field name="name">ISR withholdings for individual services 15% payable</field>
|
||||
<field name="parent" ref="do_account_210213_en"/>
|
||||
<field name="type" ref="do_type_tax_payable_en"/>
|
||||
</record>
|
||||
</data>
|
||||
<data language="en" grouped="1">
|
||||
<record id="do_account_210214_en" model="account.account.template">
|
||||
@@ -1868,6 +1905,12 @@
|
||||
<field name="parent" ref="do_account_210214_en"/>
|
||||
<field name="type" ref="do_type_tax_payable_en"/>
|
||||
</record>
|
||||
<record id="do_account_21021402_en" model="account.account.template">
|
||||
<field name="code">21021402</field>
|
||||
<field name="name">ISR rental withholdings 15% payable</field>
|
||||
<field name="parent" ref="do_account_210214_en"/>
|
||||
<field name="type" ref="do_type_tax_payable_en"/>
|
||||
</record>
|
||||
</data>
|
||||
<data language="en" grouped="1">
|
||||
<record id="do_account_210215_en" model="account.account.template">
|
||||
@@ -2004,6 +2047,12 @@
|
||||
<field name="parent" ref="do_account_210203_en"/>
|
||||
<field name="type" ref="do_type_tax_payable_en"/>
|
||||
</record>
|
||||
<record id="do_account_21020302_en" model="account.account.template">
|
||||
<field name="code">21020302</field>
|
||||
<field name="name">ISR withholdings other income 15% payable</field>
|
||||
<field name="parent" ref="do_account_210203_en"/>
|
||||
<field name="type" ref="do_type_tax_payable_en"/>
|
||||
</record>
|
||||
</data>
|
||||
<data language="en" grouped="1">
|
||||
<record id="do_account_21021202_en" model="account.account.template">
|
||||
@@ -2044,6 +2093,18 @@
|
||||
<field name="parent" ref="do_account_210217_en"/>
|
||||
<field name="type" ref="do_type_tax_payable_en"/>
|
||||
</record>
|
||||
<record id="do_account_21021705_en" model="account.account.template">
|
||||
<field name="code">21021705</field>
|
||||
<field name="name">ISR withholding on betting prizes 15% payable</field>
|
||||
<field name="parent" ref="do_account_210217_en"/>
|
||||
<field name="type" ref="do_type_tax_payable_en"/>
|
||||
</record>
|
||||
<record id="do_account_21021706_en" model="account.account.template">
|
||||
<field name="code">21021706</field>
|
||||
<field name="name">ISR withholding on slot-machine prizes 15% payable</field>
|
||||
<field name="parent" ref="do_account_210217_en"/>
|
||||
<field name="type" ref="do_type_tax_payable_en"/>
|
||||
</record>
|
||||
</data>
|
||||
<data language="en" grouped="1">
|
||||
<record id="do_account_21020806_en" model="account.account.template">
|
||||
|
||||
+81
-20
@@ -189,45 +189,70 @@
|
||||
<field name="sequence" eval="30" />
|
||||
<field name="statement">balance</field>
|
||||
</record>
|
||||
<record id="do_type_profit_loss_es_419" model="account.account.type.template">
|
||||
<field name="name">Resultado del período actual</field>
|
||||
<field name="parent" ref="do_type_equity_es_419" />
|
||||
<field name="sequence" eval="40" />
|
||||
<field name="statement">income</field>
|
||||
</record>
|
||||
<record id="do_type_operating_section_es_419" model="account.account.type.template">
|
||||
<field name="name">Resultado de operación</field>
|
||||
<field name="parent" ref="do_type_profit_loss_es_419" />
|
||||
<field name="sequence" eval="10" />
|
||||
<field name="statement">income</field>
|
||||
</record>
|
||||
<record id="do_type_revenue_es_419" model="account.account.type.template">
|
||||
<field name="name">Ingresos de actividades ordinarias</field>
|
||||
<field name="parent" ref="do_type_root_es_419" />
|
||||
<field name="sequence" eval="40" />
|
||||
<field name="parent" ref="do_type_operating_section_es_419" />
|
||||
<field name="sequence" eval="10" />
|
||||
<field name="statement">income</field>
|
||||
<field name="revenue" eval="True" />
|
||||
</record>
|
||||
<record id="do_type_other_income_es_419" model="account.account.type.template">
|
||||
<field name="name">Otros ingresos y ganancias</field>
|
||||
<field name="parent" ref="do_type_root_es_419" />
|
||||
<field name="sequence" eval="50" />
|
||||
<record id="do_type_expenses_es_419" model="account.account.type.template">
|
||||
<field name="name">Costos y gastos de operación</field>
|
||||
<field name="parent" ref="do_type_operating_section_es_419" />
|
||||
<field name="sequence" eval="20" />
|
||||
<field name="statement">income</field>
|
||||
<field name="revenue" eval="True" />
|
||||
<field name="expense" eval="True" />
|
||||
</record>
|
||||
<record id="do_type_cogs_es_419" model="account.account.type.template">
|
||||
<field name="name">Costo de ventas y servicios</field>
|
||||
<field name="parent" ref="do_type_root_es_419" />
|
||||
<field name="sequence" eval="60" />
|
||||
<field name="parent" ref="do_type_expenses_es_419" />
|
||||
<field name="sequence" eval="10" />
|
||||
<field name="statement">income</field>
|
||||
<field name="expense" eval="True" />
|
||||
</record>
|
||||
<record id="do_type_expense_es_419" model="account.account.type.template">
|
||||
<field name="name">Gastos operacionales</field>
|
||||
<field name="parent" ref="do_type_root_es_419" />
|
||||
<field name="sequence" eval="70" />
|
||||
<field name="parent" ref="do_type_expenses_es_419" />
|
||||
<field name="sequence" eval="20" />
|
||||
<field name="statement">income</field>
|
||||
<field name="expense" eval="True" />
|
||||
</record>
|
||||
<record id="do_type_non_operating_section_es_419" model="account.account.type.template">
|
||||
<field name="name">Resultado no operativo</field>
|
||||
<field name="parent" ref="do_type_profit_loss_es_419" />
|
||||
<field name="sequence" eval="20" />
|
||||
<field name="statement">income</field>
|
||||
</record>
|
||||
<record id="do_type_other_income_es_419" model="account.account.type.template">
|
||||
<field name="name">Otros ingresos y ganancias</field>
|
||||
<field name="parent" ref="do_type_non_operating_section_es_419" />
|
||||
<field name="sequence" eval="10" />
|
||||
<field name="statement">income</field>
|
||||
<field name="revenue" eval="True" />
|
||||
</record>
|
||||
<record id="do_type_financial_expense_es_419" model="account.account.type.template">
|
||||
<field name="name">Gastos financieros</field>
|
||||
<field name="parent" ref="do_type_root_es_419" />
|
||||
<field name="sequence" eval="80" />
|
||||
<field name="parent" ref="do_type_non_operating_section_es_419" />
|
||||
<field name="sequence" eval="20" />
|
||||
<field name="statement">income</field>
|
||||
<field name="expense" eval="True" />
|
||||
</record>
|
||||
<record id="do_type_income_tax_es_419" model="account.account.type.template">
|
||||
<field name="name">Impuesto a las ganancias</field>
|
||||
<field name="parent" ref="do_type_root_es_419" />
|
||||
<field name="sequence" eval="90" />
|
||||
<field name="parent" ref="do_type_non_operating_section_es_419" />
|
||||
<field name="sequence" eval="30" />
|
||||
<field name="statement">income</field>
|
||||
<field name="expense" eval="True" />
|
||||
</record>
|
||||
@@ -1634,7 +1659,7 @@
|
||||
</record>
|
||||
<record id="do_account_110406_es_419" model="account.account.template">
|
||||
<field name="code">110406</field>
|
||||
<field name="name">ITBIS retenido por adquirencias a recuperar</field>
|
||||
<field name="name">ITBIS retenido en adquisiciones a recuperar</field>
|
||||
<field name="parent" ref="do_account_1104_es_419" />
|
||||
<field name="type" ref="do_type_tax_credit_es_419" />
|
||||
</record>
|
||||
@@ -1642,7 +1667,7 @@
|
||||
<data language="es_419" grouped="1">
|
||||
<record id="do_account_11040601_es_419" model="account.account.template">
|
||||
<field name="code">11040601</field>
|
||||
<field name="name">ITBIS retenido por adquirencias 2% a recuperar</field>
|
||||
<field name="name">ITBIS retenido en adquisiciones 2% a recuperar</field>
|
||||
<field name="parent" ref="do_account_110406_es_419" />
|
||||
<field name="type" ref="do_type_tax_credit_es_419" />
|
||||
</record>
|
||||
@@ -1708,13 +1733,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>
|
||||
@@ -1844,6 +1875,12 @@
|
||||
<field name="parent" ref="do_account_210213_es_419" />
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
<record id="do_account_21021303_es_419" model="account.account.template">
|
||||
<field name="code">21021303</field>
|
||||
<field name="name">Retenciones ISR servicios personas físicas 15% por pagar</field>
|
||||
<field name="parent" ref="do_account_210213_es_419" />
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
</data>
|
||||
<data language="es_419" grouped="1">
|
||||
<record id="do_account_210214_es_419" model="account.account.template">
|
||||
@@ -1860,6 +1897,12 @@
|
||||
<field name="parent" ref="do_account_210214_es_419" />
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
<record id="do_account_21021402_es_419" model="account.account.template">
|
||||
<field name="code">21021402</field>
|
||||
<field name="name">Retenciones ISR alquileres 15% por pagar</field>
|
||||
<field name="parent" ref="do_account_210214_es_419" />
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
</data>
|
||||
<data language="es_419" grouped="1">
|
||||
<record id="do_account_210215_es_419" model="account.account.template">
|
||||
@@ -1996,6 +2039,12 @@
|
||||
<field name="parent" ref="do_account_210203_es_419" />
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
<record id="do_account_21020302_es_419" model="account.account.template">
|
||||
<field name="code">21020302</field>
|
||||
<field name="name">Retenciones ISR otras rentas 15% por pagar</field>
|
||||
<field name="parent" ref="do_account_210203_es_419" />
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
</data>
|
||||
<data language="es_419" grouped="1">
|
||||
<record id="do_account_21021202_es_419" model="account.account.template">
|
||||
@@ -2036,6 +2085,18 @@
|
||||
<field name="parent" ref="do_account_210217_es_419" />
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
<record id="do_account_21021705_es_419" model="account.account.template">
|
||||
<field name="code">21021705</field>
|
||||
<field name="name">Retenciones ISR premios de apuestas 15% por pagar</field>
|
||||
<field name="parent" ref="do_account_210217_es_419" />
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
<record id="do_account_21021706_es_419" model="account.account.template">
|
||||
<field name="code">21021706</field>
|
||||
<field name="name">Retenciones ISR máquinas tragamonedas 15% por pagar</field>
|
||||
<field name="parent" ref="do_account_210217_es_419" />
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
</data>
|
||||
<data language="es_419" grouped="1">
|
||||
<record id="do_account_21020806_es_419" model="account.account.template">
|
||||
@@ -2057,4 +2118,4 @@
|
||||
<field name="type" ref="do_type_tax_payable_es_419" />
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
</tryton>
|
||||
|
||||
+4
-13
@@ -14,31 +14,22 @@ else:
|
||||
|
||||
def get_info():
|
||||
import configparser
|
||||
import json
|
||||
import subprocess
|
||||
|
||||
module_dir = os.path.dirname(os.path.dirname(__file__))
|
||||
|
||||
config = configparser.ConfigParser()
|
||||
config.read_file(open(os.path.join(module_dir, 'tryton.cfg')))
|
||||
info = dict(config.items('tryton'))
|
||||
|
||||
metadata_cmd = 'python3 -m build -qq --metadata'
|
||||
if os.environ.get('DOC_NO_ISOLATION'):
|
||||
metadata_cmd += ' --no-isolation'
|
||||
metadata = subprocess.check_output(
|
||||
metadata_cmd, shell=True, encoding='utf-8', cwd=module_dir).strip()
|
||||
metadata = json.loads(metadata)
|
||||
info['name'] = metadata['name']
|
||||
info['description'] = metadata['summary']
|
||||
major_version, minor_version, _ = metadata['version'].split('.', 2)
|
||||
info['name'] = 'unpaismejor_account_do'
|
||||
info['description'] = 'Dominican Republic accounting for Tryton'
|
||||
major_version, minor_version, _ = info['version'].split('.', 2)
|
||||
major_version = int(major_version)
|
||||
minor_version = int(minor_version)
|
||||
if minor_version % 2:
|
||||
info['series'] = 'latest'
|
||||
info['branch'] = 'branch/default'
|
||||
else:
|
||||
info['series'] = '.'.join(metadata['version'].split('.', 2)[:2])
|
||||
info['series'] = '.'.join(info['version'].split('.', 2)[:2])
|
||||
info['branch'] = 'branch/' + info['series']
|
||||
|
||||
for key in {'depends', 'extras_depend'}:
|
||||
|
||||
@@ -19,8 +19,8 @@ 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
|
||||
posting leaves, 61 are tax control accounts (45 payable and 16 recoverable).
|
||||
The chart has 287 templates: 70 grouping nodes and 217 posting leaves. Of the
|
||||
posting leaves, 66 are tax control accounts (50 payable and 16 recoverable).
|
||||
Those controls deliberately provide stable identifiers for accounting and
|
||||
reporting modules. The remaining leaves cover cash, receivables, payables,
|
||||
inventory, cost of sales, assets, depreciation, deposits, leases, financial
|
||||
@@ -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
|
||||
287 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.
|
||||
287 codes are official would be incorrect.
|
||||
|
||||
Upstream Repository
|
||||
-------------------
|
||||
|
||||
+3
-1
@@ -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 (article 309 withholdings, 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
|
||||
-------------
|
||||
|
||||
@@ -87,6 +87,21 @@ 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.
|
||||
|
||||
Article 17 of Law 30-26 also amended article 309 from 1 July 2026. Rentals
|
||||
provided by individuals, services provided by individuals, slot-machine
|
||||
prizes and income not expressly covered are withheld at 15%. Sports and
|
||||
lottery betting prizes from RD$200,001 through RD$600,000 are withheld at
|
||||
15%, while higher betting prizes and prizes in general are withheld at 25%.
|
||||
The catalog preserves the former 10% and prize-band templates through
|
||||
30 June 2026 and switches the service and rental tax rules by accounting date.
|
||||
|
||||
Validation Boundary
|
||||
-------------------
|
||||
|
||||
|
||||
+13
-7
@@ -48,21 +48,27 @@ ISR Withholdings
|
||||
----------------
|
||||
|
||||
* ``do_tax_ret_isr_hon_5`` — 5% legal-entity service case.
|
||||
* ``do_tax_ret_isr_serv_10`` — 10% natural-person professional service case.
|
||||
* ``do_tax_ret_isr_serv_10`` — historical 10% natural-person professional service case through 30 June 2026.
|
||||
* ``do_tax_ret_isr_serv_15`` — 15% services provided by individuals from 1 July 2026.
|
||||
* ``do_tax_ret_isr_div_10`` — 10% dividends and distributed profits.
|
||||
* ``do_tax_ret_isr_int_10`` — 10% interest paid to a natural person.
|
||||
* ``do_tax_ret_isr_alq_10`` — 10% qualifying rent paid to a natural person.
|
||||
* ``do_tax_ret_isr_alq_10`` — historical 10% qualifying rent through 30 June 2026.
|
||||
* ``do_tax_ret_isr_alq_15`` — 15% rentals provided by individuals from 1 July 2026.
|
||||
* ``do_tax_ret_isr_est_15`` — historical or specific 1.5% public-sector case.
|
||||
* ``do_tax_ret_isr_est_5`` — 5% public-sector payment case.
|
||||
* ``do_tax_ret_isr_bovine_1`` — 1% qualifying bovine purchase from an unregistered natural person.
|
||||
* ``do_tax_ret_isr_exporter_25`` — 2.5% qualifying local sale by an exporter.
|
||||
* ``do_tax_ret_isr_int_pj_1`` — 1% interest paid to a legal entity.
|
||||
* ``do_tax_ret_isr_premios_25`` — 25% qualifying lottery, raffle or draw prize.
|
||||
* ``do_tax_ret_isr_premios_10`` — 10% qualifying prize band.
|
||||
* ``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_premios_10`` — historical 10% qualifying prize band through 30 June 2026.
|
||||
* ``do_tax_ret_isr_premios_15`` — historical 15% qualifying prize band through 30 June 2026.
|
||||
* ``do_tax_ret_isr_betting_15`` — 15% betting prizes from RD$200,001 through RD$600,000 from 1 July 2026.
|
||||
* ``do_tax_ret_isr_tragamonedas_10`` — historical 10% slot-machine prize case through 30 June 2026.
|
||||
* ``do_tax_ret_isr_tragamonedas_15`` — 15% slot-machine prizes from 1 July 2026.
|
||||
* ``do_tax_ret_isr_other_income_10`` — historical 10% residual income case through 30 June 2026.
|
||||
* ``do_tax_ret_isr_other_income_15`` — 15% income not expressly covered from 1 July 2026.
|
||||
* ``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
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
"""Dominican invoice tax rounding policy.
|
||||
|
||||
Tryton's generic taxable mixin compensates the aggregate currency-rounding
|
||||
remainder on the first non-zero tax. That keeps the rounded aggregate equal
|
||||
to the aggregate of the unrounded taxes, but it can change the reported value
|
||||
of a specific Dominican tax (ITBIS, ISC or CDT).
|
||||
|
||||
Dominican fiscal documents state every tax in currency precision. Each tax
|
||||
must therefore retain its own rounded result; no residual is redistributed
|
||||
between different tax liabilities or tax credits.
|
||||
"""
|
||||
|
||||
from trytond.model import fields
|
||||
from trytond.pool import PoolMeta
|
||||
|
||||
|
||||
def round_taxes_independently(currency, taxes):
|
||||
"""Round every tax amount without reallocating the aggregate residual."""
|
||||
if not currency:
|
||||
return
|
||||
for taxline in taxes.values():
|
||||
taxline.amount = currency.round(taxline.amount)
|
||||
|
||||
|
||||
class IndependentTaxRoundingMixin:
|
||||
|
||||
__slots__ = ()
|
||||
|
||||
@fields.depends('currency')
|
||||
def _round_taxes(self, taxes):
|
||||
round_taxes_independently(self.currency, taxes)
|
||||
|
||||
|
||||
class Invoice(IndependentTaxRoundingMixin, metaclass=PoolMeta):
|
||||
__name__ = 'account.invoice'
|
||||
|
||||
|
||||
class InvoiceLine(IndependentTaxRoundingMixin, metaclass=PoolMeta):
|
||||
__name__ = 'account.invoice.line'
|
||||
@@ -2,12 +2,10 @@
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from sql import Table
|
||||
|
||||
from trytond.pool import PoolMeta
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
LEGACY_OBSOLETE_IDS = {
|
||||
LEGACY_OBSOLETE_IDS = frozenset({
|
||||
'do_tax_itbis_8_compra', 'do_tax_itbis_8_venta',
|
||||
'do_tax_itbis_9_compra', 'do_tax_itbis_9_venta',
|
||||
'do_tax_ret_itbis_2_adq',
|
||||
@@ -25,9 +23,9 @@ LEGACY_OBSOLETE_IDS = {
|
||||
'do_trline_cust_card_acquirer',
|
||||
'do_trline_cust_itbis8', 'do_trline_cust_itbis9',
|
||||
'do_trline_supp_itbis8', 'do_trline_supp_itbis9',
|
||||
}
|
||||
})
|
||||
|
||||
LOCALIZATION_MODELS = {
|
||||
LOCALIZATION_MODELS = frozenset({
|
||||
'account.account.template',
|
||||
'account.account.type.template',
|
||||
'account.tax.code.line.template',
|
||||
@@ -36,7 +34,7 @@ LOCALIZATION_MODELS = {
|
||||
'account.tax.rule.line.template',
|
||||
'account.tax.rule.template',
|
||||
'account.tax.template',
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
class ModelData(metaclass=PoolMeta):
|
||||
@@ -60,7 +58,7 @@ class ModelData(metaclass=PoolMeta):
|
||||
cursor.execute(*table.select(
|
||||
table.id, table.fs_id,
|
||||
where=(table.module == 'account_do')
|
||||
& table.model.in_(tuple(LOCALIZATION_MODELS))))
|
||||
& table.model.in_(tuple(sorted(LOCALIZATION_MODELS)))))
|
||||
obsolete = []
|
||||
for record_id, fs_id in cursor.fetchall():
|
||||
if fs_id in LEGACY_OBSOLETE_IDS:
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: account_do 8.0\n"
|
||||
"PO-Revision-Date: 2026-08-10 00:00-0400\n"
|
||||
"Last-Translator: Fundación Un País Mejor\n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
msgctxt "field:account.tax,tax_kind:"
|
||||
msgid "Tax Kind"
|
||||
msgstr "Clasificación fiscal"
|
||||
|
||||
msgctxt "field:account.tax.template,tax_kind:"
|
||||
msgid "Tax Kind"
|
||||
msgstr "Clasificación fiscal"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "ITBIS"
|
||||
msgstr "ITBIS"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "ITBIS Withholding"
|
||||
msgstr "Retención de ITBIS"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "ITBIS Acquirer Withholding"
|
||||
msgstr "Retención de ITBIS por adquirencia"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "ISR Withholding"
|
||||
msgstr "Retención de ISR"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "Selective Consumption Tax (ISC)"
|
||||
msgstr "Impuesto Selectivo al Consumo (ISC)"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "INDOTEL Contribution (CDT)"
|
||||
msgstr "Contribución al Desarrollo de las Telecomunicaciones (CDT)"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "Statutory Tip"
|
||||
msgstr "Propina legal"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "Other Taxes"
|
||||
msgstr "Otros impuestos"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "ITBIS"
|
||||
msgstr "ITBIS"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "ITBIS Withholding"
|
||||
msgstr "Retención de ITBIS"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "ITBIS Acquirer Withholding"
|
||||
msgstr "Retención de ITBIS por adquirencia"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "ISR Withholding"
|
||||
msgstr "Retención de ISR"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "Selective Consumption Tax (ISC)"
|
||||
msgstr "Impuesto Selectivo al Consumo (ISC)"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "INDOTEL Contribution (CDT)"
|
||||
msgstr "Contribución al Desarrollo de las Telecomunicaciones (CDT)"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "Statutory Tip"
|
||||
msgstr "Propina legal"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "Other Taxes"
|
||||
msgstr "Otros impuestos"
|
||||
@@ -0,0 +1,83 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: account_do 8.0\n"
|
||||
"PO-Revision-Date: 2026-08-10 00:00-0400\n"
|
||||
"Last-Translator: Fundación Un País Mejor\n"
|
||||
"Language-Team: Spanish (Latin America)\n"
|
||||
"Language: es_419\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
msgctxt "field:account.tax,tax_kind:"
|
||||
msgid "Tax Kind"
|
||||
msgstr "Clasificación fiscal"
|
||||
|
||||
msgctxt "field:account.tax.template,tax_kind:"
|
||||
msgid "Tax Kind"
|
||||
msgstr "Clasificación fiscal"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "ITBIS"
|
||||
msgstr "ITBIS"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "ITBIS Withholding"
|
||||
msgstr "Retención de ITBIS"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "ITBIS Acquirer Withholding"
|
||||
msgstr "Retención de ITBIS por adquirencia"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "ISR Withholding"
|
||||
msgstr "Retención de ISR"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "Selective Consumption Tax (ISC)"
|
||||
msgstr "Impuesto Selectivo al Consumo (ISC)"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "INDOTEL Contribution (CDT)"
|
||||
msgstr "Contribución al Desarrollo de las Telecomunicaciones (CDT)"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "Statutory Tip"
|
||||
msgstr "Propina legal"
|
||||
|
||||
msgctxt "selection:account.tax,tax_kind:"
|
||||
msgid "Other Taxes"
|
||||
msgstr "Otros impuestos"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "ITBIS"
|
||||
msgstr "ITBIS"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "ITBIS Withholding"
|
||||
msgstr "Retención de ITBIS"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "ITBIS Acquirer Withholding"
|
||||
msgstr "Retención de ITBIS por adquirencia"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "ISR Withholding"
|
||||
msgstr "Retención de ISR"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "Selective Consumption Tax (ISC)"
|
||||
msgstr "Impuesto Selectivo al Consumo (ISC)"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "INDOTEL Contribution (CDT)"
|
||||
msgstr "Contribución al Desarrollo de las Telecomunicaciones (CDT)"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "Statutory Tip"
|
||||
msgstr "Propina legal"
|
||||
|
||||
msgctxt "selection:account.tax.template,tax_kind:"
|
||||
msgid "Other Taxes"
|
||||
msgstr "Otros impuestos"
|
||||
@@ -1,59 +0,0 @@
|
||||
[build-system]
|
||||
requires = ['hatchling >= 1', 'hatch-tryton']
|
||||
build-backend = 'hatchling.build'
|
||||
|
||||
[project]
|
||||
name = 'trytond_account_do'
|
||||
dynamic = ['version', 'dependencies', 'optional-dependencies', 'authors', 'readme']
|
||||
requires-python = '>=3.10'
|
||||
maintainers = [
|
||||
{name = "Fundación Un País Mejor"},
|
||||
]
|
||||
description = "Dominican Republic accounting for Tryton"
|
||||
license = 'GPL-3.0-or-later'
|
||||
license-files = ['LICENSE', 'COPYRIGHT']
|
||||
keywords = ["tryton", "accounting", "coa", "dominican-republic"]
|
||||
classifiers = [
|
||||
"Development Status :: 5 - Production/Stable",
|
||||
"Environment :: Plugins",
|
||||
"Framework :: Tryton",
|
||||
"Topic :: Office/Business",
|
||||
"Topic :: Office/Business :: Financial :: Accounting",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
]
|
||||
|
||||
[project.entry-points.'trytond.modules']
|
||||
account_do = 'trytond.modules.account_do'
|
||||
|
||||
[project.urls]
|
||||
homepage = "https://www.unpaismejor.org.do"
|
||||
documentation = "https://docs.tryton.org/modules-account-do/"
|
||||
changelog = "https://docs.tryton.org/modules-account-do/releases.html"
|
||||
forum = "https://www.tryton.org/forum"
|
||||
issues = "https://bugs.tryton.org/tryton"
|
||||
repository = "https://code.unpaismejor.org.do/tryton-do/account_do"
|
||||
funding = "https://www.tryton.org/donate"
|
||||
|
||||
[tool.hatch.build]
|
||||
include = [
|
||||
'**/tryton.cfg',
|
||||
'**/*.py',
|
||||
'**/*.xml',
|
||||
'view/**/*.xml',
|
||||
'**/*.fodt',
|
||||
'icons/**/*.svg',
|
||||
'tests/**/*.rst',
|
||||
'tests/**/*.json',
|
||||
]
|
||||
exclude = ['doc']
|
||||
|
||||
[tool.hatch.build.targets.wheel.sources]
|
||||
"" = "trytond/modules/account_do"
|
||||
|
||||
[tool.hatch.metadata.hooks.tryton]
|
||||
dependencies = []
|
||||
copyright = 'COPYRIGHT'
|
||||
readme = 'README.rst'
|
||||
|
||||
[tool.hatch.metadata.hooks.tryton.tryton-optional-dependencies]
|
||||
test = ['proteus']
|
||||
@@ -0,0 +1,74 @@
|
||||
from configparser import ConfigParser
|
||||
from pathlib import Path
|
||||
|
||||
from setuptools import setup
|
||||
|
||||
|
||||
MODULE = 'account_do'
|
||||
PREFIX = 'trytond.modules'
|
||||
PACKAGE = f'{PREFIX}.{MODULE}'
|
||||
|
||||
|
||||
def read(path):
|
||||
return Path(path).read_text(encoding='utf-8')
|
||||
|
||||
|
||||
config = ConfigParser()
|
||||
config.read('tryton.cfg')
|
||||
version = config.get('tryton', 'version')
|
||||
major, minor, _ = version.split('.', 2)
|
||||
series = f'{major}.{minor}'
|
||||
next_major = f'{major}.{int(minor) + 1}'
|
||||
|
||||
|
||||
setup(
|
||||
name='unpaismejor_account_do',
|
||||
version=version,
|
||||
description='Dominican Republic accounting for Tryton',
|
||||
long_description=read('README.rst'),
|
||||
long_description_content_type='text/x-rst',
|
||||
author='Fundación Un País Mejor',
|
||||
maintainer='Fundación Un País Mejor',
|
||||
url='https://code.unpaismejor.org.do/tryton-do/account_do',
|
||||
keywords='tryton accounting coa dominican-republic',
|
||||
license='GPL-3.0-or-later',
|
||||
python_requires='>=3.8',
|
||||
packages=[PACKAGE],
|
||||
package_dir={PACKAGE: '.'},
|
||||
package_data={
|
||||
PACKAGE: [
|
||||
'tryton.cfg',
|
||||
'*.xml',
|
||||
'view/*.xml',
|
||||
'locale/*.po',
|
||||
'doc/*.rst',
|
||||
],
|
||||
},
|
||||
classifiers=[
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
'Environment :: Plugins',
|
||||
'Framework :: Tryton',
|
||||
'Topic :: Office/Business',
|
||||
'Topic :: Office/Business :: Financial :: Accounting',
|
||||
'Topic :: Software Development :: Libraries :: Python Modules',
|
||||
],
|
||||
install_requires=[
|
||||
f'trytond >= {series}, < {next_major}',
|
||||
f'trytond_account >= {series}, < {next_major}',
|
||||
f'trytond_account_invoice >= {series}, < {next_major}',
|
||||
],
|
||||
extras_require={
|
||||
'test': [
|
||||
f'proteus >= {series}, < {next_major}',
|
||||
f'trytond_account_asset >= {series}, < {next_major}',
|
||||
f'trytond_account_deposit >= {series}, < {next_major}',
|
||||
f'trytond_account_stock_continental >= {series}, < {next_major}',
|
||||
],
|
||||
},
|
||||
entry_points={
|
||||
'trytond.modules': [
|
||||
f'{MODULE} = {PACKAGE}',
|
||||
],
|
||||
},
|
||||
zip_safe=False,
|
||||
)
|
||||
@@ -0,0 +1,162 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from sql import Null, Table
|
||||
|
||||
from trytond.model import fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
TAX_KIND = [
|
||||
('', ''),
|
||||
('itbis', 'ITBIS'),
|
||||
('itbis_withholding', 'ITBIS Withholding'),
|
||||
('itbis_withholding_acquirer', 'ITBIS Acquirer Withholding'),
|
||||
('isr_withholding', 'ISR Withholding'),
|
||||
('isc', 'Selective Consumption Tax (ISC)'),
|
||||
('cdt', 'INDOTEL Contribution (CDT)'),
|
||||
('tip', 'Statutory Tip'),
|
||||
('others', 'Other Taxes'),
|
||||
]
|
||||
|
||||
TAX_TEMPLATE_KINDS = {
|
||||
'itbis': {
|
||||
'do_tax_itbis_18_venta', 'do_tax_itbis_16_venta',
|
||||
'do_tax_itbis_18_compra', 'do_tax_itbis_16_compra',
|
||||
'do_tax_itbis_exento', 'do_tax_itbis_tasa_cero',
|
||||
},
|
||||
'itbis_withholding': {
|
||||
'do_tax_ret_itbis_30', 'do_tax_ret_itbis_100_inf',
|
||||
'do_tax_ret_itbis_75_inf', 'do_tax_ret_itbis_75_inf_16',
|
||||
'do_tax_ret_itbis_100_goods_18',
|
||||
'do_tax_ret_itbis_100_goods_16', 'do_tax_ret_itbis_rst_18',
|
||||
'do_tax_ret_itbis_rst_16', 'do_tax_ret_itbis_insurance_100',
|
||||
'do_tax_ret_itbis_airline_100',
|
||||
'do_tax_ret_itbis_society_30_suf', 'do_tax_ret_itbis_hotel_100',
|
||||
'do_tax_ret_itbis_state_100',
|
||||
},
|
||||
'isr_withholding': {
|
||||
'do_tax_ret_isr_hon_5', 'do_tax_ret_isr_serv_10',
|
||||
'do_tax_ret_isr_serv_15', 'do_tax_ret_isr_div_10',
|
||||
'do_tax_ret_isr_int_10', 'do_tax_ret_isr_alq_10',
|
||||
'do_tax_ret_isr_alq_15', 'do_tax_ret_isr_est_15',
|
||||
'do_tax_ret_isr_est_5', 'do_tax_ret_isr_bovine_1',
|
||||
'do_tax_ret_isr_exporter_25', 'do_tax_ret_isr_int_pj_1',
|
||||
'do_tax_ret_isr_premios_25', 'do_tax_ret_isr_premios_10',
|
||||
'do_tax_ret_isr_premios_15', 'do_tax_ret_isr_betting_15',
|
||||
'do_tax_ret_isr_tragamonedas_10',
|
||||
'do_tax_ret_isr_tragamonedas_15',
|
||||
'do_tax_ret_isr_other_income_10',
|
||||
'do_tax_ret_isr_other_income_15', 'do_tax_ret_isr_ext_27',
|
||||
'do_tax_ret_isr_ext_15', 'do_tax_ret_isr_ext_10',
|
||||
},
|
||||
'isc': {
|
||||
'do_tax_isc_bebidas_alc', 'do_tax_isc_tabaco',
|
||||
'do_tax_isc_telecom', 'do_tax_isc_combustibles_16',
|
||||
'do_tax_isc_avtur_65', 'do_tax_isc_fuel_rd2_gallon',
|
||||
'do_tax_ret_isc_insurance_100', 'do_tax_isc_vehiculos',
|
||||
},
|
||||
'cdt': {'do_tax_cdt_indotel'},
|
||||
'tip': {'do_tax_propina_10'},
|
||||
'others': {
|
||||
'do_tax_cheques_015', 'do_tax_cheques_020',
|
||||
'do_tax_activos_1', 'do_tax_iti_3',
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def _set_template_kinds(table):
|
||||
cursor = Transaction().connection.cursor()
|
||||
model_data = Table('ir_model_data')
|
||||
kind_by_identifier = {
|
||||
identifier + suffix: tax_kind
|
||||
for tax_kind, identifiers in TAX_TEMPLATE_KINDS.items()
|
||||
for identifier in identifiers
|
||||
for suffix in ('', '_en', '_es_419')
|
||||
}
|
||||
cursor.execute(*model_data.select(
|
||||
model_data.db_id, model_data.fs_id,
|
||||
where=model_data.module == 'account_do'))
|
||||
for template_id, identifier in cursor.fetchall():
|
||||
tax_kind = kind_by_identifier.get(identifier)
|
||||
if not tax_kind:
|
||||
continue
|
||||
cursor.execute(*table.update(
|
||||
[table.tax_kind], [tax_kind],
|
||||
where=(table.id == template_id)
|
||||
& ((table.tax_kind == Null) | (table.tax_kind == ''))))
|
||||
|
||||
|
||||
def _kind_from_values(values):
|
||||
pool = Pool()
|
||||
TaxGroup = pool.get('account.tax.group')
|
||||
group = values.get('group')
|
||||
if isinstance(group, int):
|
||||
group = TaxGroup(group)
|
||||
code = getattr(group, 'code', None)
|
||||
if code == 'ITBIS':
|
||||
amount = values.get('rate') or values.get('amount') or 0
|
||||
return 'itbis_withholding' if amount < 0 else 'itbis'
|
||||
if code in {'ISR', 'ISREXT'}:
|
||||
return 'isr_withholding'
|
||||
if code == 'ISC':
|
||||
return 'isc'
|
||||
if code == 'CDT':
|
||||
return 'cdt'
|
||||
if code == 'OTROS':
|
||||
name = (values.get('name') or '').casefold()
|
||||
if 'propina' in name or 'tip' in name:
|
||||
return 'tip'
|
||||
if 'vehículo' in name or 'vehicle' in name:
|
||||
return 'isc'
|
||||
return 'others'
|
||||
return ''
|
||||
|
||||
|
||||
class TaxTemplate(metaclass=PoolMeta):
|
||||
__name__ = 'account.tax.template'
|
||||
|
||||
tax_kind = fields.Selection(TAX_KIND, 'Tax Kind', sort=False)
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module_name):
|
||||
super().__register__(module_name)
|
||||
_set_template_kinds(cls.__table__())
|
||||
|
||||
@classmethod
|
||||
def create(cls, vlist):
|
||||
vlist = [values.copy() for values in vlist]
|
||||
for values in vlist:
|
||||
values.setdefault('tax_kind', _kind_from_values(values))
|
||||
return super().create(vlist)
|
||||
|
||||
def _get_tax_value(self, tax=None):
|
||||
values = super()._get_tax_value(tax=tax)
|
||||
if not tax or tax.tax_kind != self.tax_kind:
|
||||
values['tax_kind'] = self.tax_kind
|
||||
return values
|
||||
|
||||
|
||||
class Tax(metaclass=PoolMeta):
|
||||
__name__ = 'account.tax'
|
||||
|
||||
tax_kind = fields.Selection(TAX_KIND, 'Tax Kind', sort=False)
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module_name):
|
||||
super().__register__(module_name)
|
||||
table = cls.__table__()
|
||||
template = Table('account_tax_template')
|
||||
cursor = Transaction().connection.cursor()
|
||||
cursor.execute(*table.join(
|
||||
template, condition=template.id == table.template).select(
|
||||
table.id, template.tax_kind,
|
||||
where=(table.template != Null)
|
||||
& (template.tax_kind != Null)
|
||||
& (template.tax_kind != '')
|
||||
& ((table.tax_kind == Null) | (table.tax_kind == ''))))
|
||||
for tax_id, tax_kind in cursor.fetchall():
|
||||
cursor.execute(*table.update(
|
||||
[table.tax_kind], [tax_kind],
|
||||
where=table.id == tax_id))
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="tax_view_form">
|
||||
<field name="model">account.tax</field>
|
||||
<field name="inherit" ref="account.tax_view_form"/>
|
||||
<field name="name">tax_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="tax_view_list">
|
||||
<field name="model">account.tax</field>
|
||||
<field name="inherit" ref="account.tax_view_list"/>
|
||||
<field name="name">tax_list</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="tax_template_view_form">
|
||||
<field name="model">account.tax.template</field>
|
||||
<field name="inherit" ref="account.tax_template_view_form"/>
|
||||
<field name="name">tax_template_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="tax_template_view_list">
|
||||
<field name="model">account.tax.template</field>
|
||||
<field name="inherit" ref="account.tax_template_view_list"/>
|
||||
<field name="name">tax_template_list</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
+199
-62
@@ -1,24 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- account_do: Plantillas de códigos de impuesto (DGII) - República Dominicana -->
|
||||
<!-- account_do: Tax code templates (DGII) - Dominican Republic -->
|
||||
<!--
|
||||
CONVENCIÓN DE OPERADORES:
|
||||
Débitos / obligaciones a DGII → invoice="+", credit="-"
|
||||
Créditos / reducciones al saldo → invoice="-", credit="+"
|
||||
OPERATOR CONVENTION:
|
||||
Debits / liabilities to DGII → invoice="+", credit="-"
|
||||
Tax credits / balance reductions → invoice="-", credit="+"
|
||||
|
||||
Retenciones practicadas por la compañía usan tasa negativa y operador "-"
|
||||
para presentar la obligación fiscal como valor positivo.
|
||||
Withholdings made by the company use a negative rate and the "-" operator
|
||||
to present the tax liability as a positive amount.
|
||||
|
||||
Lógica del árbol ITBIS:
|
||||
Padre "ITBIS" = Ventas (+) + Compras (-) + Retenciones recibidas (-) = Neto a pagar
|
||||
ITBIS tree logic:
|
||||
"ITBIS" parent = Sales (+) + Purchases (-) + Withholdings received (-)
|
||||
-->
|
||||
<tryton>
|
||||
<data language="en">
|
||||
<!-- ===== Árbol de códigos de impuesto ===== -->
|
||||
<record id="do_tc_root_en" model="account.tax.code.template">
|
||||
<field name="name">Dominican Republic Taxes</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
</record>
|
||||
|
||||
<!-- ===== Tax code tree ===== -->
|
||||
<!-- ── ITBIS ───────────────────────────────────────────── -->
|
||||
<record id="do_tc_itbis_en" model="account.tax.code.template">
|
||||
<field name="name">ITBIS — Net Balance (Debit − Credit)</field>
|
||||
@@ -40,8 +35,8 @@
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_itbis_ventas_en"/>
|
||||
</record>
|
||||
<!-- Compras con operadores inversos: las líneas usan "-" en invoice para que
|
||||
este código sume en negativo y reste del padre ITBIS. -->
|
||||
<!-- Purchase lines use the inverse operator so this code subtracts from
|
||||
the parent ITBIS balance. -->
|
||||
<record id="do_tc_itbis_compras_en" model="account.tax.code.template">
|
||||
<field name="name">Input ITBIS on Purchases (Tax Credit)</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
@@ -57,13 +52,13 @@
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_itbis_compras_en"/>
|
||||
</record>
|
||||
<!-- Retención GC: rate=-5.4%; operador "-" presenta obligación positiva. -->
|
||||
<!-- Large-taxpayer withholding: -5.4% rate; "-" presents a liability. -->
|
||||
<record id="do_tc_itbis_retenido_en" model="account.tax.code.template">
|
||||
<field name="name">ITBIS Withheld by Large Taxpayer (30%)</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_itbis_en"/>
|
||||
</record>
|
||||
<!-- Retenciones ITBIS proveedor informal / servicios: obligaciones fiscales -->
|
||||
<!-- Informal-supplier and service ITBIS withholdings: tax liabilities -->
|
||||
<record id="do_tc_itbis_ret_informal_en" model="account.tax.code.template">
|
||||
<field name="name">ITBIS Withheld 100% Taxed Services</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
@@ -89,14 +84,19 @@
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_itbis_en"/>
|
||||
</record>
|
||||
<!-- Tasa cero: seguimiento informativo de la base imponible (amount=base) -->
|
||||
<record id="do_tc_itbis_exempt_en" model="account.tax.code.template">
|
||||
<field name="name">Exempt ITBIS — Tax Base</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_itbis_en"/>
|
||||
</record>
|
||||
<!-- Zero rate: informational tracking of taxable base (amount=base) -->
|
||||
<record id="do_tc_itbis_tasa_cero_en" model="account.tax.code.template">
|
||||
<field name="name">ITBIS Zero Rate — Tax Base (Exports / Free Trade Zone)</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_itbis_en"/>
|
||||
</record>
|
||||
|
||||
<!-- ── ISR Retenciones ─────────────────────────────────── -->
|
||||
<!-- ── ISR Withholdings ───────────────────────────────── -->
|
||||
<record id="do_tc_isr_en" model="account.tax.code.template">
|
||||
<field name="name">ISR: Withholdings</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
@@ -108,7 +108,7 @@
|
||||
<field name="parent" ref="do_tc_isr_en"/>
|
||||
</record>
|
||||
<record id="do_tc_isr_servicios_en" model="account.tax.code.template">
|
||||
<field name="name">ISR Withholding Fees 10% (Individuals)</field>
|
||||
<field name="name">ISR Withholding Fees and Services (Individuals)</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_isr_en"/>
|
||||
</record>
|
||||
@@ -128,7 +128,7 @@
|
||||
<field name="parent" ref="do_tc_isr_en"/>
|
||||
</record>
|
||||
<record id="do_tc_isr_alquileres_en" model="account.tax.code.template">
|
||||
<field name="name">ISR Rental Withholding 10%</field>
|
||||
<field name="name">ISR Rental Withholding (Individuals)</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_isr_en"/>
|
||||
</record>
|
||||
@@ -153,17 +153,17 @@
|
||||
<field name="parent" ref="do_tc_isr_en"/>
|
||||
</record>
|
||||
<record id="do_tc_isr_premios_en" model="account.tax.code.template">
|
||||
<field name="name">ISR Withholding Prizes and Lotteries 25% (Art. 321 CT)</field>
|
||||
<field name="name">ISR Withholding Prizes, Lotteries, Raffles and Betting 25%</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_isr_en"/>
|
||||
</record>
|
||||
<record id="do_tc_isr_premios_tramos_en" model="account.tax.code.template">
|
||||
<field name="name">ISR Withholding Prizes 10% / 15% and Slots</field>
|
||||
<field name="name">ISR Withholding Betting and Slot-Machine Prizes</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_isr_en"/>
|
||||
</record>
|
||||
<record id="do_tc_isr_other_income_en" model="account.tax.code.template">
|
||||
<field name="name">ISR Withholding Other Income 10%</field>
|
||||
<field name="name">ISR Withholding Other Income</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
<field name="parent" ref="do_tc_isr_en"/>
|
||||
</record>
|
||||
@@ -217,7 +217,7 @@
|
||||
<field name="parent" eval="None"/>
|
||||
</record>
|
||||
|
||||
<!-- ── Otros impuestos ───────────────────────────────── -->
|
||||
<!-- ── Other taxes ───────────────────────────────────── -->
|
||||
<record id="do_tc_others_en" model="account.tax.code.template">
|
||||
<field name="name">Other Taxes and Contributions</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
@@ -249,15 +249,15 @@
|
||||
<field name="parent" ref="do_tc_others_en"/>
|
||||
</record>
|
||||
|
||||
<!-- ===== Líneas: enlace impuesto → código =====
|
||||
ITBIS Ventas: invoice="+", credit="-" (débito fiscal, crédito revierte)
|
||||
ITBIS Compras: invoice="-", credit="+" (crédito resta del padre; nd. proveedor revierte)
|
||||
Retenciones practicadas: invoice="-", credit="+" (rate negativo → obligación positiva)
|
||||
Retenciones sufridas: invoice="+", credit="-" (rate negativo → crédito/anticipo)
|
||||
ISC / CDT / Otros: invoice="+", credit="-" (obligaciones)
|
||||
<!-- ===== Lines: tax-to-code mapping =====
|
||||
ITBIS sales: invoice="+", credit="-" (tax debit; credit note reverses)
|
||||
ITBIS purchases: invoice="-", credit="+" (subtracts input tax)
|
||||
Withholdings made: invoice="-", credit="+" (negative rate → liability)
|
||||
Withholdings suffered: invoice="+", credit="-" (negative rate → credit)
|
||||
ISC / CDT / Other: invoice="+", credit="-" (liabilities)
|
||||
===== -->
|
||||
|
||||
<!-- ITBIS Ventas 18% -->
|
||||
<!-- ITBIS sales 18% -->
|
||||
<record id="do_tcl_itbis18v_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ventas_18_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -273,7 +273,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ITBIS Ventas 16% -->
|
||||
<!-- ITBIS sales 16% -->
|
||||
<record id="do_tcl_itbis16v_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ventas_16_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -289,7 +289,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ITBIS Compras 18%: invoice="-" para restar del padre -->
|
||||
<!-- ITBIS purchases 18%: invoice="-" subtracts from parent -->
|
||||
<record id="do_tcl_itbis18c_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_compras_18_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -305,7 +305,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ITBIS Compras 16% -->
|
||||
<!-- ITBIS purchases 16% -->
|
||||
<record id="do_tcl_itbis16c_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_compras_16_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -321,7 +321,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ITBIS Retención GC 30%: retención practicada, rate=-5.4% -->
|
||||
<!-- Large-taxpayer ITBIS withholding 30%: rate=-5.4% -->
|
||||
<record id="do_tcl_ret_itbis_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_retenido_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -337,7 +337,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ITBIS Retención 100% Servicios: retención practicada -->
|
||||
<!-- ITBIS withholding 100% on services -->
|
||||
<record id="do_tcl_ret_itbis_inf_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_informal_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -353,7 +353,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ITBIS Retención 75% Proveedor Informal: retención practicada -->
|
||||
<!-- ITBIS withholding 75% on informal suppliers -->
|
||||
<record id="do_tcl_ret_itbis_inf75_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_informal_75_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -460,6 +460,13 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_air_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_itbis_airline_100_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_soc_suf_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -467,6 +474,13 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_soc_suf_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_itbis_society_30_suf_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_hot_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -474,6 +488,13 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_hot_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_itbis_hotel_100_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_state_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -481,8 +502,31 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_state_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_itbis_state_100_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ITBIS Tasa Cero: seguimiento de base imponible (informativo) -->
|
||||
<!-- Exempt ITBIS: informational taxable-base tracking -->
|
||||
<record id="do_tcl_itbis_exempt_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_exempt_en"/>
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_itbis_exento_en"/>
|
||||
<field name="amount">base</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_itbis_exempt_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_exempt_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_itbis_exento_en"/>
|
||||
<field name="amount">base</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- Zero-rate ITBIS: informational taxable-base tracking -->
|
||||
<record id="do_tcl_itbis_tc_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_tasa_cero_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -490,8 +534,15 @@
|
||||
<field name="amount">base</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_itbis_tc_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_tasa_cero_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_itbis_tasa_cero_en"/>
|
||||
<field name="amount">base</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Honorarios Personas Jurídicas 5% -->
|
||||
<!-- ISR fees paid to legal entities 5% -->
|
||||
<record id="do_tcl_isr_hon_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_honorarios_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -507,7 +558,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Honorarios Personas Físicas 10% -->
|
||||
<!-- ISR fees paid to individuals 10% -->
|
||||
<record id="do_tcl_isr_serv_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_servicios_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -522,8 +573,22 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_serv15_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_servicios_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_serv15_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_servicios_en"/>
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Dividendos 10% -->
|
||||
<!-- ISR dividends 10% -->
|
||||
<record id="do_tcl_isr_div_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_dividendos_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -539,7 +604,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Intereses Persona Física 10% -->
|
||||
<!-- ISR interest paid to individuals 10% -->
|
||||
<record id="do_tcl_isr_int_pf_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_intereses_pf_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -555,7 +620,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Intereses Persona Jurídica 1% -->
|
||||
<!-- ISR interest paid to legal entities 1% -->
|
||||
<record id="do_tcl_isr_int_pj_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_intereses_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -571,7 +636,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Alquileres 10% -->
|
||||
<!-- ISR rentals 10% -->
|
||||
<record id="do_tcl_isr_alq_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_alquileres_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -586,8 +651,22 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_alq15_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_alquileres_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_alq_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_alq15_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_alquileres_en"/>
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_alq_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Estado 1.5% -->
|
||||
<!-- ISR state payments 1.5% -->
|
||||
<record id="do_tcl_isr_est_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_gobierno_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -603,7 +682,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Estado 5%: retención sufrida -->
|
||||
<!-- ISR state payments 5%: withholding suffered -->
|
||||
<record id="do_tcl_isr_est5_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_gobierno_5_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -619,7 +698,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Ganadería/Carne Bovina 1%: retención practicada -->
|
||||
<!-- ISR livestock/beef 1%: withholding made -->
|
||||
<record id="do_tcl_isr_bovine_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_bovine_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -635,7 +714,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Exportadores 2.5%: retención sufrida -->
|
||||
<!-- ISR exporters 2.5%: withholding suffered -->
|
||||
<record id="do_tcl_isr_exporter_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_exporter_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -651,7 +730,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Premios 25% -->
|
||||
<!-- ISR prizes 25% -->
|
||||
<record id="do_tcl_isr_prem_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_premios_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -709,6 +788,34 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_betting15_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_premios_tramos_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_betting_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_betting15_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_premios_tramos_en"/>
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_betting_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_trag15_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_premios_tramos_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_tragamonedas_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_trag15_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_premios_tramos_en"/>
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_tragamonedas_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_other10_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_other_income_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -723,8 +830,22 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_other15_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_other_income_en"/>
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_other_income_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_other15_cr_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_other_income_en"/>
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_other_income_15_en"/>
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Exterior 27% -->
|
||||
<!-- Foreign-payment ISR 27% -->
|
||||
<record id="do_tcl_isr_ext27_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_ext_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -740,7 +861,23 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISR Exterior 10% -->
|
||||
<!-- Foreign-payment ISR 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>
|
||||
|
||||
<!-- Foreign-payment ISR 10% -->
|
||||
<record id="do_tcl_isr_ext10_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_ext_en"/>
|
||||
<field name="operator">-</field>
|
||||
@@ -756,7 +893,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISC Bebidas alcohólicas -->
|
||||
<!-- ISC alcoholic beverages -->
|
||||
<record id="do_tcl_isc_beb_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isc_bebidas_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -772,7 +909,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISC Tabaco -->
|
||||
<!-- ISC tobacco -->
|
||||
<record id="do_tcl_isc_tab_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isc_tabaco_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -788,7 +925,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISC Telecomunicaciones -->
|
||||
<!-- ISC telecommunications -->
|
||||
<record id="do_tcl_isc_tel_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isc_telecom_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -804,7 +941,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISC Combustibles Fósiles -->
|
||||
<!-- ISC fossil fuels -->
|
||||
<record id="do_tcl_isc_comb_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isc_combustibles_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -863,7 +1000,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- ISC Vehículos -->
|
||||
<!-- ISC vehicles -->
|
||||
<record id="do_tcl_isc_veh_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isc_vehiculos_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -895,7 +1032,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- Propina Legal -->
|
||||
<!-- Legal service charge -->
|
||||
<record id="do_tcl_prop_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_others_tip_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -911,7 +1048,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- Impuesto Cheques y Transferencias -->
|
||||
<!-- Tax on checks and transfers -->
|
||||
<record id="do_tcl_chq_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_others_checks_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -941,7 +1078,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- Impuesto Mínimo a los Activos -->
|
||||
<!-- Asset tax -->
|
||||
<record id="do_tcl_act_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_others_assets_en"/>
|
||||
<field name="operator">+</field>
|
||||
@@ -957,7 +1094,7 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
|
||||
<!-- Impuesto sobre Transferencia Inmobiliaria -->
|
||||
<!-- Real-estate transfer tax -->
|
||||
<record id="do_tcl_iti_inv_en" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_others_iti_en"/>
|
||||
<field name="operator">+</field>
|
||||
|
||||
+144
-10
@@ -1,10 +1,6 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<tryton>
|
||||
<data language="es_419">
|
||||
<record id="do_tc_root_es_419" model="account.tax.code.template">
|
||||
<field name="name">Impuestos República Dominicana</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
</record>
|
||||
<record id="do_tc_itbis_es_419" model="account.tax.code.template">
|
||||
<field name="name">ITBIS — Balance Neto (Débito − Crédito)</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
@@ -70,6 +66,11 @@
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="parent" ref="do_tc_itbis_es_419" />
|
||||
</record>
|
||||
<record id="do_tc_itbis_exempt_es_419" model="account.tax.code.template">
|
||||
<field name="name">ITBIS Exento — Base Imponible</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="parent" ref="do_tc_itbis_es_419" />
|
||||
</record>
|
||||
<record id="do_tc_itbis_tasa_cero_es_419" model="account.tax.code.template">
|
||||
<field name="name">ITBIS Tasa Cero — Base Imponible (Exportaciones / Zona Franca)</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
@@ -86,7 +87,7 @@
|
||||
<field name="parent" ref="do_tc_isr_es_419" />
|
||||
</record>
|
||||
<record id="do_tc_isr_servicios_es_419" model="account.tax.code.template">
|
||||
<field name="name">Retención ISR Honorarios 10% (Personas Físicas)</field>
|
||||
<field name="name">Retención ISR Honorarios y Servicios (Personas Físicas)</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="parent" ref="do_tc_isr_es_419" />
|
||||
</record>
|
||||
@@ -106,7 +107,7 @@
|
||||
<field name="parent" ref="do_tc_isr_es_419" />
|
||||
</record>
|
||||
<record id="do_tc_isr_alquileres_es_419" model="account.tax.code.template">
|
||||
<field name="name">Retención ISR Alquileres 10%</field>
|
||||
<field name="name">Retención ISR Alquileres (Personas Físicas)</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="parent" ref="do_tc_isr_es_419" />
|
||||
</record>
|
||||
@@ -131,17 +132,17 @@
|
||||
<field name="parent" ref="do_tc_isr_es_419" />
|
||||
</record>
|
||||
<record id="do_tc_isr_premios_es_419" model="account.tax.code.template">
|
||||
<field name="name">Retención ISR Premios y Loterías 25% (Art. 321 CT)</field>
|
||||
<field name="name">Retención ISR Premios, Loterías, Rifas y Apuestas 25%</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="parent" ref="do_tc_isr_es_419" />
|
||||
</record>
|
||||
<record id="do_tc_isr_premios_tramos_es_419" model="account.tax.code.template">
|
||||
<field name="name">Retención ISR Premios 10% / 15% y Tragamonedas</field>
|
||||
<field name="name">Retención ISR Premios de Apuestas y Tragamonedas</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="parent" ref="do_tc_isr_es_419" />
|
||||
</record>
|
||||
<record id="do_tc_isr_other_income_es_419" model="account.tax.code.template">
|
||||
<field name="name">Retención ISR Otras Rentas 10%</field>
|
||||
<field name="name">Retención ISR Otras Rentas</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="parent" ref="do_tc_isr_es_419" />
|
||||
</record>
|
||||
@@ -409,6 +410,13 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_air_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_itbis_airline_100_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_soc_suf_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_es_419" />
|
||||
<field name="operator">+</field>
|
||||
@@ -416,6 +424,13 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_soc_suf_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_itbis_society_30_suf_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_hot_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_es_419" />
|
||||
<field name="operator">+</field>
|
||||
@@ -423,6 +438,13 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_hot_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_itbis_hotel_100_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_state_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_es_419" />
|
||||
<field name="operator">+</field>
|
||||
@@ -430,6 +452,13 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_ret_itbis_state_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_ret_sectorial_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_itbis_state_100_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_itbis_tc_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_tasa_cero_es_419" />
|
||||
<field name="operator">+</field>
|
||||
@@ -437,6 +466,27 @@
|
||||
<field name="amount">base</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_itbis_tc_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_tasa_cero_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_itbis_tasa_cero_es_419" />
|
||||
<field name="amount">base</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_itbis_exempt_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_exempt_es_419" />
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_itbis_exento_es_419" />
|
||||
<field name="amount">base</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_itbis_exempt_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_itbis_exempt_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_itbis_exento_es_419" />
|
||||
<field name="amount">base</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_hon_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_honorarios_es_419" />
|
||||
<field name="operator">-</field>
|
||||
@@ -465,6 +515,20 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_serv15_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_servicios_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_serv15_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_servicios_es_419" />
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_div_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_dividendos_es_419" />
|
||||
<field name="operator">-</field>
|
||||
@@ -521,6 +585,20 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_alq15_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_alquileres_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_alq_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_alq15_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_alquileres_es_419" />
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_alq_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_est_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_gobierno_es_419" />
|
||||
<field name="operator">+</field>
|
||||
@@ -633,6 +711,34 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_betting15_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_premios_tramos_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_betting_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_betting15_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_premios_tramos_es_419" />
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_betting_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_trag15_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_premios_tramos_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_tragamonedas_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_trag15_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_premios_tramos_es_419" />
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_tragamonedas_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_other10_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_other_income_es_419" />
|
||||
<field name="operator">-</field>
|
||||
@@ -647,6 +753,20 @@
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_other15_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_other_income_es_419" />
|
||||
<field name="operator">-</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_other_income_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">invoice</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_other15_cr_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_other_income_es_419" />
|
||||
<field name="operator">+</field>
|
||||
<field name="tax" ref="do_tax_ret_isr_other_income_15_es_419" />
|
||||
<field name="amount">tax</field>
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
<record id="do_tcl_isr_ext27_inv_es_419" model="account.tax.code.line.template">
|
||||
<field name="code" ref="do_tc_isr_ext_es_419" />
|
||||
<field name="operator">-</field>
|
||||
@@ -661,6 +781,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>
|
||||
@@ -872,4 +1006,4 @@
|
||||
<field name="type">credit</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
</tryton>
|
||||
|
||||
+162
-90
@@ -1,7 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<tryton>
|
||||
<data language="en">
|
||||
<!-- ===== Grupos de impuestos ===== -->
|
||||
<!-- ===== Tax groups ===== -->
|
||||
<record id="do_tax_group_itbis_en" model="account.tax.group">
|
||||
<field name="name">ITBIS</field>
|
||||
<field name="code">ITBIS</field>
|
||||
@@ -12,11 +12,6 @@
|
||||
<field name="code">ISR</field>
|
||||
<field name="kind">both</field>
|
||||
</record>
|
||||
<record id="do_tax_group_exempt_en" model="account.tax.group">
|
||||
<field name="name">Exempt / Zero Rate</field>
|
||||
<field name="code">EX0</field>
|
||||
<field name="kind">both</field>
|
||||
</record>
|
||||
<record id="do_tax_group_isc_en" model="account.tax.group">
|
||||
<field name="name">ISC - Selective Consumer</field>
|
||||
<field name="code">ISC</field>
|
||||
@@ -39,11 +34,11 @@
|
||||
</record>
|
||||
</data>
|
||||
<data language="en">
|
||||
<!-- ===== Impuestos ===== -->
|
||||
<!-- ===== Taxes ===== -->
|
||||
<!-- invoice_account / credit_note_account → accounts from account_chart_do_en.xml -->
|
||||
<!-- description: texto corto visible en líneas de factura -->
|
||||
<!-- legal_notice: cita legal (~72 caracteres) — ver IMPUESTOS_RD.md -->
|
||||
<!-- ══════ ITBIS — Arts. 335-392 CT Ley 11-92; Decreto 293-11 ══════ -->
|
||||
<!-- description: short text displayed on invoice lines -->
|
||||
<!-- legal_notice: concise legal citation -->
|
||||
<!-- ══════ ITBIS — Tax Code Arts. 335-392; Decree 293-11 ══════ -->
|
||||
<record id="do_tax_itbis_18_venta_en" model="account.tax.template">
|
||||
<field name="name">ITBIS 18% — Sales (Legal and Natural Persons)</field>
|
||||
<field name="description">ITBIS 18% Sales</field>
|
||||
@@ -53,7 +48,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020101_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020101_en" />
|
||||
<field name="legal_notice">Arts. 335-392 CT Ley 11-92; Ley 253-12 Art. 10; Decreto 293-11</field>
|
||||
<field name="legal_notice">Tax Code Arts. 335-392; Law 253-12 Art. 10; Decree 293-11</field>
|
||||
</record>
|
||||
<record id="do_tax_itbis_16_venta_en" model="account.tax.template">
|
||||
<field name="name">ITBIS 16% — Special Rate Sales (Legal and Natural Persons)</field>
|
||||
@@ -64,7 +59,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020102_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020102_en" />
|
||||
<field name="legal_notice">Art. 345 CT Ley 11-92 mod. Ley 253-12 — tasa especial 16%</field>
|
||||
<field name="legal_notice">Tax Code Art. 345, amended by Law 253-12 — special 16% rate</field>
|
||||
</record>
|
||||
<record id="do_tax_itbis_18_compra_en" model="account.tax.template">
|
||||
<field name="name">ITBIS 18% — Purchases / Tax Credit (Legal and Natural Persons)</field>
|
||||
@@ -75,7 +70,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_11040101_en" />
|
||||
<field name="credit_note_account" ref="do_account_11040101_en" />
|
||||
<field name="legal_notice">Arts. 349-357 CT Ley 11-92 — Crédito fiscal ITBIS; Decreto 293-11</field>
|
||||
<field name="legal_notice">Tax Code Arts. 349-357 — ITBIS input tax credit; Decree 293-11</field>
|
||||
</record>
|
||||
<record id="do_tax_itbis_16_compra_en" model="account.tax.template">
|
||||
<field name="name">ITBIS 16% — Purchases / Tax Credit Special Rate</field>
|
||||
@@ -86,7 +81,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_11040102_en" />
|
||||
<field name="credit_note_account" ref="do_account_11040102_en" />
|
||||
<field name="legal_notice">Art. 345 CT Ley 11-92 — Crédito fiscal tasa especial 16%</field>
|
||||
<field name="legal_notice">Tax Code Art. 345 — input tax credit at the special 16% rate</field>
|
||||
</record>
|
||||
<record id="do_tax_itbis_exento_en" model="account.tax.template">
|
||||
<field name="name">Exempt ITBIS — Exempt Goods and Services (Legal and Natural Persons)</field>
|
||||
@@ -94,7 +89,7 @@
|
||||
<field name="type">none</field>
|
||||
<field name="group" ref="do_tax_group_itbis_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="legal_notice">Arts. 343-344 CT Ley 11-92; Ley 288-04; NG 12-22 DGII</field>
|
||||
<field name="legal_notice">Tax Code Arts. 343-344; Law 288-04; DGII General Rule 12-22</field>
|
||||
</record>
|
||||
<record id="do_tax_itbis_tasa_cero_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Zero Rate — Exports and Free Zone (Legal and Natural Persons)</field>
|
||||
@@ -105,9 +100,9 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020105_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020105_en" />
|
||||
<field name="legal_notice">Art. 342 CT; Ley 557-05; Ley 8-90 Zonas Francas; NG 05-19 DGII</field>
|
||||
<field name="legal_notice">Tax Code Art. 342; Laws 557-05 and 8-90; DGII General Rule 05-19</field>
|
||||
</record>
|
||||
<!-- Retención ITBIS 30% Gran Contribuyente: tasa negativa (-5.4%) = 30% × 18% sobre la base -->
|
||||
<!-- Large-taxpayer ITBIS withholding: -5.4% of base = 30% of 18% -->
|
||||
<record id="do_tax_ret_itbis_30_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withholding 30% — Large Taxpayer Agent (Legal and Natural Persons)</field>
|
||||
<field name="description">ITBIS Withholding Large Taxpayer 30%</field>
|
||||
@@ -117,9 +112,9 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021101_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021101_en" />
|
||||
<field name="legal_notice">NG 01-11 DGII 2011; Arts. 309 y 337 CT — Grandes Contribuyentes</field>
|
||||
<field name="legal_notice">DGII General Rule 01-11; Tax Code Arts. 309 and 337 — large taxpayers</field>
|
||||
</record>
|
||||
<!-- ══════ ISR RETENCIONES — Arts. 307-309 CT Ley 11-92; Decreto 95-12 ══════ -->
|
||||
<!-- ══════ ISR WITHHOLDINGS — Tax Code Arts. 307-309; Decree 95-12 ══════ -->
|
||||
<record id="do_tax_ret_isr_hon_5_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 5% — Fees and Services to Legal Entities</field>
|
||||
<field name="description">ISR Withholding Legal Entity 5%</field>
|
||||
@@ -129,18 +124,31 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021301_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021301_en" />
|
||||
<field name="legal_notice">Art. 309 CT Ley 11-92; Decreto 95-12 — Honorarios personas jurídicas</field>
|
||||
<field name="legal_notice">Tax Code Art. 309; Decree 95-12 — fees paid to legal entities</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_serv_10_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 10% — Fees and Services to Individuals</field>
|
||||
<field name="description">ISR Withholding Individual 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021302_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021302_en" />
|
||||
<field name="legal_notice">Art. 309 CT Ley 11-92; Decreto 95-12 — Honorarios personas físicas</field>
|
||||
<field name="legal_notice">Tax Code Art. 309; Decree 95-12 — fees paid to individuals</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_serv_15_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 15% — Fees and Services Provided by Individuals</field>
|
||||
<field name="description">ISR Withholding Individual 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_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021303_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021303_en" />
|
||||
<field name="legal_notice">Tax Code Art. 309(b), amended by Law 30-26 Art. 17 — services provided by individuals</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_div_10_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 10% — Dividends and Distributed Profits (Individuals and Legal Entities)</field>
|
||||
@@ -151,7 +159,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020601_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020601_en" />
|
||||
<field name="legal_notice">Art. 308 CT Ley 11-92; Decreto 95-12; Formulario IR-18</field>
|
||||
<field name="legal_notice">Tax Code Art. 308; Decree 95-12; DGII Form IR-18</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_int_10_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 10% — Interest to Individuals (NG 07-19)</field>
|
||||
@@ -162,18 +170,31 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021501_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021501_en" />
|
||||
<field name="legal_notice">NG 07-19 DGII; Art. 306 bis CT — Intereses personas físicas, definitivo</field>
|
||||
<field name="legal_notice">DGII General Rule 07-19; Tax Code Art. 306 bis — interest paid to individuals</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_alq_10_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 10% — Rentals and Leases (Natural and Legal Persons)</field>
|
||||
<field name="description">ISR Rental Withholding 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021401_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021401_en" />
|
||||
<field name="legal_notice">Art. 309 CT; NG 08-11 DGII — Alquileres personas físicas y jurídicas</field>
|
||||
<field name="legal_notice">Tax Code Art. 309; DGII General Rule 08-11 — rentals and leases</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_alq_15_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 15% — Rentals and Leases Provided by Individuals</field>
|
||||
<field name="description">ISR Rental 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_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021402_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021402_en" />
|
||||
<field name="legal_notice">Tax Code Art. 309(a), amended by Law 30-26 Art. 17 — rentals provided by individuals</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_est_15_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 1.5% — State/Public Sector Payments (Natural and Legal Persons)</field>
|
||||
@@ -184,7 +205,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_11040801_en" />
|
||||
<field name="credit_note_account" ref="do_account_11040801_en" />
|
||||
<field name="legal_notice">Art. 309 CT; Decreto 95-12; Formulario 623 DGII — Sector público</field>
|
||||
<field name="legal_notice">Tax Code Art. 309; Decree 95-12; DGII Form 623 — public sector</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_est_5_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 5% — State/Public Sector Payments (Natural and Legal Persons)</field>
|
||||
@@ -195,7 +216,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_11040802_en" />
|
||||
<field name="credit_note_account" ref="do_account_11040802_en" />
|
||||
<field name="legal_notice">Art. 309 CT mod. Ley 253-12 — retención pagos del Estado 5%</field>
|
||||
<field name="legal_notice">Tax Code Art. 309, amended by Law 253-12 — 5% on state payments</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_bovine_1_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 1% — Bovine Purchases from Unregistered Individuals</field>
|
||||
@@ -207,7 +228,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021801_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021801_en" />
|
||||
<field name="legal_notice">NG 04-2025 arts. 2, 4, 5 y 11 — 1% del monto facturado</field>
|
||||
<field name="legal_notice">DGII General Rule 04-2025 Arts. 2, 4, 5 and 11 — 1% of billed amount</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_exporter_25_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 2.5% — Exporters in Sales to the Local Market</field>
|
||||
@@ -218,7 +239,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_11040803_en" />
|
||||
<field name="credit_note_account" ref="do_account_11040803_en" />
|
||||
<field name="legal_notice">NG 15-07 DGII — retención 2.5% ventas locales de exportadores</field>
|
||||
<field name="legal_notice">DGII General Rule 15-07 — 2.5% on exporters' domestic sales</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_int_pj_1_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 1% — Interest to Legal Entities (NG 07-19)</field>
|
||||
@@ -229,10 +250,10 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021502_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021502_en" />
|
||||
<field name="legal_notice">NG 07-19 DGII 2019; Art. 306 bis CT — Intereses personas jurídicas</field>
|
||||
<field name="legal_notice">DGII General Rule 07-19; Tax Code Art. 306 bis — interest paid to legal entities</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_premios_25_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 25% — Lottery Prizes, Draws and Raffles (Natural and Legal Persons)</field>
|
||||
<field name="name">ISR Withholding 25% — Prizes, Lotteries, Raffles and Betting</field>
|
||||
<field name="description">ISR Withholding on Prizes 25%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-25')/100" />
|
||||
@@ -240,77 +261,129 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021701_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021701_en" />
|
||||
<field name="legal_notice">Art. 321 CT Ley 11-92; Decreto 95-12 — Premios y loterías, definitivo</field>
|
||||
<field name="legal_notice">Tax Code Art. 309(c), amended by Law 30-26 Art. 17 — prizes in general and betting prizes above RD$600,000</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_premios_10_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 10% — Awards RD$100,001 to RD$500,000</field>
|
||||
<field name="description">ISR Withholding on Prizes 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021702_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021702_en" />
|
||||
<field name="legal_notice">Art. 309 CT mod. Ley 253-12 — premios RD$100,001 a RD$500,000 10%</field>
|
||||
<field name="legal_notice">Tax Code Art. 309, amended by Law 253-12 — prizes from RD$100,001 to RD$500,000</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_premios_15_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 15% — Awards RD$500,001 to RD$1,000,000</field>
|
||||
<field name="description">ISR Withholding on Prizes 15%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-15')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021703_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021703_en" />
|
||||
<field name="legal_notice">Art. 309 CT mod. Ley 253-12 — premios RD$500,001 a RD$1,000,000 15%</field>
|
||||
<field name="legal_notice">Tax Code Art. 309, amended by Law 253-12 — prizes from RD$500,001 to RD$1,000,000</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_betting_15_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 15% — Betting Prizes RD$200,001 to RD$600,000</field>
|
||||
<field name="description">ISR Withholding Betting Prizes 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_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021705_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021705_en" />
|
||||
<field name="legal_notice">Tax Code Art. 309(c)(i), amended by Law 30-26 Art. 17 — sports and lottery betting prizes</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_tragamonedas_10_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 10% — Slot Machine Prizes</field>
|
||||
<field name="description">ISR Withholding Slot Machines 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021704_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021704_en" />
|
||||
<field name="legal_notice">Art. 309 CT mod. Ley 253-12 — premios máquinas tragamonedas 10%</field>
|
||||
<field name="legal_notice">Tax Code Art. 309, amended by Law 253-12 — slot-machine prizes</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_tragamonedas_15_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 15% — Slot-Machine Prizes</field>
|
||||
<field name="description">ISR Withholding Slot Machines 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_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021706_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021706_en" />
|
||||
<field name="legal_notice">Tax Code Art. 309(d), amended by Law 30-26 Art. 17 — slot-machine prizes</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_other_income_10_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 10% — Other Income Not Covered</field>
|
||||
<field name="description">ISR Withholding Other Income 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020301_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020301_en" />
|
||||
<field name="legal_notice">Art. 309 CT mod. Ley 253-12 — otras rentas no contempladas 10%</field>
|
||||
<field name="legal_notice">Tax Code Art. 309, amended by Law 253-12 — other income not covered</field>
|
||||
</record>
|
||||
<!-- ══════ ISR PAGOS AL EXTERIOR — Arts. 305-306 CT Ley 11-92 ══════ -->
|
||||
<record id="do_tax_ret_isr_other_income_15_en" model="account.tax.template">
|
||||
<field name="name">ISR Withholding 15% — Other Income Not Expressly Covered</field>
|
||||
<field name="description">ISR Withholding Other Income 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_en" />
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020302_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020302_en" />
|
||||
<field name="legal_notice">Tax Code Art. 309(f), amended by Law 30-26 Art. 17 — other income not expressly covered</field>
|
||||
</record>
|
||||
<!-- ══════ FOREIGN-PAYMENT ISR — Tax Code Arts. 305-306 ══════ -->
|
||||
<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" />
|
||||
<field name="group" ref="do_tax_group_isr_en" />
|
||||
<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_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">Tax Code Art. 305 — taxable payments not subject to a special rate</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" />
|
||||
<field name="group" ref="do_tax_group_isr_en" />
|
||||
<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_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. -->
|
||||
<!-- ══════ ADDITIONAL ITBIS — Special DGII withholdings ══════ -->
|
||||
<!-- Taxable services with 100% ITBIS withholding under General Rule 01-11. -->
|
||||
<record id="do_tax_ret_itbis_100_inf_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withholding 100% — Taxable Services Subject to Withholding</field>
|
||||
<field name="description">ITBIS Withholding Services 100%</field>
|
||||
@@ -320,10 +393,10 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020201_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020201_en" />
|
||||
<field name="legal_notice">NG 01-11 DGII — Retención 100% ITBIS en servicios gravados</field>
|
||||
<field name="legal_notice">DGII General Rule 01-11 — 100% of ITBIS on taxable services</field>
|
||||
</record>
|
||||
<!-- Proveedor informal de bienes gravados: la NG 08-10 establece retención
|
||||
del 75% del ITBIS. La tasa contable es -13.5% = 75% × 18%. -->
|
||||
<!-- Taxable goods from informal suppliers: General Rule 08-10 requires
|
||||
withholding 75% of ITBIS. The accounting rate is -13.5% = 75% × 18%. -->
|
||||
<record id="do_tax_ret_itbis_75_inf_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withholding 75% — Informal Supplier Goods (B11 / e-CF E41)</field>
|
||||
<field name="description">ITBIS Withholding Informal Supplier 75%</field>
|
||||
@@ -333,7 +406,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021201_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021201_en" />
|
||||
<field name="legal_notice">NG 08-10 DGII — Retención 75% ITBIS compras a proveedores informales</field>
|
||||
<field name="legal_notice">DGII General Rule 08-10 — 75% of ITBIS on informal-supplier purchases</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_75_inf_16_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withholding 75% — Goods Informal Supplier Rate 16%</field>
|
||||
@@ -344,7 +417,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021202_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021202_en" />
|
||||
<field name="legal_notice">IT-1 DGII casilla 57; NG 08-10/05-19 — 75% de ITBIS tasa 16%</field>
|
||||
<field name="legal_notice">DGII Form IT-1 box 57; General Rules 08-10 and 05-19 — 75% at the 16% rate</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_100_goods_18_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withholding 100% — Goods Informal Supplier Rate 18%</field>
|
||||
@@ -355,7 +428,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021203_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021203_en" />
|
||||
<field name="legal_notice">IT-1 DGII casilla 56 — bienes comprobante de compras, retención 100%</field>
|
||||
<field name="legal_notice">DGII Form IT-1 box 56 — goods supported by a purchase receipt, 100% withholding</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_100_goods_16_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withholding 100% — Goods Informal Supplier Rate 16%</field>
|
||||
@@ -366,7 +439,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021204_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021204_en" />
|
||||
<field name="legal_notice">IT-1 DGII casilla 57 — bienes comprobante de compras, retención 100%</field>
|
||||
<field name="legal_notice">DGII Form IT-1 box 57 — goods supported by a purchase receipt, 100% withholding</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_rst_18_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withholding 100% — RST Taxpayers Rate 18%</field>
|
||||
@@ -377,7 +450,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020202_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020202_en" />
|
||||
<field name="legal_notice">IT-1 DGII casilla 53 — ITBIS retenido RST operaciones gravadas 18%</field>
|
||||
<field name="legal_notice">DGII Form IT-1 box 53 — ITBIS withheld from RST taxable transactions at 18%</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_rst_16_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withholding 100% — RST Taxpayers Rate 16%</field>
|
||||
@@ -388,7 +461,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020203_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020203_en" />
|
||||
<field name="legal_notice">IT-1 DGII casilla 54 — ITBIS retenido RST operaciones gravadas 16%</field>
|
||||
<field name="legal_notice">DGII Form IT-1 box 54 — ITBIS withheld from RST taxable transactions at 16%</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_insurance_100_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withholding 100% — Insurance Companies</field>
|
||||
@@ -399,7 +472,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020204_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020204_en" />
|
||||
<field name="legal_notice">NG 04-13 DGII — aseguradoras retienen 100% del ITBIS facturado</field>
|
||||
<field name="legal_notice">DGII General Rule 04-13 — insurers withhold 100% of billed ITBIS</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_airline_100_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withheld by Airlines 100% — BSP/IATA</field>
|
||||
@@ -410,7 +483,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_11040701_en" />
|
||||
<field name="credit_note_account" ref="do_account_11040701_en" />
|
||||
<field name="legal_notice">IT-1 DGII casilla 28; NG 02-05 — ITBIS retenido por aerolíneas</field>
|
||||
<field name="legal_notice">DGII Form IT-1 box 28; General Rule 02-05 — ITBIS withheld by airlines</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_society_30_suf_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withheld by Companies 30% — Withholding Suffered</field>
|
||||
@@ -421,7 +494,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_11040702_en" />
|
||||
<field name="credit_note_account" ref="do_account_11040702_en" />
|
||||
<field name="legal_notice">IT-1 DGII casilla 29; NG 02-05/07-09 — sociedades retienen ITBIS</field>
|
||||
<field name="legal_notice">DGII Form IT-1 box 29; General Rules 02-05 and 07-09 — ITBIS withheld by companies</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_hotel_100_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withheld by Hotels 100% — Package Commissions</field>
|
||||
@@ -432,7 +505,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_11040703_en" />
|
||||
<field name="credit_note_account" ref="do_account_11040703_en" />
|
||||
<field name="legal_notice">IT-1 DGII casilla 30; NG 02-05 — hoteles retienen ITBIS en comisiones</field>
|
||||
<field name="legal_notice">DGII Form IT-1 box 30; General Rule 02-05 — ITBIS withheld by hotels on commissions</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_itbis_state_100_en" model="account.tax.template">
|
||||
<field name="name">ITBIS Withheld by State Entities 100%</field>
|
||||
@@ -443,9 +516,9 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_11040704_en" />
|
||||
<field name="credit_note_account" ref="do_account_11040704_en" />
|
||||
<field name="legal_notice">IT-1 DGII casilla 31 — ITBIS retenido por instituciones del Estado</field>
|
||||
<field name="legal_notice">DGII Form IT-1 box 31 — ITBIS withheld by state institutions</field>
|
||||
</record>
|
||||
<!-- ══════ ISC — IMPUESTO SELECTIVO AL CONSUMO — Arts. 393-441 CT ══════ -->
|
||||
<!-- ══════ ISC — SELECTIVE CONSUMPTION TAX — Tax Code Arts. 393-441 ══════ -->
|
||||
<record id="do_tax_isc_bebidas_alc_en" model="account.tax.template">
|
||||
<field name="name">ISC 10% — Alcoholic Beverages (Wines, Rum, Whiskey and Spirits)</field>
|
||||
<field name="description">ISC Alcoholic Beverages 10%</field>
|
||||
@@ -455,7 +528,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020801_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020801_en" />
|
||||
<field name="legal_notice">Ley 253-12 mod. Art. 375 CT — ISC bebidas alcohólicas ad valorem 10%</field>
|
||||
<field name="legal_notice">Law 253-12, amending Tax Code Art. 375 — 10% ad valorem ISC on alcoholic beverages</field>
|
||||
</record>
|
||||
<record id="do_tax_isc_tabaco_en" model="account.tax.template">
|
||||
<field name="name">ISC 20% — Tobacco, Cigarettes and Derivatives</field>
|
||||
@@ -466,7 +539,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020802_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020802_en" />
|
||||
<field name="legal_notice">Arts. 393-441 CT Ley 11-92 — ISC tabaco y cigarrillos, ad valorem 20%</field>
|
||||
<field name="legal_notice">Tax Code Arts. 393-441 — 20% ad valorem ISC on tobacco and cigarettes</field>
|
||||
</record>
|
||||
<record id="do_tax_isc_telecom_en" model="account.tax.template">
|
||||
<field name="name">ISC 10% — Telecommunications Services</field>
|
||||
@@ -477,7 +550,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020803_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020803_en" />
|
||||
<field name="legal_notice">Arts. 393-441 CT; Ley 253-12 — ISC servicios telecomunicaciones 10%</field>
|
||||
<field name="legal_notice">Tax Code Arts. 393-441; Law 253-12 — 10% ISC on telecommunications services</field>
|
||||
</record>
|
||||
<record id="do_tax_isc_combustibles_16_en" model="account.tax.template">
|
||||
<field name="name">ISC 16% — Fossil Fuels and Petroleum Derivatives</field>
|
||||
@@ -488,7 +561,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020804_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020804_en" />
|
||||
<field name="legal_notice">Ley 253-12 mod. Art. 367 CT — ISC combustibles fósiles 16%</field>
|
||||
<field name="legal_notice">Law 253-12, amending Tax Code Art. 367 — 16% ISC on fossil fuels</field>
|
||||
</record>
|
||||
<record id="do_tax_isc_avtur_65_en" model="account.tax.template">
|
||||
<field name="name">ISC 6.5% — Avtur Reduced Rate</field>
|
||||
@@ -499,7 +572,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020807_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020807_en" />
|
||||
<field name="legal_notice">Ley 253-12 Art. 23 — tasa reducida Avtur 6.5% ad valorem</field>
|
||||
<field name="legal_notice">Law 253-12 Art. 23 — reduced 6.5% ad valorem rate for Avtur</field>
|
||||
</record>
|
||||
<record id="do_tax_isc_fuel_rd2_gallon_en" model="account.tax.template">
|
||||
<field name="name">ISC RD$2.00 — Additional per Gallon Gasoline/Diesel</field>
|
||||
@@ -510,7 +583,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020808_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020808_en" />
|
||||
<field name="legal_notice">Ley 253-12 Art. 20 — adicional RD$2.00 por galón gasolina/gasoil</field>
|
||||
<field name="legal_notice">Law 253-12 Art. 20 — additional RD$2.00 per gallon of gasoline or diesel</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isc_insurance_100_en" model="account.tax.template">
|
||||
<field name="name">ISC Withholding 100% — Insurance Companies</field>
|
||||
@@ -521,10 +594,10 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020806_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020806_en" />
|
||||
<field name="legal_notice">NG 04-13 DGII — aseguradoras retienen 100% del ISC facturado</field>
|
||||
<field name="legal_notice">DGII General Rule 04-13 — insurers withhold 100% of billed ISC</field>
|
||||
</record>
|
||||
<!-- Impuesto de primera placa. El impuesto por emisiones de CO2 es distinto y
|
||||
no se modela aquí porque su tasa depende de las emisiones del vehículo. -->
|
||||
<!-- First-registration tax. The separate CO2 emissions tax is not modeled
|
||||
because its rate depends on the vehicle's emissions. -->
|
||||
<record id="do_tax_isc_vehiculos_en" model="account.tax.template">
|
||||
<field name="name">First Vehicle Registration 17% — Imported Vehicles</field>
|
||||
<field name="description">First Vehicle Plate 17%</field>
|
||||
@@ -534,12 +607,11 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020805_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020805_en" />
|
||||
<field name="legal_notice">Art. 22 Ley 557-05 — 17% sobre valor CIF para primera placa</field>
|
||||
<field name="legal_notice">Law 557-05 Art. 22 — 17% of CIF value on first registration</field>
|
||||
</record>
|
||||
<!-- ══════ CDT — CONTRIBUCIÓN INDOTEL (LEY 153-98) ══════ -->
|
||||
<!-- CDT: Contribución para el Desarrollo de las Telecomunicaciones.
|
||||
Lo recaudan las empresas de telecom de sus customeres y lo remiten a INDOTEL.
|
||||
Aparece como línea separada en facturas de telefonía e internet. -->
|
||||
<!-- ══════ CDT — INDOTEL CONTRIBUTION (LAW 153-98) ══════ -->
|
||||
<!-- Telecommunications companies collect the CDT from customers and remit
|
||||
it to INDOTEL. It appears separately on telephone and internet bills. -->
|
||||
<record id="do_tax_cdt_indotel_en" model="account.tax.template">
|
||||
<field name="name">CDT 2% — Contribution for the Development of Telecommunications (INDOTEL)</field>
|
||||
<field name="description">CDT INDOTEL 2%</field>
|
||||
@@ -549,11 +621,11 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020901_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020901_en" />
|
||||
<field name="legal_notice">Art. 26 Ley 153-98 Telecomunicaciones — CDT INDOTEL 2% ingresos brutos</field>
|
||||
<field name="legal_notice">Telecommunications Law 153-98 Art. 26 — INDOTEL CDT at 2% of gross revenue</field>
|
||||
</record>
|
||||
<!-- ══════ OTROS IMPUESTOS Y CONTRIBUCIONES ══════ -->
|
||||
<!-- Propina legal: cargo obligatorio para hoteles, restaurantes, cafés, barras
|
||||
y establecimientos que expenden alimentos o bebidas. No es general. -->
|
||||
<!-- ══════ OTHER TAXES AND CONTRIBUTIONS ══════ -->
|
||||
<!-- The legal service charge applies to hotels, restaurants, cafes, bars
|
||||
and similar establishments; it is not a general tax. -->
|
||||
<record id="do_tax_propina_10_en" model="account.tax.template">
|
||||
<field name="name">Legal Tip 10% — Restaurants, Bars and Hotels (Natural and Legal Persons)</field>
|
||||
<field name="description">Legal Tip 10%</field>
|
||||
@@ -563,10 +635,10 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020501_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020501_en" />
|
||||
<field name="legal_notice">Código de Trabajo, Ley 16-92, art. 228 — propina obligatoria 10%</field>
|
||||
<field name="legal_notice">Labour Code, Law 16-92 Art. 228 — mandatory 10% service charge</field>
|
||||
</record>
|
||||
<!-- 0.15% sobre valor de cheques y débitos bancarios electrónicos.
|
||||
Lo recauda el banco automáticamente; es un costo financiero para la empresa. -->
|
||||
<!-- 0.15% of checks and electronic bank debits. The bank collects it
|
||||
automatically as a financial cost to the company. -->
|
||||
<record id="do_tax_cheques_015_en" model="account.tax.template">
|
||||
<field name="name">Tax on Checks and Bank Transfers 0.15% (Natural and Legal Persons)</field>
|
||||
<field name="description">Checks and Transfers Tax 0.15%</field>
|
||||
@@ -577,10 +649,10 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021901_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021901_en" />
|
||||
<field name="legal_notice">Art. 382-D CT Ley 11-92 mod. Ley 288-04 — 1.5 por mil cheques/débitos</field>
|
||||
<field name="legal_notice">Tax Code Art. 382-D, amended by Law 288-04 — 1.5 per thousand on checks and debits</field>
|
||||
</record>
|
||||
<!-- 0.20% sobre valor de cheques y transferencias bancarias desde
|
||||
2026-07-03. Se mantiene separado del 0.15% histórico. -->
|
||||
<!-- 0.20% of checks and bank transfers from 2026-07-03. It remains
|
||||
separate from the historical 0.15% tax. -->
|
||||
<record id="do_tax_cheques_020_en" model="account.tax.template">
|
||||
<field name="name">Tax on Checks and Bank Transfers 0.20% (Natural and Legal Persons)</field>
|
||||
<field name="description">Checks and Transfers Tax 0.20%</field>
|
||||
@@ -591,10 +663,10 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021902_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021902_en" />
|
||||
<field name="legal_notice">Ley 30-26, vig. 2026-07-03 — 2.0 por mil cheques/transferencias</field>
|
||||
<field name="legal_notice">Law 30-26, effective 2026-07-03 — 2.0 per thousand on checks and transfers</field>
|
||||
</record>
|
||||
<!-- Impuesto anual sobre los activos imponibles. Su liquidación y crédito
|
||||
contra ISR no se automatizan mediante esta plantilla contable. -->
|
||||
<!-- Annual tax on taxable assets. This accounting template does not
|
||||
automate its assessment or credit against ISR. -->
|
||||
<record id="do_tax_activos_1_en" model="account.tax.template">
|
||||
<field name="name">Asset Tax 1% (Legal Entities)</field>
|
||||
<field name="description">Asset Tax 1%</field>
|
||||
@@ -604,10 +676,10 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21020502_en" />
|
||||
<field name="credit_note_account" ref="do_account_21020502_en" />
|
||||
<field name="legal_notice">Código Tributario, arts. 401-405; art. 404 — 1% anual</field>
|
||||
<field name="legal_notice">Tax Code Arts. 401-405; Art. 404 — 1% annually</field>
|
||||
</record>
|
||||
<!-- ITI: aplica a transferencias de bienes inmuebles. Las exenciones y la
|
||||
valoración deben revisarse al liquidar cada operación. -->
|
||||
<!-- ITI applies to real-estate transfers. Exemptions and valuation must be
|
||||
reviewed when each transaction is assessed. -->
|
||||
<record id="do_tax_iti_3_en" model="account.tax.template">
|
||||
<field name="name">Real Estate Transfer Tax 3% (Natural and Legal Persons)</field>
|
||||
<field name="description">ITI Real Estate Transfer 3%</field>
|
||||
@@ -617,7 +689,7 @@
|
||||
<field name="account" ref="do_account_root_en" />
|
||||
<field name="invoice_account" ref="do_account_21021001_en" />
|
||||
<field name="credit_note_account" ref="do_account_21021001_en" />
|
||||
<field name="legal_notice">Art. 20 Ley 288-04, mod. art. 7 Ley 173-07 — tasa 3%</field>
|
||||
<field name="legal_notice">Law 288-04 Art. 20, amended by Law 173-07 Art. 7 — 3% rate</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
|
||||
+87
-14
@@ -11,11 +11,6 @@
|
||||
<field name="code">ISR</field>
|
||||
<field name="kind">both</field>
|
||||
</record>
|
||||
<record id="do_tax_group_exempt_es_419" model="account.tax.group">
|
||||
<field name="name">Exento / Tasa Cero</field>
|
||||
<field name="code">EX0</field>
|
||||
<field name="kind">both</field>
|
||||
</record>
|
||||
<record id="do_tax_group_isc_es_419" model="account.tax.group">
|
||||
<field name="name">ISC - Selectivo al Consumo</field>
|
||||
<field name="code">ISC</field>
|
||||
@@ -128,17 +123,31 @@
|
||||
<field name="description">Retención ISR Persona Física 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21021302_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21021302_es_419" />
|
||||
<field name="legal_notice">Art. 309 CT Ley 11-92; Decreto 95-12 — Honorarios personas físicas</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_serv_15_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 15% — Honorarios y Servicios Provistos por Personas Físicas</field>
|
||||
<field name="description">Retención ISR Persona Física 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_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21021303_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21021303_es_419" />
|
||||
<field name="legal_notice">Art. 309(b) CT, modificado por el art. 17 de la Ley 30-26 — servicios provistos por personas físicas</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_div_10_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 10% — Dividendos y Utilidades Distribuidas (Personas Físicas y Jurídicas)</field>
|
||||
<field name="description">Retención ISR Dividendos 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21020601_es_419" />
|
||||
@@ -167,6 +176,18 @@
|
||||
<field name="credit_note_account" ref="do_account_21021401_es_419" />
|
||||
<field name="legal_notice">Art. 309 CT; NG 08-11 DGII — Alquileres personas físicas y jurídicas</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_alq_15_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 15% — Alquileres y Arrendamientos Provistos por Personas Físicas</field>
|
||||
<field name="description">Retención ISR Alquileres 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_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21021402_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21021402_es_419" />
|
||||
<field name="legal_notice">Art. 309(a) CT, modificado por el art. 17 de la Ley 30-26 — alquileres provistos por personas físicas</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_est_15_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 1.5% — Pagos del Estado / Sector Público (Personas Físicas y Jurídicas)</field>
|
||||
<field name="description">Retención ISR Estado 1.5%</field>
|
||||
@@ -224,7 +245,7 @@
|
||||
<field name="legal_notice">NG 07-19 DGII 2019; Art. 306 bis CT — Intereses personas jurídicas</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_premios_25_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 25% — Premios de Lotería, Sorteos y Rifas (Personas Físicas y Jurídicas)</field>
|
||||
<field name="name">Retención ISR 25% — Premios, Loterías, Rifas y Apuestas</field>
|
||||
<field name="description">Retención ISR Premios 25%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-25')/100" />
|
||||
@@ -232,13 +253,14 @@
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21021701_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21021701_es_419" />
|
||||
<field name="legal_notice">Art. 321 CT Ley 11-92; Decreto 95-12 — Premios y loterías, definitivo</field>
|
||||
<field name="legal_notice">Art. 309(c) CT, modificado por el art. 17 de la Ley 30-26 — premios en general y premios de apuestas superiores a RD$600,000</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_premios_10_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 10% — Premios RD$100,001 a RD$500,000</field>
|
||||
<field name="description">Retención ISR Premios 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21021702_es_419" />
|
||||
@@ -250,55 +272,106 @@
|
||||
<field name="description">Retención ISR Premios 15%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-15')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21021703_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21021703_es_419" />
|
||||
<field name="legal_notice">Art. 309 CT mod. Ley 253-12 — premios RD$500,001 a RD$1,000,000 15%</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_betting_15_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 15% — Premios de Apuestas RD$200,001 a RD$600,000</field>
|
||||
<field name="description">Retención ISR Premios de Apuestas 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_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21021705_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21021705_es_419" />
|
||||
<field name="legal_notice">Art. 309(c)(i) CT, modificado por el art. 17 de la Ley 30-26 — premios de apuestas deportivas y de lotería</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_tragamonedas_10_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 10% — Premios Máquinas Tragamonedas</field>
|
||||
<field name="description">Retención ISR Máquinas Tragamonedas 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21021704_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21021704_es_419" />
|
||||
<field name="legal_notice">Art. 309 CT mod. Ley 253-12 — premios máquinas tragamonedas 10%</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_tragamonedas_15_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 15% — Premios de Máquinas Tragamonedas</field>
|
||||
<field name="description">Retención ISR Máquinas Tragamonedas 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_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21021706_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21021706_es_419" />
|
||||
<field name="legal_notice">Art. 309(d) CT, modificado por el art. 17 de la Ley 30-26 — premios de máquinas tragamonedas</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_other_income_10_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 10% — Otras Rentas no Contempladas</field>
|
||||
<field name="description">Retención ISR Otras Rentas 10%</field>
|
||||
<field name="type">percentage</field>
|
||||
<field name="rate" eval="Decimal('-10')/100" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21020301_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21020301_es_419" />
|
||||
<field name="legal_notice">Art. 309 CT mod. Ley 253-12 — otras rentas no contempladas 10%</field>
|
||||
</record>
|
||||
<record id="do_tax_ret_isr_other_income_15_es_419" model="account.tax.template">
|
||||
<field name="name">Retención ISR 15% — Otras Rentas no Contempladas Expresamente</field>
|
||||
<field name="description">Retención ISR Otras Rentas 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_es_419" />
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
<field name="invoice_account" ref="do_account_21020302_es_419" />
|
||||
<field name="credit_note_account" ref="do_account_21020302_es_419" />
|
||||
<field name="legal_notice">Art. 309(f) CT, modificado por el art. 17 de la Ley 30-26 — otras rentas no contempladas expresamente</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" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<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_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" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<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_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>
|
||||
@@ -589,4 +662,4 @@
|
||||
<field name="legal_notice">Art. 20 Ley 288-04, mod. art. 7 Ley 173-07 — tasa 3%</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
</tryton>
|
||||
|
||||
+81
-25
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- account_do: Reglas de impuestos - República Dominicana -->
|
||||
<!-- account_do: Tax rules - Dominican Republic -->
|
||||
<tryton>
|
||||
<data language="en">
|
||||
<!-- ===== Reglas de impuestos ===== -->
|
||||
<!-- Regla customeres: al facturar aplica ITBIS 18% Ventas -->
|
||||
<!-- ===== Tax rules ===== -->
|
||||
<!-- Customer rule: use 18% sales ITBIS when invoicing -->
|
||||
<record id="do_tax_rule_customer_en" model="account.tax.rule.template">
|
||||
<field name="name">RD Customers Tax Rule</field>
|
||||
<field name="kind">sale</field>
|
||||
@@ -16,7 +16,7 @@
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
|
||||
<!-- Regla proveedores: al recibir factura aplica ITBIS 18% Compras -->
|
||||
<!-- Supplier rule: use 18% purchase ITBIS on incoming invoices -->
|
||||
<record id="do_tax_rule_supplier_en" model="account.tax.rule.template">
|
||||
<field name="name">RD Supplier Tax Rule</field>
|
||||
<field name="kind">purchase</field>
|
||||
@@ -29,7 +29,7 @@
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
|
||||
<!-- Regla customeres exentos de ITBIS (art. 343-344 CT: salud, educación, etc.) -->
|
||||
<!-- ITBIS-exempt customers (Tax Code Arts. 343-344) -->
|
||||
<record id="do_tax_rule_customer_exento_en" model="account.tax.rule.template">
|
||||
<field name="name">ITBIS Exempt Customers Rule (RD)</field>
|
||||
<field name="kind">sale</field>
|
||||
@@ -42,7 +42,7 @@
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
|
||||
<!-- Regla customeres Zona Franca / Exportaciones (ITBIS tasa cero, NCF B14/E44) -->
|
||||
<!-- Free-zone customers and exports (zero-rate ITBIS, NCF B14/E44) -->
|
||||
<record id="do_tax_rule_customer_zf_en" model="account.tax.rule.template">
|
||||
<field name="name">Free Zone Customers Rule / Exports (RD)</field>
|
||||
<field name="kind">sale</field>
|
||||
@@ -55,7 +55,7 @@
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
|
||||
<!-- Regla proveedores no residentes (ISR pagos al exterior Art. 305-306 CT) -->
|
||||
<!-- Non-resident suppliers (foreign-payment ISR, Tax Code Arts. 305-306) -->
|
||||
<record id="do_tax_rule_supplier_ext_en" model="account.tax.rule.template">
|
||||
<field name="name">Non-Resident Suppliers / Foreign Suppliers Rule (RD)</field>
|
||||
<field name="kind">purchase</field>
|
||||
@@ -63,12 +63,24 @@
|
||||
</record>
|
||||
<record id="do_trline_supp_ext_isr27_en" model="account.tax.rule.line.template">
|
||||
<field name="rule" ref="do_tax_rule_supplier_ext_en"/>
|
||||
<field name="group" ref="do_tax_group_isr_en"/>
|
||||
<field name="group" ref="do_tax_group_isr_ext_en"/>
|
||||
<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 -->
|
||||
<!-- Special ITBIS rates -->
|
||||
<record id="do_tax_rule_customer_itbis16_en" model="account.tax.rule.template">
|
||||
<field name="name">ITBIS Customer Rule 16% Special Rate (RD)</field>
|
||||
<field name="kind">sale</field>
|
||||
@@ -92,7 +104,7 @@
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
|
||||
<!-- Retenciones ITBIS que conservan el ITBIS base -->
|
||||
<!-- ITBIS withholdings that preserve the original ITBIS -->
|
||||
<record id="do_tax_rule_supplier_itbis_ret30_en" model="account.tax.rule.template">
|
||||
<field name="name">Supplier Rule with ITBIS Withholding 30% (RD)</field>
|
||||
<field name="kind">purchase</field>
|
||||
@@ -129,8 +141,8 @@
|
||||
<field name="keep_origin" eval="True"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
<!-- Retenciones ISR por escenario. Estas reglas se aplican sobre impuestos
|
||||
del grupo ISR; los impuestos ITBIS se mantienen separados. -->
|
||||
<!-- Scenario-specific ISR withholdings. These rules apply to ISR-group
|
||||
taxes; ITBIS taxes remain separate. -->
|
||||
<record id="do_tax_rule_supplier_isr_pj_services_en" model="account.tax.rule.template">
|
||||
<field name="name">ISR Rule Services Legal Entities 5% (RD)</field>
|
||||
<field name="kind">purchase</field>
|
||||
@@ -143,7 +155,7 @@
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
<record id="do_tax_rule_supplier_isr_pf_services_en" model="account.tax.rule.template">
|
||||
<field name="name">ISR Rule Services Individuals 10% (RD)</field>
|
||||
<field name="name">Individual Services ISR Rule (RD)</field>
|
||||
<field name="kind">purchase</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
</record>
|
||||
@@ -151,10 +163,18 @@
|
||||
<field name="rule" ref="do_tax_rule_supplier_isr_pf_services_en"/>
|
||||
<field name="group" ref="do_tax_group_isr_en"/>
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_10_en"/>
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
<record id="do_trline_supp_isr_pf_services_15_en" model="account.tax.rule.line.template">
|
||||
<field name="rule" ref="do_tax_rule_supplier_isr_pf_services_en"/>
|
||||
<field name="group" ref="do_tax_group_isr_en"/>
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_15_en"/>
|
||||
<field name="start_date" eval="datetime.date(2026, 7, 1)"/>
|
||||
<field name="sequence" eval="20"/>
|
||||
</record>
|
||||
<record id="do_tax_rule_supplier_isr_rent_en" model="account.tax.rule.template">
|
||||
<field name="name">Rent ISR Rule 10% (RD)</field>
|
||||
<field name="name">Individual Rental ISR Rule (RD)</field>
|
||||
<field name="kind">purchase</field>
|
||||
<field name="account" ref="do_account_root_en"/>
|
||||
</record>
|
||||
@@ -162,8 +182,16 @@
|
||||
<field name="rule" ref="do_tax_rule_supplier_isr_rent_en"/>
|
||||
<field name="group" ref="do_tax_group_isr_en"/>
|
||||
<field name="tax" ref="do_tax_ret_isr_alq_10_en"/>
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
<record id="do_trline_supp_isr_rent_15_en" model="account.tax.rule.line.template">
|
||||
<field name="rule" ref="do_tax_rule_supplier_isr_rent_en"/>
|
||||
<field name="group" ref="do_tax_group_isr_en"/>
|
||||
<field name="tax" ref="do_tax_ret_isr_alq_15_en"/>
|
||||
<field name="start_date" eval="datetime.date(2026, 7, 1)"/>
|
||||
<field name="sequence" eval="20"/>
|
||||
</record>
|
||||
<record id="do_tax_rule_customer_state_isr15_en" model="account.tax.rule.template">
|
||||
<field name="name">Customer Rule State / Public Sector ISR 1.5% (RD)</field>
|
||||
<field name="kind">sale</field>
|
||||
@@ -219,11 +247,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">
|
||||
@@ -264,8 +297,16 @@
|
||||
<field name="rule" ref="do_tax_rule_supplier_informal_services_en"/>
|
||||
<field name="group" ref="do_tax_group_isr_en"/>
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_10_en"/>
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)"/>
|
||||
<field name="sequence" eval="20"/>
|
||||
</record>
|
||||
<record id="do_trline_supp_inf_isr15_en" model="account.tax.rule.line.template">
|
||||
<field name="rule" ref="do_tax_rule_supplier_informal_services_en"/>
|
||||
<field name="group" ref="do_tax_group_isr_en"/>
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_15_en"/>
|
||||
<field name="start_date" eval="datetime.date(2026, 7, 1)"/>
|
||||
<field name="sequence" eval="30"/>
|
||||
</record>
|
||||
|
||||
<record id="do_tax_rule_supplier_rst_en" model="account.tax.rule.template">
|
||||
<field name="name">RST Provider Rule with ITBIS Withholding (RD)</field>
|
||||
@@ -299,38 +340,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>
|
||||
|
||||
+71
-15
@@ -52,10 +52,22 @@
|
||||
</record>
|
||||
<record id="do_trline_supp_ext_isr27_es_419" model="account.tax.rule.line.template">
|
||||
<field name="rule" ref="do_tax_rule_supplier_ext_es_419" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="group" ref="do_tax_group_isr_ext_es_419" />
|
||||
<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>
|
||||
@@ -126,7 +138,7 @@
|
||||
<field name="sequence" eval="10" />
|
||||
</record>
|
||||
<record id="do_tax_rule_supplier_isr_pf_services_es_419" model="account.tax.rule.template">
|
||||
<field name="name">Regla ISR Servicios Personas Físicas 10% (RD)</field>
|
||||
<field name="name">Regla ISR Servicios de Personas Físicas (RD)</field>
|
||||
<field name="kind">purchase</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
</record>
|
||||
@@ -134,10 +146,18 @@
|
||||
<field name="rule" ref="do_tax_rule_supplier_isr_pf_services_es_419" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_10_es_419" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="sequence" eval="10" />
|
||||
</record>
|
||||
<record id="do_trline_supp_isr_pf_services_15_es_419" model="account.tax.rule.line.template">
|
||||
<field name="rule" ref="do_tax_rule_supplier_isr_pf_services_es_419" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_15_es_419" />
|
||||
<field name="start_date" eval="datetime.date(2026, 7, 1)" />
|
||||
<field name="sequence" eval="20" />
|
||||
</record>
|
||||
<record id="do_tax_rule_supplier_isr_rent_es_419" model="account.tax.rule.template">
|
||||
<field name="name">Regla ISR Alquileres 10% (RD)</field>
|
||||
<field name="name">Regla ISR Alquileres de Personas Físicas (RD)</field>
|
||||
<field name="kind">purchase</field>
|
||||
<field name="account" ref="do_account_root_es_419" />
|
||||
</record>
|
||||
@@ -145,8 +165,16 @@
|
||||
<field name="rule" ref="do_tax_rule_supplier_isr_rent_es_419" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="tax" ref="do_tax_ret_isr_alq_10_es_419" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="sequence" eval="10" />
|
||||
</record>
|
||||
<record id="do_trline_supp_isr_rent_15_es_419" model="account.tax.rule.line.template">
|
||||
<field name="rule" ref="do_tax_rule_supplier_isr_rent_es_419" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="tax" ref="do_tax_ret_isr_alq_15_es_419" />
|
||||
<field name="start_date" eval="datetime.date(2026, 7, 1)" />
|
||||
<field name="sequence" eval="20" />
|
||||
</record>
|
||||
<record id="do_tax_rule_customer_state_isr15_es_419" model="account.tax.rule.template">
|
||||
<field name="name">Regla Cliente Estado / Sector Público ISR 1.5% (RD)</field>
|
||||
<field name="kind">sale</field>
|
||||
@@ -202,11 +230,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>
|
||||
@@ -245,8 +278,16 @@
|
||||
<field name="rule" ref="do_tax_rule_supplier_informal_services_es_419" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_10_es_419" />
|
||||
<field name="end_date" eval="datetime.date(2026, 6, 30)" />
|
||||
<field name="sequence" eval="20" />
|
||||
</record>
|
||||
<record id="do_trline_supp_inf_isr15_es_419" model="account.tax.rule.line.template">
|
||||
<field name="rule" ref="do_tax_rule_supplier_informal_services_es_419" />
|
||||
<field name="group" ref="do_tax_group_isr_es_419" />
|
||||
<field name="tax" ref="do_tax_ret_isr_serv_15_es_419" />
|
||||
<field name="start_date" eval="datetime.date(2026, 7, 1)" />
|
||||
<field name="sequence" eval="30" />
|
||||
</record>
|
||||
<record id="do_tax_rule_supplier_rst_es_419" model="account.tax.rule.template">
|
||||
<field name="name">Regla Proveedor RST con Retención ITBIS (RD)</field>
|
||||
<field name="kind">purchase</field>
|
||||
@@ -277,38 +318,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>
|
||||
</tryton>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
|
||||
@@ -11,7 +11,8 @@ Imports::
|
||||
|
||||
Install account_do::
|
||||
|
||||
>>> config = activate_modules('account_do', create_company)
|
||||
>>> config = activate_modules('account_do')
|
||||
>>> _ = create_company()
|
||||
|
||||
Get the test company::
|
||||
|
||||
|
||||
+385
-50
@@ -1,15 +1,18 @@
|
||||
import unittest
|
||||
import datetime
|
||||
import unittest
|
||||
from collections import Counter
|
||||
from configparser import ConfigParser
|
||||
from decimal import Decimal
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
from xml.etree import ElementTree as ET
|
||||
|
||||
from trytond.pool import Pool
|
||||
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
from trytond.modules.account_do.invoice import round_taxes_independently
|
||||
|
||||
MODULE_DIR = Path(__file__).resolve().parent.parent
|
||||
|
||||
TAX_CODE_LINE_AUDIT = {
|
||||
@@ -75,15 +78,18 @@ IFRS_ACCOUNT_TYPE_AUDIT = {
|
||||
IFRS_POLICY_COVERAGE = {
|
||||
'NIC 1': {'11', '12', '21', '23', '3106', '7101', '7102'},
|
||||
'NIC 2': {'1103', '110305', '5101', '5106'},
|
||||
'NIIF 9': {'110205', '110701', '110702', '110703', '120701',
|
||||
'120702', '120703', '4208', '6206', '310604'},
|
||||
'NIIF 9': {
|
||||
'110205', '110701', '110702', '110703', '120701', '120702',
|
||||
'120703', '4208', '6206', '310604'},
|
||||
'NIIF 15': {'110601', '210501', '4101', '4102', '4103', '4104'},
|
||||
'NIIF 16': {'120501', '120591', '120592', '230201', '230202',
|
||||
'6112', '6203'},
|
||||
'NIIF 16': {
|
||||
'120501', '120591', '120592', '230201', '230202', '6112',
|
||||
'6203'},
|
||||
'NIC 12': {'120601', '230301', '6301', '6302', '6303'},
|
||||
'NIC 16': {'120101', '120191', '120192', '6110', '6116'},
|
||||
'NIC 36': {'111002', '120192', '120292', '120392', '120592',
|
||||
'120892', '120992', '6116', '6117', '4206'},
|
||||
'NIC 36': {
|
||||
'111002', '120192', '120292', '120392', '120592', '120892',
|
||||
'120992', '6116', '6117', '4206'},
|
||||
'NIC 37': {'220101', '230401', '6118', '4207'},
|
||||
'NIC 38': {'120901', '120991', '120992', '6111', '6117'},
|
||||
'NIC 40': {'120801', '120891', '120892', '4209', '6207'},
|
||||
@@ -122,6 +128,56 @@ class AccountDoTestCase(ModuleTestCase):
|
||||
'account_stock_continental',
|
||||
]
|
||||
|
||||
@with_transaction()
|
||||
def test_invoice_taxes_round_independently(self):
|
||||
"""A rounding residual must not change ITBIS, ISC or CDT."""
|
||||
pool = Pool()
|
||||
Currency = pool.get('currency.currency')
|
||||
currency, = Currency.create([{
|
||||
'name': 'Peso dominicano',
|
||||
'code': 'DOP',
|
||||
'symbol': 'RD$',
|
||||
'digits': 2,
|
||||
'rounding': Decimal('0.01'),
|
||||
}])
|
||||
taxes = {
|
||||
'itbis': SimpleNamespace(amount=Decimal('91.8036')),
|
||||
'isc': SimpleNamespace(amount=Decimal('51.0020')),
|
||||
'cdt': SimpleNamespace(amount=Decimal('9.9000')),
|
||||
}
|
||||
|
||||
round_taxes_independently(currency, taxes)
|
||||
|
||||
self.assertEqual(taxes['itbis'].amount, Decimal('91.80'))
|
||||
self.assertEqual(taxes['isc'].amount, Decimal('51.00'))
|
||||
self.assertEqual(taxes['cdt'].amount, Decimal('9.90'))
|
||||
self.assertEqual(
|
||||
sum(tax.amount for tax in taxes.values()), Decimal('152.70'))
|
||||
|
||||
@with_transaction()
|
||||
def test_invoice_credit_note_taxes_round_independently(self):
|
||||
"""The same policy applies symmetrically to credit notes."""
|
||||
pool = Pool()
|
||||
Currency = pool.get('currency.currency')
|
||||
currency, = Currency.create([{
|
||||
'name': 'Peso dominicano',
|
||||
'code': 'DOP',
|
||||
'symbol': 'RD$',
|
||||
'digits': 2,
|
||||
'rounding': Decimal('0.01'),
|
||||
}])
|
||||
taxes = {
|
||||
'itbis': SimpleNamespace(amount=Decimal('-91.8036')),
|
||||
'isc': SimpleNamespace(amount=Decimal('-51.0020')),
|
||||
'cdt': SimpleNamespace(amount=Decimal('-9.9000')),
|
||||
}
|
||||
|
||||
round_taxes_independently(currency, taxes)
|
||||
|
||||
self.assertEqual(taxes['itbis'].amount, Decimal('-91.80'))
|
||||
self.assertEqual(taxes['isc'].amount, Decimal('-51.00'))
|
||||
self.assertEqual(taxes['cdt'].amount, Decimal('-9.90'))
|
||||
|
||||
@with_transaction()
|
||||
def test_chart_template_is_loaded_by_default(self):
|
||||
'Test English Dominican chart is loaded in an English database'
|
||||
@@ -198,7 +254,8 @@ class AccountDoTestCase(ModuleTestCase):
|
||||
template_id = ModelData.get_id(
|
||||
'account_do', 'do_account_root_es_419')
|
||||
except KeyError:
|
||||
self.skipTest('The es_419 chart is loaded only for es_419 databases')
|
||||
self.skipTest(
|
||||
'The es_419 chart is loaded only for es_419 databases')
|
||||
template = AccountTemplate(template_id)
|
||||
|
||||
session_id, _start, _end = CreateChart.create()
|
||||
@@ -225,6 +282,7 @@ class AccountDoTestCase(ModuleTestCase):
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'ITBIS 18% Ventas'),
|
||||
('rate', '=', Decimal('0.18')),
|
||||
('tax_kind', '=', 'itbis'),
|
||||
], limit=1))
|
||||
self.assertTrue(TaxCode.search([
|
||||
('company', '=', company.id),
|
||||
@@ -302,11 +360,14 @@ class AccountDoTestCase(ModuleTestCase):
|
||||
'210218', '210219',
|
||||
'21020101', '21020102', '21020103', '21020104',
|
||||
'21020105', '21020201', '21020501', '21020502',
|
||||
'21020601', '21020701', '21020702', '21020801',
|
||||
'21020601', '21020701', '21020702', '21020703',
|
||||
'21020801',
|
||||
'21020802', '21020803', '21020804', '21020805',
|
||||
'21020901', '21021001', '21021101', '21021201',
|
||||
'21021301', '21021302', '21021401', '21021501',
|
||||
'21021502', '21021701', '21021801', '21021901',
|
||||
'21020302', '21021301', '21021302', '21021303',
|
||||
'21021401', '21021402', '21021501',
|
||||
'21021502', '21021701', '21021705', '21021706',
|
||||
'21021801', '21021901',
|
||||
'21021902', '6208']:
|
||||
with self.subTest(code=code):
|
||||
self.assertTrue(Account.search([
|
||||
@@ -355,17 +416,28 @@ class AccountDoTestCase(ModuleTestCase):
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'ITBIS 18% Sales'),
|
||||
('rate', '=', Decimal('0.18')),
|
||||
('tax_kind', '=', 'itbis'),
|
||||
], limit=1))
|
||||
self.assertTrue(Tax.search([
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'ITBIS Withholding Large Taxpayer 30%'),
|
||||
('description', '=',
|
||||
'ITBIS Withholding Large Taxpayer 30%'),
|
||||
('rate', '=', Decimal('-0.054')),
|
||||
('tax_kind', '=', 'itbis_withholding'),
|
||||
], limit=1))
|
||||
self.assertTrue(Tax.search([
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'ITBIS Withholding Informal Supplier 75%'),
|
||||
('description', '=',
|
||||
'ITBIS Withholding Informal Supplier 75%'),
|
||||
('rate', '=', Decimal('-0.135')),
|
||||
], limit=1))
|
||||
foreign_15, = Tax.search([
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'Foreign ISR Withholding 15%'),
|
||||
], limit=1)
|
||||
self.assertEqual(foreign_15.rate, Decimal('-0.15'))
|
||||
self.assertEqual(
|
||||
foreign_15.start_date, datetime.date(2026, 7, 1))
|
||||
check_015, = Tax.search([
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'Checks and Transfers Tax 0.15%'),
|
||||
@@ -392,6 +464,65 @@ class AccountDoTestCase(ModuleTestCase):
|
||||
'date': datetime.date(2026, 7, 3),
|
||||
}),
|
||||
[check_020.id])
|
||||
foreign_27, = Tax.search([
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'Foreign ISR Withholding 27%'),
|
||||
], limit=1)
|
||||
foreign_rule, = TaxRule.search([
|
||||
('company', '=', company.id),
|
||||
('name', '=', (
|
||||
'Foreign Royalties, Software and Online '
|
||||
'Services 15% Rule (RD)')),
|
||||
], limit=1)
|
||||
self.assertEqual(
|
||||
foreign_rule.apply(foreign_27, {
|
||||
'date': datetime.date(2026, 6, 30),
|
||||
}),
|
||||
[foreign_27.id])
|
||||
self.assertEqual(
|
||||
foreign_rule.apply(foreign_27, {
|
||||
'date': datetime.date(2026, 7, 1),
|
||||
}),
|
||||
[foreign_15.id])
|
||||
service_10, = Tax.search([
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'ISR Withholding Individual 10%'),
|
||||
], limit=1)
|
||||
service_15, = Tax.search([
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'ISR Withholding Individual 15%'),
|
||||
], limit=1)
|
||||
service_rule, = TaxRule.search([
|
||||
('company', '=', company.id),
|
||||
('name', '=', 'Individual Services ISR Rule (RD)'),
|
||||
], limit=1)
|
||||
self.assertEqual(
|
||||
service_rule.apply(service_10, {
|
||||
'date': datetime.date(2026, 6, 30),
|
||||
}),
|
||||
[service_10.id])
|
||||
self.assertEqual(
|
||||
service_rule.apply(service_10, {
|
||||
'date': datetime.date(2026, 7, 1),
|
||||
}),
|
||||
[service_15.id])
|
||||
itbis_sale, = Tax.search([
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'ITBIS 18% Sales'),
|
||||
], limit=1)
|
||||
society_withholding, = Tax.search([
|
||||
('company', '=', company.id),
|
||||
('description', '=', 'ITBIS Withheld Companies 30%'),
|
||||
], limit=1)
|
||||
society_rule, = TaxRule.search([
|
||||
('company', '=', company.id),
|
||||
('name', '=', (
|
||||
'ITBIS Withheld by Companies 30% Customer '
|
||||
'Rule (RD)')),
|
||||
], limit=1)
|
||||
self.assertEqual(
|
||||
society_rule.apply(itbis_sale, {}),
|
||||
[society_withholding.id, itbis_sale.id])
|
||||
real_tax_code_signs = {
|
||||
('ITBIS 18% Sales', 'invoice'): '+',
|
||||
('ITBIS 18% Sales', 'credit'): '-',
|
||||
@@ -401,6 +532,8 @@ class AccountDoTestCase(ModuleTestCase):
|
||||
('ITBIS Withholding Large Taxpayer 30%', 'credit'): '+',
|
||||
('ISR Withholding Individual 10%', 'invoice'): '-',
|
||||
('ISR Withholding Individual 10%', 'credit'): '+',
|
||||
('ISR Withholding Individual 15%', 'invoice'): '-',
|
||||
('ISR Withholding Individual 15%', 'credit'): '+',
|
||||
('ISR Withholding State 1.5%', 'invoice'): '+',
|
||||
('ISR Withholding State 1.5%', 'credit'): '-',
|
||||
('Checks and Transfers Tax 0.20%', 'invoice'): '+',
|
||||
@@ -434,7 +567,8 @@ class SpanishAccountDoTestCase(ModuleTestCase):
|
||||
language = 'es_419'
|
||||
|
||||
test_spanish_chart_creates_spanish_accounts_and_taxes = (
|
||||
AccountDoTestCase.test_spanish_chart_creates_spanish_accounts_and_taxes)
|
||||
AccountDoTestCase
|
||||
.test_spanish_chart_creates_spanish_accounts_and_taxes)
|
||||
|
||||
@with_transaction()
|
||||
def test_migrate_pre_language_identifiers(self):
|
||||
@@ -462,6 +596,8 @@ class SpanishAccountDoTestCase(ModuleTestCase):
|
||||
}])
|
||||
|
||||
ModelData._migrate_localization_identifiers()
|
||||
# A retried module update must be harmless.
|
||||
ModelData._migrate_localization_identifiers()
|
||||
|
||||
self.assertEqual(
|
||||
ModelData.get_id('account_do', 'do_account_root_es_419'),
|
||||
@@ -485,10 +621,10 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
if line.strip()
|
||||
]
|
||||
|
||||
self.assertEqual(config.get('tryton', 'version'), '8.0.1')
|
||||
self.assertEqual(config.get('tryton', 'version'), '7.0.0')
|
||||
self.assertEqual(
|
||||
set(lines('tryton', 'depends')),
|
||||
{'account', 'ir'})
|
||||
{'account', 'account_invoice', 'ir'})
|
||||
self.assertEqual(
|
||||
lines('tryton', 'xml'),
|
||||
[
|
||||
@@ -500,26 +636,40 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
'tax_do_es_419.xml',
|
||||
'tax_code_do_es_419.xml',
|
||||
'tax_rule_do_es_419.xml',
|
||||
'tax.xml',
|
||||
])
|
||||
self.assertEqual(
|
||||
lines('register', 'model'),
|
||||
[
|
||||
'ir.ModelData',
|
||||
'invoice.Invoice',
|
||||
'invoice.InvoiceLine',
|
||||
'tax.TaxTemplate',
|
||||
'tax.Tax',
|
||||
])
|
||||
self.assertEqual(lines('register', 'model'), ['ir.ModelData'])
|
||||
self.assertEqual(lines('register', 'wizard'), ['account.CreateChart'])
|
||||
for filename in lines('tryton', 'xml'):
|
||||
self.assertTrue((MODULE_DIR / filename).is_file())
|
||||
self.assertTrue((MODULE_DIR / 'account.py').is_file())
|
||||
pyproject = (MODULE_DIR / 'pyproject.toml').read_text(encoding='utf-8')
|
||||
self.assertIn("name = 'trytond_account_do'", pyproject)
|
||||
self.assertTrue((MODULE_DIR / 'tax.py').is_file())
|
||||
setup_py = (MODULE_DIR / 'setup.py').read_text(encoding='utf-8')
|
||||
self.assertIn("name='unpaismejor_account_do'", setup_py)
|
||||
self.assertIn(
|
||||
"account_do = 'trytond.modules.account_do'", pyproject)
|
||||
"f'{MODULE} = {PACKAGE}'", setup_py)
|
||||
self.assertIn(
|
||||
'{name = "Fundación Un País Mejor"}', pyproject)
|
||||
"maintainer='Fundación Un País Mejor'", setup_py)
|
||||
self.assertIn(
|
||||
'homepage = "https://www.unpaismejor.org.do"', pyproject)
|
||||
"url='https://code.unpaismejor.org.do/tryton-do/account_do'",
|
||||
setup_py)
|
||||
self.assertIn(
|
||||
('repository = "https://code.unpaismejor.org.do/'
|
||||
'tryton-do/account_do"'), pyproject)
|
||||
self.assertIn("exclude = ['doc']", pyproject)
|
||||
for package_file in ['**/*.xml', 'tests/**/*.rst']:
|
||||
self.assertIn(package_file, pyproject)
|
||||
"python_requires='>=3.8'", setup_py)
|
||||
for package_file in [
|
||||
"'*.xml'",
|
||||
"'view/*.xml'",
|
||||
"'locale/*.po'",
|
||||
"'doc/*.rst'",
|
||||
]:
|
||||
self.assertIn(package_file, setup_py)
|
||||
for filename in [
|
||||
'__init__.py',
|
||||
'account.py',
|
||||
@@ -545,40 +695,51 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
'doc/releases.rst',
|
||||
]:
|
||||
self.assertTrue((MODULE_DIR / filename).is_file())
|
||||
self.assertNotIn(
|
||||
'Solu' + 'tema',
|
||||
'\n'.join(
|
||||
path.read_text(encoding='utf-8')
|
||||
for path in MODULE_DIR.rglob('*')
|
||||
if path.is_file()
|
||||
and '.git' not in path.parts
|
||||
and 'dist' not in path.parts
|
||||
and (path.suffix in {'.py', '.rst', '.toml', '.xml'}
|
||||
or path.name in {
|
||||
'CHANGELOG', 'COPYRIGHT', 'tryton.cfg'})))
|
||||
|
||||
def test_xml_record_inventory_is_explicit(self):
|
||||
expected = {
|
||||
'account_chart_do_en.xml': {
|
||||
'account.account.type.template': 36,
|
||||
'account.account.template': 281,
|
||||
'account.account.type.template': 40,
|
||||
'account.account.template': 287,
|
||||
},
|
||||
'tax_do_en.xml': {
|
||||
'account.tax.group': 7,
|
||||
'account.tax.template': 50,
|
||||
'account.tax.group': 6,
|
||||
'account.tax.template': 56,
|
||||
},
|
||||
'tax_code_do_en.xml': {
|
||||
'account.tax.code.template': 44,
|
||||
'account.tax.code.line.template': 93,
|
||||
'account.tax.code.line.template': 112,
|
||||
},
|
||||
'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': 34,
|
||||
},
|
||||
'account_chart_do_es_419.xml': {
|
||||
'account.account.type.template': 36,
|
||||
'account.account.template': 281,
|
||||
'account.account.type.template': 40,
|
||||
'account.account.template': 287,
|
||||
},
|
||||
'tax_do_es_419.xml': {
|
||||
'account.tax.group': 7,
|
||||
'account.tax.template': 50,
|
||||
'account.tax.group': 6,
|
||||
'account.tax.template': 56,
|
||||
},
|
||||
'tax_code_do_es_419.xml': {
|
||||
'account.tax.code.template': 44,
|
||||
'account.tax.code.line.template': 93,
|
||||
'account.tax.code.line.template': 112,
|
||||
},
|
||||
'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': 34,
|
||||
},
|
||||
}
|
||||
for filename, expected_counts in expected.items():
|
||||
@@ -609,7 +770,8 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
with self.subTest(filename=filename):
|
||||
self.assertTrue(root.findall('data'))
|
||||
self.assertEqual(
|
||||
{data.get('language') for data in root.findall('data')},
|
||||
{data.get('language')
|
||||
for data in root.findall('data')},
|
||||
{language})
|
||||
|
||||
def test_english_accounting_terminology_is_consistent(self):
|
||||
@@ -621,17 +783,62 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
'tax_code_do_en.xml', 'tax_rule_do_en.xml']
|
||||
for field in ET.parse(MODULE_DIR / filename).getroot().findall(
|
||||
'.//field')
|
||||
if field.get('name') in {'name', 'description'} and field.text)
|
||||
if field.get('name') in {
|
||||
'name', 'description', 'legal_notice'} and field.text)
|
||||
for phrase in [
|
||||
'advance itbis', 'assets for right of use',
|
||||
'charged for paying', 'clients tax rule',
|
||||
'collected to pay', 'deterioration', 'in favor',
|
||||
'itbis supported', 'other income and profits',
|
||||
'physical persons', 'retention', 'withheld status',
|
||||
' aseguradoras ', ' bienes ', ' casilla ',
|
||||
' combustibles ', ' intereses ', ' ley ', ' pagos ',
|
||||
' personas ', ' premios ', ' retención ', ' tasa ',
|
||||
]:
|
||||
with self.subTest(phrase=phrase):
|
||||
self.assertNotIn(phrase, text.lower())
|
||||
|
||||
def test_english_xml_comments_are_in_english(self):
|
||||
text = '\n'.join(
|
||||
(MODULE_DIR / filename).read_text(encoding='utf-8').lower()
|
||||
for filename in [
|
||||
'account_chart_do_en.xml', 'tax_do_en.xml',
|
||||
'tax_code_do_en.xml', 'tax_rule_do_en.xml'])
|
||||
for marker in [
|
||||
'á', 'é', 'í', 'ó', 'ú', 'ñ',
|
||||
' cuenta ', ' impuesto ', ' proveedor ', ' regla ',
|
||||
' retención ', ' servicios ', ' tasa ',
|
||||
]:
|
||||
with self.subTest(marker=marker):
|
||||
self.assertNotIn(marker, text)
|
||||
|
||||
def test_spanish_translations_cover_module_strings(self):
|
||||
translations = {
|
||||
'Tax Kind': 'Clasificación fiscal',
|
||||
'ITBIS': 'ITBIS',
|
||||
'ITBIS Withholding': 'Retención de ITBIS',
|
||||
'ITBIS Acquirer Withholding': (
|
||||
'Retención de ITBIS por adquirencia'),
|
||||
'ISR Withholding': 'Retención de ISR',
|
||||
'Selective Consumption Tax (ISC)': (
|
||||
'Impuesto Selectivo al Consumo (ISC)'),
|
||||
'INDOTEL Contribution (CDT)': (
|
||||
'Contribución al Desarrollo de las Telecomunicaciones (CDT)'),
|
||||
'Statutory Tip': 'Propina legal',
|
||||
'Other Taxes': 'Otros impuestos',
|
||||
}
|
||||
for language in ['es', 'es_419']:
|
||||
text = (MODULE_DIR / 'locale' / f'{language}.po').read_text(
|
||||
encoding='utf-8')
|
||||
with self.subTest(language=language):
|
||||
for source, target in translations.items():
|
||||
self.assertIn(f'msgid "{source}"', text)
|
||||
self.assertIn(f'msgstr "{target}"', text)
|
||||
self.assertIn(
|
||||
'msgctxt "field:account.tax,tax_kind:"', text)
|
||||
self.assertIn(
|
||||
'msgctxt "field:account.tax.template,tax_kind:"', text)
|
||||
|
||||
def test_spanish_chart_has_complete_parallel_identifiers(self):
|
||||
pairs = [
|
||||
('account_chart_do_en.xml', 'account_chart_do_es_419.xml'),
|
||||
@@ -672,6 +879,9 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
self.assertEqual(
|
||||
spanish_accounts['do_account_110201_es_419']['name'],
|
||||
'Cuentas por cobrar clientes')
|
||||
self.assertEqual(
|
||||
spanish_accounts['do_account_110406_es_419']['name'],
|
||||
'ITBIS retenido en adquisiciones a recuperar')
|
||||
self.assertEqual(
|
||||
spanish_taxes['do_tax_itbis_18_venta_es_419']['description'],
|
||||
'ITBIS 18% Ventas')
|
||||
@@ -710,9 +920,23 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
ref = field.get('ref')
|
||||
if ref and '.' not in ref and ref not in ids:
|
||||
missing.append(
|
||||
(filename, record.get('id'), field.get('name'), ref))
|
||||
(filename, record.get('id'),
|
||||
field.get('name'), ref))
|
||||
self.assertEqual(missing, [])
|
||||
|
||||
def test_every_tax_group_is_used(self):
|
||||
"""Do not install tax groups that no tax template can produce."""
|
||||
records = list(_iter_xml_records('tax_do_en.xml'))
|
||||
groups = {
|
||||
record_id for _, record_id, model, _values in records
|
||||
if model == 'account.tax.group'
|
||||
}
|
||||
used_groups = {
|
||||
values['group'] for _, _, model, values in records
|
||||
if model == 'account.tax.template' and values.get('group')
|
||||
}
|
||||
self.assertEqual(groups, used_groups)
|
||||
|
||||
def test_chart_template_codes_are_unique(self):
|
||||
accounts = [
|
||||
values for _, _, model, values in _iter_xml_records(
|
||||
@@ -746,6 +970,30 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
types['do_type_retained_earnings']['statement'], 'balance')
|
||||
self.assertEqual(types['do_type_revenue']['statement'], 'income')
|
||||
self.assertEqual(types['do_type_expense']['statement'], 'income')
|
||||
self.assertEqual(
|
||||
types['do_type_profit_loss']['parent'], 'do_type_equity')
|
||||
self.assertEqual(
|
||||
types['do_type_operating_section']['parent'],
|
||||
'do_type_profit_loss')
|
||||
self.assertEqual(
|
||||
types['do_type_revenue']['parent'],
|
||||
'do_type_operating_section')
|
||||
self.assertEqual(
|
||||
types['do_type_expenses']['parent'],
|
||||
'do_type_operating_section')
|
||||
self.assertEqual(
|
||||
types['do_type_cogs']['parent'], 'do_type_expenses')
|
||||
self.assertEqual(
|
||||
types['do_type_expense']['parent'], 'do_type_expenses')
|
||||
self.assertEqual(
|
||||
types['do_type_non_operating_section']['parent'],
|
||||
'do_type_profit_loss')
|
||||
for account_type in [
|
||||
'do_type_other_income', 'do_type_financial_expense',
|
||||
'do_type_income_tax']:
|
||||
self.assertEqual(
|
||||
types[account_type]['parent'],
|
||||
'do_type_non_operating_section')
|
||||
self.assertEqual(
|
||||
accounts['do_account_110201']['type'], 'do_type_receivable')
|
||||
self.assertEqual(
|
||||
@@ -804,12 +1052,14 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
for _, record_id, _, _ in _iter_xml_records(
|
||||
'tax_do_en.xml', 'tax_code_do_en.xml')
|
||||
}
|
||||
self.assertFalse([record_id for record_id in ids if 'otros' in record_id])
|
||||
self.assertFalse([
|
||||
record_id for record_id in ids if 'otros' in record_id])
|
||||
|
||||
def test_tax_templates_are_complete(self):
|
||||
taxes = {
|
||||
record_id: values
|
||||
for _, record_id, model, values in _iter_xml_records('tax_do_en.xml')
|
||||
for _, record_id, model, values
|
||||
in _iter_xml_records('tax_do_en.xml')
|
||||
if model == 'account.tax.template'
|
||||
}
|
||||
accounts = {
|
||||
@@ -818,7 +1068,7 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
'account_chart_do_en.xml')
|
||||
if model == 'account.account.template'
|
||||
}
|
||||
self.assertEqual(len(taxes), 50)
|
||||
self.assertEqual(len(taxes), 56)
|
||||
for record_id, values in taxes.items():
|
||||
with self.subTest(record_id=record_id):
|
||||
self.assertEqual(
|
||||
@@ -853,17 +1103,47 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
self.assertIn(
|
||||
"Decimal('10')/100",
|
||||
taxes['do_tax_isc_bebidas_alc']['rate'])
|
||||
self.assertEqual(
|
||||
taxes['do_tax_ret_isr_hon_5']['group'], 'do_tax_group_isr')
|
||||
self.assertEqual(
|
||||
taxes['do_tax_ret_isr_serv_10']['group'], 'do_tax_group_isr')
|
||||
self.assertEqual(
|
||||
taxes['do_tax_ret_isr_ext_27']['group'],
|
||||
'do_tax_group_isr_ext')
|
||||
self.assertEqual(
|
||||
taxes['do_tax_ret_isr_ext_10']['group'],
|
||||
'do_tax_group_isr_ext')
|
||||
self.assertEqual(
|
||||
taxes['do_tax_ret_isr_bovine_1']['start_date'],
|
||||
'datetime.date(2025, 6, 20)')
|
||||
for old_id in [
|
||||
'do_tax_ret_isr_serv_10',
|
||||
'do_tax_ret_isr_alq_10',
|
||||
'do_tax_ret_isr_premios_10',
|
||||
'do_tax_ret_isr_premios_15',
|
||||
'do_tax_ret_isr_tragamonedas_10',
|
||||
'do_tax_ret_isr_other_income_10',
|
||||
]:
|
||||
self.assertEqual(
|
||||
taxes[old_id]['end_date'], 'datetime.date(2026, 6, 30)')
|
||||
for current_id in [
|
||||
'do_tax_ret_isr_serv_15',
|
||||
'do_tax_ret_isr_alq_15',
|
||||
'do_tax_ret_isr_betting_15',
|
||||
'do_tax_ret_isr_tragamonedas_15',
|
||||
'do_tax_ret_isr_other_income_15',
|
||||
]:
|
||||
self.assertEqual(
|
||||
taxes[current_id]['start_date'],
|
||||
'datetime.date(2026, 7, 1)')
|
||||
self.assertIn(
|
||||
'arts. 401-405; art. 404',
|
||||
'Tax Code Arts. 401-405; Art. 404',
|
||||
taxes['do_tax_activos_1']['legal_notice'])
|
||||
self.assertIn(
|
||||
'art. 7 Ley 173-07',
|
||||
'Law 173-07 Art. 7',
|
||||
taxes['do_tax_iti_3']['legal_notice'])
|
||||
self.assertIn(
|
||||
'art. 228', taxes['do_tax_propina_10']['legal_notice'])
|
||||
'Art. 228', taxes['do_tax_propina_10']['legal_notice'])
|
||||
self.assertEqual(
|
||||
taxes['do_tax_isc_vehiculos']['group'],
|
||||
'do_tax_group_others')
|
||||
@@ -953,6 +1233,37 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
self.assertEqual(lines['do_tcl_isc_comb_inv']['operator'], '+')
|
||||
self.assertEqual(lines['do_tcl_prop_inv']['code'], 'do_tc_others_tip')
|
||||
|
||||
def test_tax_code_lines_reverse_credit_notes(self):
|
||||
"""Every reported amount must have an inverse credit-note line."""
|
||||
pairs = {}
|
||||
for _, record_id, model, values in _iter_xml_records(
|
||||
'tax_code_do_en.xml'):
|
||||
if model != 'account.tax.code.line.template':
|
||||
continue
|
||||
key = (values['tax'], values['amount'])
|
||||
pair = pairs.setdefault(key, {})
|
||||
self.assertNotIn(values['type'], pair)
|
||||
pair[values['type']] = (
|
||||
record_id, values['operator'])
|
||||
for key, lines in pairs.items():
|
||||
with self.subTest(tax=key[0], amount=key[1]):
|
||||
self.assertEqual(set(lines), {'invoice', 'credit'})
|
||||
self.assertNotEqual(
|
||||
lines['invoice'][1], lines['credit'][1])
|
||||
|
||||
def test_every_tax_is_reported_by_a_tax_code(self):
|
||||
taxes = {
|
||||
record_id for _, record_id, model, _values
|
||||
in _iter_xml_records('tax_do_en.xml')
|
||||
if model == 'account.tax.template'
|
||||
}
|
||||
reported = {
|
||||
values['tax'] for _, _, model, values
|
||||
in _iter_xml_records('tax_code_do_en.xml')
|
||||
if model == 'account.tax.code.line.template'
|
||||
}
|
||||
self.assertEqual(taxes, reported)
|
||||
|
||||
def test_tax_rule_templates_include_date_sensitive_bank_tax(self):
|
||||
rules = {
|
||||
record_id: values
|
||||
@@ -967,6 +1278,15 @@ class AccountDoUnitTestCase(unittest.TestCase):
|
||||
if model == 'account.tax.rule.line.template'
|
||||
}
|
||||
self.assertIn('do_tax_rule_bank_check_transfer', rules)
|
||||
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')
|
||||
@@ -986,4 +1306,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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[tox]
|
||||
envlist = {py310,py311,py312,py313,py314}-{sqlite,postgresql}
|
||||
envlist = {py38,py39,py310,py311}-{sqlite,postgresql}
|
||||
|
||||
[testenv]
|
||||
changedir = {env_site_packages_dir}
|
||||
|
||||
+7
-1
@@ -1,7 +1,8 @@
|
||||
[tryton]
|
||||
version=8.0.1
|
||||
version=7.0.0
|
||||
depends:
|
||||
account
|
||||
account_invoice
|
||||
ir
|
||||
xml:
|
||||
account_chart_do_en.xml
|
||||
@@ -12,9 +13,14 @@ xml:
|
||||
tax_do_es_419.xml
|
||||
tax_code_do_es_419.xml
|
||||
tax_rule_do_es_419.xml
|
||||
tax.xml
|
||||
|
||||
[register]
|
||||
model:
|
||||
ir.ModelData
|
||||
invoice.Invoice
|
||||
invoice.InvoiceLine
|
||||
tax.TaxTemplate
|
||||
tax.Tax
|
||||
wizard:
|
||||
account.CreateChart
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//page[@id='general']/field[@name='group']" position="after">
|
||||
<label name="tax_kind"/>
|
||||
<field name="tax_kind"/>
|
||||
</xpath>
|
||||
</data>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="/tree/field[@name='group']" position="after">
|
||||
<field name="tax_kind" optional="1"/>
|
||||
</xpath>
|
||||
</data>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//page[@id='general']/field[@name='group']" position="after">
|
||||
<label name="tax_kind"/>
|
||||
<field name="tax_kind"/>
|
||||
</xpath>
|
||||
</data>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="/tree/field[@name='group']" position="after">
|
||||
<field name="tax_kind" optional="1"/>
|
||||
</xpath>
|
||||
</data>
|
||||
Reference in New Issue
Block a user