Files
enterprise-addons/l10n_mx_reports/tests/test_trial_balance.py
T

708 lines
63 KiB
Python

# -*- coding: utf-8 -*-
# pylint: disable=C0326
from odoo.addons.l10n_mx_edi.tests.common import TestMxEdiCommon
from odoo.addons.account_reports.tests.common import TestAccountReportsCommon
from odoo import fields, Command
from odoo.tests.common import test_xsd
from odoo.tests import tagged
from odoo.exceptions import RedirectWarning
from freezegun import freeze_time
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestL10nMXTrialBalanceReportCommon(TestMxEdiCommon, TestAccountReportsCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
# Enforce old default expence account
cls.company = cls.company_data['company']
cls.company_data['default_account_expense'] = cls.env.ref(f'account.{cls.company.id}_cuenta601_84')
cls.account_tag_debit = cls.env.ref('l10n_mx.tag_debit_balance_account')
cls.account_tag_credit = cls.env.ref('l10n_mx.tag_credit_balance_account')
# Entries in 2020 to test initial balance
cls.move_2020_01 = cls.env['account.move'].create({
'move_type': 'entry',
'date': fields.Date.to_date('2020-01-01'),
'journal_id': cls.company_data['default_journal_misc'].id,
'line_ids': [
Command.create({'debit': 1000.0, 'credit': 0.0, 'account_id': cls.company_data['default_account_payable'].id}),
Command.create({'debit': 0.0, 'credit': 1000.0, 'account_id': cls.company_data['default_account_revenue'].id}),
]
})
cls.move_2020_02 = cls.env['account.move'].create({
'move_type': 'entry',
'date': fields.Date.to_date('2020-02-01'),
'journal_id': cls.company_data['default_journal_misc'].id,
'line_ids': [
Command.create(
{'debit': 500.0, 'credit': 0.0, 'account_id': cls.company_data['default_account_expense'].id}),
Command.create(
{'debit': 0.0, 'credit': 500.0, 'account_id': cls.company_data['default_account_revenue'].id}),
]
})
(cls.move_2020_01 + cls.move_2020_02).action_post()
# Entries in 2021 to test report for a specific financial year
cls.move_2021_01 = cls.env['account.move'].create({
'move_type': 'entry',
'date': fields.Date.to_date('2021-06-01'),
'journal_id': cls.company_data['default_journal_misc'].id,
'line_ids': [
Command.create(
{'debit': 250.0, 'credit': 0.0, 'account_id': cls.company_data['default_account_expense'].id}),
Command.create(
{'debit': 0.0, 'credit': 250.0, 'account_id': cls.company_data['default_account_revenue'].id}),
]
})
cls.move_2021_02 = cls.env['account.move'].create({
'move_type': 'entry',
'date': fields.Date.to_date('2021-08-01'),
'journal_id': cls.company_data['default_journal_misc'].id,
'line_ids': [
Command.create(
{'debit': 75.0, 'credit': 0.0, 'account_id': cls.company_data['default_account_payable'].id}),
Command.create(
{'debit': 0.0, 'credit': 75.0, 'account_id': cls.company_data['default_account_revenue'].id}),
]
})
(cls.move_2021_01 + cls.move_2021_02).action_post()
# Special cases: codes with extra levels from the default COA and dotted account names
cls.extra_deep_code = cls.env["account.account"].create(
{
"name": "Extra deep code",
"account_type": "liability_current",
"code": "205.06.01.001",
"reconcile": True,
}
)
cls.dotted_name = cls.env["account.account"].create(
{
"name": "Dotted name C.V.",
"account_type": "liability_current",
"code": "205.06.03",
"reconcile": True,
}
)
cls.extra_deep_code_move = cls.env["account.move"].create(
{
"move_type": "entry",
"date": fields.Date.to_date("2021-06-01"),
"journal_id": cls.company_data["default_journal_misc"].id,
"line_ids": [
Command.create(
{
"debit": 400.0,
"credit": 0.0,
"account_id": cls.dotted_name.id,
}
),
Command.create(
{
"debit": 0.0,
"credit": 400.0,
"account_id": cls.extra_deep_code.id,
}
),
],
}
)
cls.dotted_name_move = cls.env["account.move"].create(
{
"move_type": "entry",
"date": fields.Date.to_date("2021-06-01"),
"journal_id": cls.company_data["default_journal_misc"].id,
"line_ids": [
Command.create(
{
"debit": 50.0,
"credit": 0.0,
"account_id": cls.extra_deep_code.id,
}
),
Command.create(
{
"debit": 0.0,
"credit": 50.0,
"account_id": cls.dotted_name.id,
}
),
],
}
)
(cls.extra_deep_code_move + cls.dotted_name_move).action_post()
cls.report = cls.env.ref('account_reports.trial_balance_report')
cls.company_data['company'].totals_below_sections = False
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestL10nMXTrialBalanceReport(TestL10nMXTrialBalanceReportCommon):
def test_generate_coa_xml(self):
""" This test will generate a COA report and verify that every
account with an entry in the selected period has been there.
CodAgrup corresponds to Account Group code
NumCta corresponds to Account Group code
Desc corresponds to Account Group Name
Nivel corresponds to Hierarchy Level
Natur corresponds to type of account (Debit or Credit)
Available values for "Natur":
D = Debit Account
A = Credit Account
Unaffected Earnings account is not include in this report because
it's custom Odoo account.
"""
expected_coa_xml = b"""<?xml version='1.0' encoding='utf-8'?>
<catalogocuentas:Catalogo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:catalogocuentas="http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/CatalogoCuentas" xsi:schemaLocation="http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/CatalogoCuentas http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/CatalogoCuentas/CatalogoCuentas_1_3.xsd" Version="1.3" RFC="EKU9003173C9" Mes="01" Anio="2021" Sello="___ignore___" Certificado="___ignore___" noCertificado="___ignore___">
<catalogocuentas:Ctas CodAgrup="101" NumCta="101" Desc="Cash" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="101.01" NumCta="101.01" Desc="Cash in hand" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="102" NumCta="102" Desc="Bank" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="102.01" NumCta="102.01" Desc="National banks" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="102.02" NumCta="102.02" Desc="Foreign banks" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="105" NumCta="105" Desc="Clients" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="105.01" NumCta="105.01" Desc="National customers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="105.02" NumCta="105.02" Desc="Foreign customers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="107" NumCta="107" Desc="Sundry debtors" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="107.01" NumCta="107.01" Desc="Officials and employees" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="107.05" NumCta="107.05" Desc="Other sundry debtors" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="108" NumCta="108" Desc="Allowance for doubtful accounts" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="108.01" NumCta="108.01" Desc="Allowance for doubtful accounts national" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="108.02" NumCta="108.02" Desc="Allowance for doubtful accounts foreign" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="110" NumCta="110" Desc="Employment subsidy to be applied" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="110.01" NumCta="110.01" Desc="Employment subsidy to be applied" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="113" NumCta="113" Desc="Tax credit" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="113.01" NumCta="113.01" Desc="VAT receivable" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="113.02" NumCta="113.02" Desc="Income tax to recover" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="113.08" NumCta="113.08" Desc="Other taxes in favour" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115" NumCta="115" Desc="Inventory" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.01" NumCta="115.01" Desc="Inventory" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.02" NumCta="115.02" Desc="Raw materials and materials" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.03" NumCta="115.03" Desc="Production in progress" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.04" NumCta="115.04" Desc="Finished products" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.05" NumCta="115.05" Desc="Goods in transit" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.06" NumCta="115.06" Desc="Goods held by third parties" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="118" NumCta="118" Desc="Creditable taxes paid" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="118.01" NumCta="118.01" Desc="Creditable VAT paid" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="118.02" NumCta="118.02" Desc="Creditable import VAT paid" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="118.03" NumCta="118.03" Desc="Creditable IEPS paid" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="119" NumCta="119" Desc="Taxes payable" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="119.01" NumCta="119.01" Desc="VAT due" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="119.02" NumCta="119.02" Desc="Import VAT due" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="119.03" NumCta="119.03" Desc="IEPS pending payment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="120" NumCta="120" Desc="Advances to suppliers" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="120.01" NumCta="120.01" Desc="Advance to national suppliers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="120.02" NumCta="120.02" Desc="Advance payment to foreign suppliers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="153" NumCta="153" Desc="Machinery and equipment" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="153.01" NumCta="153.01" Desc="Machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="154" NumCta="154" Desc="Automobiles, buses, cargo trucks, tractor-trailers, forklifts and trailers" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="154.01" NumCta="154.01" Desc="Automobiles, buses, cargo trucks, tractor-trailers, forklifts and trailers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="155" NumCta="155" Desc="Office furniture and equipment" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="155.01" NumCta="155.01" Desc="Office furniture and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="156" NumCta="156" Desc="Computer equipment" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="156.01" NumCta="156.01" Desc="Computer equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="168" NumCta="168" Desc="Machinery and equipment for the generation of energy from renewable sources or efficient combined heat and power (CHP) systems" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="168.01" NumCta="168.01" Desc="Machinery and equipment for the generation of energy from renewable sources or efficient combined heat and power (CHP) systems" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="169" NumCta="169" Desc="Other machinery and equipment" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="169.01" NumCta="169.01" Desc="Other machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="170" NumCta="170" Desc="Adaptations and improvements" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="170.01" NumCta="170.01" Desc="Adaptations and improvements" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171" NumCta="171" Desc="Accumulated depreciation of fixed assets" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.02" NumCta="171.02" Desc="Accumulated depreciation of machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.03" NumCta="171.03" Desc="Accumulated depreciation of cars, buses, cargo trucks, tractor-trailers, forklifts and trailers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.04" NumCta="171.04" Desc="Accumulated depreciation of office furniture and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.05" NumCta="171.05" Desc="Accumulated depreciation of computer equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.16" NumCta="171.16" Desc="Accumulated depreciation of machinery and equipment for power generation from renewable sources or efficient co-generation systems" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.17" NumCta="171.17" Desc="Accumulated depreciation of adaptations and improvements" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.18" NumCta="171.18" Desc="Accumulated depreciation of other machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="173" NumCta="173" Desc="Deferred expenditure" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="173.01" NumCta="173.01" Desc="Deferred expenditure" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="179" NumCta="179" Desc="Trademarks and patents" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="179.01" NumCta="179.01" Desc="Trademarks and patents" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="183" NumCta="183" Desc="Accumulated amortisation of deferred assets" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="183.01" NumCta="183.01" Desc="Accumulated amortisation of deferred expenses" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="183.07" NumCta="183.07" Desc="Accumulated amortisation of trademarks and patents" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="201" NumCta="201" Desc="Suppliers" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="201.01" NumCta="201.01" Desc="National suppliers" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="201.02" NumCta="201.02" Desc="Foreign suppliers" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="205" NumCta="205" Desc="Short-term sundry creditors" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="205.02" NumCta="205.02" Desc="Domestic short-term sundry creditors" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="205.06" NumCta="205.06" Desc="Other short-term sundry creditors" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="206" NumCta="206" Desc="Customer advance" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="206.01" NumCta="206.01" Desc="Domestic customer advance" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="206.02" NumCta="206.02" Desc="Advance payment from foreign customer" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="206.05" NumCta="206.05" Desc="Other customer advances" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="208" NumCta="208" Desc="Taxes carried forward collected" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="208.01" NumCta="208.01" Desc="VAT carried forward collected" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="208.02" NumCta="208.02" Desc="IEPS carried forward collected" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="209" NumCta="209" Desc="Uncollected taxes carried forward" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="209.01" NumCta="209.01" Desc="VAT carried forward not collected" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="209.02" NumCta="209.02" Desc="IEPS carried forward not collected" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210" NumCta="210" Desc="Provision for wages and salaries payable" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210.01" NumCta="210.01" Desc="Provision for wages and salaries payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210.02" NumCta="210.02" Desc="Provision for holidays payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210.03" NumCta="210.03" Desc="Provision for Christmas bonus payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210.04" NumCta="210.04" Desc="Savings fund provision payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="211" NumCta="211" Desc="Provision for social security contributions payable" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="211.01" NumCta="211.01" Desc="Employer's IMSS provision payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="211.02" NumCta="211.02" Desc="Provision for SAR payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="211.03" NumCta="211.03" Desc="Infonavit provision payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213" NumCta="213" Desc="Taxes and duties payable" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213.01" NumCta="213.01" Desc="VAT payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213.02" NumCta="213.02" Desc="IEPS payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213.03" NumCta="213.03" Desc="Income tax payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213.07" NumCta="213.07" Desc="Other taxes payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216" NumCta="216" Desc="Taxes withheld" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.01" NumCta="216.01" Desc="Taxes withheld from income tax on wages and salaries" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.03" NumCta="216.03" Desc="Withholding of income tax for leasing" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.04" NumCta="216.04" Desc="Taxes withheld from income tax for professional services" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.10" NumCta="216.10" Desc="VAT withholding taxes" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.11" NumCta="216.11" Desc="IMSS withholdings from workers" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="260" NumCta="260" Desc="Deferred liabilities" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="260.01" NumCta="260.01" Desc="Deferred liabilities" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="302" NumCta="302" Desc="Heritage" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="302.01" NumCta="302.01" Desc="Heritage" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="304" NumCta="304" Desc="Result of previous years" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="304.01" NumCta="304.01" Desc="Profit from previous years" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="305" NumCta="305" Desc="Result for the year" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="305.01" NumCta="305.01" Desc="Profit for the year" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="401" NumCta="401" Desc="Income" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="401.01" NumCta="401.01" Desc="Sales and/or services taxed at the general rate" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="402" NumCta="402" Desc="Refunds, discounts or rebates on income" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="402.04" NumCta="402.04" Desc="Refunds, discounts or rebates of other income" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="402" NumCta="402" Desc="Refunds, discounts or rebates on income" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="402.01" NumCta="402.01" Desc="Refunds, discounts or rebates on sales and/or services at the general rate" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="403" NumCta="403" Desc="Other income" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="403.01" NumCta="403.01" Desc="Other Income" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="501" NumCta="501" Desc="Cost of sale and/or service" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="501.01" NumCta="501.01" Desc="Cost of sales" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="501.02" NumCta="501.02" Desc="Cost of services (labour)" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="503" NumCta="503" Desc="Returns, discounts or rebates on purchases" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="503.01" NumCta="503.01" Desc="Returns, discounts or rebates on purchases" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="505" NumCta="505" Desc="Cost of fixed assets" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="505.01" NumCta="505.01" Desc="Cost of fixed asset sales" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601" NumCta="601" Desc="Overheads" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.01" NumCta="601.01" Desc="Wages and salaries" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.06" NumCta="601.06" Desc="Holidays" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.07" NumCta="601.07" Desc="Holiday bonus" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.12" NumCta="601.12" Desc="Aguinaldo" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.15" NumCta="601.15" Desc="Pantry" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.16" NumCta="601.16" Desc="Transport" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.19" NumCta="601.19" Desc="Savings fund" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.26" NumCta="601.26" Desc="IMSS contributions" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.27" NumCta="601.27" Desc="Infonavit contributions" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.28" NumCta="601.28" Desc="SAR contributions" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.32" NumCta="601.32" Desc="Administrative services" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.34" NumCta="601.34" Desc="Fees to domestic resident individuals" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.38" NumCta="601.38" Desc="Fees to domestic resident legal entities" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.45" NumCta="601.45" Desc="Leasing to domestic resident individuals" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.46" NumCta="601.46" Desc="Leasing to domestic resident legal entities" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.48" NumCta="601.48" Desc="Fuels and lubricants" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.49" NumCta="601.49" Desc="Per diems and travel expenses" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.50" NumCta="601.50" Desc="Telephone, internet" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.51" NumCta="601.51" Desc="Water" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.52" NumCta="601.52" Desc="Electric power" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.54" NumCta="601.54" Desc="Cleaning" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.55" NumCta="601.55" Desc="Stationery and office supplies" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.56" NumCta="601.56" Desc="Maintenance and upkeep" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.57" NumCta="601.57" Desc="Insurance and bonds" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.58" NumCta="601.58" Desc="Other taxes and duties" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.60" NumCta="601.60" Desc="Fees and subscriptions" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.62" NumCta="601.62" Desc="Staff training" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.64" NumCta="601.64" Desc="Technical assistance" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.73" NumCta="601.73" Desc="Import charges" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.74" NumCta="601.74" Desc="Commissions on sales" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.83" NumCta="601.83" Desc="Non-deductible expenses (without fiscal requirements)" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.84" NumCta="601.84" Desc="Other overheads" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="602" NumCta="602" Desc="Selling expenses" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="602.61" NumCta="602.61" Desc="Propaganda and advertising" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="602.72" NumCta="602.72" Desc="Freight and haulage" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613" NumCta="613" Desc="Accounting depreciation" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.02" NumCta="613.02" Desc="Depreciation of machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.03" NumCta="613.03" Desc="Depreciation of cars, buses, cargo trucks, tractor-trailers, forklifts and trailers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.04" NumCta="613.04" Desc="Depreciation of office furniture and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.05" NumCta="613.05" Desc="Depreciation of computer equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.16" NumCta="613.16" Desc="Depreciation of machinery and equipment for the generation of energy from renewable sources or efficient cogeneration systems" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.17" NumCta="613.17" Desc="Depreciation of adaptations and improvements" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.18" NumCta="613.18" Desc="Depreciation of other machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="614" NumCta="614" Desc="Accounting amortisation" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="614.01" NumCta="614.01" Desc="Amortisation of deferred expenses" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="614.07" NumCta="614.07" Desc="Amortisation of trademarks and patents" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="701" NumCta="701" Desc="Financial expenses" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="701.01" NumCta="701.01" Desc="Foreign exchange loss" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="701.10" NumCta="701.10" Desc="Bank charges" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="702" NumCta="702" Desc="Financial products" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="702.01" NumCta="702.01" Desc="Exchange profit" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="811" NumCta="811" Desc="Tax gain or loss on sale and/or derecognition of fixed assets" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="811.01" NumCta="811.01" Desc="Tax gain or loss on sale and/or derecognition of fixed assets" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="899" NumCta="899" Desc="Other off-balance sheet items" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="899.01" NumCta="899.01" Desc="Other off-balance sheet items" Nivel="2" Natur="D"/>
</catalogocuentas:Catalogo>
"""
options = self._generate_options(self.report, '2021-01-01', '2021-12-31')
options['l10n_mx_sat_ignore_errors'] = True
with freeze_time(self.frozen_today):
coa_report = self.env[self.report.custom_handler_model_name].action_l10n_mx_generate_coa_sat_xml(options)['file_content']
self.assertXmlTreeEqual(
self.get_xml_tree_from_string(coa_report),
self.get_xml_tree_from_string(expected_coa_xml),
)
def test_generate_coa_xml_with_prefix_7_accounts_having_debit_and_credit_tags(self):
""" This test will generate a COA report and verify that every
account with an entry in the selected period has been there. This process
should pass when having Debit and Credit tags for accounts as 7MM.NN.OO.
"""
expected_coa_xml = b"""<?xml version='1.0' encoding='utf-8'?>
<catalogocuentas:Catalogo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:catalogocuentas="http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/CatalogoCuentas" xsi:schemaLocation="http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/CatalogoCuentas http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/CatalogoCuentas/CatalogoCuentas_1_3.xsd" Version="1.3" RFC="EKU9003173C9" Mes="01" Anio="2021" Sello="___ignore___" Certificado="___ignore___" noCertificado="___ignore___">
<catalogocuentas:Ctas CodAgrup="101" NumCta="101" Desc="Cash" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="101.01" NumCta="101.01" Desc="Cash in hand" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="102" NumCta="102" Desc="Bank" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="102.01" NumCta="102.01" Desc="National banks" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="102.02" NumCta="102.02" Desc="Foreign banks" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="105" NumCta="105" Desc="Clients" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="105.01" NumCta="105.01" Desc="National customers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="105.02" NumCta="105.02" Desc="Foreign customers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="107" NumCta="107" Desc="Sundry debtors" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="107.01" NumCta="107.01" Desc="Officials and employees" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="107.05" NumCta="107.05" Desc="Other sundry debtors" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="108" NumCta="108" Desc="Allowance for doubtful accounts" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="108.01" NumCta="108.01" Desc="Allowance for doubtful accounts national" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="108.02" NumCta="108.02" Desc="Allowance for doubtful accounts foreign" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="110" NumCta="110" Desc="Employment subsidy to be applied" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="110.01" NumCta="110.01" Desc="Employment subsidy to be applied" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="113" NumCta="113" Desc="Tax credit" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="113.01" NumCta="113.01" Desc="VAT receivable" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="113.02" NumCta="113.02" Desc="Income tax to recover" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="113.08" NumCta="113.08" Desc="Other taxes in favour" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115" NumCta="115" Desc="Inventory" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.01" NumCta="115.01" Desc="Inventory" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.02" NumCta="115.02" Desc="Raw materials and materials" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.03" NumCta="115.03" Desc="Production in progress" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.04" NumCta="115.04" Desc="Finished products" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.05" NumCta="115.05" Desc="Goods in transit" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="115.06" NumCta="115.06" Desc="Goods held by third parties" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="118" NumCta="118" Desc="Creditable taxes paid" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="118.01" NumCta="118.01" Desc="Creditable VAT paid" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="118.02" NumCta="118.02" Desc="Creditable import VAT paid" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="118.03" NumCta="118.03" Desc="Creditable IEPS paid" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="119" NumCta="119" Desc="Taxes payable" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="119.01" NumCta="119.01" Desc="VAT due" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="119.02" NumCta="119.02" Desc="Import VAT due" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="119.03" NumCta="119.03" Desc="IEPS pending payment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="120" NumCta="120" Desc="Advances to suppliers" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="120.01" NumCta="120.01" Desc="Advance to national suppliers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="120.02" NumCta="120.02" Desc="Advance payment to foreign suppliers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="153" NumCta="153" Desc="Machinery and equipment" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="153.01" NumCta="153.01" Desc="Machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="154" NumCta="154" Desc="Automobiles, buses, cargo trucks, tractor-trailers, forklifts and trailers" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="154.01" NumCta="154.01" Desc="Automobiles, buses, cargo trucks, tractor-trailers, forklifts and trailers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="155" NumCta="155" Desc="Office furniture and equipment" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="155.01" NumCta="155.01" Desc="Office furniture and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="156" NumCta="156" Desc="Computer equipment" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="156.01" NumCta="156.01" Desc="Computer equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="168" NumCta="168" Desc="Machinery and equipment for the generation of energy from renewable sources or efficient combined heat and power (CHP) systems" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="168.01" NumCta="168.01" Desc="Machinery and equipment for the generation of energy from renewable sources or efficient combined heat and power (CHP) systems" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="169" NumCta="169" Desc="Other machinery and equipment" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="169.01" NumCta="169.01" Desc="Other machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="170" NumCta="170" Desc="Adaptations and improvements" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="170.01" NumCta="170.01" Desc="Adaptations and improvements" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171" NumCta="171" Desc="Accumulated depreciation of fixed assets" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.02" NumCta="171.02" Desc="Accumulated depreciation of machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.03" NumCta="171.03" Desc="Accumulated depreciation of cars, buses, cargo trucks, tractor-trailers, forklifts and trailers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.04" NumCta="171.04" Desc="Accumulated depreciation of office furniture and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.05" NumCta="171.05" Desc="Accumulated depreciation of computer equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.16" NumCta="171.16" Desc="Accumulated depreciation of machinery and equipment for power generation from renewable sources or efficient co-generation systems" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.17" NumCta="171.17" Desc="Accumulated depreciation of adaptations and improvements" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="171.18" NumCta="171.18" Desc="Accumulated depreciation of other machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="173" NumCta="173" Desc="Deferred expenditure" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="173.01" NumCta="173.01" Desc="Deferred expenditure" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="179" NumCta="179" Desc="Trademarks and patents" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="179.01" NumCta="179.01" Desc="Trademarks and patents" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="183" NumCta="183" Desc="Accumulated amortisation of deferred assets" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="183.01" NumCta="183.01" Desc="Accumulated amortisation of deferred expenses" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="183.07" NumCta="183.07" Desc="Accumulated amortisation of trademarks and patents" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="201" NumCta="201" Desc="Suppliers" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="201.01" NumCta="201.01" Desc="National suppliers" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="201.02" NumCta="201.02" Desc="Foreign suppliers" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="205" NumCta="205" Desc="Short-term sundry creditors" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="205.02" NumCta="205.02" Desc="Domestic short-term sundry creditors" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="205.06" NumCta="205.06" Desc="Other short-term sundry creditors" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="206" NumCta="206" Desc="Customer advance" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="206.01" NumCta="206.01" Desc="Domestic customer advance" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="206.02" NumCta="206.02" Desc="Advance payment from foreign customer" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="206.05" NumCta="206.05" Desc="Other customer advances" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="208" NumCta="208" Desc="Taxes carried forward collected" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="208.01" NumCta="208.01" Desc="VAT carried forward collected" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="208.02" NumCta="208.02" Desc="IEPS carried forward collected" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="209" NumCta="209" Desc="Uncollected taxes carried forward" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="209.01" NumCta="209.01" Desc="VAT carried forward not collected" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="209.02" NumCta="209.02" Desc="IEPS carried forward not collected" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210" NumCta="210" Desc="Provision for wages and salaries payable" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210.01" NumCta="210.01" Desc="Provision for wages and salaries payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210.02" NumCta="210.02" Desc="Provision for holidays payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210.03" NumCta="210.03" Desc="Provision for Christmas bonus payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="210.04" NumCta="210.04" Desc="Savings fund provision payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="211" NumCta="211" Desc="Provision for social security contributions payable" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="211.01" NumCta="211.01" Desc="Employer's IMSS provision payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="211.02" NumCta="211.02" Desc="Provision for SAR payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="211.03" NumCta="211.03" Desc="Infonavit provision payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213" NumCta="213" Desc="Taxes and duties payable" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213.01" NumCta="213.01" Desc="VAT payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213.02" NumCta="213.02" Desc="IEPS payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213.03" NumCta="213.03" Desc="Income tax payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="213.07" NumCta="213.07" Desc="Other taxes payable" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216" NumCta="216" Desc="Taxes withheld" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.01" NumCta="216.01" Desc="Taxes withheld from income tax on wages and salaries" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.03" NumCta="216.03" Desc="Withholding of income tax for leasing" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.04" NumCta="216.04" Desc="Taxes withheld from income tax for professional services" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.10" NumCta="216.10" Desc="VAT withholding taxes" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="216.11" NumCta="216.11" Desc="IMSS withholdings from workers" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="260" NumCta="260" Desc="Deferred liabilities" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="260.01" NumCta="260.01" Desc="Deferred liabilities" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="302" NumCta="302" Desc="Heritage" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="302.01" NumCta="302.01" Desc="Heritage" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="304" NumCta="304" Desc="Result of previous years" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="304.01" NumCta="304.01" Desc="Profit from previous years" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="305" NumCta="305" Desc="Result for the year" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="305.01" NumCta="305.01" Desc="Profit for the year" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="401" NumCta="401" Desc="Income" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="401.01" NumCta="401.01" Desc="Sales and/or services taxed at the general rate" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="402" NumCta="402" Desc="Refunds, discounts or rebates on income" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="402.04" NumCta="402.04" Desc="Refunds, discounts or rebates of other income" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="402" NumCta="402" Desc="Refunds, discounts or rebates on income" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="402.01" NumCta="402.01" Desc="Refunds, discounts or rebates on sales and/or services at the general rate" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="403" NumCta="403" Desc="Other income" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="403.01" NumCta="403.01" Desc="Other Income" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="501" NumCta="501" Desc="Cost of sale and/or service" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="501.01" NumCta="501.01" Desc="Cost of sales" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="501.02" NumCta="501.02" Desc="Cost of services (labour)" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="503" NumCta="503" Desc="Returns, discounts or rebates on purchases" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="503.01" NumCta="503.01" Desc="Returns, discounts or rebates on purchases" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="505" NumCta="505" Desc="Cost of fixed assets" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="505.01" NumCta="505.01" Desc="Cost of fixed asset sales" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601" NumCta="601" Desc="Overheads" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.01" NumCta="601.01" Desc="Wages and salaries" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.06" NumCta="601.06" Desc="Holidays" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.07" NumCta="601.07" Desc="Holiday bonus" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.12" NumCta="601.12" Desc="Aguinaldo" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.15" NumCta="601.15" Desc="Pantry" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.16" NumCta="601.16" Desc="Transport" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.19" NumCta="601.19" Desc="Savings fund" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.26" NumCta="601.26" Desc="IMSS contributions" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.27" NumCta="601.27" Desc="Infonavit contributions" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.28" NumCta="601.28" Desc="SAR contributions" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.32" NumCta="601.32" Desc="Administrative services" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.34" NumCta="601.34" Desc="Fees to domestic resident individuals" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.38" NumCta="601.38" Desc="Fees to domestic resident legal entities" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.45" NumCta="601.45" Desc="Leasing to domestic resident individuals" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.46" NumCta="601.46" Desc="Leasing to domestic resident legal entities" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.48" NumCta="601.48" Desc="Fuels and lubricants" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.49" NumCta="601.49" Desc="Per diems and travel expenses" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.50" NumCta="601.50" Desc="Telephone, internet" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.51" NumCta="601.51" Desc="Water" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.52" NumCta="601.52" Desc="Electric power" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.54" NumCta="601.54" Desc="Cleaning" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.55" NumCta="601.55" Desc="Stationery and office supplies" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.56" NumCta="601.56" Desc="Maintenance and upkeep" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.57" NumCta="601.57" Desc="Insurance and bonds" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.58" NumCta="601.58" Desc="Other taxes and duties" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.60" NumCta="601.60" Desc="Fees and subscriptions" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.62" NumCta="601.62" Desc="Staff training" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.64" NumCta="601.64" Desc="Technical assistance" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.73" NumCta="601.73" Desc="Import charges" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.74" NumCta="601.74" Desc="Commissions on sales" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.83" NumCta="601.83" Desc="Non-deductible expenses (without fiscal requirements)" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="601.84" NumCta="601.84" Desc="Other overheads" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="602" NumCta="602" Desc="Selling expenses" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="602.61" NumCta="602.61" Desc="Propaganda and advertising" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="602.72" NumCta="602.72" Desc="Freight and haulage" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613" NumCta="613" Desc="Accounting depreciation" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.02" NumCta="613.02" Desc="Depreciation of machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.03" NumCta="613.03" Desc="Depreciation of cars, buses, cargo trucks, tractor-trailers, forklifts and trailers" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.04" NumCta="613.04" Desc="Depreciation of office furniture and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.05" NumCta="613.05" Desc="Depreciation of computer equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.16" NumCta="613.16" Desc="Depreciation of machinery and equipment for the generation of energy from renewable sources or efficient cogeneration systems" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.17" NumCta="613.17" Desc="Depreciation of adaptations and improvements" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="613.18" NumCta="613.18" Desc="Depreciation of other machinery and equipment" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="614" NumCta="614" Desc="Accounting amortisation" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="614.01" NumCta="614.01" Desc="Amortisation of deferred expenses" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="614.07" NumCta="614.07" Desc="Amortisation of trademarks and patents" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="701" NumCta="701" Desc="Financial expenses" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="701.01" NumCta="701.01" Desc="Foreign exchange loss" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="701.10" NumCta="701.10" Desc="Bank charges" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="702" NumCta="702" Desc="Financial products" Nivel="1" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="702.01" NumCta="702.01" Desc="Exchange profit" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="702.02" NumCta="702.02" Desc="Domestic foreign exchange gain related party" Nivel="2" Natur="A"/>
<catalogocuentas:Ctas CodAgrup="702" NumCta="702" Desc="Financial products" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="702.02" NumCta="702.02" Desc="Domestic foreign exchange gain related party" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="811" NumCta="811" Desc="Tax gain or loss on sale and/or derecognition of fixed assets" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="811.01" NumCta="811.01" Desc="Tax gain or loss on sale and/or derecognition of fixed assets" Nivel="2" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="899" NumCta="899" Desc="Other off-balance sheet items" Nivel="1" Natur="D"/>
<catalogocuentas:Ctas CodAgrup="899.01" NumCta="899.01" Desc="Other off-balance sheet items" Nivel="2" Natur="D"/>
</catalogocuentas:Catalogo>
"""
self.env['account.account'].create({
'code': '702.02.01',
'name': 'Otros gastos',
'account_type': 'income',
'tag_ids': [Command.set((self.account_tag_debit + self.account_tag_credit).ids)],
})
options = self._generate_options(self.report, '2021-01-01', '2021-12-31')
options['l10n_mx_sat_ignore_errors'] = True
with freeze_time(self.frozen_today):
coa_report = self.env[self.report.custom_handler_model_name].with_context(skip_xsd=True).action_l10n_mx_generate_coa_sat_xml(options)['file_content']
self.assertXmlTreeEqual(
self.get_xml_tree_from_string(coa_report),
self.get_xml_tree_from_string(expected_coa_xml),
)
def test_generate_sat_xml(self):
""" This test will generate a SAT report and verify that
every account present in the trial balance (except unaffected
earnings account) is present in the xml.
NumCta corresponds to Account Group code
SaldoIni corresponds to Initial Balance
Debe corresponds to Debit in the current period
Haber corresponds to Credit in the current period
SaldoFin corresponds to End Balance
"""
expected_sat_xml = b"""<?xml version='1.0' encoding='utf-8'?>
<BCE:Balanza xmlns:BCE="http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion/BalanzaComprobacion_1_3.xsd" Version="1.3" RFC="EKU9003173C9" Mes="01" Anio="2021" TipoEnvio="N" Sello="___ignore___" Certificado="___ignore___" noCertificado="___ignore___">
<BCE:Ctas NumCta="201" SaldoIni="-1000.00" Debe="75.00" Haber="0.00" SaldoFin="-1075.00"/>
<BCE:Ctas NumCta="201.01" SaldoIni="-1000.00" Debe="75.00" Haber="0.00" SaldoFin="-1075.00"/>
<BCE:Ctas NumCta="205" SaldoIni="0.00" Debe="450.00" Haber="450.00" SaldoFin="0.00"/>
<BCE:Ctas NumCta="205.06" SaldoIni="0.00" Debe="450.00" Haber="450.00" SaldoFin="0.00"/>
<BCE:Ctas NumCta="401" SaldoIni="0.00" Debe="0.00" Haber="325.00" SaldoFin="325.00"/>
<BCE:Ctas NumCta="401.01" SaldoIni="0.00" Debe="0.00" Haber="325.00" SaldoFin="325.00"/>
<BCE:Ctas NumCta="601" SaldoIni="0.00" Debe="250.00" Haber="0.00" SaldoFin="250.00"/>
<BCE:Ctas NumCta="601.84" SaldoIni="0.00" Debe="250.00" Haber="0.00" SaldoFin="250.00"/>
</BCE:Balanza>
"""
# Adding a more specific group to ensure that the SAT is still generated correctly
self.env['account.group'].create({
"code_prefix_start": "201.01.01",
"code_prefix_end": "201.01.01",
"name": "Specific group",
})
options = self._generate_options(self.report, '2021-01-01', '2021-12-31')
options['l10n_mx_sat_ignore_errors'] = True
with freeze_time(self.frozen_today):
sat_report = self.env[self.report.custom_handler_model_name].action_l10n_mx_generate_sat_xml(options)['file_content']
self.assertXmlTreeEqual(
self.get_xml_tree_from_string(sat_report),
self.get_xml_tree_from_string(expected_sat_xml),
)
def test_generate_coa_xml_without_tag(self):
"""This test verifies that all accounts present in the trial balance have a Debit or a Credit balance account tag"""
self.company_data['default_account_payable'].tag_ids = [Command.clear()]
options = self._generate_options(self.report, '2021-01-01', '2021-12-31')
options['l10n_mx_sat_ignore_errors'] = True
with self.assertRaises(RedirectWarning):
self.env[self.report.custom_handler_model_name].action_l10n_mx_generate_coa_sat_xml(options)
def test_mx_trial_balance(self):
""" This test will test the Mexican Trial Balance (with and without the hierarchy) """
# Testing the report without hierarchy
options = self._generate_options(self.report, '2021-01-01', '2021-12-31', {'hierarchy': False, 'unfold_all': True})
options['l10n_mx_sat_ignore_errors'] = True
self.assertLinesValues(
self.report._get_lines(options),
# Name Initial Balance Debit Credit End Balance
[0, 1, 2, 3, 4],
[
('201.01.01 National suppliers', 1000.0, 75.0, 0.0, 1075.0),
('205.06.01.001 Extra deep code', 0.0, 50.0, 400.0, -350.0),
('205.06.03 Dotted name C.V.', 0.0, 400.0, 50.0, 350.0),
('401.01.01 Sales and/or services taxed at the general rate', 0.0, 0.0, 325.0, -325.0),
('601.84.01 Other overheads', 0.0, 250.0, 0.0, 250.0),
('Result Brought Forward - ESCUELA KEMPER URGATE', -1000.00, 0.00, 0.00, -1000.00),
('Total', 0.0, 775.0, 775.0, 0.0),
],
options,
)
# Testing the report with hierarchy
options['hierarchy'] = True
self.assertLinesValues(
self.report._get_lines(options),
# Name Initial Balance Debit Credit End Balance
[0, 1, 2, 3, 4],
[
('2 Passive', 1000.0, 525.0, 450.0, 1075.0),
('201 Suppliers', 1000.0, 75.0, 0.0, 1075.0),
('201.01 National suppliers', 1000.0, 75.0, 0.0, 1075.0),
('201.01.01 National suppliers', 1000.0, 75.0, 0.0, 1075.0),
('205 Short-term sundry creditors', 0.0, 450.0, 450.0, 0.0),
('205.06 Other short-term sundry creditors', 0.0, 450.0, 450.0, 0.0),
('205.06.01.001 Extra deep code', 0.0, 50.0, 400.0, -350.0),
('205.06.03 Dotted name C.V.', 0.0, 400.0, 50.0, 350.0),
('4 Income', 0.0, 0.0, 325.0, -325.0),
('401 Income', 0.0, 0.0, 325.0, -325.0),
('401.01 Sales and/or services taxed at the general rate', 0.0, 0.0, 325.0, -325.0),
('401.01.01 Sales and/or services taxed at the general rate', 0.0, 0.0, 325.0, -325.0),
('6 Expenditure', 0.0, 250.0, 0.0, 250.0),
('601 Overheads', 0.0, 250.0, 0.0, 250.0),
('601.84 Other overheads', 0.0, 250.0, 0.0, 250.0),
('601.84.01 Other overheads', 0.0, 250.0, 0.0, 250.0),
('Result Brought Forward - ESCUELA KEMPER URGATE', -1000.00, 0.00, 0.00, -1000.00),
('Total', 0.0, 775.0, 775.0, 0.0),
],
options,
)
def test_coa_valid_no_certificado(self):
"""
Test that the noCertificado section in the coa report contains 20 characters as specified by the format description:
http://www.sat.gob.mx/esquemas/ContabilidadE/1_1/BalanzaComprobacion/BalanzaComprobacion_1_1.xsd
"""
options = self._generate_options(self.report, '2021-01-01', '2021-12-31')
options['l10n_mx_sat_ignore_errors'] = True
with freeze_time(self.frozen_today):
self.certificate.write({
'date_start': f'{self.frozen_today.year}-01-01',
'date_end': f'{self.frozen_today.year}-12-31',
})
self.company.l10n_mx_edi_certificate_ids = self.certificate
coa_report = self.env[self.report.custom_handler_model_name].action_l10n_mx_generate_coa_sat_xml(options)['file_content']
self.assertEqual(20, len(self.get_xml_tree_from_string(coa_report).attrib.get("noCertificado")))
@tagged('external_l10n', 'post_install', '-at_install', '-standard', 'external')
class TestL10nMXTrialBalanceReportXmlValidity(TestL10nMXTrialBalanceReportCommon):
@test_xsd(url='https://www.sat.gob.mx/esquemas/ContabilidadE/1_3/CatalogoCuentas/CatalogoCuentas_1_3.xsd')
def test_coa_xml_validity(self):
options = self._generate_options(self.report, '2021-01-01', '2021-12-31')
options['l10n_mx_sat_ignore_errors'] = True
return self.env[self.report.custom_handler_model_name].action_l10n_mx_generate_coa_sat_xml(options)['file_content']
@test_xsd(url='https://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion/BalanzaComprobacion_1_3.xsd')
def test_sat_xml_validity(self):
options = self._generate_options(self.report, '2021-01-01', '2021-12-31')
options['l10n_mx_sat_ignore_errors'] = True
return self.env[self.report.custom_handler_model_name].action_l10n_mx_generate_sat_xml(options)['file_content']