OCA, or the Odoo Community Association, is a nonprofit organization whose
diff --git a/l10n_br_account_payment_order/tests/__init__.py b/l10n_br_account_payment_order/tests/__init__.py
index c1180c63ef51..479d51fe9ee3 100644
--- a/l10n_br_account_payment_order/tests/__init__.py
+++ b/l10n_br_account_payment_order/tests/__init__.py
@@ -3,3 +3,4 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from . import test_payment_order
+from . import test_payment_order_inbound
diff --git a/l10n_br_account_payment_order/tests/test_payment_order.py b/l10n_br_account_payment_order/tests/test_payment_order.py
index c3ccd8a948d5..a7154265cb6f 100644
--- a/l10n_br_account_payment_order/tests/test_payment_order.py
+++ b/l10n_br_account_payment_order/tests/test_payment_order.py
@@ -4,7 +4,7 @@
from openerp.tests.common import TransactionCase
-from openerp.exceptions import UserError, ValidationError
+from openerp.exceptions import ValidationError
class TestPaymentOrder(TransactionCase):
@@ -13,21 +13,22 @@ def setUp(self):
super().setUp()
# Get Invoice for test
self.invoice_customer_original = self.env.ref(
- 'l10n_br_account_payment_order.demo_invoice_payment_order'
+ 'l10n_br_account_payment_order.'
+ 'demo_invoice_payment_order_itau_cnab400'
)
# Payment Mode
self.payment_mode = self.env.ref(
- 'l10n_br_account_payment_order.main_company_payment_mode_boleto'
+ 'l10n_br_account_payment_order.payment_mode_cobranca_itau400'
)
- self.env['account.payment.order'].search([])
-
# Configure to be possibile create Payment Order
self.payment_mode.payment_order_ok = True
self.invoice_customer_original.payment_mode_id = self.payment_mode.id
+ self.invoice_customer_original._onchange_payment_mode_id()
+
# Configure Journal to update posted
self.invoice_customer_original.journal_id.update_posted = True
@@ -44,6 +45,9 @@ def setUp(self):
assert self.invoice_customer_original.move_id,\
"Move not created for open invoice"
+ payment_order = self.env['account.payment.order'].search([])
+ assert payment_order, "Payment Order not created."
+
def test_implemented_fields_payment_order(self):
""" Test implemented fields in object account.move.line """
# Check Payment Mode field
@@ -59,7 +63,9 @@ def test_implemented_fields_payment_order(self):
self.assertEquals(
line.journal_entry_ref, line.invoice_id.name,
"Error with compute field journal_entry_ref")
- test_balance_value = line.get_balance()
+ # testar com a parcela 700
+ if line.debit == 700.0:
+ test_balance_value = line.get_balance()
# Return the status of Move to Posted
self.invoice_customer_original.move_id.action_post()
@@ -67,10 +73,14 @@ def test_implemented_fields_payment_order(self):
for line in self.invoice_customer_original.move_id.line_ids.filtered(
lambda l: l.account_id.id ==
self.invoice_customer_original.account_id.id):
+ assert line.own_number,\
+ 'own_number field is not filled in created Move Line.'
self.assertEquals(
line.journal_entry_ref, line.invoice_id.name,
"Error with compute field journal_entry_ref")
- test_balance_value = line.get_balance()
+ # testar com a parcela 700
+ if line.debit == 700.0:
+ test_balance_value = line.get_balance()
self.assertEquals(
test_balance_value, 700.0,
@@ -79,11 +89,12 @@ def test_implemented_fields_payment_order(self):
def test_cancel_payment_order(self):
""" Test create and cancel a Payment Order."""
# Add to payment order
- self.invoice_customer_original.create_account_payment_line()
+ payment_order = self.env['account.payment.order'].search([
+ ('payment_mode_id', '=', self.payment_mode.id)])
+
+ bank_journal = self.env.ref(
+ 'l10n_br_account_payment_order.itau_journal')
- payment_order = self.env['account.payment.order'].search([])
- bank_journal = self.env['account.journal'].search(
- [('type', '=', 'bank')], limit=1)
# Set journal to allow cancelling entries
bank_journal.update_posted = True
@@ -95,40 +106,39 @@ def test_cancel_payment_order(self):
self.assertEquals(len(payment_order.bank_line_ids), 0)
for line in payment_order.payment_line_ids:
- line.percent_interest = 1.5
- self.assertEquals(line._get_info_partner(
- self.invoice_customer_original.partner_id),
- 'AKRETION LTDA',
- "Error with method _get_info_partner"
- )
- test_amount_interest = line.amount_interest
- self.assertEquals(
- test_amount_interest, 10.5,
- "Error with compute field amount_interest.")
+ # testar com a parcela 700
+ if line.amount_currency == 700.0:
+ line.percent_interest = 1.5
+ test_amount_interest = line.amount_interest
+ if line.amount_currency == 700.0:
+ self.assertEquals(
+ test_amount_interest, 10.5,
+ "Error with compute field amount_interest.")
# Open payment order
payment_order.draft2open()
self.assertEquals(len(payment_order.bank_line_ids), 2)
+ # TODO
# Generate and upload
- payment_order.open2generated()
- payment_order.generated2uploaded()
-
- self.assertEquals(payment_order.state, 'uploaded')
- with self.assertRaises(UserError):
- payment_order.unlink()
+ # payment_order.open2generated()
+ # payment_order.generated2uploaded()
+ # self.assertEquals(payment_order.state, 'uploaded')
+ # with self.assertRaises(UserError):
+ # payment_order.unlink()
bank_line = payment_order.bank_line_ids
- with self.assertRaises(UserError):
- bank_line.unlink()
+ # with self.assertRaises(UserError):
+ bank_line.unlink()
payment_order.action_done_cancel()
self.assertEquals(payment_order.state, 'cancel')
payment_order.unlink()
- self.assertEquals(len(self.env['account.payment.order'].search([])), 0)
+ self.assertEquals(len(self.env['account.payment.order'].search([
+ ('payment_mode_id', '=', self.payment_mode.id)])), 0)
def test_bra_number_constrains(self):
""" Test bra_number constrains. """
@@ -141,3 +151,10 @@ def test_bra_number_constrains(self):
partner_id=self.ref('l10n_br_base.res_partner_akretion'),
bra_number='12345'
))
+
+ def test_cancel_invoice(self):
+ """ Test Cancel Invoice """
+ self.invoice_customer_original.action_invoice_cancel()
+
+ # I check that the invoice state is "Cancel"
+ self.assertEquals(self.invoice_customer_original.state, 'cancel')
diff --git a/l10n_br_account_payment_order/tests/test_payment_order_inbound.py b/l10n_br_account_payment_order/tests/test_payment_order_inbound.py
new file mode 100644
index 000000000000..4a39cda13556
--- /dev/null
+++ b/l10n_br_account_payment_order/tests/test_payment_order_inbound.py
@@ -0,0 +1,169 @@
+# @ 2020 Akretion - www.akretion.com.br -
+# Magno Costa
+# @ 2020 KMEE - www.kmee.com.br
+# Luis Felipe Mileo
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo.tests.common import TransactionCase
+
+
+class TestPaymentOrderInbound(TransactionCase):
+
+ def setUp(self):
+ super().setUp()
+
+ # Get Invoice for test
+ self.invoice_customer_original = self.env.ref(
+ 'l10n_br_account_payment_order.demo_invoice_payment_order'
+ )
+
+ self.invoice_customer_original.journal_id.update_posted = True
+
+ # Product Tax Boleto
+ self.invoice_product_tax_boleto = self.env.ref(
+ 'l10n_br_account_payment_order.demo_invoice_payment_order_bb_cnab400'
+ )
+
+ # Product Tax Boleto
+ self.invoice_cheque = self.env.ref(
+ 'l10n_br_account_payment_order.demo_invoice_payment_order_cheque'
+ )
+
+ def test_payment_order(self):
+ """Test automatic creation of Payment Order."""
+
+ # I check that Initially customer invoice is in the "Draft" state
+ self.assertEquals(self.invoice_customer_original.state, 'draft')
+
+ # I validate invoice by creating on
+ self.invoice_customer_original.action_invoice_open()
+
+ # I check that the invoice state is "Open"
+ self.assertEquals(self.invoice_customer_original.state, 'open')
+
+ # I check that now there is a move attached to the invoice
+ assert self.invoice_customer_original.move_id,\
+ "Move not created for open invoice"
+
+ payment_order = self.env['account.payment.order'].search([
+ ('state', '=', 'draft')
+ ])
+ # I check creation of Payment Order
+ assert payment_order, "Payment Order not created."
+ payment_order.draft2open()
+ # The file generation need additional module to use BRCobranca or PyBoleto
+ # payment_order.open2generated()
+
+ def test_product_tax_boleto(self):
+ """ Test Invoice where Payment Mode has Product Tax. """
+ self.invoice_product_tax_boleto._onchange_payment_mode_id()
+ # I validate invoice by creating on
+ self.invoice_customer_original.action_invoice_open()
+
+ # I check that the invoice state is "Open"
+ self.assertEquals(self.invoice_customer_original.state, 'open')
+
+ def test_payment_mode_without_payment_order(self):
+ """ Test Invoice when Payment Mode not generate Payment Order. """
+ self.invoice_cheque._onchange_payment_mode_id()
+ # I validate invoice by creating on
+ self.invoice_cheque.action_invoice_open()
+
+ # I check that the invoice state is "Open"
+ self.assertEquals(self.invoice_cheque.state, 'open')
+
+ def test_payment_inbound_change_due_date(self):
+ """ Change account.move.line due date. Automatic add this aml to a new
+ payment.order, export the movement to the bank and process it's accept return.
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_cancel_invoice_not_registred(self):
+ """ Cancel the invoice with a payment that isn't registred at the bank
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_cancel_invoice_alread_registred_raise(self):
+ """ Cancel the invoice with a payment that is already registred at the bank.
+ For that you have to create bank movement of "BAIXA" before you can cancel
+ the invoice.
+
+ In this test we must get a raise when trying to cancel the invoice.
+
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_payment_in_cash(self):
+ """ Pay a invoice in cash, with a payment already registred to in the bank.
+ Then we must cancel the boleto at the bank, creating a movement of "BAIXA".
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_cancel_invoice_alread_registred_with_baixa(self):
+ """ Cancel the invoice with a payment that is already registred at the bank.
+ For that you have to create bank movement of "BAIXA" before you can cancel
+ the invoice.
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_return_accept(self):
+ """ The payment was exported and the bank return that it's accepted
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_return_denied(self):
+ """ The payment was exported and the bank return that it's denied
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_return_paid(self):
+ """ The payment was exported, accepted, and after some days the bank
+ return that it's paid (LIQUIDADO) by the customer
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_return_baixado(self):
+ """ The payment was exported, accepted, and after some days the user at
+ internet banking cancel it (STATE: BAIXADO). The invoice must stay
+ open, waiting to the user to do a new manual action.
+
+ - The user must be warned that the state of the invoice/aml
+ was changed at the bank;
+ - The user can record manual/statement payment with another payment method;
+ - The user can cancel the invoice/aml;
+
+ This test is similar with "test_payment_inbound_payment_in_cash" buy
+ it is not exported again to the bank because i'ts already set manualy at the
+ internet banking
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_return_paid_with_interest(self):
+ """ The payment was exported, accepted, and after some days the bank
+ return that it's paid (LIQUIDADO) by the customer but with interest
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_return_paid_with_discount(self):
+ """ The payment was exported, accepted, and after some days the bank
+ return that it's paid (LIQUIDADO) by the customer but with discount
+ :return:
+ """
+ pass
+
+ def test_payment_inbound_protesto(self):
+ """ Protesto movement sent and accepted
+ :return:
+ """
+ pass
diff --git a/l10n_br_account_payment_order/tests/test_remessa.REM b/l10n_br_account_payment_order/tests/test_remessa.REM
new file mode 100644
index 000000000000..98e34ca146f4
--- /dev/null
+++ b/l10n_br_account_payment_order/tests/test_remessa.REM
@@ -0,0 +1,6 @@
+23100000 281583054000129 01611000000000039500Sua Empresa BANCO BRADESCO S.A. 11303201712000000000108400000
+23100011R01 042 2081583054000129 01611000000000039500Sua Empresa 000001011303201700000000
+2310001300001P 01016110000000000395000000000000000000000030 0 001 0503201700000000010000000000 01A130320170050320170000000000000000000000000000000000000000000000000000000000000000000001 00020 000000000000
+2310001300002Q 012081493979000189Cliente 1 SP Rua Samuel Morse 135 Brooklin 04576060Sao Paulo SP0000000000000000 000
+23100015 00000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000
+23199999 000001000006000000
diff --git a/l10n_br_account_payment_order/views/account_due_list.xml b/l10n_br_account_payment_order/views/account_due_list.xml
deleted file mode 100644
index 2269b063c65d..000000000000
--- a/l10n_br_account_payment_order/views/account_due_list.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- l10n_br_account_payment_order.aml
- account.move.line
-
-
-
-
-
-
-
-
-
diff --git a/l10n_br_account_payment_order/views/account_invoice.xml b/l10n_br_account_payment_order/views/account_invoice.xml
new file mode 100644
index 000000000000..0d50c27453c7
--- /dev/null
+++ b/l10n_br_account_payment_order/views/account_invoice.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ view.l10n_br_account.invoice.form.form.inherit
+ account.invoice
+
+
+
+
+
+
+
+
+
+
+
+
+ view.account.invoice.filter.inherit
+ account.invoice
+ search
+
+
+
+ {'group_by': 'partner_id'}
+
+
+ [('state','!=','paid')]
+
+
+
+
diff --git a/l10n_br_account_payment_order/views/account_journal.xml b/l10n_br_account_payment_order/views/account_journal.xml
new file mode 100644
index 000000000000..1b4ae33ad2e1
--- /dev/null
+++ b/l10n_br_account_payment_order/views/account_journal.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+ account.journal.bank.form (in l10n_br_account_payment_order)
+ account.journal
+
+
+
+
+
+
+
+
+
+ account.journal.form (in l10n_br_account_payment_order)
+ account.journal
+
+
+
+
+
+
+
+
+
diff --git a/l10n_br_account_payment_order/views/account_move_line.xml b/l10n_br_account_payment_order/views/account_move_line.xml
new file mode 100644
index 000000000000..7e5caa39e3f8
--- /dev/null
+++ b/l10n_br_account_payment_order/views/account_move_line.xml
@@ -0,0 +1,57 @@
+
+
+
+
+ cnab.account.move.line.form.inherit
+ account.move.line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
-
Este é o módulo base da localização brasileira e implementa adaptações nos modelos básicos do Odoo Parceiros, Empresas e Endereços:
+
+
Este é o módulo raiz da localização brasileira. Ele traz adaptações nos modelos do módulo base do Odoo como Parceiros, Empresas e Endereços:
Campo CNPJ e CPF com formatação e validação destes campos;
Campo de Inscrição Estadual com validação;
Formatação dos campos de endereço;
-
Código do Banco Central e Siscomex para paises;
-
Código do IBGE para estados e municipios;
+
Código do Banco Central e Siscomex para países;
+
Código do IBGE para estados e municípios;
Lista dos Bancos brasileiros;
-
Lista dos municipios brasileiros.
+
Lista dos municípios brasileiros.
+
Se trata de um módulo muito simples e maduro. Existem alguns outros módulos simples que dependem apenas desse módulo ou quase como l10n_br_crm ou l10n_br_portal.
+
Mas se você quiser emitir ou apenas gerenciar algum tipo de documento fiscal como NF-e ou NFS-e, o próximo módulo que você deve olhar é o l10n_br_fiscal que é porém um módulo muito mais complexo.
Após a instalação do módulo deve ser preenchido o endereço da empresa para que a formação e validações necessárias para o Brasil funcione os objetos parceiros e nos endereços.
Após ter o endereço da empresa configurado, no cadastro do parceiro você encotrar os campos CNPJ, CPF, IE, RG e os campos de endereço formatado para o Brasil. Caso você tenha apenas o módulo base instalado, você pode instalar o módulo Contact para acessar o cadastro de parceiros.
A partir da versão 12.0 foi extraído o pacote de validações cadastrais erpbrasil.base no intuito de minimizar o código que depende de uma versão especifica do Odoo e para desenvolver sinergias com outras comunidades de código aberto.
Devido ao trabalho enorme com a reescritura do módulo de contabilidade na versão 9 e a problemas pessoas de um dos autores, essa versão atrasou um pouco para sair.
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
@@ -423,15 +474,15 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
diff --git a/l10n_br_coa/README.rst b/l10n_br_coa/README.rst
index 0fecf8618ada..6d09c8b6f673 100644
--- a/l10n_br_coa/README.rst
+++ b/l10n_br_coa/README.rst
@@ -1,15 +1,15 @@
-===========
-L10n Br Coa
-===========
+=============
+Brazilian COA
+=============
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
- :alt: Beta
+ :alt: Production/Stable
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
@@ -25,7 +25,40 @@ L10n Br Coa
|badge1| |badge2| |badge3| |badge4| |badge5|
-Base Brasilian Localization of Chart of Account
+Este módulo é comum entre os planos de contas da localização brasileira.
+
+Herança
+~~~~~~~
+
+Assim como na localização espanhola (https://github.com/OCA/l10n-spain) que já permitia carregar vários planos de contas, este módulo define um plano de conta básico que é depois estendido pelos planos de contas específicos (ITG 1000, empresas do regime normais de determinados setores...). Isso permite mutualizar um pouco a configuração entre os planos, especialmente para carregar o plano customizado de uma determinada empresa. Por exemplo, no repositório da localização este módulo é herdado por 2 módulos:
+
+.. code-block:: text
+
+ l10n_br_coa
+ / \
+ l10n_br_coa_simples l10n_br_coa_generic
+
+Em particular, definir aqui os tipos de contas usados na DRE e no Balanço Patrimonial (módulo ´´l10n_br_mis_report´´) facilita a adaptação desses relatorios para esses diversos planos de contas.
+
+
+Contas contábeis
+~~~~~~~~~~~~~~~~
+
+Uma outra característica é que ao contrário do que acontece na Europa, o primeiro mercado que foi alvejado pelo Odoo, no Brasil tem muitas alíquotas, pelo menos para as empresas do regime normal. Sendo assim, não é bem viável ter um objeto ``account.tax`` para cada alíquota como o Odoo nativo espera (fazíamos isso até a versão 10.0 mas era muito trabalhoso para manter). Em vez disso temos tabelas específicas para armazenar todas as alíquotas no módulo ``l10n_br_fiscal`` e temos registros ``account.tax`` apenas para alíquotas de cada família. O módulo ``l10n_br_account`` faz a ligação entre o ``account.tax`` do Odoo e os registros ``l10n_br_fiscal.tax`` para cada alíquota da localização. Vale a pena notar que nos EUA o Odoo também não usa um registro ``account.tax`` por alíquota, em vez disso eles geralmente usam conectores e serviços (como AvaTax) para pegar as alíquotas de uma determinada operação.
+
+Neste caso a configuração contábil não podia ser carregada nem pelo ``account.tax`` nem pelo ``l10n_br_fiscal.tax`` (já que o módulo ``l10n_br_fiscal`` não depende do módulo ``account``). Então estendemos o objeto ``account.tax.group`` para carregar as informações contábeis, inclusive das taxas dedutíveis.
+
+
+Taxas dedutíveis
+~~~~~~~~~~~~~~~~
+
+No Odoo nativo, uma taxa é considerada dedutível (como por exemplo uma compra em outro outro país Europeu) se o registro ``account.tax`` tem uma alíquota negativa. Porém já que como falamos aqui é preferível de não gerenciar um ``account.tax`` por alíquota. Por isso temos um flag adicional no ``account.tax`` e ``account.tax.template`` através do ``account.tax.mixin`` para saber se é uma taxa dedutível.
+
+
+Template
+~~~~~~~~
+
+Foi ainda necessário sobrescrever a função que instancia um plano de contas a partir de um template para propagar essas informações.
**Table of contents**
diff --git a/l10n_br_coa/__manifest__.py b/l10n_br_coa/__manifest__.py
index 3bea096d9d02..66f64f9e0eba 100644
--- a/l10n_br_coa/__manifest__.py
+++ b/l10n_br_coa/__manifest__.py
@@ -3,10 +3,10 @@
# License AGPL-3.0 or later (http://www.gnu.org/lic enses/agpl).
{
- 'name': 'L10n Br Coa',
+ 'name': 'Brazilian COA',
'summary': """
- Base Brasilian Localization of Chart of Account""",
- 'version': '12.0.2.0.0',
+ Base Brasilian Localization for the Chart of Accounts""",
+ 'version': '12.0.2.1.0',
'license': 'AGPL-3',
'author': 'Akretion, KMEE, Odoo Community Association (OCA)',
'website': 'https://github.com/oca/l10n-brazil',
@@ -17,6 +17,8 @@
'data/account_tax_tag.xml',
'data/account_tax_group.xml',
'data/account_tax_template.xml',
+ 'data/account_type_data.xml',
],
+ 'development_status': 'Production/Stable',
'installable': True,
}
diff --git a/l10n_br_coa/data/account_type_data.xml b/l10n_br_coa/data/account_type_data.xml
new file mode 100644
index 000000000000..d36353575b78
--- /dev/null
+++ b/l10n_br_coa/data/account_type_data.xml
@@ -0,0 +1,219 @@
+
+
+
+
+
+
+ Ativo / Circulante / Caixa e Equivalentes de Caixa
+
+
+
+ Ativo / Circulante / Contas a Receber
+
+
+
+ Ativo / Circulante / Perdas Estimadas com Créditos duvidosos
+ other
+ asset
+
+
+
+ Ativo / Circulante / Estoque
+ other
+ asset
+
+
+
+ Ativo / Circulante / Outros Créditos
+ other
+ asset
+
+
+
+ Ativo / Não Circulante / Realizável a Longo Prazo
+ receivable
+ asset
+
+
+
+ Ativo / Não Circulante / Investimentos
+ other
+ asset
+
+
+
+ Ativo / Não Circulante / Imobilizado
+
+
+
+ Ativo / Não Circulante / (-) Depreciação
+
+
+
+ Ativo / Não Circulante / Intangível
+ other
+ asset
+
+
+
+ Ativo / Não Circulante / (-) Amortização
+ other
+ asset
+
+
+
+ Passivo / Circulante / Fornecedores
+
+
+
+ Passivo / Circulante / Empréstimos e Financiamentos
+ other
+ liability
+
+
+
+ Passivo / Circulante / Obrigações Fiscais
+ other
+ liability
+
+
+
+ Passivo / Circulante / Obrigações Trabalhistas
+ other
+ liability
+
+
+
+ Passivo / Circulante / Contas a Pagar
+ other
+ liability
+
+
+
+ Passivo / Circulante / Provisões
+ other
+ liability
+
+
+
+ Passivo / Não Circulante / Contas a pagar
+
+
+
+ Passivo / Não Circulante / Financiamentos
+ other
+ liability
+
+
+
+ Patrimônio Líquido / Capital Social
+
+
+
+ Patrimônio Líquido / Reserva de Capital
+ other
+ equity
+
+
+
+ Patrimônio Líquido / Reserva de Lucros
+ other
+ equity
+
+
+
+ Patrimônio Líquido / Lucros Acumulados
+
+
+
+ Patrimônio Líquido / (-) Prejuizos Acumulados
+ other
+ equity
+
+
+
+
+
+ Receitas / Vendas de Produtos, Mercadorias e Serviços
+
+
+
+ Receitas / (-) Deduções de Tributos, Abatimentos e Devoluções
+ other
+ income
+
+
+
+ (-) CUSTO DAS VENDAS / Custo dos Produtos, Mercadorias e Serviços
+
+
+
+ (-) DESPESAS OPERACIONAIS / Despesas Administrativas
+ other
+ expense
+
+
+
+ (-) DESPESAS OPERACIONAIS / Despesas com Vendas
+ other
+ expense
+
+
+
+ (-) DESPESAS OPERACIONAIS / Outras Despesas Gerais
+ other
+ expense
+
+
+
+ (+/-) RESULTADO FINANCEIRO / Receitas Financeiras
+ other
+ income
+
+
+
+ (+/-) RESULTADO FINANCEIRO / (-) Despesas Financeiras
+ other
+ expense
+
+
+
+ (+/-) OUTRAS RECEITAS E DESPESAS OPERACIONAIS
+ other
+ income
+
+
+
+ (-) Despesa com Contribuição Social
+ other
+ expense
+
+
+
+ (-) Despesa com Imposto de Renda da Pessoa Jurídica
+ other
+ expense
+
+
+
+
+
+ Custo
+ other
+ expense
+
+
+
+ Produção
+ other
+ expense
+
+
+
+ Apuração
+ other
+ expense
+
+
+
+
diff --git a/l10n_br_coa/i18n/l10n_br_coa.pot b/l10n_br_coa/i18n/l10n_br_coa.pot
index d6fc5932f75c..529fea37c071 100644
--- a/l10n_br_coa/i18n/l10n_br_coa.pot
+++ b/l10n_br_coa/i18n/l10n_br_coa.pot
@@ -13,6 +13,46 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_other_operational_expenses
+msgid "(+/-) OUTRAS RECEITAS E DESPESAS OPERACIONAIS"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_expenses_financial
+msgid "(+/-) RESULTADO FINANCEIRO / (-) Despesas Financeiras"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_revenue_financial
+msgid "(+/-) RESULTADO FINANCEIRO / Receitas Financeiras"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_admin_expenses
+msgid "(-) DESPESAS OPERACIONAIS / Despesas Administrativas"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_sale_expenses
+msgid "(-) DESPESAS OPERACIONAIS / Despesas com Vendas"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_other_general_expenses
+msgid "(-) DESPESAS OPERACIONAIS / Outras Despesas Gerais"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_expense_csll
+msgid "(-) Despesa com Contribuição Social"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_expense_irpj
+msgid "(-) Despesa com Imposto de Renda da Pessoa Jurídica"
+msgstr ""
+
#. module: l10n_br_coa
#: model:ir.model,name:l10n_br_coa.model_account_chart_template
msgid "Account Chart Template"
@@ -23,6 +63,46 @@ msgstr ""
msgid "Account Tax Mixin"
msgstr ""
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_apuracao
+msgid "Apuração"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_current_assets_stock
+msgid "Ativo / Circulante / Estoque"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_current_assets_other_credits
+msgid "Ativo / Circulante / Outros Créditos"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_current_assets_receivable_loss
+msgid "Ativo / Circulante / Perdas Estimadas com Créditos duvidosos"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_fixed_assets_amortization
+msgid "Ativo / Não Circulante / (-) Amortização"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_intangible_assets
+msgid "Ativo / Não Circulante / Intangível"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_non_current_investments
+msgid "Ativo / Não Circulante / Investimentos"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_non_current_assets_receivable
+msgid "Ativo / Não Circulante / Realizável a Longo Prazo"
+msgstr ""
+
#. module: l10n_br_coa
#: model:ir.ui.menu,name:l10n_br_coa.account_reports_br_statements_menu
msgid "Brazil"
@@ -53,6 +133,11 @@ msgstr ""
msgid "CSLL WH"
msgstr ""
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_cost
+msgid "Custo"
+msgstr ""
+
#. module: l10n_br_coa
#: model:ir.model.fields,field_description:l10n_br_coa.field_account_tax_group__ded_account_id
msgid "Deductible Tax Account"
@@ -170,6 +255,61 @@ msgstr ""
msgid "PIS WH"
msgstr ""
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_current_liabilities
+msgid "Passivo / Circulante / Contas a Pagar"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_current_liabilities_financial
+msgid "Passivo / Circulante / Empréstimos e Financiamentos"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_current_liabilities_fiscal
+msgid "Passivo / Circulante / Obrigações Fiscais"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_current_liabilities_labor
+msgid "Passivo / Circulante / Obrigações Trabalhistas"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_current_liabilities_reserve
+msgid "Passivo / Circulante / Provisões"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_non_current_liabilities_loan
+msgid "Passivo / Não Circulante / Financiamentos"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_equity_accumulated_losses
+msgid "Patrimônio Líquido / (-) Prejuizos Acumulados"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_net_worth_capital_reserve
+msgid "Patrimônio Líquido / Reserva de Capital"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_net_worth_profit_reserve
+msgid "Patrimônio Líquido / Reserva de Lucros"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_production
+msgid "Produção"
+msgstr ""
+
+#. module: l10n_br_coa
+#: model:account.account.type,name:l10n_br_coa.data_account_type_revenue_deduction
+msgid "Receitas / (-) Deduções de Tributos, Abatimentos e Devoluções"
+msgstr ""
+
#. module: l10n_br_coa
#: model:account.tax.group,name:l10n_br_coa.tax_group_simples
msgid "Simples Nacional"
diff --git a/l10n_br_coa/readme/DESCRIPTION.rst b/l10n_br_coa/readme/DESCRIPTION.rst
index d42b5c368c4c..eaa2f12d4084 100644
--- a/l10n_br_coa/readme/DESCRIPTION.rst
+++ b/l10n_br_coa/readme/DESCRIPTION.rst
@@ -1 +1,34 @@
-Base Brasilian Localization of Chart of Account
+Este módulo é comum entre os planos de contas da localização brasileira.
+
+Herança
+~~~~~~~
+
+Assim como na localização espanhola (https://github.com/OCA/l10n-spain) que já permitia carregar vários planos de contas, este módulo define um plano de conta básico que é depois estendido pelos planos de contas específicos (ITG 1000, empresas do regime normais de determinados setores...). Isso permite mutualizar um pouco a configuração entre os planos, especialmente para carregar o plano customizado de uma determinada empresa. Por exemplo, no repositório da localização este módulo é herdado por 2 módulos:
+
+.. code-block:: text
+
+ l10n_br_coa
+ / \
+ l10n_br_coa_simples l10n_br_coa_generic
+
+Em particular, definir aqui os tipos de contas usados na DRE e no Balanço Patrimonial (módulo ´´l10n_br_mis_report´´) facilita a adaptação desses relatorios para esses diversos planos de contas.
+
+
+Contas contábeis
+~~~~~~~~~~~~~~~~
+
+Uma outra característica é que ao contrário do que acontece na Europa, o primeiro mercado que foi alvejado pelo Odoo, no Brasil tem muitas alíquotas, pelo menos para as empresas do regime normal. Sendo assim, não é bem viável ter um objeto ``account.tax`` para cada alíquota como o Odoo nativo espera (fazíamos isso até a versão 10.0 mas era muito trabalhoso para manter). Em vez disso temos tabelas específicas para armazenar todas as alíquotas no módulo ``l10n_br_fiscal`` e temos registros ``account.tax`` apenas para alíquotas de cada família. O módulo ``l10n_br_account`` faz a ligação entre o ``account.tax`` do Odoo e os registros ``l10n_br_fiscal.tax`` para cada alíquota da localização. Vale a pena notar que nos EUA o Odoo também não usa um registro ``account.tax`` por alíquota, em vez disso eles geralmente usam conectores e serviços (como AvaTax) para pegar as alíquotas de uma determinada operação.
+
+Neste caso a configuração contábil não podia ser carregada nem pelo ``account.tax`` nem pelo ``l10n_br_fiscal.tax`` (já que o módulo ``l10n_br_fiscal`` não depende do módulo ``account``). Então estendemos o objeto ``account.tax.group`` para carregar as informações contábeis, inclusive das taxas dedutíveis.
+
+
+Taxas dedutíveis
+~~~~~~~~~~~~~~~~
+
+No Odoo nativo, uma taxa é considerada dedutível (como por exemplo uma compra em outro outro país Europeu) se o registro ``account.tax`` tem uma alíquota negativa. Porém já que como falamos aqui é preferível de não gerenciar um ``account.tax`` por alíquota. Por isso temos um flag adicional no ``account.tax`` e ``account.tax.template`` através do ``account.tax.mixin`` para saber se é uma taxa dedutível.
+
+
+Template
+~~~~~~~~
+
+Foi ainda necessário sobrescrever a função que instancia um plano de contas a partir de um template para propagar essas informações.
diff --git a/l10n_br_coa/static/description/index.html b/l10n_br_coa/static/description/index.html
index 484d8332b390..38daf2fc2220 100644
--- a/l10n_br_coa/static/description/index.html
+++ b/l10n_br_coa/static/description/index.html
@@ -4,7 +4,7 @@
-L10n Br Coa
+Brazilian COA
-
-
L10n Br Coa
+
+
Brazilian COA
-
-
Base Brasilian Localization of Chart of Account
+
+
Este módulo é comum entre os planos de contas da localização brasileira.
+
+
Herança
+
Assim como na localização espanhola (https://github.com/OCA/l10n-spain) que já permitia carregar vários planos de contas, este módulo define um plano de conta básico que é depois estendido pelos planos de contas específicos (ITG 1000, empresas do regime normais de determinados setores…). Isso permite mutualizar um pouco a configuração entre os planos, especialmente para carregar o plano customizado de uma determinada empresa. Por exemplo, no repositório da localização este módulo é herdado por 2 módulos:
Em particular, definir aqui os tipos de contas usados na DRE e no Balanço Patrimonial (módulo ´´l10n_br_mis_report´´) facilita a adaptação desses relatorios para esses diversos planos de contas.
+
+
+
Contas contábeis
+
Uma outra característica é que ao contrário do que acontece na Europa, o primeiro mercado que foi alvejado pelo Odoo, no Brasil tem muitas alíquotas, pelo menos para as empresas do regime normal. Sendo assim, não é bem viável ter um objeto account.tax para cada alíquota como o Odoo nativo espera (fazíamos isso até a versão 10.0 mas era muito trabalhoso para manter). Em vez disso temos tabelas específicas para armazenar todas as alíquotas no módulo l10n_br_fiscal e temos registros account.tax apenas para alíquotas de cada família. O módulo l10n_br_account faz a ligação entre o account.tax do Odoo e os registros l10n_br_fiscal.tax para cada alíquota da localização. Vale a pena notar que nos EUA o Odoo também não usa um registro account.tax por alíquota, em vez disso eles geralmente usam conectores e serviços (como AvaTax) para pegar as alíquotas de uma determinada operação.
+
Neste caso a configuração contábil não podia ser carregada nem pelo account.tax nem pelo l10n_br_fiscal.tax (já que o módulo l10n_br_fiscal não depende do módulo account). Então estendemos o objeto account.tax.group para carregar as informações contábeis, inclusive das taxas dedutíveis.
+
+
+
Taxas dedutíveis
+
No Odoo nativo, uma taxa é considerada dedutível (como por exemplo uma compra em outro outro país Europeu) se o registro account.tax tem uma alíquota negativa. Porém já que como falamos aqui é preferível de não gerenciar um account.tax por alíquota. Por isso temos um flag adicional no account.tax e account.tax.template através do account.tax.mixin para saber se é uma taxa dedutível.
+
+
+
Template
+
Foi ainda necessário sobrescrever a função que instancia um plano de contas a partir de um template para propagar essas informações.
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
@@ -390,23 +407,25 @@