[IMP] l10n_mx: Completely refactored Mexican CoA Template. Courtesy of Vauxoo.

* Added accounts provided following the structure provided by the SAT
this accounts are only the minimal necessary ones, with the objective
to set the first easiest engagement to new users and tags will represent the actual information
from the document linked.

* The name of the tag is the concatenation of tag.code + tag.name, because the account.tag
model have not the code field.

Note: we will need more accounts but some of them for special operations
which are not basic at all, then it is better just propose the operational accounts
once we understand a proper closing process.

* Set the proper user-types on accounts in order to be able to use it with the official reports this CoA
for operational purpose.

* Added nature field and data in tags to allow set this value in electronic account report, and
set this value with data pre loaded, we did not use user.type for this due to the fact that the same user type can have different nature (if it grows for credit or debit), I do not know if this field brakes the stable rule we can discuse about that.

* Assign the account tags with in the Mexican CoA template installation, and with an onchange(account.code) when manually modifying/creating accounts.

Rationale: If the code of the accounts follows the pattern 111.00.00 or 111-00-00 then it will
set the tag 111.00 if the tag exists, if not then this will be ignored.

* Generate an account tag by each second level account in SAT catalog, and assign to the corresponding account.
This commit is contained in:
Nhomar Hernandez
2016-12-09 13:59:09 +01:00
committed by qdp-odoo
parent d6ead3dbe0
commit 9a0e3a11db
9 changed files with 6077 additions and 2256 deletions
+2
View File
@@ -1,2 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
+6 -1
View File
@@ -30,8 +30,13 @@ With this module you will have:
.. SAT: http://www.sat.gob.mx/
""",
"depends": ["account", "base_vat"],
"depends": [
"account",
"base_vat",
"account_tax_cash_basis",
],
"data": [
"data/account_tag_data.xml",
"data/l10n_mx_chart_data.xml",
"data/account_tax_data.xml",
"data/account_chart_template_data.yml",
@@ -1,3 +1,3 @@
-
!python {model: account.chart.template, id: vauxoo_mx_chart_template}: |
self[0].try_loading_for_current_company()
!python {model: account.chart.template, id: mx_coa}: |
self[0].try_loading_for_current_company()
File diff suppressed because it is too large Load Diff
+80 -112
View File
@@ -6,10 +6,6 @@
<field name="name">IVA(0%) VENTAS</field>
<field name="applicability">taxes</field>
</record>
<record id="tax_tag_02" model="account.account.tag">
<field name="name">IVA(11%) VENTAS</field>
<field name="applicability">taxes</field>
</record>
<record id="tax_tag_03" model="account.account.tag">
<field name="name">IVA(16%) VENTAS</field>
<field name="applicability">taxes</field>
@@ -42,157 +38,129 @@
<field name="name">IVA(0%) COMPRAS</field>
<field name="applicability">taxes</field>
</record>
<record id="tax_tag_11" model="account.account.tag">
<field name="name">IVA(11%) COMPRAS</field>
<field name="applicability">taxes</field>
</record>
<record id="tax_tag_12" model="account.account.tag">
<field name="name">IVA(16%) COMPRAS</field>
<field name="applicability">taxes</field>
</record>
<record id="tax9" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax9" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">IVA(0%) VENTAS</field>
<field name="description">ITAX_010-IN</field>
<field name="amount">0</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">sale</field>
<field name="account_id" ref="cuenta2202113000"/>
<field name="refund_account_id" ref="cuenta2202113000"/>
<field name="amount">0</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">sale</field>
<field name="account_id" ref="cuenta209_01"/>
<field name="refund_account_id" ref="cuenta209_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_01')])]"/>
</record>
</record>
<record id="tax11" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<field name="name">IVA(11%) VENTAS</field>
<field name="description">ITAX_110-IN</field>
<field name="amount">11</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">sale</field>
<field name="account_id" ref="cuenta2202113000"/>
<field name="refund_account_id" ref="cuenta2202113000"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_02')])]"/>
</record>
<record id="tax12" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax12" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">IVA(16%) VENTAS</field>
<field name="description">ITAX_160-IN</field>
<field name="amount">16</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">sale</field>
<field name="account_id" ref="cuenta2202113000"/>
<field name="refund_account_id" ref="cuenta2202113000"/>
<field name="amount">16</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">sale</field>
<field name="account_id" ref="cuenta209_01"/>
<field name="refund_account_id" ref="cuenta209_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_03')])]"/>
</record>
</record>
<record id="tax1" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax1" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">RET IVA FLETES 4%</field>
<field name="description">ITAXR_04-OUT</field>
<field name="amount">-4</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta2201112000"/>
<field name="refund_account_id" ref="cuenta2201112000"/>
<field name="amount">-4</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_04')])]"/>
</record>
</record>
<record id="tax2" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax2" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">RET IVA ARRENDAMIENTO 10%</field>
<field name="description">ITAXR_10-OUT</field>
<field name="amount">-10</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta2201117000"/>
<field name="refund_account_id" ref="cuenta2201117000"/>
<field name="amount">-10</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_05')])]"/>
</record>
</record>
<record id="tax3" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax3" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">RET ISR ARRENDAMIENTO 10%</field>
<field name="description">ITAXA_10-OUT</field>
<field name="amount">-10</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta2201116000"/>
<field name="refund_account_id" ref="cuenta2201116000"/>
<field name="amount">-10</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta216_03"/>
<field name="refund_account_id" ref="cuenta216_03"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_06')])]"/>
</record>
</record>
<record id="tax5" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax5" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">RET ISR HONORARIOS 10%</field>
<field name="description">ITAXH_10-OUT</field>
<field name="amount">-10</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta2201115000"/>
<field name="refund_account_id" ref="cuenta2201115000"/>
<field name="amount">-10</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta216_04"/>
<field name="refund_account_id" ref="cuenta216_04"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_07')])]"/>
</record>
</record>
<record id="tax7" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax7" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">RETENCION IVA ARRENDAMIENTO 10.67%</field>
<field name="description">ITAX_1067-OUT</field>
<field name="amount">-10.67</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta2201116000"/>
<field name="refund_account_id" ref="cuenta2201116000"/>
<field name="amount">-10.67</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_08')])]"/>
</record>
</record>
<record id="tax8" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax8" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">RETENCION IVA HONORARIOS 10.67%</field>
<field name="description">ITAX_167-OUT</field>
<field name="amount">-10.67</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta2201118000"/>
<field name="refund_account_id" ref="cuenta2201118000"/>
<field name="amount">-10.67</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_09')])]"/>
</record>
</record>
<record id="tax13" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax13" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">IVA(0%) COMPRAS</field>
<field name="description">ITAX_010-OUT</field>
<field name="amount">0</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta1151004000"/>
<field name="refund_account_id" ref="cuenta1151004000"/>
<field name="amount">0</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta119_01"/>
<field name="refund_account_id" ref="cuenta119_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_10')])]"/>
</record>
</record>
<record id="tax10" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<field name="name">IVA(11%) COMPRAS</field>
<field name="description">ITAX_110-OUT</field>
<field name="amount">11</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta1151004000"/>
<field name="refund_account_id" ref="cuenta1151004000"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_11')])]"/>
</record>
<record id="tax14" model="account.tax.template">
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
<record id="tax14" model="account.tax.template">
<field name="chart_template_id" ref="mx_coa"/>
<field name="name">IVA(16%) COMPRAS</field>
<field name="description">ITAX_160-OUT</field>
<field name="amount">16</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta1151004000"/>
<field name="refund_account_id" ref="cuenta1151004000"/>
<field name="amount">16</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">purchase</field>
<field name="account_id" ref="cuenta119_01"/>
<field name="refund_account_id" ref="cuenta119_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_12')])]"/>
</record>
</record>
</data>
</odoo>
File diff suppressed because it is too large Load Diff
+6
View File
@@ -0,0 +1,6 @@
# coding: utf-8
# Copyright 2016 Vauxoo (https://www.vauxoo.com) <info@vauxoo.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from . import chart_template
from . import account
+59
View File
@@ -0,0 +1,59 @@
# coding: utf-8
# Copyright 2016 Vauxoo (https://www.vauxoo.com) <info@vauxoo.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
import re
from odoo import models, api, fields, _
class AccountJournal(models.Model):
_inherit = 'account.journal'
@api.model
def _prepare_liquidity_account(self, name, company, currency_id, type):
'''
When preparing the values to use when creating the default debit and credit accounts of a
liquidity journal, set the correct tags for the mexican localization.
'''
res = super(AccountJournal, self)._prepare_liquidity_account(name, company, currency_id, type)
if company.country_id.id == self.env.ref('base.mx').id:
mx_tags = self.env['account.account'].mx_search_tags(res.get('code', ''))
if mx_tags:
res.update({
'tag_ids': [(6, 0, [tag.id for tag in mx_tags])]
})
return res
class AccountAccount(models.Model):
_inherit = 'account.account'
@api.model
def mx_search_tags(self, code):
account_tag = self.env['account.account.tag']
#search if the code is compliant with the regexp we have for tags auto-assignation
re_res = re.search(
'^(?P<first>[1-8][0-9][0-9])[,.]'
'(?P<second>[0-9][0-9])[,.]'
'(?P<third>[0-9]{2,3})$', code)
if not re_res:
return account_tag
#get the elements of that code divided with separation declared in the regexp
account = re_res.groups()
return account_tag.search([
('name', '=like', "%s.%s%%" % (account[0], account[1])),
('color', '=', 4)], limit=1)
@api.onchange('code')
def _onchange_code(self):
if self.company_id.country_id.id == self.env.ref('base.mx').id and self.code:
tags = self.mx_search_tags(self.code)
self.tag_ids = tags
class AccountAccountTag(models.Model):
_inherit = 'account.account.tag'
nature = fields.Selection([
('D', _('Debitable Account')), ('A', _('Creditable Account'))],
help='Used in Mexican report of electronic accounting (account nature).')
+81
View File
@@ -0,0 +1,81 @@
# coding: utf-8
# Copyright 2016 Vauxoo (https://www.vauxoo.com) <info@vauxoo.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from odoo import models, api, _
class AccountChartTemplate(models.Model):
_inherit = "account.chart.template"
@api.multi
def _load_template(
self, company, code_digits=None, transfer_account_id=None,
account_ref=None, taxes_ref=None):
"""
Set the 'use_cash_basis' and 'cash_basis_account' fields on account.account. This hack is needed due to the fact
that the tax template does not have the fields 'use_cash_basis' and 'cash_basis_account'.
This hunk should be removed in master, as the account_tax_cash_basis module has been merged already in account
module
"""
self.ensure_one()
accounts, taxes = super(AccountChartTemplate, self)._load_template(
company, code_digits=code_digits,
transfer_account_id=transfer_account_id, account_ref=account_ref,
taxes_ref=taxes_ref)
if not self == self.env.ref('l10n_mx.mx_coa'):
return accounts, taxes
account_tax_obj = self.env['account.tax']
account_obj = self.env['account.account']
taxes_acc = {
'ITAX_010-IN': account_obj.search([('code', '=', '208.01.01')]),
'ITAX_160-IN': account_obj.search([('code', '=', '208.01.01')]),
'ITAXR_04-OUT': account_obj.search([('code', '=', '216.13.01')]),
'ITAXR_10-OUT': account_obj.search([('code', '=', '216.13.01')]),
'ITAX_1067-OUT': account_obj.search([('code', '=', '216.13.01')]),
'ITAX_167-OUT': account_obj.search([('code', '=', '216.13.01')]),
'ITAX_010-OUT': account_obj.search([('code', '=', '208.01.01')]),
'ITAX_160-OUT': account_obj.search([('code', '=', '208.01.01')])}
for tax in self.tax_template_ids:
if tax.description not in taxes_acc:
continue
account_tax_obj.browse(taxes.get(tax.id)).write({
'use_cash_basis': True,
'cash_basis_account': taxes_acc.get(tax.description).id,
})
return accounts, taxes
@api.model
def generate_journals(self, acc_template_ref, company, journals_dict=None):
"""Set the tax_cash_basis_journal_id on the company"""
res = super(AccountChartTemplate, self).generate_journals(
acc_template_ref, company, journals_dict=journals_dict)
if not self == self.env.ref('l10n_mx.mx_coa'):
return res
journal_basis = self.env['account.journal'].search([
('type', '=', 'general'),
('code', '=', 'CBMX')], limit=1)
company.write({'tax_cash_basis_journal_id': journal_basis.id})
return res
@api.multi
def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
"""Create the tax_cash_basis_journal_id"""
res = super(AccountChartTemplate, self)._prepare_all_journals(
acc_template_ref, company, journals_dict=journals_dict)
if not self == self.env.ref('l10n_mx.mx_coa'):
return res
res.append({
'type': 'general',
'name': _('Effectively Paid'),
'code': 'CBMX',
'company_id': company.id,
'default_credit_account_id': acc_template_ref.get(
self.income_currency_exchange_account_id.id),
'default_debit_account_id': acc_template_ref.get(
self.expense_currency_exchange_account_id.id),
'show_on_dashboard': True,
})
return res