Invoicing and accounting entries for Brazil

l10n_br_account
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/18.0/l10n_br_account
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSRaphaël Valyi, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-brazil
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:10
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-brazil:
    - l10n_br_coa
    - l10n_br_fiscal
    - l10n_br_base
OCA/product-attribute:
    - uom_alias
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_address_extended
    - contacts
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES erpbrasil.base
email-validator
num2words
phonenumbers
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
# Visão Geral

O módulo `l10n_br_account` integra o motor fiscal brasileiro (`l10n_br_fiscal`) ao framework contábil nativo do Odoo (módulo `account`). Ele integra a complexa lógica da tributação e dos documentos fiscais do Brasil com as faturas e lançamentos contábeis conforme as normas de contabilidade brasileiras.

O módulo atende desde a automação na emissão de notas para empresas do Simples Nacional até os cenários contábeis mais exigentes do regime normal (Lucro Real/Presumido).

# Arquitetura e Integração: Decorator Pattern (`_inherits`)

A arquitetura do módulo se baseia no mecanismo de herança por composição `_inherits` do Odoo para criar uma composição dinâmica entre os modelos fiscais e contábeis:

*   **account.move** herda de **l10n_br_fiscal.document**
*   **account.move.line** herda de **l10n_br_fiscal.document.line**

Esta abordagem, análoga ao *Decorator Pattern*, oferece as seguintes vantagens:

1.  **Gerenciamento Unificado**: Permite controlar o Documento Fiscal diretamente pela interface da Fatura do Odoo. Campos fiscais (CFOP, NCM, valores de impostos) são acessados e computados de forma transparente, como se fossem nativos do `account.move.line`.

2.  **Baixíssima Redundância de Dados**: A herança por composição evita a duplicação de centenas de campos fiscais nas tabelas contábeis. A "fonte da verdade" fiscal é sempre o registro em `l10n_br_fiscal.document`, garantindo um banco de dados normalizado e consistente.

3.  **Modularidade e Manutenção**: A lógica fiscal complexa permanece encapsulada no `l10n_br_fiscal`. Para assegurar a reatividade dos campos computados na interface da fatura, o módulo utiliza um *mixin* especializado (`l10n_br_account.decorator.mixin`) que gerencia a herança de métodos e campos dinâmicos.

# Principais Funcionalidades e Casos de Uso

# Uso Simplificado: Cálculo dos impostos e criação dos Documentos Fiscais

O módulo `l10n_br_account` é a peça chave para automatizar a emissão de documentos fiscais a partir de qualquer fluxo de negócio que gere uma fatura no Odoo, como:
*   Ordens de Venda (`sale.order`)
*   Ordens de Compra (`purchase.order`)
*   Movimentações de Estoque (`stock.picking`)
*   Contratos (`contract.contract`), entre outros.

A **Operação Fiscal** pré-configurada orquestra o preenchimento automático de todos os dados necessários, permitindo a geração de NF-e, NFS-e e outros documentos com mínima intervenção.

# Uso Avançado: Lançamentos contábeis corretos para as empresas do Regime Normal

Para empresas no Lucro Real ou Presumido, o `l10n_br_account` habilita uma gestão contábil e fiscal precisa e aderente à legislação.

*   **Lançamentos Contábeis de Impostos**: Conecta os impostos fiscais (`l10n_br_fiscal.tax`) aos contábeis (`account.tax`), garantindo que a validação de uma fatura gere os lançamentos corretos para ICMS, IPI, PIS, COFINS, etc., em suas respectivas contas (custo, recuperável, despesa).

*   **Operações Sem Impacto Financeiro**: Suporta operações como "Remessa para Industrialização", permitindo a emissão do documento fiscal obrigatório e o lançamento correto dos impostos, mas sem gerar contas a pagar ou a receber, mantendo a integridade fiscal e contábil.

*   **Composição de Valores Financeiros**: Gerencia a correta composição do valor financeiro das faturas. Por exemplo, assegura que o valor do IPI, quando não recuperável, seja somado ao contas a pagar do fornecedor.

*   **Importação de Documentos (XML)**: Facilita a importação de documentos de fornecedores, criando simultaneamente o `l10n_br_fiscal.document` com os dados fiscais e a fatura de fornecedor (`account.move`) pronta para validação e pagamento.

# Escopo e Delimitação do Módulo

O nome `l10n_br_account` deriva do módulo `account`, que ele estende. É importante notar que o módulo `account` do Odoo, em sua essência, é focado em faturamento, embora contenha os conceitos fundamentais de planos de contas e lançamentos contábeis.

Para uma contabilidade completa de uma empresa no regime normal, mesmo utilizando o Odoo Enterprise, é necessária a instalação de dezenas de módulos adicionais da OCA, provenientes de diversos repositórios da OCA. O `l10n_br_account`, apesar do nome, **não substitui** este ecossistema. Ele se concentra na ponte fiscal-contábil. Funções como conciliação avançada (através de módulos como `account_reconcile`), gestão de ordens de pagamento, integração bancária (CNAB) e importação de extratos são tratadas por dezenas de outros módulos específicos da OCA...

Por outro lado, é importante ressaltar que os autores deste módulo possuem clientes do regime normal com uma contabilidade significativamente mais completa do que a oferecida nativamente pelo Odoo Enterprise, baseando-se exclusivamente em módulos de código aberto da OCA. Alcançar tal nível de sofisticação, no entanto, exige anos de experiência em implementação e uma escolha estratégica da versão do Odoo. É importante evitar versões muito recentes, para as quais o ecossistema de módulos da OCA ainda não atingiu a maturidade e estabilidade necessárias após o processo de migração (uma versão nova do Odoo mal tem 500 módulos da OCA migrados depois de 6 meses, mas tem quase 2000 depois de um ano e quase 3000 depois de 3 anos).

Vale a pena mencionar que lançamentos de Custo da Mercadoria Vendida (CMV) e outros lançamentos de contabilidade de estoque IFRS/IAS2, são tipicamente realizados através da combinação do módulo nativo `stock_account`, do `l10n_br_stock_account` (deste mesmo repo) e da ativação do modo "anglo-saxon" no seu plano de contas.

# Detalhes sobre o modelo de dados

# Cardinalidade: Documentos Fiscais e Lançamentos Contábeis

A arquitetura suporta cenários onde um único lançamento financeiro (`account.move`) agrupa múltiplos documentos fiscais, como uma fatura única para pagar vários Conhecimentos de Transporte (CT-e). Esta flexibilidade é garantida por três campos-chave:

*   **account.move.fiscal_document_id**: O campo `Many2one` que implementa o `_inherits`. Representa o documento fiscal "principal" ou em edição na interface da fatura.

*   **account.move.line.fiscal_document_line_id**: O pilar da arquitetura. Permite que **cada linha** da fatura aponte para uma linha de um documento fiscal distinto. É isso que possibilita agregar múltiplos documentos em um único `account.move`.

*   **account.move.fiscal_document_ids**: Campo `One2many` computado que agrega todos os documentos fiscais vinculados às linhas da fatura, oferecendo uma visão completa e consolidada quando o lançamento tem mais de um documento fiscal.

A flexibilidade do design é bidirecional. O sistema também gerencia nativamente cenários onde **um lançamento contábil (`account.move`) não possui nenhum documento fiscal associado**. Isso é fundamental para operações puramente contábeis ou não fiscais, como:
*   Lançamentos de folha de pagamento.
*   Operações financeiras ou contábeis em empresas de um grupo multinacional que não operam no Brasil.

Além disso, mesmo dentro de uma fatura fiscalizada, a associação é granular. Apenas as linhas de produto (`invoice_line_ids` com `display_type='product'`) são vinculadas a uma `l10n_br_fiscal.document.line`. Linhas de impostos, de contas a pagar/receber, ou linhas de anotação/seção permanecem como lançamentos puramente contábeis, sem linha de documento fiscal específica.

# Observação sobre a Normalização do Modelo de Dados

Idealmente, o modelo de dados teria redundância zero. Contudo, para simplificar a injeção de mixins fiscais — em especial o `l10n_br_fiscal.document.line.mixin` — e alavancar a lógica nativa do Odoo, foi uma decisão de design manter a nomenclatura de um pequeno e controlado conjunto de campos, como `partner_id`, `company_id`, `user_id`, `currency_id`, `product_id`, `quantity`, `price_unit` e `name`.

Como consequência, existe uma redundância mínima e gerenciada. Considerando os milhares de campos necessários para a diversidade de documentos fiscais brasileiros, apenas cerca de quatro campos do `account.move` e quatro do `account.move.line` são efetivamente duplicados. Para garantir a integridade, estes campos (apelidados de *shadow fields*) são cuidadosamente sincronizados em tempo real, inclusive durante a edição de novos registros em memória (fase `NewId`), assegurando total consistência entre a fatura e o documento fiscal.

# A Separação Estratégica dos Mixins Fiscais

No caso do `account.move`, o objetivo era obter os campos do `l10n_br_fiscal.document` sem duplicá-los (o que o `_inherits` faz perfeitamente), mas também precisávamos de seus métodos (como `_compute_fiscal_tax_ids` ou `_compute_tax_fields`). Se usássemos `_inherit` no mixin principal (`l10n_br_fiscal.document.mixin`), teríamos os métodos, mas os campos seriam duplicados, quebrando o princípio de normalização.

Por outro lado, modelos como `sale.order` e `purchase.order` não são uma representação de um documento fiscal, mas sim precursores dele. Portanto, eles podem usar uma herança simples (`_inherit`) diretamente no mixin principal (`l10n_br_fiscal.document.mixin`), pois precisam tanto dos campos quanto dos métodos para preparar os dados que serão posteriormente utilizados na geração do documento fiscal.

# Modelo UML Simplificado

![UML account.move](../static/img/account_move.png)

![UML account.move.line](../static/img/account_move_line.png)

# Aviso Importante: Pré-requisitos e Complexidade

Para utilizar o `l10n_br_account` de forma eficaz, é necessário ter domínio aprofundado de dois ecossistemas complexos: o módulo `account` nativo do Odoo e o motor `l10n_br_fiscal` deste repositório.

O `account` é o maior e mais intrincado módulo do Odoo, constituindo por si só um ERP financeiro completo, e não apenas um simples software de emissão de notas para microempresas. Por sua vez, o `l10n_br_fiscal` é o maior módulo entre os mais de 3000 disponíveis na OCA. Este módulo, `l10n_br_account`, está também entre os três mais complexos da localização brasileira e exige um uso avançado do ORM do Odoo para gerenciar a dualidade documento fiscal/lançamento contábil.

A implementação bem-sucedida de um ERP estrangeiro no Brasil é uma tarefa que demanda profissionais altamente qualificados, com anos de experiência em programação backend (Python) e implantação de verdadeiros sistemas ERP. Uma implementação não se resume a baixar e instalar módulo (apenas 1% do trabalho); envolve análise de processos, configuração, migração de dados e customizações, migração de modulos OCA a partir de outras versões... Subestimar essa complexidade invariavelmente leva a projetos problemáticos e custos elevados no longo prazo.

Este aviso serve para alinhar expectativas e reforçar que o sucesso de uma implantação Odoo no Brasil depende de expertise técnica e funcional aprofundada. Infelizmente, este mercado atrai aventureiros que subestimam essa complexidade ou que vendem projetos acreditando ser possível terceirizar a execução sem grande compromisso com a entrega, explorando a falta de informação do cliente. Este cenário caracteriza um "market for lemons", onde a assimetria de informação torna difícil distinguir entre fornecedores qualificados e despreparados, impedindo o desenvolvimento de um mercado de implementação maduro.

Agravando a situação, onde se esperaria uma garantia criteriosa de qualidade, o ecossistema corporativo "oficial" investe pesadamente em propaganda para mascarar essa realidade, promovendo uma visão onde a consultoria de implementação é tratada como uma commodity. Esse modelo, focado em comissões pela venda de licenças (muitas vezes desnecessárias ao utilizar o ecossistema da OCA), alimenta um mercado paralelo notório de "parceiros fantoches/bucha de canhão" que compram certificações oficiais de empresas estrangeiras para simular uma competência que não possuem. Cuidado com profissionais que ostentam certificações compradas para transferir a responsabilidade da implementação sem o devido suporte ou conhecimento real. Não se deixe enganar por narrativas que simplificam a complexidade do projeto para priorizar a venda de licenças!

# Conclusão

O `l10n_br_account` possui um design robusto que unifica as complexas lógicas fiscal e contábil do Brasil dentro do Odoo. Sua arquitetura, projetada por especialistas para especialistas, oferece uma plataforma flexível e confiável, capaz de sustentar operações de alta complexidade e garantir a conformidade fiscal e contábil das empresas que utilizam a localização brasileira da OCA.

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
account_document_form_inherit l10n_br_account.document.form.inherit l10n_br_fiscal.document xpath Inherits l10n_br_fiscal.document_form
account_move_reversal_form account.move.reversal.form account.move.reversal field Inherits account.view_account_move_reversal
document_import_wizard_form l10n_br_account.document.import.wizard.form l10n_br_fiscal.document.import.wizard button Inherits l10n_br_fiscal.document_import_wizard_form
document_line_form l10n_br_fiscal.document.line.form l10n_br_fiscal.document.line field Inherits l10n_br_fiscal.document_line_form
fiscal_operation_form fiscal.operation.form l10n_br_fiscal.operation page Inherits l10n_br_fiscal.operation_form
fiscal_operation_line_form fiscal.operation.line.form l10n_br_fiscal.operation.line field Inherits l10n_br_fiscal.operation_line_form
fiscal_operation_search fiscal.operation.search l10n_br_fiscal.operation filter Inherits l10n_br_fiscal.operation_search
fiscal_operation_tree fiscal.operation.tree l10n_br_fiscal.operation field Inherits l10n_br_fiscal.operation_tree
invoice_form l10n_br_account.invoice.form account.move div Inherits account.view_move_form
invoice_search l10n_br_account.invoice.search account.move field Inherits account.view_account_invoice_filter
invoice_tree l10n_br_account.invoice.tree account.move field Inherits account.view_invoice_tree
l10n_br_account_partner_form l10n_br_account.res.partner.form res.partner group Inherits account.view_partner_property_form
l10n_br_account_product_view_account_invoice_report_search l10n_br_account.invoice.report.search account.invoice.report filter Inherits account.view_account_invoice_report_search
l10n_br_account_tax_form l10n_br_account.tax.form account.tax field Inherits account.view_tax_form
Models touched (20)

New fields (0)

No new fields.

Public methods (1)
  • load_fiscal_taxes(self, companies=None)
    Create missing account.tax for Brazil. Add missing account.account for the Brazilian taxes. Relate account taxes with fiscal taxes to enable the Brazilian tax engine to kick in with the installed chart of account.

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)

New fields (25)
  • cest_id Many2one → l10n_br_fiscal.cest
    comodel_name='l10n_br_fiscal.cest' string='CEST'
  • cfop_id Many2one → l10n_br_fiscal.cfop
    comodel_name='l10n_br_fiscal.cfop' string='CFOP'
  • cofins_value Float
    digits='Account' string='COFINS Value'
  • discount_value Float
    digits='Account'
  • document_serie_id Many2one → l10n_br_fiscal.document.serie
    comodel_name='l10n_br_fiscal.document.serie'
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type' string='Fiscal Document Type'
  • fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Operation'
  • fiscal_operation_line_id Many2one → l10n_br_fiscal.operation.line
    comodel_name='l10n_br_fiscal.operation.line' string='Operation Line'
  • fiscal_type Selection
    selection=PRODUCT_FISCAL_TYPE
  • freight_value Float
    digits='Account'
  • icms_destination_value Float
    digits='Account' string='Valor Difal Destino'
  • icms_origin_value Float
    digits='Account' string='Valor Difal Origem'
  • icms_value Float
    digits='Account' string='Valor ICMS'
  • icmsfcp_value Float
    digits='Account' string='Valor Difal FCP'
  • icmsst_value Float
    digits='Account' string='Valor ICMS ST'
  • ii_value Float
    digits='Account' string='II Value'
  • insurance_value Float
    digits='Account'
  • ipi_value Float
    digits='Account' string='IPI Value'
  • issqn_value Float
    digits='Account'
  • issuer Selection
    selection=DOCUMENT_ISSUER
  • nbm_id Many2one → l10n_br_fiscal.nbm
    comodel_name='l10n_br_fiscal.nbm' string='NBM'
  • ncm_id Many2one → l10n_br_fiscal.ncm
    comodel_name='l10n_br_fiscal.ncm' string='NCM'
  • other_value Float
    digits='Account'
  • pis_value Float
    digits='Account' string='PIS Value'
  • service_type_id Many2one → l10n_br_fiscal.service.type
    comodel_name='l10n_br_fiscal.service.type'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create_document_from_attachment(self, attachment_ids=None)

New fields (4)
  • document_electronic Boolean
    related='document_type_id.electronic' string='Electronic?'
  • fiscal_document_id Many2one → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' copy=False ondelete='cascade' readonly=False store=True string='Fiscal Document'
  • fiscal_document_ids One2many → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' compute='_compute_fiscal_document_ids' help='In some rare cases (NFS-e, CT-e...) a single account.move\n may have several different fiscal documents related to its account.move.lines.\n ' string='Fiscal Documents'
  • fiscal_operation_type Selection
    compute='_compute_fiscal_operation_type' related=None selection=FISCAL_IN_OUT_ALL
Public methods (21)
  • action_document_back2draft(self)
    Sets fiscal document to draft state and cancel and set to draft the related invoice for both documents remain equivalent state.
  • action_document_cancel(self)
  • action_document_correction(self)
  • action_document_invalidate(self)
  • action_document_send(self)
  • action_send_email(self)
  • action_view_invoice(self)
  • button_cancel(self)
  • button_draft(self)
    Set the move to draft state, handling fiscal documents.
  • button_import_fiscal_document(self)
    Import move fields and invoice lines from the fiscal_document_id record if there is any new line to import. You can typically set fiscal_document_id to some l10n_br_fiscal.document record that was imported previously and import its lines into the current move.
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • ensure_one_doc(self)
  • import_fiscal_document(self, fiscal_document, move_id=None, move_type='in_invoice')
    @api.model
    Import the data from an existing fiscal document into a new invoice or into an existing invoice. First it transfers the "shadowed" fields and fill the other mandatory invoice fields. The account.move onchanges of these fields are properly triggered as if the invoice was filled manually. Then it creates each account.move.line and fill them using their fiscal_document_id onchange.
  • open_fiscal_document(self)
    If there is only 1 fiscal document (usual case), open the fiscal form view for it. Open the tree view in the case of several fiscal documents.
  • unlink(self)
    Allow to delete draft or cancelled invoices
  • update_payment_term_number(self)
  • view_pdf(self)
  • view_xml(self)
  • write(self, vals)

New fields (8)
  • discount Float
    compute='_compute_discounts' store=True
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type' related='move_id.document_type_id' string='Fiscal Document Type'
  • fiscal_document_line_id Many2one → l10n_br_fiscal.document.line
    comodel_name='l10n_br_fiscal.document.line' copy=False ondelete='cascade' string='Fiscal Document Line'
  • name Char
    inverse='_inverse_name'
  • payment_term_number Char
    help="Stores the installment number in the format 'current-total'. For example, '1-3' for the first of three installments, '2-3' for the second, and '3-3' for the last installment."
  • price_unit Float
    inverse='_inverse_price_unit'
  • product_uom_id Many2one
    inverse='_inverse_product_uom_id'
  • quantity Float
    inverse='_inverse_quantity'
Public methods (5)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • unlink(self)
  • write(self, values)

New fields (3)
  • force_fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Force Fiscal Operation'
  • force_fiscal_operation_journal_id Many2one
    related='force_fiscal_operation_id.journal_id'
  • journal_id Many2one
    compute='_compute_journal_id' precompute=True store=True
Public methods (1)
  • reverse_moves(self, is_modify=False)

New fields (1)
  • fiscal_tax_ids One2many → l10n_br_fiscal.tax
    comodel_name='l10n_br_fiscal.tax' related='tax_group_id.fiscal_tax_group_id.tax_ids' string='Fiscal Taxes'
Public methods (1)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False, rounding_method=None, fixed_multiplicator=1, fiscal_taxes=None, operation_line=False, ncm=None, nbs=None, nbm=None, cest=None, cfop=None, discount_value=None, insurance_value=None, other_value=None, ii_customhouse_charges=None, freight_value=None, fiscal_price=None, fiscal_quantity=None, uot_id=None, icmssn_range=None, icms_origin=None, ind_final=FINAL_CUSTOMER_NO)
    Returns all information required to apply taxes (in self + their children in case of a tax goup). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'taxes': [{ # One dict for each tax in self # and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }] }

New fields (1)
  • fiscal_tax_group_id Many2one → l10n_br_fiscal.tax.group
    comodel_name='l10n_br_fiscal.tax.group' string='Fiscal Tax Group'
Public methods (1)
  • deductible_tax(self, type_tax_use='sale')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (14)
  • company_id Many2one
    default=None precompute=True readonly=False related='proxy_company_id' store=True
  • date_in_out Datetime
    compute='_compute_date_in_out' inverse='_inverse_date_in_out' store=True
  • document_date Datetime
    compute='_compute_document_date' inverse='_inverse_document_date' store=True
  • fiscal_line_ids One2many
    copy=False
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' compute='_compute_incoterm_id' inverse='_inverse_incoterm_id' string='Fiscal Inconterm'
  • move_count Integer
    compute='_compute_move_count' readonly=True string='Invoice count'
  • move_ids One2many → account.move
    comodel_name='account.move' inverse_name='fiscal_document_id' string='Invoices'
  • partner_id Many2one
    precompute=True readonly=False related='proxy_partner_id' store=True
  • partner_shipping_id Many2one
    precompute=True readonly=False related='proxy_partner_shipping_id' store=True
  • proxy_company_id Many2one → res.company
    comodel_name='res.company' default=<expr> help='Technical Field.' string='Company (proxy)'
  • proxy_partner_id Many2one → res.partner
    comodel_name='res.partner' help='Technical Field.' string='Partner (proxy)'
  • proxy_partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Technical Field.' string='Shipping Partner (proxy)'
  • proxy_user_id Many2one → res.users
    comodel_name='res.users' help='Technical Field.' string='User (proxy)'
  • user_id Many2one
    default=None precompute=True readonly=False related='proxy_user_id' store=True
Public methods (8)
  • action_document_back2draft(self)
  • action_document_confirm(self)
  • action_view_invoice(self)
  • cancel_move_ids(self)
  • create(self, vals_list)
    @api.model_create_multi
    It's not allowed to create a fiscal document line without a document_type_id anyway. But instead of letting Odoo crash in this case we simply avoid creating the record. This makes it possible to create an account.move without a fiscal_document_id despite the _inherits system: Odoo will write NULL as the value in this case.
  • exec_after_SITUACAO_EDOC_DENEGADA(self, old_state, new_state)
  • message_post(self, **kwargs)
    @api.returns('mail.message', <expr>)
    broadcast message_post to all related account.move so messages in a fiscal document chatter are visible in the related account moves.
  • unlink(self)

New fields (1)
  • first_imported_move_id Integer
Public methods (1)
  • action_import_and_open_move(self)
    This is the import wizard confirmation action that will trigger the account.move importation for the current file. After the importation, it either redirect for processing the next file if any, either it redirect to the imported account.move(s) at the end of the attachments sequence.

New fields (14)
  • account_line_ids One2many → account.move.line
    comodel_name='account.move.line' inverse_name='fiscal_document_line_id' string='Invoice Lines'
  • company_id Many2one → res.company
    comodel_name='res.company' precompute=True readonly=False related='proxy_company_id' store=True string='Company'
  • document_id Many2one → l10n_br_fiscal.document
    check_company=True comodel_name='l10n_br_fiscal.document' compute='_compute_document_id' index=True ondelete='cascade' precompute=True readonly=False store=True string='Fiscal Document (Account)'
  • move_id Many2one → account.move
    comodel_name='account.move' precompute=True related='account_line_ids.move_id' store=True string='Invoice'
  • name Char
    compute='_compute_name' precompute=True readonly=False store=True
  • product_id Many2one → product.product
    comodel_name='product.product' precompute=True readonly=False related='proxy_product_id' store=True string='Product'
  • proxy_company_id Many2one → res.company
    comodel_name='res.company' help='Technical Field.' precompute=True readonly=False related='document_id.company_id' store=True string='Company (proxy)'
  • proxy_name Char
    help='Technical Field.' string='Name (proxy)'
  • proxy_partner_id Many2one → res.partner
    comodel_name='res.partner' help='Technical Field.' string='Partner (proxy)'
  • proxy_price_unit Float
    help='Technical mirror.' string='Unit Price (proxy)'
  • proxy_product_id Many2one → product.product
    comodel_name='product.product' string='Product (proxy)'
  • proxy_quantity Float
    help='Technical Field.' string='Quantity (proxy)'
  • quantity Float
    precompute=True readonly=False related='proxy_quantity' store=True string='Quantity'
  • uom_id Many2one
    inverse='_inverse_uom_id'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Override the create method to ensure it filters out account.move.line records that lack a valid document_id or fiscal_operation_line_id. Prevent the creation of fiscal document lines without these mandatory fields to avoid system crashes due to invalid records. If the conditions are not met, return an empty list instead of creating any records. This supports the creation of account.move.line records with NULL values for fiscal_document_line_id where necessary.

New fields (3)
  • deductible_taxes Boolean
    company_dependent=True
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' company_dependent=True domain="[('type', 'in', {'out': ['sale', 'general'], 'in': ['purchase', 'general'], 'all': ['sale', 'purchase', 'general']}.get(fiscal_operation_type, []))]" string='Account Journal'
Public methods (0)

No public methods.

New fields (1)
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • account_taxes(self, user_type='sale', fiscal_operation=False, company=False)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (0)

No new fields.

Public methods (1)
  • account_tax_group(self)

New fields (0)

No new fields.

Public methods (1)
  • write(self, values)
    Overriden so we can change the currency_id of base.main_company and specific demo companies even if constraints would normally prevent it.
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/17.0/l10n_br_account
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSRaphaël Valyi, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-brazil
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:04
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-brazil:
    - l10n_br_coa
    - l10n_br_fiscal
    - l10n_br_base
OCA/product-attribute:
    - uom_alias
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_address_extended
    - contacts
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES erpbrasil.base
email-validator
num2words
phonenumbers
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
# Visão Geral

O módulo `l10n_br_account` integra o motor fiscal brasileiro (`l10n_br_fiscal`) ao framework contábil nativo do Odoo (módulo `account`). Ele integra a complexa lógica da tributação e dos documentos fiscais do Brasil com as faturas e lançamentos contábeis conforme as normas de contabilidade brasileiras.

O módulo atende desde a automação na emissão de notas para empresas do Simples Nacional até os cenários contábeis mais exigentes do regime normal (Lucro Real/Presumido).

# Arquitetura e Integração: Decorator Pattern (`_inherits`)

A arquitetura do módulo se baseia no mecanismo de herança por composição `_inherits` do Odoo para criar uma composição dinâmica entre os modelos fiscais e contábeis:

*   **account.move** herda de **l10n_br_fiscal.document**
*   **account.move.line** herda de **l10n_br_fiscal.document.line**

Esta abordagem, análoga ao *Decorator Pattern*, oferece as seguintes vantagens:

1.  **Gerenciamento Unificado**: Permite controlar o Documento Fiscal diretamente pela interface da Fatura do Odoo. Campos fiscais (CFOP, NCM, valores de impostos) são acessados e computados de forma transparente, como se fossem nativos do `account.move.line`.

2.  **Baixíssima Redundância de Dados**: A herança por composição evita a duplicação de centenas de campos fiscais nas tabelas contábeis. A "fonte da verdade" fiscal é sempre o registro em `l10n_br_fiscal.document`, garantindo um banco de dados normalizado e consistente.

3.  **Modularidade e Manutenção**: A lógica fiscal complexa permanece encapsulada no `l10n_br_fiscal`. Para assegurar a reatividade dos campos computados na interface da fatura, o módulo utiliza um *mixin* especializado (`l10n_br_account.decorator.mixin`) que gerencia a herança de métodos e campos dinâmicos.

# Principais Funcionalidades e Casos de Uso

# Uso Simplificado: Cálculo dos impostos e criação dos Documentos Fiscais

O módulo `l10n_br_account` é a peça chave para automatizar a emissão de documentos fiscais a partir de qualquer fluxo de negócio que gere uma fatura no Odoo, como:
*   Ordens de Venda (`sale.order`)
*   Ordens de Compra (`purchase.order`)
*   Movimentações de Estoque (`stock.picking`)
*   Contratos (`contract.contract`), entre outros.

A **Operação Fiscal** pré-configurada orquestra o preenchimento automático de todos os dados necessários, permitindo a geração de NF-e, NFS-e e outros documentos com mínima intervenção.

# Uso Avançado: Lançamentos contábeis corretos para as empresas do Regime Normal

Para empresas no Lucro Real ou Presumido, o `l10n_br_account` habilita uma gestão contábil e fiscal precisa e aderente à legislação.

*   **Lançamentos Contábeis de Impostos**: Conecta os impostos fiscais (`l10n_br_fiscal.tax`) aos contábeis (`account.tax`), garantindo que a validação de uma fatura gere os lançamentos corretos para ICMS, IPI, PIS, COFINS, etc., em suas respectivas contas (custo, recuperável, despesa).

*   **Operações Sem Impacto Financeiro**: Suporta operações como "Remessa para Industrialização", permitindo a emissão do documento fiscal obrigatório e o lançamento correto dos impostos, mas sem gerar contas a pagar ou a receber, mantendo a integridade fiscal e contábil.

*   **Composição de Valores Financeiros**: Gerencia a correta composição do valor financeiro das faturas. Por exemplo, assegura que o valor do IPI, quando não recuperável, seja somado ao contas a pagar do fornecedor.

*   **Importação de Documentos (XML)**: Facilita a importação de documentos de fornecedores, criando simultaneamente o `l10n_br_fiscal.document` com os dados fiscais e a fatura de fornecedor (`account.move`) pronta para validação e pagamento.

# Escopo e Delimitação do Módulo

O nome `l10n_br_account` deriva do módulo `account`, que ele estende. É importante notar que o módulo `account` do Odoo, em sua essência, é focado em faturamento, embora contenha os conceitos fundamentais de planos de contas e lançamentos contábeis.

Para uma contabilidade completa de uma empresa no regime normal, mesmo utilizando o Odoo Enterprise, é necessária a instalação de dezenas de módulos adicionais da OCA, provenientes de diversos repositórios da OCA. O `l10n_br_account`, apesar do nome, **não substitui** este ecossistema. Ele se concentra na ponte fiscal-contábil. Funções como conciliação avançada (através de módulos como `account_reconcile`), gestão de ordens de pagamento, integração bancária (CNAB) e importação de extratos são tratadas por dezenas de outros módulos específicos da OCA...

Por outro lado, é importante ressaltar que os autores deste módulo possuem clientes do regime normal com uma contabilidade significativamente mais completa do que a oferecida nativamente pelo Odoo Enterprise, baseando-se exclusivamente em módulos de código aberto da OCA. Alcançar tal nível de sofisticação, no entanto, exige anos de experiência em implementação e uma escolha estratégica da versão do Odoo. É importante evitar versões muito recentes, para as quais o ecossistema de módulos da OCA ainda não atingiu a maturidade e estabilidade necessárias após o processo de migração (uma versão nova do Odoo mal tem 500 módulos da OCA migrados depois de 6 meses, mas tem quase 2000 depois de um ano e quase 3000 depois de 3 anos).

Vale a pena mencionar que lançamentos de Custo da Mercadoria Vendida (CMV) e outros lançamentos de contabilidade de estoque IFRS/IAS2, são tipicamente realizados através da combinação do módulo nativo `stock_account`, do `l10n_br_stock_account` (deste mesmo repo) e da ativação do modo "anglo-saxon" no seu plano de contas.

# Detalhes sobre o modelo de dados

# Cardinalidade: Documentos Fiscais e Lançamentos Contábeis

A arquitetura suporta cenários onde um único lançamento financeiro (`account.move`) agrupa múltiplos documentos fiscais, como uma fatura única para pagar vários Conhecimentos de Transporte (CT-e). Esta flexibilidade é garantida por três campos-chave:

*   **account.move.fiscal_document_id**: O campo `Many2one` que implementa o `_inherits`. Representa o documento fiscal "principal" ou em edição na interface da fatura.

*   **account.move.line.fiscal_document_line_id**: O pilar da arquitetura. Permite que **cada linha** da fatura aponte para uma linha de um documento fiscal distinto. É isso que possibilita agregar múltiplos documentos em um único `account.move`.

*   **account.move.fiscal_document_ids**: Campo `One2many` computado que agrega todos os documentos fiscais vinculados às linhas da fatura, oferecendo uma visão completa e consolidada quando o lançamento tem mais de um documento fiscal.

A flexibilidade do design é bidirecional. O sistema também gerencia nativamente cenários onde **um lançamento contábil (`account.move`) não possui nenhum documento fiscal associado**. Isso é fundamental para operações puramente contábeis ou não fiscais, como:
*   Lançamentos de folha de pagamento.
*   Operações financeiras ou contábeis em empresas de um grupo multinacional que não operam no Brasil.

Além disso, mesmo dentro de uma fatura fiscalizada, a associação é granular. Apenas as linhas de produto (`invoice_line_ids` com `display_type='product'`) são vinculadas a uma `l10n_br_fiscal.document.line`. Linhas de impostos, de contas a pagar/receber, ou linhas de anotação/seção permanecem como lançamentos puramente contábeis, sem linha de documento fiscal específica.

# Observação sobre a Normalização do Modelo de Dados

Idealmente, o modelo de dados teria redundância zero. Contudo, para simplificar a injeção de mixins fiscais — em especial o `l10n_br_fiscal.document.line.mixin` — e alavancar a lógica nativa do Odoo, foi uma decisão de design manter a nomenclatura de um pequeno e controlado conjunto de campos, como `partner_id`, `company_id`, `user_id`, `currency_id`, `product_id`, `quantity`, `price_unit` e `name`.

Como consequência, existe uma redundância mínima e gerenciada. Considerando os milhares de campos necessários para a diversidade de documentos fiscais brasileiros, apenas cerca de quatro campos do `account.move` e quatro do `account.move.line` são efetivamente duplicados. Para garantir a integridade, estes campos (apelidados de *shadow fields*) são cuidadosamente sincronizados em tempo real, inclusive durante a edição de novos registros em memória (fase `NewId`), assegurando total consistência entre a fatura e o documento fiscal.

# A Separação Estratégica dos Mixins Fiscais

No caso do `account.move`, o objetivo era obter os campos do `l10n_br_fiscal.document` sem duplicá-los (o que o `_inherits` faz perfeitamente), mas também precisávamos de seus métodos (como `_compute_fiscal_tax_ids` ou `_compute_tax_fields`). Se usássemos `_inherit` no mixin principal (`l10n_br_fiscal.document.mixin`), teríamos os métodos, mas os campos seriam duplicados, quebrando o princípio de normalização.

Por outro lado, modelos como `sale.order` e `purchase.order` não são uma representação de um documento fiscal, mas sim precursores dele. Portanto, eles podem usar uma herança simples (`_inherit`) diretamente no mixin principal (`l10n_br_fiscal.document.mixin`), pois precisam tanto dos campos quanto dos métodos para preparar os dados que serão posteriormente utilizados na geração do documento fiscal.

# Modelo UML Simplificado

![UML account.move](../static/img/account_move.png)

![UML account.move.line](../static/img/account_move_line.png)

# Aviso Importante: Pré-requisitos e Complexidade

Para utilizar o `l10n_br_account` de forma eficaz, é necessário ter domínio aprofundado de dois ecossistemas complexos: o módulo `account` nativo do Odoo e o motor `l10n_br_fiscal` deste repositório.

O `account` é o maior e mais intrincado módulo do Odoo, constituindo por si só um ERP financeiro completo, e não apenas um simples software de emissão de notas para microempresas. Por sua vez, o `l10n_br_fiscal` é o maior módulo entre os mais de 3000 disponíveis na OCA. Este módulo, `l10n_br_account`, está também entre os três mais complexos da localização brasileira e exige um uso avançado do ORM do Odoo para gerenciar a dualidade documento fiscal/lançamento contábil.

A implementação bem-sucedida de um ERP estrangeiro no Brasil é uma tarefa que demanda profissionais altamente qualificados, com anos de experiência em programação backend (Python) e implantação de verdadeiros sistemas ERP. Uma implementação não se resume a baixar e instalar módulo (apenas 1% do trabalho); envolve análise de processos, configuração, migração de dados e customizações, migração de modulos OCA a partir de outras versões... Subestimar essa complexidade invariavelmente leva a projetos problemáticos e custos elevados no longo prazo.

Este aviso serve para alinhar expectativas e reforçar que o sucesso de uma implantação Odoo no Brasil depende de expertise técnica e funcional aprofundada. Infelizmente, este mercado atrai aventureiros que subestimam essa complexidade ou que vendem projetos acreditando ser possível terceirizar a execução sem grande compromisso com a entrega, explorando a falta de informação do cliente. Este cenário caracteriza um "market for lemons", onde a assimetria de informação torna difícil distinguir entre fornecedores qualificados e despreparados, impedindo o desenvolvimento de um mercado de implementação maduro.

Agravando a situação, onde se esperaria uma garantia criteriosa de qualidade, o ecossistema corporativo "oficial" investe pesadamente em propaganda para mascarar essa realidade, promovendo uma visão onde a consultoria de implementação é tratada como uma commodity. Esse modelo, focado em comissões pela venda de licenças (muitas vezes desnecessárias ao utilizar o ecossistema da OCA), alimenta um mercado paralelo notório de "parceiros fantoches/bucha de canhão" que compram certificações oficiais de empresas estrangeiras para simular uma competência que não possuem. Cuidado com profissionais que ostentam certificações compradas para transferir a responsabilidade da implementação sem o devido suporte ou conhecimento real. Não se deixe enganar por narrativas que simplificam a complexidade do projeto para priorizar a venda de licenças!

# Conclusão

O `l10n_br_account` possui um design robusto que unifica as complexas lógicas fiscal e contábil do Brasil dentro do Odoo. Sua arquitetura, projetada por especialistas para especialistas, oferece uma plataforma flexível e confiável, capaz de sustentar operações de alta complexidade e garantir a conformidade fiscal e contábil das empresas que utilizam a localização brasileira da OCA.

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
account_document_form_inherit l10n_br_account.document.form.inherit l10n_br_fiscal.document xpath Inherits l10n_br_fiscal.document_form
account_move_reversal_form account.move.reversal.form account.move.reversal field Inherits account.view_account_move_reversal
document_import_wizard_form l10n_br_account.document.import.wizard.form l10n_br_fiscal.document.import.wizard button Inherits l10n_br_fiscal.document_import_wizard_form
document_line_form l10n_br_fiscal.document.line.form l10n_br_fiscal.document.line field Inherits l10n_br_fiscal.document_line_form
fiscal_operation_form fiscal.operation.form l10n_br_fiscal.operation page Inherits l10n_br_fiscal.operation_form
fiscal_operation_line_form fiscal.operation.line.form l10n_br_fiscal.operation.line field Inherits l10n_br_fiscal.operation_line_form
fiscal_operation_search fiscal.operation.search l10n_br_fiscal.operation filter Inherits l10n_br_fiscal.operation_search
fiscal_operation_tree fiscal.operation.tree l10n_br_fiscal.operation field Inherits l10n_br_fiscal.operation_tree
invoice_form l10n_br_account.invoice.form account.move div Inherits account.view_move_form
invoice_search l10n_br_account.invoice.search account.move field Inherits account.view_account_invoice_filter
invoice_tree l10n_br_account.invoice.tree account.move field Inherits account.view_invoice_tree
l10n_br_account_partner_form l10n_br_account.res.partner.form res.partner group Inherits account.view_partner_property_form
l10n_br_account_product_view_account_invoice_report_search l10n_br_account.invoice.report.search account.invoice.report filter Inherits account.view_account_invoice_report_search
l10n_br_account_tax_form l10n_br_account.tax.form account.tax field Inherits account.view_tax_form
Models touched (20)

New fields (0)

No new fields.

Public methods (1)
  • load_fiscal_taxes(self, companies=None)
    Create missing account.tax for Brazil. Add missing account.account for the Brazilian taxes. Relate account taxes with fiscal taxes to enable the Brazilian tax engine to kick in with the installed chart of account.

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)

New fields (25)
  • cest_id Many2one → l10n_br_fiscal.cest
    comodel_name='l10n_br_fiscal.cest' string='CEST'
  • cfop_id Many2one → l10n_br_fiscal.cfop
    comodel_name='l10n_br_fiscal.cfop' string='CFOP'
  • cofins_value Float
    digits='Account' string='COFINS Value'
  • discount_value Float
    digits='Account'
  • document_serie_id Many2one → l10n_br_fiscal.document.serie
    comodel_name='l10n_br_fiscal.document.serie'
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type'
  • fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Operation'
  • fiscal_operation_line_id Many2one → l10n_br_fiscal.operation.line
    comodel_name='l10n_br_fiscal.operation.line' string='Operation Line'
  • fiscal_type Selection
    selection=PRODUCT_FISCAL_TYPE
  • freight_value Float
    digits='Account'
  • icms_destination_value Float
    digits='Account' string='Valor Difal Destino'
  • icms_origin_value Float
    digits='Account' string='Valor Difal Origem'
  • icms_value Float
    digits='Account' string='Valor ICMS'
  • icmsfcp_value Float
    digits='Account' string='Valor Difal FCP'
  • icmsst_value Float
    digits='Account' string='Valor ICMS ST'
  • ii_value Float
    digits='Account' string='II Value'
  • insurance_value Float
    digits='Account'
  • ipi_value Float
    digits='Account' string='IPI Value'
  • issqn_value Float
    digits='Account'
  • issuer Selection
    selection=DOCUMENT_ISSUER
  • nbm_id Many2one → l10n_br_fiscal.nbm
    comodel_name='l10n_br_fiscal.nbm' string='NBM'
  • ncm_id Many2one → l10n_br_fiscal.ncm
    comodel_name='l10n_br_fiscal.ncm' string='NCM'
  • other_value Float
    digits='Account'
  • pis_value Float
    digits='Account' string='PIS Value'
  • service_type_id Many2one → l10n_br_fiscal.service.type
    comodel_name='l10n_br_fiscal.service.type'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create_document_from_attachment(self, attachment_ids=None)

New fields (4)
  • document_electronic Boolean
    related='document_type_id.electronic' string='Electronic?'
  • fiscal_document_id Many2one → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' copy=False ondelete='cascade' readonly=False store=True string='Fiscal Document'
  • fiscal_document_ids One2many → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' compute='_compute_fiscal_document_ids' help='In some rare cases (NFS-e, CT-e...) a single account.move\n may have several different fiscal documents related to its account.move.lines.\n ' string='Fiscal Documents'
  • fiscal_operation_type Selection
    compute='_compute_fiscal_operation_type' related=None selection=FISCAL_IN_OUT_ALL
Public methods (21)
  • action_document_back2draft(self)
    Sets fiscal document to draft state and cancel and set to draft the related invoice for both documents remain equivalent state.
  • action_document_cancel(self)
  • action_document_correction(self)
  • action_document_invalidate(self)
  • action_document_send(self)
  • action_send_email(self)
  • action_view_invoice(self)
  • button_cancel(self)
  • button_draft(self)
    Set the move to draft state, handling fiscal documents.
  • button_import_fiscal_document(self)
    Import move fields and invoice lines from the fiscal_document_id record if there is any new line to import. You can typically set fiscal_document_id to some l10n_br_fiscal.document record that was imported previously and import its lines into the current move.
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • ensure_one_doc(self)
  • import_fiscal_document(self, fiscal_document, move_id=None, move_type='in_invoice')
    @api.model
    Import the data from an existing fiscal document into a new invoice or into an existing invoice. First it transfers the "shadowed" fields and fill the other mandatory invoice fields. The account.move onchanges of these fields are properly triggered as if the invoice was filled manually. Then it creates each account.move.line and fill them using their fiscal_document_id onchange.
  • open_fiscal_document(self)
    If there is only 1 fiscal document (usual case), open the fiscal form view for it. Open the tree view in the case of several fiscal documents.
  • unlink(self)
    Allow to delete draft or cancelled invoices
  • update_payment_term_number(self)
  • view_pdf(self)
  • view_xml(self)
  • write(self, vals)

New fields (8)
  • discount Float
    compute='_compute_discounts' store=True
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type' related='move_id.document_type_id'
  • fiscal_document_line_id Many2one → l10n_br_fiscal.document.line
    comodel_name='l10n_br_fiscal.document.line' copy=False ondelete='cascade' string='Fiscal Document Line'
  • name Char
    inverse='_inverse_name'
  • payment_term_number Char
    help="Stores the installment number in the format 'current-total'. For example, '1-3' for the first of three installments, '2-3' for the second, and '3-3' for the last installment."
  • price_unit Float
    inverse='_inverse_price_unit'
  • product_uom_id Many2one
    inverse='_inverse_product_uom_id'
  • quantity Float
    inverse='_inverse_quantity'
Public methods (5)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • unlink(self)
  • write(self, values)

New fields (3)
  • force_fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Force Fiscal Operation'
  • force_fiscal_operation_journal_id Many2one
    related='force_fiscal_operation_id.journal_id'
  • journal_id Many2one
    compute='_compute_journal_id' precompute=True store=True
Public methods (1)
  • reverse_moves(self, is_modify=False)

New fields (1)
  • fiscal_tax_ids One2many → l10n_br_fiscal.tax
    comodel_name='l10n_br_fiscal.tax' related='tax_group_id.fiscal_tax_group_id.tax_ids' string='Fiscal Taxes'
Public methods (1)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False, fixed_multiplicator=1, fiscal_taxes=None, operation_line=False, ncm=None, nbs=None, nbm=None, cest=None, cfop=None, discount_value=None, insurance_value=None, other_value=None, ii_customhouse_charges=None, freight_value=None, fiscal_price=None, fiscal_quantity=None, uot_id=None, icmssn_range=None, icms_origin=None, ind_final=FINAL_CUSTOMER_NO)
    Returns all information required to apply taxes (in self + their children in case of a tax goup). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'taxes': [{ # One dict for each tax in self # and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }] }

New fields (1)
  • fiscal_tax_group_id Many2one → l10n_br_fiscal.tax.group
    comodel_name='l10n_br_fiscal.tax.group' string='Fiscal Tax Group'
Public methods (1)
  • deductible_tax(self, type_tax_use='sale')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (14)
  • company_id Many2one
    default=None precompute=True readonly=False related='proxy_company_id' store=True
  • date_in_out Datetime
    compute='_compute_date_in_out' inverse='_inverse_date_in_out' store=True
  • document_date Datetime
    compute='_compute_document_date' inverse='_inverse_document_date' store=True
  • fiscal_line_ids One2many
    copy=False
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' compute='_compute_incoterm_id' inverse='_inverse_incoterm_id' string='Fiscal Inconterm'
  • move_count Integer
    compute='_compute_move_count' readonly=True string='Invoice count'
  • move_ids One2many → account.move
    comodel_name='account.move' inverse_name='fiscal_document_id' string='Invoices'
  • partner_id Many2one
    precompute=True readonly=False related='proxy_partner_id' store=True
  • partner_shipping_id Many2one
    precompute=True readonly=False related='proxy_partner_shipping_id' store=True
  • proxy_company_id Many2one → res.company
    comodel_name='res.company' default=<expr> help='Technical Field.' string='Company (proxy)'
  • proxy_partner_id Many2one → res.partner
    comodel_name='res.partner' help='Technical Field.' string='Partner (proxy)'
  • proxy_partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Technical Field.' string='Shipping Partner (proxy)'
  • proxy_user_id Many2one → res.users
    comodel_name='res.users' help='Technical Field.' string='User (proxy)'
  • user_id Many2one
    default=None precompute=True readonly=False related='proxy_user_id' store=True
Public methods (8)
  • action_document_back2draft(self)
  • action_document_confirm(self)
  • action_view_invoice(self)
  • cancel_move_ids(self)
  • create(self, vals_list)
    @api.model_create_multi
    It's not allowed to create a fiscal document line without a document_type_id anyway. But instead of letting Odoo crash in this case we simply avoid creating the record. This makes it possible to create an account.move without a fiscal_document_id despite the _inherits system: Odoo will write NULL as the value in this case.
  • exec_after_SITUACAO_EDOC_DENEGADA(self, old_state, new_state)
  • message_post(self, **kwargs)
    @api.returns('mail.message', <expr>)
    broadcast message_post to all related account.move so messages in a fiscal document chatter are visible in the related account moves.
  • unlink(self)

New fields (1)
  • first_imported_move_id Integer
Public methods (1)
  • action_import_and_open_move(self)
    This is the import wizard confirmation action that will trigger the account.move importation for the current file. After the importation, it either redirect for processing the next file if any, either it redirect to the imported account.move(s) at the end of the attachments sequence.

New fields (14)
  • account_line_ids One2many → account.move.line
    comodel_name='account.move.line' inverse_name='fiscal_document_line_id' string='Invoice Lines'
  • company_id Many2one → res.company
    comodel_name='res.company' precompute=True readonly=False related='proxy_company_id' store=True string='Company'
  • document_id Many2one → l10n_br_fiscal.document
    check_company=True comodel_name='l10n_br_fiscal.document' compute='_compute_document_id' index=True ondelete='cascade' precompute=True readonly=False store=True string='Fiscal Document'
  • move_id Many2one → account.move
    comodel_name='account.move' precompute=True related='account_line_ids.move_id' store=True string='Invoice'
  • name Char
    compute='_compute_name' precompute=True readonly=False store=True
  • product_id Many2one → product.product
    comodel_name='product.product' precompute=True readonly=False related='proxy_product_id' store=True string='Product'
  • proxy_company_id Many2one → res.company
    comodel_name='res.company' help='Technical Field.' precompute=True readonly=False related='document_id.company_id' store=True string='Company (proxy)'
  • proxy_name Char
    help='Technical Field.' string='Name (proxy)'
  • proxy_partner_id Many2one → res.partner
    comodel_name='res.partner' help='Technical Field.' string='Partner (proxy)'
  • proxy_price_unit Float
    help='Technical mirror.' string='Unit Price (proxy)'
  • proxy_product_id Many2one → product.product
    comodel_name='product.product' string='Product (proxy)'
  • proxy_quantity Float
    help='Technical Field.' string='Quantity (proxy)'
  • quantity Float
    precompute=True readonly=False related='proxy_quantity' store=True string='Quantity'
  • uom_id Many2one
    inverse='_inverse_uom_id'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Override the create method to ensure it filters out account.move.line records that lack a valid document_id or fiscal_operation_line_id. Prevent the creation of fiscal document lines without these mandatory fields to avoid system crashes due to invalid records. If the conditions are not met, return an empty list instead of creating any records. This supports the creation of account.move.line records with NULL values for fiscal_document_line_id where necessary.

New fields (3)
  • deductible_taxes Boolean
    company_dependent=True
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' company_dependent=True domain="[('type', 'in', {'out': ['sale', 'general'], 'in': ['purchase', 'general'], 'all': ['sale', 'purchase', 'general']}.get(fiscal_operation_type, []))]" string='Account Journal'
Public methods (0)

No public methods.

New fields (1)
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • account_taxes(self, user_type='sale', fiscal_operation=False, company=False)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (0)

No new fields.

Public methods (1)
  • account_tax_group(self)

New fields (0)

No new fields.

Public methods (1)
  • write(self, values)
    Overriden so we can change the currency_id of base.main_company and specific demo companies even if constraints would normally prevent it.
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/16.0/l10n_br_account
VERSION
VERSION 15.0.1
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSRaphaël Valyi, Renato Lima, Weblate, OCA-git-bot, Magno Costa, oca-ci, Marcel Savegnago, Diego Paradeda, Antonio Neto, Antônio Neto, Wesley Oliveira, CristianoMafraJunior, Felipe Motter
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-brazil
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:11:56
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-brazil:
    - l10n_br_coa
    - l10n_br_fiscal
    - l10n_br_base
OCA/product-attribute:
    - uom_alias
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_address_extended
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES erpbrasil.base
email-validator
num2words
phonenumbers
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
# Visão Geral

O módulo `l10n_br_account` integra o motor fiscal brasileiro (`l10n_br_fiscal`) ao framework contábil nativo do Odoo (módulo `account`). Ele integra a complexa lógica da tributação e dos documentos fiscais do Brasil com as faturas e lançamentos contábeis conforme as normas de contabilidade brasileiras.

O módulo atende desde a automação na emissão de notas para empresas do Simples Nacional até os cenários contábeis mais exigentes do regime normal (Lucro Real/Presumido).

# Arquitetura e Integração: Decorator Pattern (`_inherits`)

A arquitetura do módulo se baseia no mecanismo de herança por composição `_inherits` do Odoo para criar uma composição dinâmica entre os modelos fiscais e contábeis:

*   **account.move** herda de **l10n_br_fiscal.document**
*   **account.move.line** herda de **l10n_br_fiscal.document.line**

Esta abordagem, análoga ao *Decorator Pattern*, oferece as seguintes vantagens:

1.  **Gerenciamento Unificado**: Permite controlar o Documento Fiscal diretamente pela interface da Fatura do Odoo. Campos fiscais (CFOP, NCM, valores de impostos) são acessados e computados de forma transparente, como se fossem nativos do `account.move.line`.

2.  **Baixíssima Redundância de Dados**: A herança por composição evita a duplicação de centenas de campos fiscais nas tabelas contábeis. A "fonte da verdade" fiscal é sempre o registro em `l10n_br_fiscal.document`, garantindo um banco de dados normalizado e consistente.

3.  **Modularidade e Manutenção**: A lógica fiscal complexa permanece encapsulada no `l10n_br_fiscal`. Para assegurar a reatividade dos campos computados na interface da fatura, o módulo utiliza um *mixin* especializado (`l10n_br_account.decorator.mixin`) que gerencia a herança de métodos e campos dinâmicos.

# Principais Funcionalidades e Casos de Uso

# Uso Simplificado: Cálculo dos impostos e criação dos Documentos Fiscais

O módulo `l10n_br_account` é a peça chave para automatizar a emissão de documentos fiscais a partir de qualquer fluxo de negócio que gere uma fatura no Odoo, como:
*   Ordens de Venda (`sale.order`)
*   Ordens de Compra (`purchase.order`)
*   Movimentações de Estoque (`stock.picking`)
*   Contratos (`contract.contract`), entre outros.

A **Operação Fiscal** pré-configurada orquestra o preenchimento automático de todos os dados necessários, permitindo a geração de NF-e, NFS-e e outros documentos com mínima intervenção.

# Uso Avançado: Lançamentos contábeis corretos para as empresas do Regime Normal

Para empresas no Lucro Real ou Presumido, o `l10n_br_account` habilita uma gestão contábil e fiscal precisa e aderente à legislação.

*   **Lançamentos Contábeis de Impostos**: Conecta os impostos fiscais (`l10n_br_fiscal.tax`) aos contábeis (`account.tax`), garantindo que a validação de uma fatura gere os lançamentos corretos para ICMS, IPI, PIS, COFINS, etc., em suas respectivas contas (custo, recuperável, despesa).

*   **Operações Sem Impacto Financeiro**: Suporta operações como "Remessa para Industrialização", permitindo a emissão do documento fiscal obrigatório e o lançamento correto dos impostos, mas sem gerar contas a pagar ou a receber, mantendo a integridade fiscal e contábil.

*   **Composição de Valores Financeiros**: Gerencia a correta composição do valor financeiro das faturas. Por exemplo, assegura que o valor do IPI, quando não recuperável, seja somado ao contas a pagar do fornecedor.

*   **Importação de Documentos (XML)**: Facilita a importação de documentos de fornecedores, criando simultaneamente o `l10n_br_fiscal.document` com os dados fiscais e a fatura de fornecedor (`account.move`) pronta para validação e pagamento.

# Escopo e Delimitação do Módulo

O nome `l10n_br_account` deriva do módulo `account`, que ele estende. É importante notar que o módulo `account` do Odoo, em sua essência, é focado em faturamento, embora contenha os conceitos fundamentais de planos de contas e lançamentos contábeis.

Para uma contabilidade completa de uma empresa no regime normal, mesmo utilizando o Odoo Enterprise, é necessária a instalação de dezenas de módulos adicionais da OCA, provenientes de diversos repositórios da OCA. O `l10n_br_account`, apesar do nome, **não substitui** este ecossistema. Ele se concentra na ponte fiscal-contábil. Funções como conciliação avançada (através de módulos como `account_reconcile`), gestão de ordens de pagamento, integração bancária (CNAB) e importação de extratos são tratadas por dezenas de outros módulos específicos da OCA...

Por outro lado, é importante ressaltar que os autores deste módulo possuem clientes do regime normal com uma contabilidade significativamente mais completa do que a oferecida nativamente pelo Odoo Enterprise, baseando-se exclusivamente em módulos de código aberto da OCA. Alcançar tal nível de sofisticação, no entanto, exige anos de experiência em implementação e uma escolha estratégica da versão do Odoo. É importante evitar versões muito recentes, para as quais o ecossistema de módulos da OCA ainda não atingiu a maturidade e estabilidade necessárias após o processo de migração (uma versão nova do Odoo mal tem 500 módulos da OCA migrados depois de 6 meses, mas tem quase 2000 depois de um ano e quase 3000 depois de 3 anos).

Vale a pena mencionar que lançamentos de Custo da Mercadoria Vendida (CMV) e outros lançamentos de contabilidade de estoque IFRS/IAS2, são tipicamente realizados através da combinação do módulo nativo `stock_account`, do `l10n_br_stock_account` (deste mesmo repo) e da ativação do modo "anglo-saxon" no seu plano de contas.

# Detalhes sobre o modelo de dados

# Cardinalidade: Documentos Fiscais e Lançamentos Contábeis

A arquitetura suporta cenários onde um único lançamento financeiro (`account.move`) agrupa múltiplos documentos fiscais, como uma fatura única para pagar vários Conhecimentos de Transporte (CT-e). Esta flexibilidade é garantida por três campos-chave:

*   **account.move.fiscal_document_id**: O campo `Many2one` que implementa o `_inherits`. Representa o documento fiscal "principal" ou em edição na interface da fatura.

*   **account.move.line.fiscal_document_line_id**: O pilar da arquitetura. Permite que **cada linha** da fatura aponte para uma linha de um documento fiscal distinto. É isso que possibilita agregar múltiplos documentos em um único `account.move`.

*   **account.move.fiscal_document_ids**: Campo `One2many` computado que agrega todos os documentos fiscais vinculados às linhas da fatura, oferecendo uma visão completa e consolidada quando o lançamento tem mais de um documento fiscal.

A flexibilidade do design é bidirecional. O sistema também gerencia nativamente cenários onde **um lançamento contábil (`account.move`) não possui nenhum documento fiscal associado**. Isso é fundamental para operações puramente contábeis ou não fiscais, como:
*   Lançamentos de folha de pagamento.
*   Operações financeiras ou contábeis em empresas de um grupo multinacional que não operam no Brasil.

Além disso, mesmo dentro de uma fatura fiscalizada, a associação é granular. Apenas as linhas de produto (`invoice_line_ids` com `display_type='product'`) são vinculadas a uma `l10n_br_fiscal.document.line`. Linhas de impostos, de contas a pagar/receber, ou linhas de anotação/seção permanecem como lançamentos puramente contábeis, sem linha de documento fiscal específica.

# Observação sobre a Normalização do Modelo de Dados

Idealmente, o modelo de dados teria redundância zero. Contudo, para simplificar a injeção de mixins fiscais — em especial o `l10n_br_fiscal.document.line.mixin` — e alavancar a lógica nativa do Odoo, foi uma decisão de design manter a nomenclatura de um pequeno e controlado conjunto de campos, como `partner_id`, `company_id`, `user_id`, `currency_id`, `product_id`, `quantity`, `price_unit` e `name`.

Como consequência, existe uma redundância mínima e gerenciada. Considerando os milhares de campos necessários para a diversidade de documentos fiscais brasileiros, apenas cerca de quatro campos do `account.move` e quatro do `account.move.line` são efetivamente duplicados. Para garantir a integridade, estes campos (apelidados de *shadow fields*) são cuidadosamente sincronizados em tempo real, inclusive durante a edição de novos registros em memória (fase `NewId`), assegurando total consistência entre a fatura e o documento fiscal.

# A Separação Estratégica dos Mixins Fiscais

No caso do `account.move`, o objetivo era obter os campos do `l10n_br_fiscal.document` sem duplicá-los (o que o `_inherits` faz perfeitamente), mas também precisávamos de seus métodos (como `_compute_fiscal_tax_ids` ou `_compute_tax_fields`). Se usássemos `_inherit` no mixin principal (`l10n_br_fiscal.document.mixin`), teríamos os métodos, mas os campos seriam duplicados, quebrando o princípio de normalização.

Por outro lado, modelos como `sale.order` e `purchase.order` não são uma representação de um documento fiscal, mas sim precursores dele. Portanto, eles podem usar uma herança simples (`_inherit`) diretamente no mixin principal (`l10n_br_fiscal.document.mixin`), pois precisam tanto dos campos quanto dos métodos para preparar os dados que serão posteriormente utilizados na geração do documento fiscal.

# Modelo UML Simplificado

![UML account.move](../static/img/account_move.png)

![UML account.move.line](../static/img/account_move_line.png)

# Aviso Importante: Pré-requisitos e Complexidade

Para utilizar o `l10n_br_account` de forma eficaz, é necessário ter domínio aprofundado de dois ecossistemas complexos: o módulo `account` nativo do Odoo e o motor `l10n_br_fiscal` deste repositório.

O `account` é o maior e mais intrincado módulo do Odoo, constituindo por si só um ERP financeiro completo, e não apenas um simples software de emissão de notas para microempresas. Por sua vez, o `l10n_br_fiscal` é o maior módulo entre os mais de 3000 disponíveis na OCA. Este módulo, `l10n_br_account`, está também entre os três mais complexos da localização brasileira e exige um uso avançado do ORM do Odoo para gerenciar a dualidade documento fiscal/lançamento contábil.

A implementação bem-sucedida de um ERP estrangeiro no Brasil é uma tarefa que demanda profissionais altamente qualificados, com anos de experiência em programação backend (Python) e implantação de verdadeiros sistemas ERP. Uma implementação não se resume a baixar e instalar módulo (apenas 1% do trabalho); envolve análise de processos, configuração, migração de dados e customizações, migração de modulos OCA a partir de outras versões... Subestimar essa complexidade invariavelmente leva a projetos problemáticos e custos elevados no longo prazo.

Este aviso serve para alinhar expectativas e reforçar que o sucesso de uma implantação Odoo no Brasil depende de expertise técnica e funcional aprofundada. Infelizmente, este mercado atrai aventureiros que subestimam essa complexidade ou que vendem projetos acreditando ser possível terceirizar a execução sem grande compromisso com a entrega, explorando a falta de informação do cliente. Este cenário caracteriza um "market for lemons", onde a assimetria de informação torna difícil distinguir entre fornecedores qualificados e despreparados, impedindo o desenvolvimento de um mercado de implementação maduro.

Agravando a situação, onde se esperaria uma garantia criteriosa de qualidade, o ecossistema corporativo "oficial" investe pesadamente em propaganda para mascarar essa realidade, promovendo uma visão onde a consultoria de implementação é tratada como uma commodity. Esse modelo, focado em comissões pela venda de licenças (muitas vezes desnecessárias ao utilizar o ecossistema da OCA), alimenta um mercado paralelo notório de "parceiros fantoches/bucha de canhão" que compram certificações oficiais de empresas estrangeiras para simular uma competência que não possuem. Cuidado com profissionais que ostentam certificações compradas para transferir a responsabilidade da implementação sem o devido suporte ou conhecimento real. Não se deixe enganar por narrativas que simplificam a complexidade do projeto para priorizar a venda de licenças!

# Conclusão

O `l10n_br_account` possui um design robusto que unifica as complexas lógicas fiscal e contábil do Brasil dentro do Odoo. Sua arquitetura, projetada por especialistas para especialistas, oferece uma plataforma flexível e confiável, capaz de sustentar operações de alta complexidade e garantir a conformidade fiscal e contábil das empresas que utilizam a localização brasileira da OCA.

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
account_document_form_inherit l10n_br_account.document.form.inherit l10n_br_fiscal.document xpath Inherits l10n_br_fiscal.document_form
account_move_reversal_form account.move.reversal.form account.move.reversal field Inherits account.view_account_move_reversal
document_import_wizard_form l10n_br_account.document.import.wizard.form l10n_br_fiscal.document.import.wizard button Inherits l10n_br_fiscal.document_import_wizard_form
document_line_form l10n_br_fiscal.document.line.form l10n_br_fiscal.document.line field Inherits l10n_br_fiscal.document_line_form
fiscal_operation_form fiscal.operation.form l10n_br_fiscal.operation page Inherits l10n_br_fiscal.operation_form
fiscal_operation_line_form fiscal.operation.line.form l10n_br_fiscal.operation.line field Inherits l10n_br_fiscal.operation_line_form
fiscal_operation_search fiscal.operation.search l10n_br_fiscal.operation filter Inherits l10n_br_fiscal.operation_search
fiscal_operation_tree fiscal.operation.tree l10n_br_fiscal.operation field Inherits l10n_br_fiscal.operation_tree
invoice_form l10n_br_account.invoice.form account.move div Inherits account.view_move_form
invoice_search l10n_br_account.invoice.search account.move field Inherits account.view_account_invoice_filter
invoice_tree l10n_br_account.invoice.tree account.move field Inherits account.view_invoice_tree
l10n_br_account_partner_form l10n_br_account.res.partner.form res.partner group Inherits account.view_partner_property_form
l10n_br_account_product_view_account_invoice_report_search l10n_br_account.invoice.report.search account.invoice.report filter Inherits account.view_account_invoice_report_search
l10n_br_account_tax_form l10n_br_account.tax.form account.tax field Inherits account.view_tax_form
l10n_br_account_tax_template_form l10n_br_account.tax.template.form account.tax.template xpath Inherits account.view_account_tax_template_form
Models touched (19)

New fields (0)

No new fields.

Public methods (1)
  • load_fiscal_taxes(self)
    Relate account taxes with fiscal taxes to enable the Brazilian tax engine to kick in with the installed chart of account.

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)

New fields (25)
  • cest_id Many2one → l10n_br_fiscal.cest
    comodel_name='l10n_br_fiscal.cest' string='CEST'
  • cfop_id Many2one → l10n_br_fiscal.cfop
    comodel_name='l10n_br_fiscal.cfop' string='CFOP'
  • cofins_value Float
    digits='Account' string='COFINS Value'
  • discount_value Float
    digits='Account'
  • document_serie_id Many2one → l10n_br_fiscal.document.serie
    comodel_name='l10n_br_fiscal.document.serie'
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type'
  • fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Operation'
  • fiscal_operation_line_id Many2one → l10n_br_fiscal.operation.line
    comodel_name='l10n_br_fiscal.operation.line' string='Operation Line'
  • fiscal_type Selection
    selection=PRODUCT_FISCAL_TYPE
  • freight_value Float
    digits='Account'
  • icms_destination_value Float
    digits='Account' string='Valor Difal Destino'
  • icms_origin_value Float
    digits='Account' string='Valor Difal Origem'
  • icms_value Float
    digits='Account' string='Valor ICMS'
  • icmsfcp_value Float
    digits='Account' string='Valor Difal FCP'
  • icmsst_value Float
    digits='Account' string='Valor ICMS ST'
  • ii_value Float
    digits='Account' string='II Value'
  • insurance_value Float
    digits='Account'
  • ipi_value Float
    digits='Account' string='IPI Value'
  • issqn_value Float
    digits='Account'
  • issuer Selection
    selection=DOCUMENT_ISSUER
  • nbm_id Many2one → l10n_br_fiscal.nbm
    comodel_name='l10n_br_fiscal.nbm' string='NBM'
  • ncm_id Many2one → l10n_br_fiscal.ncm
    comodel_name='l10n_br_fiscal.ncm' string='NCM'
  • other_value Float
    digits='Account'
  • pis_value Float
    digits='Account' string='PIS Value'
  • service_type_id Many2one → l10n_br_fiscal.service.type
    comodel_name='l10n_br_fiscal.service.type'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create_document_from_attachment(self, attachment_ids=None)

New fields (4)
  • document_electronic Boolean
    related='document_type_id.electronic' string='Electronic?'
  • fiscal_document_id Many2one → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' copy=False ondelete='cascade' readonly=False store=True string='Fiscal Document'
  • fiscal_document_ids One2many → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' compute='_compute_fiscal_document_ids' help='In some rare cases (NFS-e, CT-e...) a single account.move\n may have several different fiscal documents related to its account.move.lines.\n ' string='Fiscal Documents'
  • fiscal_operation_type Selection
    compute='_compute_fiscal_operation_type' related=None selection=FISCAL_IN_OUT_ALL
Public methods (20)
  • action_document_back2draft(self)
    Sets fiscal document to draft state and cancel and set to draft the related invoice for both documents remain equivalent state.
  • action_document_cancel(self)
  • action_document_correction(self)
  • action_document_invalidate(self)
  • action_document_send(self)
  • action_send_email(self)
  • action_view_invoice(self)
  • button_cancel(self)
  • button_draft(self)
  • button_import_fiscal_document(self)
    Import move fields and invoice lines from the fiscal_document_id record if there is any new line to import. You can typically set fiscal_document_id to some l10n_br_fiscal.document record that was imported previously and import its lines into the current move.
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • ensure_one_doc(self)
  • import_fiscal_document(self, fiscal_document, move_id=None, move_type='in_invoice')
    @api.model
    Import the data from an existing fiscal document into a new invoice or into an existing invoice. First it transfers the "shadowed" fields and fill the other mandatory invoice fields. The account.move onchanges of these fields are properly triggered as if the invoice was filled manually. Then it creates each account.move.line and fill them using their fiscal_document_id onchange.
  • open_fiscal_document(self)
    If there is only 1 fiscal document (usual case), open the fiscal form view for it. Open the tree view in the case of several fiscal documents.
  • unlink(self)
    Allow to delete draft or cancelled invoices
  • update_payment_term_number(self)
  • view_pdf(self)
  • view_xml(self)
  • write(self, vals)

New fields (8)
  • discount Float
    compute='_compute_discounts' store=True
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type' related='move_id.document_type_id'
  • fiscal_document_line_id Many2one → l10n_br_fiscal.document.line
    comodel_name='l10n_br_fiscal.document.line' copy=False ondelete='cascade' string='Fiscal Document Line'
  • name Char
    inverse='_inverse_name'
  • payment_term_number Char
    help="Stores the installment number in the format 'current-total'. For example, '1-3' for the first of three installments, '2-3' for the second, and '3-3' for the last installment."
  • price_unit Float
    inverse='_inverse_price_unit'
  • product_uom_id Many2one
    inverse='_inverse_product_uom_id'
  • quantity Float
    inverse='_inverse_quantity'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, values)

New fields (3)
  • force_fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Force Fiscal Operation'
  • force_fiscal_operation_journal_id Many2one
    related='force_fiscal_operation_id.journal_id'
  • journal_id Many2one
    compute='_compute_journal_id' precompute=True store=True
Public methods (1)
  • reverse_moves(self)

New fields (1)
  • fiscal_tax_ids Many2many → l10n_br_fiscal.tax
    column1='account_tax_id' column2='fiscal_tax_id' comodel_name='l10n_br_fiscal.tax' relation='fiscal_account_tax_rel' string='Fiscal Taxes'
Public methods (1)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False, fixed_multiplicator=1, fiscal_taxes=None, operation_line=False, ncm=None, nbs=None, nbm=None, cest=None, cfop=None, discount_value=None, insurance_value=None, other_value=None, ii_customhouse_charges=None, freight_value=None, fiscal_price=None, fiscal_quantity=None, uot_id=None, icmssn_range=None, icms_origin=None, ind_final=FINAL_CUSTOMER_NO)
    Returns all information required to apply taxes (in self + their children in case of a tax goup). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'taxes': [{ # One dict for each tax in self # and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }] }

New fields (1)
  • fiscal_tax_group_id Many2one → l10n_br_fiscal.tax.group
    comodel_name='l10n_br_fiscal.tax.group' string='Fiscal Tax Group'
Public methods (1)
  • deductible_tax(self, type_tax_use='sale')

New fields (1)
  • fiscal_tax_ids Many2many → l10n_br_fiscal.tax
    column1='account_tax_template_id' column2='fiscal_tax_id' comodel_name='l10n_br_fiscal.tax' relation='fiscal_account_template_tax_rel' string='Fiscal Taxes'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (14)
  • company_id Many2one
    default=None precompute=True readonly=False related='proxy_company_id' store=True
  • date_in_out Datetime
    compute='_compute_date_in_out' inverse='_inverse_date_in_out' store=True
  • document_date Datetime
    compute='_compute_document_date' inverse='_inverse_document_date' store=True
  • fiscal_line_ids One2many
    copy=False
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' compute='_compute_incoterm_id' inverse='_inverse_incoterm_id' string='Fiscal Inconterm'
  • move_count Integer
    compute='_compute_move_count' readonly=True string='Invoice count'
  • move_ids One2many → account.move
    comodel_name='account.move' inverse_name='fiscal_document_id' string='Invoices'
  • partner_id Many2one
    precompute=True readonly=False related='proxy_partner_id' store=True
  • partner_shipping_id Many2one
    precompute=True readonly=False related='proxy_partner_shipping_id' store=True
  • proxy_company_id Many2one → res.company
    comodel_name='res.company' default=<expr> help='Technical Field.' string='Company (proxy)'
  • proxy_partner_id Many2one → res.partner
    comodel_name='res.partner' help='Technical Field.' string='Partner (proxy)'
  • proxy_partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Technical Field.' string='Shipping Partner (proxy)'
  • proxy_user_id Many2one → res.users
    comodel_name='res.users' help='Technical Field.' string='User (proxy)'
  • user_id Many2one
    default=None precompute=True readonly=False related='proxy_user_id' store=True
Public methods (8)
  • action_document_back2draft(self)
  • action_document_confirm(self)
  • action_view_invoice(self)
  • cancel_move_ids(self)
  • create(self, vals_list)
    @api.model_create_multi
    It's not allowed to create a fiscal document line without a document_type_id anyway. But instead of letting Odoo crash in this case we simply avoid creating the record. This makes it possible to create an account.move without a fiscal_document_id despite the _inherits system: Odoo will write NULL as the value in this case.
  • exec_after_SITUACAO_EDOC_DENEGADA(self, old_state, new_state)
  • message_post(self, **kwargs)
    @api.returns('mail.message', <expr>)
    broadcast message_post to all related account.move so messages in a fiscal document chatter are visible in the related account moves.
  • unlink(self)

New fields (1)
  • first_imported_move_id Integer
Public methods (1)
  • action_import_and_open_move(self)
    This is the import wizard confirmation action that will trigger the account.move importation for the current file. After the importation, it either redirect for processing the next file if any, either it redirect to the imported account.move(s) at the end of the attachments sequence.

New fields (14)
  • account_line_ids One2many → account.move.line
    comodel_name='account.move.line' inverse_name='fiscal_document_line_id' string='Invoice Lines'
  • company_id Many2one → res.company
    comodel_name='res.company' precompute=True readonly=False related='proxy_company_id' store=True string='Company'
  • document_id Many2one → l10n_br_fiscal.document
    check_company=True comodel_name='l10n_br_fiscal.document' compute='_compute_document_id' index=True ondelete='cascade' precompute=True readonly=False store=True string='Fiscal Document'
  • move_id Many2one → account.move
    comodel_name='account.move' precompute=True related='account_line_ids.move_id' store=True string='Invoice'
  • name Char
    compute='_compute_name' precompute=True readonly=False store=True
  • product_id Many2one → product.product
    comodel_name='product.product' precompute=True readonly=False related='proxy_product_id' store=True string='Product'
  • proxy_company_id Many2one → res.company
    comodel_name='res.company' help='Technical Field.' precompute=True readonly=False related='document_id.company_id' store=True string='Company (proxy)'
  • proxy_name Char
    help='Technical Field.' string='Name (proxy)'
  • proxy_partner_id Many2one → res.partner
    comodel_name='res.partner' help='Technical Field.' string='Partner (proxy)'
  • proxy_price_unit Float
    help='Technical mirror.' string='Unit Price (proxy)'
  • proxy_product_id Many2one → product.product
    comodel_name='product.product' string='Product (proxy)'
  • proxy_quantity Float
    help='Technical Field.' string='Quantity (proxy)'
  • quantity Float
    precompute=True readonly=False related='proxy_quantity' store=True string='Quantity'
  • uom_id Many2one
    inverse='_inverse_uom_id'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Override the create method to ensure it filters out account.move.line records that lack a valid document_id or fiscal_operation_line_id. Prevent the creation of fiscal document lines without these mandatory fields to avoid system crashes due to invalid records. If the conditions are not met, return an empty list instead of creating any records. This supports the creation of account.move.line records with NULL values for fiscal_document_line_id where necessary.

New fields (3)
  • deductible_taxes Boolean
    company_dependent=True
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' company_dependent=True domain="[('type', 'in', {'out': ['sale', 'general'], 'in': ['purchase', 'general'], 'all': ['sale', 'purchase', 'general']}.get(fiscal_operation_type, []))]" string='Account Journal'
Public methods (0)

No public methods.

New fields (1)
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • account_taxes(self, user_type='sale', fiscal_operation=False, company=False)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (0)

No new fields.

Public methods (1)
  • account_tax_group(self)
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/15.0/l10n_br_account
VERSION
VERSION 2.11.0
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSRaphaël Valyi, Renato Lima, Weblate, OCA-git-bot, oca-ci, Marcel Savegnago, Wesley Oliveira
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-brazil
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:32
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-payment:
    - account_due_list
OCA/l10n-brazil:
    - l10n_br_coa
    - l10n_br_fiscal
    - l10n_br_base
    - l10n_br_account_due_list
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_address_city
    - base_address_extended
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES erpbrasil.base
email-validator
num2words
phonenumbers
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
account_move_reversal_form account.move.reversal.form account.move.reversal field Inherits account.view_account_move_reversal
document_line_form l10n_br_fiscal.document.line.form l10n_br_fiscal.document.line field Inherits l10n_br_fiscal.document_line_form
fiscal_invoice_form l10n_br_account.fiscal.invoice.form account.move xpath Inherits l10n_br_fiscal.document_form
fiscal_invoice_line_form l10n_br_account.move.line.form account.move.line xpath Inherits l10n_br_fiscal.document_line_form
fiscal_invoice_search l10n_br_account.fiscal.invoice.search account.move xpath Inherits l10n_br_fiscal.document_search
fiscal_invoice_tree l10n_br_account.fiscal.invoice.tree account.move xpath Inherits l10n_br_fiscal.document_tree
fiscal_operation_form fiscal.operation.form l10n_br_fiscal.operation page Inherits l10n_br_fiscal.operation_form
fiscal_operation_line_form fiscal.operation.line.form l10n_br_fiscal.operation.line field Inherits l10n_br_fiscal.operation_line_form
fiscal_operation_search fiscal.operation.search l10n_br_fiscal.operation filter Inherits l10n_br_fiscal.operation_search
fiscal_operation_tree fiscal.operation.tree l10n_br_fiscal.operation field Inherits l10n_br_fiscal.operation_tree
invoice_form l10n_br_account.invoice.form account.move div Inherits account.view_move_form
invoice_search l10n_br_account.invoice.search account.move field Inherits account.view_account_invoice_filter
invoice_tree l10n_br_account.invoice.tree account.move field Inherits account.view_invoice_tree
l10n_br_account_partner_form l10n_br_account.res.partner.form res.partner group Inherits account.view_partner_property_form
l10n_br_account_product_view_account_invoice_report_search l10n_br_account.invoice.report.search account.invoice.report filter Inherits account.view_account_invoice_report_search
l10n_br_account_tax_form l10n_br_account.tax.form account.tax field Inherits account.view_tax_form
l10n_br_account_tax_template_form l10n_br_account.tax.template.form account.tax.template xpath Inherits account.view_account_tax_template_form
nfe_document_form_inherit l10n_br_nfe.document.form.inherit l10n_br_fiscal.document xpath Inherits l10n_br_fiscal.document_form
Models touched (17)

New fields (0)

No new fields.

Public methods (1)
  • load_fiscal_taxes(self)
    Relate account taxes with fiscal taxes to enable the Brazilian tax engine to kick in with the installed chart of account.

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)

New fields (19)
  • cest_id Many2one → l10n_br_fiscal.cest
    comodel_name='l10n_br_fiscal.cest' string='CEST'
  • cfop_id Many2one → l10n_br_fiscal.cfop
    comodel_name='l10n_br_fiscal.cfop' string='CFOP'
  • cofins_value Float
    digits='Account' string='Valor COFINS'
  • document_serie_id Many2one → l10n_br_fiscal.document.serie
    comodel_name='l10n_br_fiscal.document.serie'
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type'
  • fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Operation'
  • fiscal_operation_line_id Many2one → l10n_br_fiscal.operation.line
    comodel_name='l10n_br_fiscal.operation.line' string='Operation Line'
  • fiscal_type Selection
    selection=PRODUCT_FISCAL_TYPE string='Tipo Fiscal'
  • icms_destination_value Float
    digits='Account' string='Valor Difal Destino'
  • icms_origin_value Float
    digits='Account' string='Valor Difal Origem'
  • icms_value Float
    digits='Account' string='Valor ICMS'
  • icmsfcp_value Float
    digits='Account' string='Valor Difal FCP'
  • icmsst_value Float
    digits='Account' string='Valor ICMS ST'
  • ii_value Float
    digits='Account' string='Valor II'
  • ipi_value Float
    digits='Account' string='Valor IPI'
  • issuer Selection
    selection=DOCUMENT_ISSUER
  • ncm_id Many2one → l10n_br_fiscal.ncm
    comodel_name='l10n_br_fiscal.ncm' string='NCM'
  • pis_value Float
    digits='Account' string='Valor PIS'
  • total_with_taxes Float
    digits='Account' string='Total com Impostos'
Public methods (0)

No public methods.

New fields (1)
  • revenue_expense Boolean
    string='Gera Financeiro'
Public methods (0)

No public methods.

New fields (4)
  • document_electronic Boolean
    related='document_type_id.electronic' string='Electronic?'
  • fiscal_document_id Many2one → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' copy=False ondelete='cascade' string='Fiscal Document'
  • fiscal_document_ids One2many → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' compute='_compute_fiscal_document_ids' help='In some rare cases (NFS-e, CT-e...) a single account.move\n may have several different fiscal documents related to its account.move.lines.\n ' string='Fiscal Documents'
  • fiscal_operation_type Selection
    compute='_compute_fiscal_operation_type' related=None selection=FISCAL_IN_OUT_ALL
Public methods (21)
  • action_document_back2draft(self)
    Sets fiscal document to draft state and cancel and set to draft the related invoice for both documents remain equivalent state.
  • action_document_cancel(self)
  • action_document_correction(self)
  • action_document_invalidate(self)
  • action_document_send(self)
  • action_send_email(self)
  • action_view_invoice(self)
  • button_cancel(self)
  • button_draft(self)
  • button_import_fiscal_document(self)
    Import move fields and invoice lines from the fiscal_document_id record if there is any new line to import. You can typically set fiscal_document_id to some l10n_br_fiscal.document record that was imported previously and import its lines into the current move.
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • ensure_one_doc(self)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Inject fiscal fields into the account.move(.line) views. FIXME: it's because of this override that the tax m2m widget isn't fully displayed (tax names are missing) until the user saves the form.
  • import_fiscal_document(self, fiscal_document, move_id=None, move_type='in_invoice')
    @api.model
    Import the data from an existing fiscal document into a new invoice or into an existing invoice. First it transfers the "shadowed" fields and fill the other mandatory invoice fields. The account.move onchanges of these fields are properly triggered as if the invoice was filled manually. Then it creates each account.move.line and fill them using their fiscal_document_id onchange.
  • open_fiscal_document(self)
    If there is only 1 fiscal document (usual case), open the fiscal form view for it. Open the tree view in the case of several fiscal documents.
  • post(self, invoice=False)
  • unlink(self)
    Allow to delete draft or cancelled invoices
  • view_pdf(self)
  • view_xml(self)
  • write(self, values)

New fields (18)
  • allow_csll_irpj Boolean
    compute='_compute_allow_csll_irpj'
  • amount_total Monetary
    compute='_compute_amounts'
  • amount_untaxed Monetary
    compute='_compute_amounts'
  • cfop_destination Selection
    related='cfop_id.destination' string='CFOP Destination'
  • cofins_cst_code Char
    related='cofins_cst_id.code' string='COFINS CST Code'
  • cofinsst_cst_code Char
    related='cofinsst_cst_id.code' string='COFINS ST CST Code'
  • discount Float
    compute='_compute_discounts' store=True
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type' related='move_id.document_type_id'
  • fiscal_document_line_id Many2one → l10n_br_fiscal.document.line
    comodel_name='l10n_br_fiscal.document.line' copy=False ondelete='cascade' string='Fiscal Document Line'
  • fiscal_genre_code Char
    related='fiscal_genre_id.code' string='Fiscal Product Genre Code'
  • icms_cst_code Char
    related='icms_cst_id.code' string='ICMS CST Code'
  • ind_final Selection
    related='move_id.ind_final'
  • ipi_cst_code Char
    related='ipi_cst_id.code' string='IPI CST Code'
  • partner_company_type Selection
    related='partner_id.company_type'
  • partner_is_public_entity Boolean
    related='partner_id.is_public_entity'
  • pis_cst_code Char
    related='pis_cst_id.code' string='PIS CST Code'
  • pisst_cst_code Char
    related='pisst_cst_id.code' string='PIS ST CST Code'
  • tax_framework Selection
    related='move_id.company_id.tax_framework' string='Tax Framework'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, values)

New fields (1)
  • force_fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Force Fiscal Operation'
Public methods (1)
  • reverse_moves(self)

New fields (1)
  • fiscal_tax_ids Many2many → l10n_br_fiscal.tax
    column1='account_tax_id' column2='fiscal_tax_id' comodel_name='l10n_br_fiscal.tax' relation='fiscal_account_tax_rel' string='Fiscal Taxes'
Public methods (1)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False, fiscal_taxes=None, operation_line=False, ncm=None, nbs=None, nbm=None, cest=None, cfop=None, discount_value=None, insurance_value=None, other_value=None, ii_customhouse_charges=None, freight_value=None, fiscal_price=None, fiscal_quantity=None, uot_id=None, icmssn_range=None, icms_origin=None, ind_final=FINAL_CUSTOMER_NO)
    Returns all information required to apply taxes (in self + their children in case of a tax goup). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'taxes': [{ # One dict for each tax in self # and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }] }

New fields (1)
  • fiscal_tax_group_id Many2one → l10n_br_fiscal.tax.group
    comodel_name='l10n_br_fiscal.tax.group' string='Fiscal Tax Group'
Public methods (1)
  • deductible_tax(self, type_tax_use='sale')

New fields (1)
  • fiscal_tax_ids Many2many → l10n_br_fiscal.tax
    column1='account_tax_template_id' column2='fiscal_tax_id' comodel_name='l10n_br_fiscal.tax' relation='fiscal_account_template_tax_rel' string='Fiscal Taxes'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (10)
  • date_in_out Datetime
    compute='_compute_date_in_out' inverse='_inverse_date_in_out' store=True
  • document_date Datetime
    compute='_compute_document_date' inverse='_inverse_document_date' store=True
  • fiscal_line_ids One2many
    copy=False
  • fiscal_proxy_company_id Many2one
    readonly=False related='company_id' string='Fiscal Proxy Company'
  • fiscal_proxy_currency_id Many2one
    readonly=False related='currency_id' string='Fiscal Proxy Currency'
  • fiscal_proxy_partner_id Many2one
    readonly=False related='partner_id' string='Fiscal Partner'
  • fiscal_proxy_user_id Many2one
    readonly=False related='user_id' string='Fiscal Proxy User'
  • incoterm_id Many2one
    related='move_ids.invoice_incoterm_id' string='Fiscal Inconterm'
  • move_count Integer
    compute='_compute_move_count' readonly=True string='Invoice count'
  • move_ids One2many → account.move
    comodel_name='account.move' inverse_name='fiscal_document_id' string='Invoices'
Public methods (8)
  • action_document_back2draft(self)
  • action_document_confirm(self)
  • action_view_invoice(self)
  • cancel_move_ids(self)
  • create(self, vals_list)
    @api.model_create_multi
    It's not allowed to create a fiscal document line without a document_type_id anyway. But instead of letting Odoo crash in this case we simply avoid creating the record. This makes it possible to create an account.move without a fiscal_document_id despite the _inherits system: Odoo will write NULL as the value in this case.
  • exec_after_SITUACAO_EDOC_DENEGADA(self, old_state, new_state)
  • message_post(self, **kwargs)
    @api.returns('mail.message', <expr>)
    broadcast message_post to all related account.move so messages in a fiscal document chatter are visible in the related account moves.
  • unlink(self)

New fields (5)
  • account_line_ids One2many → account.move.line
    comodel_name='account.move.line' inverse_name='fiscal_document_line_id' string='Invoice Lines'
  • fiscal_proxy_name Text
    readonly=False related='name' string='Fiscal Name'
  • fiscal_proxy_price_unit Float
    readonly=False related='price_unit' string='Fiscal Price Unit'
  • fiscal_proxy_product_id Many2one
    readonly=False related='product_id' string='Fiscal Product'
  • fiscal_proxy_quantity Float
    readonly=False related='quantity' string='Fiscal Quantity'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Override the create method to ensure it filters out account.move.line records that lack a valid document_id or fiscal_operation_line_id. Prevent the creation of fiscal document lines without these mandatory fields to avoid system crashes due to invalid records. If the conditions are not met, return an empty list instead of creating any records. This supports the creation of account.move.line records with NULL values for fiscal_document_line_id where necessary.

New fields (3)
  • deductible_taxes Boolean
    company_dependent=True
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' company_dependent=True domain="[('type', 'in', {'out': ['sale', 'general'], 'in': ['purchase', 'general'], 'all': ['sale', 'purchase', 'general']}.get(fiscal_operation_type, []))]" string='Account Journal'
Public methods (2)
  • action_create_new(self)
  • open_action(self)

New fields (1)
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • account_taxes(self, user_type='sale', fiscal_operation=False)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (0)

No new fields.

Public methods (1)
  • account_tax_group(self)
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/14.0/l10n_br_account
VERSION
VERSION 15.0.0
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSRaphaël Valyi, Renato Lima, OCA Transbot, Luis Felipe Miléo, oca-travis, Weblate, OCA-git-bot, Magno Costa, oca-ci, Marcel Savegnago, Diego Paradeda, Neto, Antônio Neto, Wesley Oliveira, CristianoMafraJunior, Felipe, Felipe Motter Pereira, Felipe Motter, Carlos Silveira
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-brazil
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:54
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-payment:
    - account_due_list
OCA/l10n-brazil:
    - l10n_br_coa
    - l10n_br_fiscal
    - l10n_br_base
    - l10n_br_account_due_list
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_address_city
    - base_address_extended
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES erpbrasil.base
email-validator
num2words
phonenumbers
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
account_move_reversal_form account.move.reversal.form account.move.reversal field Inherits account.view_account_move_reversal
document_line_form l10n_br_fiscal.document.line.form l10n_br_fiscal.document.line field Inherits l10n_br_fiscal.document_line_form
fiscal_invoice_form l10n_br_account.fiscal.invoice.form account.move xpath Inherits l10n_br_fiscal.document_form
fiscal_invoice_line_form l10n_br_account.move.line.form account.move.line xpath Inherits l10n_br_fiscal.document_line_form
fiscal_invoice_search l10n_br_account.fiscal.invoice.search account.move xpath Inherits l10n_br_fiscal.document_search
fiscal_invoice_tree l10n_br_account.fiscal.invoice.tree account.move xpath Inherits l10n_br_fiscal.document_tree
fiscal_operation_form fiscal.operation.form l10n_br_fiscal.operation page Inherits l10n_br_fiscal.operation_form
fiscal_operation_line_form fiscal.operation.line.form l10n_br_fiscal.operation.line field Inherits l10n_br_fiscal.operation_line_form
fiscal_operation_search fiscal.operation.search l10n_br_fiscal.operation filter Inherits l10n_br_fiscal.operation_search
fiscal_operation_tree fiscal.operation.tree l10n_br_fiscal.operation field Inherits l10n_br_fiscal.operation_tree
invoice_form l10n_br_account.invoice.form account.move div Inherits account.view_move_form
invoice_search l10n_br_account.invoice.search account.move field Inherits account.view_account_invoice_filter
invoice_tree l10n_br_account.invoice.tree account.move field Inherits account.view_invoice_tree
l10n_br_account_partner_form l10n_br_account.res.partner.form res.partner group Inherits account.view_partner_property_form
l10n_br_account_product_view_account_invoice_report_search l10n_br_account.invoice.report.search account.invoice.report filter Inherits account.view_account_invoice_report_search
l10n_br_account_tax_form l10n_br_account.tax.form account.tax field Inherits account.view_tax_form
l10n_br_account_tax_template_form l10n_br_account.tax.template.form account.tax.template xpath Inherits account.view_account_tax_template_form
nfe_document_form_inherit l10n_br_nfe.document.form.inherit l10n_br_fiscal.document xpath Inherits l10n_br_fiscal.document_form
Models touched (18)

New fields (0)

No new fields.

Public methods (1)
  • load_fiscal_taxes(self)
    Relate account taxes with fiscal taxes to enable the Brazilian tax engine to kick in with the installed chart of account.

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)

New fields (19)
  • cest_id Many2one → l10n_br_fiscal.cest
    comodel_name='l10n_br_fiscal.cest' string='CEST'
  • cfop_id Many2one → l10n_br_fiscal.cfop
    comodel_name='l10n_br_fiscal.cfop' string='CFOP'
  • cofins_value Float
    digits='Account' string='Valor COFINS'
  • document_serie_id Many2one → l10n_br_fiscal.document.serie
    comodel_name='l10n_br_fiscal.document.serie'
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type'
  • fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Operation'
  • fiscal_operation_line_id Many2one → l10n_br_fiscal.operation.line
    comodel_name='l10n_br_fiscal.operation.line' string='Operation Line'
  • fiscal_type Selection
    selection=PRODUCT_FISCAL_TYPE string='Tipo Fiscal'
  • icms_destination_value Float
    digits='Account' string='Valor Difal Destino'
  • icms_origin_value Float
    digits='Account' string='Valor Difal Origem'
  • icms_value Float
    digits='Account' string='Valor ICMS'
  • icmsfcp_value Float
    digits='Account' string='Valor Difal FCP'
  • icmsst_value Float
    digits='Account' string='Valor ICMS ST'
  • ii_value Float
    digits='Account' string='Valor II'
  • ipi_value Float
    digits='Account' string='Valor IPI'
  • issuer Selection
    selection=DOCUMENT_ISSUER
  • ncm_id Many2one → l10n_br_fiscal.ncm
    comodel_name='l10n_br_fiscal.ncm' string='NCM'
  • pis_value Float
    digits='Account' string='Valor PIS'
  • total_with_taxes Float
    digits='Account' string='Total com Impostos'
Public methods (0)

No public methods.

New fields (1)
  • revenue_expense Boolean
    string='Gera Financeiro'
Public methods (0)

No public methods.

New fields (4)
  • document_electronic Boolean
    related='document_type_id.electronic' string='Electronic?'
  • fiscal_document_id Many2one → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' copy=False ondelete='cascade' string='Fiscal Document'
  • fiscal_document_ids One2many → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' compute='_compute_fiscal_document_ids' help='In some rare cases (NFS-e, CT-e...) a single account.move\n may have several different fiscal documents related to its account.move.lines.\n ' string='Fiscal Documents'
  • fiscal_operation_type Selection
    compute='_compute_fiscal_operation_type' related=None selection=FISCAL_IN_OUT_ALL
Public methods (22)
  • action_document_back2draft(self)
    Sets fiscal document to draft state and cancel and set to draft the related invoice for both documents remain equivalent state.
  • action_document_cancel(self)
  • action_document_closure(self)
  • action_document_correction(self)
  • action_document_invalidate(self)
  • action_document_send(self)
  • action_send_email(self)
  • action_view_invoice(self)
  • button_cancel(self)
  • button_draft(self)
  • button_import_fiscal_document(self)
    Import move fields and invoice lines from the fiscal_document_id record if there is any new line to import. You can typically set fiscal_document_id to some l10n_br_fiscal.document record that was imported previously and import its lines into the current move.
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • ensure_one_doc(self)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Inject fiscal fields into the account.move(.line) views. FIXME: it's because of this override that the tax m2m widget isn't fully displayed (tax names are missing) until the user saves the form.
  • import_fiscal_document(self, fiscal_document, move_id=None, move_type='in_invoice')
    @api.model
    Import the data from an existing fiscal document into a new invoice or into an existing invoice. First it transfers the "shadowed" fields and fill the other mandatory invoice fields. The account.move onchanges of these fields are properly triggered as if the invoice was filled manually. Then it creates each account.move.line and fill them using their fiscal_document_id onchange.
  • open_fiscal_document(self)
    If there is only 1 fiscal document (usual case), open the fiscal form view for it. Open the tree view in the case of several fiscal documents.
  • post(self, invoice=False)
  • unlink(self)
    Allow to delete draft or cancelled invoices
  • view_pdf(self)
  • view_xml(self)
  • write(self, values)

New fields (5)
  • amount_total Monetary
    compute='_compute_amounts'
  • amount_untaxed Monetary
    compute='_compute_amounts'
  • discount Float
    compute='_compute_discounts' store=True
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type' related='move_id.document_type_id'
  • fiscal_document_line_id Many2one → l10n_br_fiscal.document.line
    comodel_name='l10n_br_fiscal.document.line' copy=False ondelete='cascade' string='Fiscal Document Line'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, values)

New fields (1)
  • force_fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Force Fiscal Operation'
Public methods (1)
  • reverse_moves(self)

New fields (1)
  • fiscal_tax_ids Many2many → l10n_br_fiscal.tax
    column1='account_tax_id' column2='fiscal_tax_id' comodel_name='l10n_br_fiscal.tax' relation='fiscal_account_tax_rel' string='Fiscal Taxes'
Public methods (1)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, fiscal_taxes=None, operation_line=False, ncm=None, nbs=None, nbm=None, cest=None, cfop=None, discount_value=None, insurance_value=None, other_value=None, ii_customhouse_charges=None, freight_value=None, fiscal_price=None, fiscal_quantity=None, uot_id=None, icmssn_range=None, icms_origin=None, ind_final=FINAL_CUSTOMER_NO)
    Returns all information required to apply taxes (in self + their children in case of a tax goup). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'taxes': [{ # One dict for each tax in self # and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }] }

New fields (1)
  • fiscal_tax_group_id Many2one → l10n_br_fiscal.tax.group
    comodel_name='l10n_br_fiscal.tax.group' string='Fiscal Tax Group'
Public methods (1)
  • deductible_tax(self, type_tax_use='sale')

New fields (1)
  • fiscal_tax_ids Many2many → l10n_br_fiscal.tax
    column1='account_tax_template_id' column2='fiscal_tax_id' comodel_name='l10n_br_fiscal.tax' relation='fiscal_account_template_tax_rel' string='Fiscal Taxes'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (10)
  • date_in_out Datetime
    compute='_compute_date_in_out' inverse='_inverse_date_in_out' store=True
  • document_date Datetime
    compute='_compute_document_date' inverse='_inverse_document_date' store=True
  • fiscal_line_ids One2many
    copy=False
  • fiscal_proxy_company_id Many2one
    readonly=False related='company_id' string='Fiscal Proxy Company'
  • fiscal_proxy_currency_id Many2one
    readonly=False related='currency_id' string='Fiscal Proxy Currency'
  • fiscal_proxy_partner_id Many2one
    readonly=False related='partner_id' string='Fiscal Partner'
  • fiscal_proxy_user_id Many2one
    readonly=False related='user_id' string='Fiscal Proxy User'
  • incoterm_id Many2one
    related='move_ids.invoice_incoterm_id' string='Fiscal Inconterm'
  • move_count Integer
    compute='_compute_move_count' readonly=True string='Invoice count'
  • move_ids One2many → account.move
    comodel_name='account.move' inverse_name='fiscal_document_id' string='Invoices'
Public methods (8)
  • action_document_back2draft(self)
  • action_document_confirm(self)
  • action_view_invoice(self)
  • cancel_move_ids(self)
  • create(self, vals_list)
    @api.model_create_multi
    It's not allowed to create a fiscal document line without a document_type_id anyway. But instead of letting Odoo crash in this case we simply avoid creating the record. This makes it possible to create an account.move without a fiscal_document_id despite the _inherits system: Odoo will write NULL as the value in this case.
  • exec_after_SITUACAO_EDOC_DENEGADA(self, old_state, new_state)
  • message_post(self, **kwargs)
    @api.returns('mail.message', <expr>)
    broadcast message_post to all related account.move so messages in a fiscal document chatter are visible in the related account moves.
  • unlink(self)

New fields (5)
  • account_line_ids One2many → account.move.line
    comodel_name='account.move.line' inverse_name='fiscal_document_line_id' string='Invoice Lines'
  • fiscal_proxy_name Char
    readonly=False related='name' string='Fiscal Proxy Name'
  • fiscal_proxy_price_unit Float
    readonly=False related='price_unit' string='Fiscal Proxy Price Unit'
  • fiscal_proxy_product_id Many2one
    readonly=False related='product_id' string='Fiscal Proxy Product'
  • fiscal_proxy_quantity Float
    readonly=False related='quantity' string='Fiscal Proxy Quantity'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Override the create method to ensure it filters out account.move.line records that lack a valid document_id or fiscal_operation_line_id. Prevent the creation of fiscal document lines without these mandatory fields to avoid system crashes due to invalid records. If the conditions are not met, return an empty list instead of creating any records. This supports the creation of account.move.line records with NULL values for fiscal_document_line_id where necessary.

New fields (3)
  • deductible_taxes Boolean
    company_dependent=True
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' company_dependent=True domain="[('type', 'in', {'out': ['sale', 'general'], 'in': ['purchase', 'general'], 'all': ['sale', 'purchase', 'general']}.get(fiscal_operation_type, []))]" string='Account Journal'
Public methods (2)
  • action_create_new(self)
  • open_action(self)

New fields (1)
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • account_taxes(self, user_type='sale', fiscal_operation=False)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (0)

No new fields.

Public methods (1)
  • account_tax_group(self)
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/12.0/l10n_br_account
VERSION
VERSION 16.4.0
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSRaphaël Valyi, Renato Lima, GitHub, Luis Felipe Mileo, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Magno Costa, Gabriel Cardoso de Faria, oca-ci, Marcel Savegnago, Luis Malta, Neto, Renan Hiroki Bastos, Odoo Dev Jung, Ygor Carvalho
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-brazil
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-payment:
    - account_due_list
OCA/l10n-brazil:
    - l10n_br_coa
    - l10n_br_fiscal
    - l10n_br_base
    - l10n_br_account_due_list
odoo/odoo:
    - account_cancel
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - http_routing
    - digest
    - base_address_city
    - base_address_extended
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES erpbrasil.assinatura
erpbrasil.base
num2words
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
document_line_form l10n_br_fiscal.document.line.form l10n_br_fiscal.document.line field Inherits l10n_br_fiscal.document_line_form
fiscal_invoice_form l10n_br_account.fiscal.invoice.form account.invoice xpath Inherits l10n_br_fiscal.document_form
fiscal_invoice_line_form l10n_br_account.invoice.line.form account.invoice.line xpath Inherits l10n_br_fiscal.document_line_form
fiscal_invoice_search l10n_br_account.fiscal.invoice.search account.invoice xpath Inherits l10n_br_fiscal.document_search
fiscal_invoice_tree l10n_br_account.fiscal.invoice.tree account.invoice xpath Inherits l10n_br_fiscal.document_tree
fiscal_operation_form fiscal.operation.form l10n_br_fiscal.operation page Inherits l10n_br_fiscal.operation_form
fiscal_operation_line_form fiscal.operation.line.form l10n_br_fiscal.operation.line field Inherits l10n_br_fiscal.operation_line_form
fiscal_operation_search fiscal.operation.search l10n_br_fiscal.operation filter Inherits l10n_br_fiscal.operation_search
fiscal_operation_tree fiscal.operation.tree l10n_br_fiscal.operation field Inherits l10n_br_fiscal.operation_tree
invoice_form l10n_br_account.invoice.form account.invoice div Inherits account.invoice_form
invoice_line_form l10n_br_account.invoice.line.form account.invoice.line field Inherits account.view_invoice_line_form
invoice_search l10n_br_account.invoice.search account.invoice field Inherits account.view_account_invoice_filter
invoice_supplier_form l10n_br_account.invoice.supplier.form account.invoice xpath Inherits account.invoice_supplier_form
invoice_tree l10n_br_account.invoice.tree account.invoice field Inherits account.invoice_tree
l10n_br_account_invoice_refund_form l10n_br_account.invoice.refund.form account.invoice.refund field Inherits account.view_account_invoice_refund
l10n_br_account_product_view_account_invoice_report_search l10n_br_account.invoice.report.search account.invoice.report filter Inherits account.view_account_invoice_report_search
l10n_br_account_tax_form l10n_br_account.tax.form account.tax field Inherits account.view_tax_form
l10n_br_account_tax_template_form l10n_br_account.tax.template.form account.tax.template xpath Inherits account.view_account_tax_template_form
nfe_document_form_inherit l10n_br_nfe.document.form.inherit l10n_br_fiscal.document field Inherits l10n_br_fiscal.document_form
Models touched (22)

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)
    @api.multi

New fields (9)
  • active Boolean
    default=True string='Active'
  • cnpj_cpf Char
    related='partner_id.cnpj_cpf' string='CNPJ/CPF'
  • document_electronic Boolean
    related='document_type_id.electronic' string='Electronic?'
  • document_type Char
    related='document_type_id.code' store=True
  • fiscal_document_id Many2one → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' copy=False ondelete='cascade' required=True string='Fiscal Document'
  • ie Char
    related='partner_id.inscr_est' string='Adapted State Tax Number'
  • legal_name Char
    related='partner_id.legal_name' string='Adapted Legal Name'
  • withholding_invoice_ids Many2many → account.invoice
    column1='invoice_id' column2='withholding_invoice_id' comodel_name='account.invoice' compute='_compute_withholding_invoice_ids' relation='account_invoice_withholding_invoice_rel' store=True string='Withholding Invoice'
  • withholding_origin_ids Many2many → account.invoice
    column1='withholding_invoice_id' column2='invoice_id' comodel_name='account.invoice' compute='_compute_withholding_invoice_ids' relation='account_invoice_withholding_invoice_rel' store=True string='Withholding Origin Invoice'
Public methods (26)
  • action_date_assign(self)
    Usamos esse método para definir a data de emissão do documento fiscal e numeração do documento fiscal para ser usado nas linhas dos lançamentos contábeis.
  • action_document_back2draft(self)
    Sets fiscal document to draft state and cancel and set to draft the related invoice for both documents remain equivalent state.
  • action_document_cancel(self)
  • action_document_correction(self)
  • action_document_invalidate(self)
  • action_document_send(self)
  • action_invoice_cancel(self)
  • action_invoice_draft(self)
  • action_invoice_open(self)
  • action_move_create(self)
  • action_send_email(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, values)
    @api.model
  • default_get(self, fields_list)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • finalize_invoice_move_lines(self, move_lines)
  • get_taxes_values(self)
  • invoice_line_move_line_get(self)
    @api.model
  • open_fiscal_document(self)
  • open_invoice_document(self)
  • refund(self, date_invoice=None, date=None, description=None, journal_id=None)
    @api.multi@api.returns('self')
  • tax_line_move_line_get(self)
    @api.model
  • unlink(self)
    Allows delete a draft or cancelled invoices
  • view_pdf(self)
  • view_xml(self)
  • write(self, values)

New fields (18)
  • active Boolean
    default=True string='Active'
  • allow_csll_irpj Boolean
    compute='_compute_allow_csll_irpj'
  • cfop_destination Selection
    related='cfop_id.destination' string='CFOP Destination'
  • cofins_cst_code Char
    related='cofins_cst_id.code' string='COFINS CST Code'
  • cofinsst_cst_code Char
    related='cofinsst_cst_id.code' string='COFINS ST CST Code'
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type' related='invoice_id.document_type_id'
  • fiscal_document_line_id Many2one → l10n_br_fiscal.document.line
    comodel_name='l10n_br_fiscal.document.line' copy=False ondelete='cascade' required=True string='Fiscal Document Line'
  • fiscal_genre_code Char
    related='fiscal_genre_id.code' string='Fiscal Product Genre Code'
  • icms_cst_code Char
    related='icms_cst_id.code' string='ICMS CST Code'
  • ind_final Selection
    related='invoice_id.ind_final'
  • ipi_cst_code Char
    related='ipi_cst_id.code' string='IPI CST Code'
  • partner_company_type Selection
    related='partner_id.company_type'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' related='invoice_id.partner_id' string='Partner'
  • partner_is_public_entity Boolean
    related='partner_id.is_public_entity'
  • pis_cst_code Char
    related='pis_cst_id.code' string='PIS CST Code'
  • pisst_cst_code Char
    related='pisst_cst_id.code' string='PIS ST CST Code'
  • tax_framework Selection
    related='invoice_id.company_id.tax_framework' selection=TAX_FRAMEWORK string='Tax Framework'
  • wh_move_line_id Many2one → account.move.line
    comodel_name='account.move.line' ondelete='restrict' string='WH Account Move Line'
Public methods (4)
  • create(self, values)
    @api.model
  • default_get(self, fields_list)
    @api.model
  • unlink(self)
  • write(self, values)

New fields (1)
  • force_fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Force Fiscal Operation'
Public methods (2)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • invoice_refund(self)

New fields (19)
  • cest_id Many2one → l10n_br_fiscal.cest
    comodel_name='l10n_br_fiscal.cest' string='CEST'
  • cfop_id Many2one → l10n_br_fiscal.cfop
    comodel_name='l10n_br_fiscal.cfop' string='CFOP'
  • cofins_value Float
    digits=dp.get_precision('Account') string='Valor COFINS'
  • document_serie_id Many2one → l10n_br_fiscal.document.serie
    comodel_name='l10n_br_fiscal.document.serie'
  • document_type_id Many2one → l10n_br_fiscal.document.type
    comodel_name='l10n_br_fiscal.document.type'
  • fiscal_operation_id Many2one → l10n_br_fiscal.operation
    comodel_name='l10n_br_fiscal.operation' string='Operation'
  • fiscal_operation_line_id Many2one → l10n_br_fiscal.operation.line
    comodel_name='l10n_br_fiscal.operation.line' string='Operation Line'
  • fiscal_type Selection
    selection=PRODUCT_FISCAL_TYPE string='Tipo Fiscal'
  • icms_destination_value Float
    digits=dp.get_precision('Account') string='Valor Difal Destino'
  • icms_origin_value Float
    digits=dp.get_precision('Account') string='Valor Difal Origem'
  • icms_value Float
    digits=dp.get_precision('Account') string='Valor ICMS'
  • icmsfcp_value Float
    digits=dp.get_precision('Account') string='Valor Difal FCP'
  • icmsst_value Float
    digits=dp.get_precision('Account') string='Valor ICMS ST'
  • ii_value Float
    digits=dp.get_precision('Account') string='Valor II'
  • ipi_value Float
    digits=dp.get_precision('Account') string='Valor IPI'
  • issuer Selection
    selection=DOCUMENT_ISSUER string='Issuer'
  • ncm_id Many2one → l10n_br_fiscal.ncm
    comodel_name='l10n_br_fiscal.ncm' string='NCM'
  • pis_value Float
    digits=dp.get_precision('Account') string='Valor PIS'
  • total_with_taxes Float
    rdigits=dp.get_precision('Account') string='Total com Impostos'
Public methods (0)

No public methods.

New fields (1)
  • revenue_expense Boolean
    string='Gera Financeiro'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • button_cancel(self)
  • create_wh_invoices(self)
  • post(self, invoice=False)

New fields (1)
  • fiscal_tax_ids Many2many → l10n_br_fiscal.tax
    column1='account_tax_id' column2='fiscal_tax_id' comodel_name='l10n_br_fiscal.tax' relation='fiscal_account_tax_rel' string='Fiscal Taxes'
Public methods (1)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, fiscal_taxes=None, operation_line=False, ncm=None, nbs=None, nbm=None, cest=None, discount_value=None, insurance_value=None, other_value=None, freight_value=None, fiscal_price=None, fiscal_quantity=None, uot=None, icmssn_range=None, icms_origin=None, ind_final=FINAL_CUSTOMER_NO)
    Returns all information required to apply taxes (in self + their children in case of a tax goup). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'taxes': [{ # One dict for each tax in self # and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }] }

New fields (1)
  • fiscal_tax_group_id Many2one → l10n_br_fiscal.tax.group
    comodel_name='l10n_br_fiscal.tax.group' string='Fiscal Tax Group'
Public methods (1)
  • deductible_tax(self, type_tax_use='sale')

New fields (1)
  • fiscal_tax_ids Many2many → l10n_br_fiscal.tax
    column1='account_tax_template_id' column2='fiscal_tax_id' comodel_name='l10n_br_fiscal.tax' relation='fiscal_account_template_tax_rel' string='Fiscal Taxes'
Public methods (0)

No public methods.

New fields (1)
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' string='Fiscal Position'
Public methods (0)

No public methods.

New fields (1)
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' string='Invoice'
Public methods (1)
  • default_get(self, fields_list)
    @api.model

New fields (1)
  • invoice_ids One2many → account.invoice
    comodel_name='account.invoice' inverse_name='fiscal_document_id' string='Invoices'
Public methods (1)
  • unlink(self)

New fields (0)

No new fields.

Public methods (1)
  • do_cancel(self)

New fields (0)

No new fields.

Public methods (1)
  • doit(self)

New fields (1)
  • invoice_line_ids One2many → account.invoice.line
    comodel_name='account.invoice.line' inverse_name='fiscal_document_line_id' string='Invoice Lines'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • do_invalidate(self)

New fields (3)
  • deductible_taxes Boolean
    company_dependent=True string='Deductible Taxes'
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' company_dependent=True domain="[('type', 'in', {'out': ['sale', 'general'], 'in': ['purchase', 'general'], 'all': ['sale', 'purchase', 'general']}.get(fiscal_operation_type, []))]" string='Account Journal'
Public methods (2)
  • action_create_new(self)
  • open_action(self)

New fields (1)
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' company_dependent=True string='Fiscal Position'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • account_taxes(self, user_type='sale', deductible=False)
  • create(self, values)
    @api.model
  • unlink(self)

New fields (0)

No new fields.

Public methods (1)
  • account_tax_group(self)

New fields (1)
  • fiscal_dummy_id Many2one → l10n_br_fiscal.document
    comodel_name='l10n_br_fiscal.document' required=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/10.0/l10n_br_account
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSRenato Lima, GitHub, oca-travis, Renato
WEBSITE
WEBSITEhttp://odoobrasil.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:54
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-fiscal-rule:
    - account_fiscal_position_rule
OCA/l10n-brazil:
    - l10n_br_generic
    - l10n_br_base
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - report
    - analytic
    - web_planner
    - account_cancel
    - l10n_generic_coa
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES num2words
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (43)
XML IDNameModelTypeStatus
l10n_br_account_cce_form l10n_br_account.invoice.cce.form l10n_br_account.invoice.cce form New
l10n_br_account_cce_tree l10n_br_account.invoice.cce.tree l10n_br_account.invoice.cce tree New
l10n_br_account_company_form l10n_br_account.company res.company page Inherits base.view_company_form
l10n_br_account_document_event_form l10n_br_account.document_event.form l10n_br_account.document_event form New
l10n_br_account_document_event_tree l10n_br_account.document_event.tree l10n_br_account.document_event tree New
l10n_br_account_fiscal_category_search l10n_br_account.fiscal.category.search l10n_br_account.fiscal.category search New
l10n_br_account_invoice_cancel_form l10n_br_account.invoice.cancel.form l10n_br_account.invoice.cancel form New
l10n_br_account_invoice_cancel_tree l10n_br_account.invoice.cancel.tree l10n_br_account.invoice.cancel tree New
l10n_br_account_invoice_invalid_number_form l10n_br_account.invoice.invalid.number.form l10n_br_account.invoice.invalid.number form New
l10n_br_account_invoice_invalid_number_tree l10n_br_account.invoice.invalid.number.tree l10n_br_account.invoice.invalid.number tree New
l10n_br_account_invoice_tree l10n_br_account.invoice.tree account.invoice field Inherits account.invoice_tree
l10n_br_account_journal_form l10n_br_account.journal.form account.journal notebook Inherits account.view_account_journal_form
l10n_br_account_move_line_filter l10n_br_account.move.line.filter account.move.line field Inherits account.view_account_move_line_filter
l10n_br_account_position_form l10n_br_account.fiscal.position.form account.fiscal.position field Inherits account.view_account_position_form
l10n_br_account_position_tree l10n_br_account.fiscal.position.tree account.fiscal.position field Inherits account.view_account_position_tree
l10n_br_account_product_template_form_view l10n_br_account_product_template_form_view product.template field Inherits product.product_template_form_view
l10n_br_account_view_account_invoice_report_search l10n_br_account.invoice.report.search account.invoice.report filter Inherits account.view_account_invoice_report_search
l10n_br_account_view_partner_form l10n_br_account.partner.form res.partner field Inherits l10n_br_base.view_l10n_br_base_partner_form
view_account_config_settings_l10n_br_account account.config.settings.l10n_br_account account.config.settings data Inherits account.view_account_config_settings
view_l10n_br_account_cnae_form l10n_br_account.cnae.form l10n_br_account.cnae form New
view_l10n_br_account_cnae_structure l10n_br_account.cnae.structure l10n_br_account.cnae tree New
view_l10n_br_account_cnae_tree l10n_br_account.cnae.tree l10n_br_account.cnae tree New
view_l10n_br_account_document_serie_form l10n_br_account.document.serie l10n_br_account.document.serie form New
view_l10n_br_account_document_serie_tree l10n_br_account.document.serie l10n_br_account.document.serie tree New
view_l10n_br_account_fiscal_category_form l10n_br_account.fiscal.category.form l10n_br_account.fiscal.category form New
view_l10n_br_account_fiscal_category_tree l10n_br_account.fiscal.category.tree l10n_br_account.fiscal.category tree New
view_l10n_br_account_fiscal_document_form l10n_br_account.fiscal.document l10n_br_account.fiscal.document form New
view_l10n_br_account_fiscal_document_tree l10n_br_account.fiscal.document l10n_br_account.fiscal.document tree New
view_l10n_br_account_fiscal_position_rule_form l10n_br_account.fiscal.position.rule.form account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_form
view_l10n_br_account_fiscal_position_rule_template_form l10n_br_account.fiscal.position.rule.template.form account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_form
view_l10n_br_account_fiscal_position_rule_template_tree l10n_br_account.fiscal.position.rule.template.tree account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_tree
view_l10n_br_account_fiscal_position_rule_tree l10n_br_account.fiscal.position.rule.tree account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_tree
view_l10n_br_account_invoice_form l10n_br_account.invoice.form account.invoice page Inherits account.invoice_form
view_l10n_br_account_partner_filter l10n_br_account.partner.filter account.invoice field Inherits account.view_account_invoice_filter
view_l10n_br_account_partner_fiscal_type_form l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type form New
view_l10n_br_account_partner_fiscal_type_tree l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type tree New
view_l10n_br_account_partner_special_fiscal_type_form l10n_br_account.partner.special.fiscal.type l10n_br_account.partner.special.fiscal.type form New
view_l10n_br_account_partner_special_fiscal_type_tree l10n_br_account.partner.special.fiscal.type l10n_br_account.partner.special.fiscal.type tree New
view_l10n_br_account_service_type_form l10n_br_account.service.type.form l10n_br_account.service.type form New
view_l10n_br_account_service_type_structure l10n_br_account.service.type.structure l10n_br_account.service.type tree New
view_l10n_br_account_service_type_tree l10n_br_account.service.type.tree l10n_br_account.service.type tree New
view_l10n_br_sale_fiscal_position_rule_search l10n_br_sale.fiscal.position.rule.search account.fiscal.position.rule xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_search
view_l10n_br_sale_fiscal_position_rule_template_search l10n_br_sale.fiscal.position.rule.template.search account.fiscal.position.rule.template xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_search
Models touched (29)

New fields (2)
  • ibpt_update_days Integer
    related='company_id.ibpt_update_days' string='Quantidade de dias para Atualizar'
  • ipbt_token Char
    related='company_id.ipbt_token' string='IPBT Token'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • partner_fiscal_type_id Many2many → l10n_br_account.partner.fiscal.type
    column1='afp_id' column2='partner_fiscal_type_id' comodel_name='l10n_br_account.partner.fiscal.type' relation='afp_rule_l10n_br_account_partner_fiscal_type' string='Tipo Fiscal do Parceiro'
  • partner_special_fiscal_type_id Many2many → l10n_br_account.partner.special.fiscal.type
    column1='afp_id' column2='partner_special_fiscal_type_id' comodel_name='l10n_br_account.partner.special.fiscal.type' relation='afp_rule_l10n_br_account_partner_special_fiscal_type' string='Regime especial'
Public methods (1)
  • product_fiscal_category_map(self, product_id, fiscal_category_id, to_state_id=None)

New fields (2)
  • partner_fiscal_type_id Many2many → l10n_br_account.partner.fiscal.type
    column1='afp_template' column2='partner_fiscal_type' comodel_name='l10n_br_account.partner.fiscal.type' relation='afp_rule_template_l10n_br_account_partner_fiscal_type' string='Tipo Fiscal do Parceiro'
  • partner_special_fiscal_type_id Many2many → l10n_br_account.partner.special.fiscal.type
    column1='afp_id' column2='partner_special_fiscal_type_id' comodel_name='l10n_br_account.partner.special.fiscal.type' relation='afp_rule_template_l10n_br_account_partner_special_fiscal_type' string='Regime especial'
Public methods (0)

No public methods.

New fields (1)
  • tax_src_id Many2one → account.tax
    comodel_name='account.tax' required=False string='Tax on Product'
Public methods (0)

No public methods.

New fields (1)
  • tax_src_id Many2one → account.tax.template
    comodel_name='account.tax.template' required=False string='Tax on Product'
Public methods (0)

No public methods.

New fields (14)
  • account_document_event_ids One2many → l10n_br_account.document_event
    comodel_name='l10n_br_account.document_event' inverse_name='document_event_ids' string='Eventos'
  • cnpj_cpf Char
    related='partner_id.cnpj_cpf' string='CNPJ/CPF'
  • document_serie_id Many2one → l10n_br_account.document.serie
    comodel_name='l10n_br_account.document.serie' domain="[('fiscal_document_id', '=', fiscal_document_id),('company_id', '=', company_id)]" readonly=True states={'draft': [('readonly', False)]} string='Série'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    comodel_name='l10n_br_account.fiscal.category' readonly=True states={'draft': [('readonly', False)]} string='Categoria Fiscal'
  • fiscal_comment Text
    string='Observação Fiscal'
  • fiscal_document_code Char
    readonly=True related='fiscal_document_id.code' store=True string='Document Code'
  • fiscal_document_electronic Boolean
    readonly=True related='fiscal_document_id.electronic' store=True string='Electronic'
  • fiscal_document_id Many2one → l10n_br_account.fiscal.document
    comodel_name='l10n_br_account.fiscal.document' readonly=True states={'draft': [('readonly', False)]} string='Documento'
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' oldname='fiscal_position' readonly=True states={'draft': [('readonly', False)]} string='Fiscal Position'
  • ie Char
    related='partner_id.inscr_est' string='Inscrição Estadual'
  • legal_name Char
    related='partner_id.legal_name' string='Razão Social'
  • move_line_receivable_id Many2many → account.move.line
    comodel_name='account.move.line' compute='_compute_receivables' string='Receivables'
  • revenue_expense Boolean
    readonly=True related='journal_id.revenue_expense' store=True string='Gera Financeiro'
  • state Selection
    selection_add=[('sefaz_export', 'Enviar para Receita'), ('sefaz_exception', 'Erro de autorização da Receita'), ('sefaz_cancelled', 'Cancelado no Sefaz'), ('sefaz_denied', 'Denegada no Sefaz')]
Public methods (4)
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
    finalize_invoice_move_lines(move_lines) -> move_lines Hook method to be overridden in additional modules to verify and possibly alter the move lines to be created by an invoice, for special cases. :param move_lines: list of dictionaries with the account.move.lines (as for create()) :return: the (possibly updated) final move_lines to create for this invoice
  • invoice_line_move_line_get(self)
    @api.model
  • name_get(self)
    @api.multi
  • open_fiscal_document(self)
    @api.multi

New fields (3)
  • amount_tax_discount Float
    compute='_compute_price' digits=dp.get_precision('Account') oldname='price_tax_discount' readonly=True store=True string='Amount Tax discount'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    comodel_name='l10n_br_account.fiscal.category' string='Categoria Fiscal'
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' domain="[('fiscal_category_id', '=', fiscal_category_id)]" string='Posição Fiscal'
Public methods (0)

No public methods.

New fields (8)
  • document_serie_id Many2one → l10n_br_account.document.serie
    readonly=True string='Série' args: 'l10n_br_account.document.serie'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    readonly=True args: 'l10n_br_account.fiscal.category', 'Fiscal Category'
  • fiscal_document_electronic Boolean
    readonly=True string='Electronic'
  • l10n_br_city_id Many2one → l10n_br_base.city
    string='Municipio' args: 'l10n_br_base.city'
  • number Char
    readonly=True size=32 string='Number'
  • revenue_expense Char
    readonly=True size=32 string='Gera Financeiro'
  • state Selection
    selection_add=[('sefaz_export', 'Enviar para Receita'), ('sefaz_exception', 'Erro de autorização da Receita'), ('sefaz_cancelled', 'Cancelado no Sefaz'), ('sefaz_denied', 'Denegada no Sefaz')]
  • state_id Many2one → res.country.state
    required=True string='Estado' args: 'res.country.state'
Public methods (0)

No public methods.

New fields (1)
  • revenue_expense Boolean
    string='Gera Financeiro'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • amount_mva Float
    default=0.0 digits=dp.get_precision('Account') help='Um percentual decimal em % entre 0-1.' required=True string='MVA Percent'
  • amount_type Selection
    add_selection=[('quantity', 'Quantity')]
  • base_reduction Float
    default=0.0 digits=dp.get_precision('Account') help='Um percentual decimal em % entre 0-1.' required=True string='Redution'
Public methods (1)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, fiscal_position=False, insurance_value=0.0, freight_value=0.0, other_costs_value=0.0, base_tax=0.0)
    @api.multi
    Returns all information required to apply taxes (in self + their children in case of a tax goup). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'total_tax_discount': 0.0 # Total tax out of price 'taxes': [{ # One dict for each tax in self # and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }] }

New fields (3)
  • amount_mva Float
    default=0.0 digits=dp.get_precision('Account') help='Um percentual decimal em % entre 0-1.' required=True string='MVA Percent'
  • amount_type Selection
    add_selection=[('quantity', 'Quantity')]
  • base_reduction Float
    default=0.0 digits=dp.get_precision('Account') help='Um percentual decimal em % entre 0-1.' required=True string='Redution'
Public methods (0)

No public methods.

New fields (6)
  • child_ids One2many → l10n_br_account.cnae
    comodel_name='l10n_br_account.cnae' inverse_name='parent_id' string='CNAEs Filhos'
  • code Char
    required=True size=16 string='Código'
  • internal_type Selection
    default='normal' required=True args: [('view', 'Visualização'), ('normal', 'Normal')], 'Tipo Interno'
  • name Char
    required=True size=64 string='Descrição'
  • parent_id Many2one → l10n_br_account.cnae
    comodel_name='l10n_br_account.cnae' string='CNAE Pai'
  • version Char
    required=True size=16 string='Versão'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (7)
  • active Boolean
    string='Ativo'
  • code Char
    required=True size=3 string='Código'
  • company_id Many2one → res.company
    comodel_name='res.company' required=True string='Empresa'
  • fiscal_document_id Many2one → l10n_br_account.fiscal.document
    comodel_name='l10n_br_account.fiscal.document' required=True string='Documento Fiscal'
  • fiscal_type Selection
    default=PRODUCT_FISCAL_TYPE_DEFAULT selection=PRODUCT_FISCAL_TYPE string='Tipo Fiscal'
  • internal_sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' string='Sequência Interna'
  • name Char
    required=True string='Descrição'
Public methods (1)
  • create(self, vals)
    @api.model
    Overwrite method to create a new ir.sequence if this field is null

New fields (16)
  • cancel_document_event_id Many2one → l10n_br_account.invoice.cancel
    comodel_name='l10n_br_account.invoice.cancel' string='Cancelamento'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True states={'draft': [('readonly', False)]} string='Empresa'
  • create_date Datetime
    readonly=True string='Data Criação'
  • display_name Char
    compute='_compute_display_name' string='Nome'
  • document_event_ids Many2one → account.invoice
    comodel_name='account.invoice' string='Documentos'
  • end_date Datetime
    readonly=True string='Data Finalização'
  • file_returned Char
    readonly=True string='Retorno'
  • file_sent Char
    readonly=True string='Envio'
  • invalid_number_document_event_id Many2one → l10n_br_account.invoice.invalid.number
    comodel_name='l10n_br_account.invoice.invalid.number' string='Inutilização'
  • message Char
    readonly=True string='Mensagem'
  • origin Char
    help='Referência ao documento que gerou o evento.' readonly=True size=64 states={'draft': [('readonly', False)]} string='Documento de Origem'
  • response Char
    readonly=True size=64 string='Descrição'
  • state Selection
    default='draft' index=True readonly=True selection=[('draft', 'Rascunho'), ('send', 'Enviado'), ('wait', 'Aguardando Retorno'), ('done', 'Recebido Retorno')] string='Status'
  • status Char
    readonly=True string='Código'
  • type Selection
    selection=[('-1', 'Exception'), ('0', 'Envio Lote'), ('1', 'Consulta Recibo'), ('2', 'Cancelamento'), ('3', 'Inutilização'), ('4', 'Consulta NFE'), ('5', 'Consulta Situação'), ('6', 'Consulta Cadastro'), ('7', 'DPEC Recepção'), ('8', 'DPEC Consulta'), ('9', 'Recepção Evento'), ('10', 'Download'), ('11', 'Consulta Destinadas'), ('12', 'Distribuição DFe'), ('13', 'Manifestação')] string='Serviço'
  • write_date Datetime
    readonly=True string='Data Alteração'
Public methods (1)
  • set_done(self)
    @api.multi

New fields (11)
  • code Char
    required=True size=254 string='Código'
  • fiscal_position_ids One2many → account.fiscal.position
    comodel_name='account.fiscal.position' inverse_name='fiscal_category_id' string='Posições Fiscais'
  • fiscal_type Selection
    default=PRODUCT_FISCAL_TYPE_DEFAULT selection=PRODUCT_FISCAL_TYPE string='Tipo Fiscal'
  • journal_type Selection
    default='sale' required=True selection=[('sale', 'Saída'), ('sale_refund', 'Devolução de Saída'), ('purchase', 'Entrada'), ('purchase_refund', 'Devolução de Entrada')] size=32 string='Tipo do Diário'
  • name Char
    help='Natureza da operação informada no XML' size=254 string='Descrição'
  • note Text
    string='Observações'
  • property_journal Many2one → account.journal
    comodel_name='account.journal' company_dependent=True help='Diário utilizado para esta categoria de operação fiscal' string='Diário Contábil'
  • refund_fiscal_category_id Many2one → l10n_br_account.fiscal.category
    comodel_name='l10n_br_account.fiscal.category' domain="[('type', '!=', type), ('fiscal_type', '=', fiscal_type),('journal_type', 'like', journal_type),('state', '=', 'approved')]" string='Categoria Fiscal de Devolução'
  • reverse_fiscal_category_id Many2one → l10n_br_account.fiscal.category
    comodel_name='l10n_br_account.fiscal.category' domain="[('type', '!=', type), ('fiscal_type', '=', fiscal_type),('state', '=', 'approved')]" string='Categoria Fiscal Inversa'
  • state Selection
    default='draft' index=True readonly=True selection=[('draft', 'Rascunho'), ('review', 'Revisão'), ('approved', 'Aprovada'), ('unapproved', 'Não Aprovada')] string='Status' track_visibility='onchange'
  • type Selection
    default='output' selection=TYPE string='Tipo'
Public methods (2)
  • action_unapproved_draft(self)
    @api.multi
    Set state to draft and create a new workflow instance
  • onchange_journal_type(self, journal_type)
    @api.multi
    Clear property_journal

New fields (3)
  • code Char
    required=True size=8 string='Codigo'
  • electronic Boolean
    string='Eletrônico'
  • name Char
    size=64 string='Descrição'
Public methods (0)

No public methods.

New fields (5)
  • cancel_document_event_ids One2many → l10n_br_account.document_event
    comodel_name='l10n_br_account.document_event' inverse_name='cancel_document_event_id' string='Eventos'
  • display_name Char
    compute='_compute_display_name' string='Nome'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' string='Fatura'
  • justificative Char
    readonly=True required=True size=255 string='Justificativa'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' related='invoice_id.partner_id' string='Cliente'
Public methods (0)

No public methods.

New fields (5)
  • cce_document_event_ids One2many → l10n_br_account.document_event
    comodel_name='l10n_br_account.document_event' inverse_name='document_event_ids' string='Eventos'
  • display_name Char
    compute='_compute_display_name' string='Name'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' string='Fatura'
  • motivo Text
    readonly=True required=True string='Motivo'
  • sequencia Char
    help='Indica a sequência da carta de correcão' string='Sequência'
Public methods (0)

No public methods.

New fields (8)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Empresa'
  • document_serie_id Many2one → l10n_br_account.document.serie
    comodel_name='l10n_br_account.document.serie' domain="[('fiscal_document_id', '=', fiscal_document_id), ('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Série'
  • fiscal_document_id Many2one → l10n_br_account.fiscal.document
    comodel_name='l10n_br_account.fiscal.document' readonly=True required=True states={'draft': [('readonly', False)]} string='Documento Fiscal'
  • invalid_number_document_event_ids One2many → l10n_br_account.document_event
    comodel_name='l10n_br_account.document_event' inverse_name='invalid_number_document_event_id' states={'done': [('readonly', True)]} string='Eventos'
  • justificative Char
    readonly=True required=True size=255 states={'draft': [('readonly', False)]} string='Justificativa'
  • number_end Integer
    readonly=True required=True states={'draft': [('readonly', False)]} string='Número Final'
  • number_start Integer
    readonly=True required=True states={'draft': [('readonly', False)]} string='Número Inicial'
  • state Selection
    default='draft' required=True selection=[('draft', 'Rascunho'), ('cancel', 'Cancelado'), ('done', 'Concluído')] string='Status'
Public methods (3)
  • action_draft_done(self)
  • name_get(self)
    @api.multi
  • unlink(self)
    @api.multi

New fields (6)
  • code Char
    required=True size=16 string='Código'
  • default Boolean
    default=True string='Tipo Fiscal Padrão'
  • icms Boolean
    string='Recupera ICMS'
  • ipi Boolean
    string='Recupera IPI'
  • is_company Boolean
    string='Pessoa Jurídica?'
  • name Char
    size=64 string='Descrição'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    size=20 string='Nome'
Public methods (0)

No public methods.

New fields (4)
  • fiscal_category_destination_id Many2one → l10n_br_account.fiscal.category
    comodel_name='l10n_br_account.fiscal.category' string='Categoria de Destino'
  • fiscal_category_source_id Many2one → l10n_br_account.fiscal.category
    comodel_name='l10n_br_account.fiscal.category' string='Categoria de Origem'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' ondelete='cascade' string='Produto'
  • to_state_id Many2one → res.country.state
    comodel_name='res.country.state' string='Estado Destino'
Public methods (0)

No public methods.

New fields (5)
  • child_ids One2many → l10n_br_account.service.type
    comodel_name='l10n_br_account.service.type' inverse_name='parent_id' string='Tipo de Serviço Filhos'
  • code Char
    required=True size=16 string='Código'
  • internal_type Selection
    default='normal' required=True selection=[('view', 'Visualização'), ('normal', 'Normal')] string='Tipo Interno'
  • name Char
    required=True size=256 string='Descrição'
  • parent_id Many2one → l10n_br_account.service.type
    comodel_name='l10n_br_account.service.type' string='Tipo de Serviço Pai'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (3)
  • fiscal_category_default_ids One2many → l10n_br_account.product.category
    comodel_name='l10n_br_account.product.category' inverse_name='product_tmpl_id' string='Categoria de Operação Fiscal Padrões'
  • fiscal_type Selection
    default=PRODUCT_FISCAL_TYPE_DEFAULT selection=PRODUCT_FISCAL_TYPE string='Tipo Fiscal'
  • service_type_id Many2one → l10n_br_account.service.type
    comodel_name='l10n_br_account.service.type' string='Tipo de Serviço'
Public methods (0)

No public methods.

New fields (11)
  • annual_revenue Float
    default=0.0 digits=dp.get_precision('Account') help='Faturamento Bruto dos últimos 12 meses' required=True string='Faturamento Anual'
  • cnae_main_id Many2one → l10n_br_account.cnae
    comodel_name='l10n_br_account.cnae' string='CNAE Primário'
  • cnae_secondary_ids Many2many → l10n_br_account.cnae
    column1='company_id' column2='cnae_id' comodel_name='l10n_br_account.cnae' relation='res_company_l10n_br_account_cnae' string='CNAE Segundários'
  • document_serie_service_id Many2one → l10n_br_account.document.serie
    comodel_name='l10n_br_account.document.serie' domain="[('company_id', '=', active_id), ('active', '=', True),('fiscal_type', '=', 'service')]" string='Série Fiscais para Serviço'
  • ecnpj_a1_file Binary
    string='Arquivo e-CNPJ A1'
  • ecnpj_a1_password Char
    size=64 string='Senha e-CNPJ A1'
  • fiscal_rule_parent_id Many2one → account.fiscal.position.rule
    comodel_name='account.fiscal.position.rule' string='Conjunto de Regras Fiscais'
  • fiscal_type Selection
    default=COMPANY_FISCAL_TYPE_DEFAULT required=True selection=COMPANY_FISCAL_TYPE string='Regime Tributário'
  • ibpt_update_days Integer
    string='Quantidade de dias para Atualizar'
  • ipbt_token Char
    string='IPBT Token'
  • service_invoice_id Many2one → l10n_br_account.fiscal.document
    comodel_name='l10n_br_account.fiscal.document' string='Documento Fiscal'
Public methods (0)

No public methods.

New fields (2)
  • partner_fiscal_type_id Many2one → l10n_br_account.partner.fiscal.type
    comodel_name='l10n_br_account.partner.fiscal.type' default=_default_partner_fiscal_type_id domain="[('is_company', '=', is_company)]" string='Tipo Fiscal do Parceiro'
  • partner_special_fiscal_type_id Many2many → l10n_br_account.partner.special.fiscal.type
    comodel_name='l10n_br_account.partner.special.fiscal.type' relation='res_partner_l10n_br_special_type' string='Regime especial'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_create(self)
    @api.multi
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/9.0/l10n_br_account
VERSION
VERSION 2.0.0
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSrenato
WEBSITE
WEBSITEhttp://odoobrasil.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-fiscal-rule:
    - account_fiscal_position_rule
OCA/l10n-brazil:
    - l10n_br_base
OCA/server-tools:
    - web_context_tunnel
odoo/odoo:
    - l10n_br
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - report
    - analytic
    - web_tip
    - web_planner
    - account_cancel
    - l10n_generic_coa
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES num2words
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (45)
XML IDNameModelTypeStatus
l10n_br_account_cce_form l10n_br_account.invoice.cce.form l10n_br_account.invoice.cce form New
l10n_br_account_cce_tree l10n_br_account.invoice.cce.tree l10n_br_account.invoice.cce tree New
l10n_br_account_document_event_form l10n_br_account.document_event.form l10n_br_account.document_event form New
l10n_br_account_document_event_tree l10n_br_account.document_event.tree l10n_br_account.document_event tree New
l10n_br_account_fiscal_category_search l10n_br_account.fiscal.category.search l10n_br_account.fiscal.category search New
l10n_br_account_invoice_cancel_form l10n_br_account.invoice.cancel.form l10n_br_account.invoice.cancel form New
l10n_br_account_invoice_cancel_tree l10n_br_account.invoice.cancel.tree l10n_br_account.invoice.cancel tree New
l10n_br_account_invoice_invalid_number_form l10n_br_account.invoice.invalid.number.form l10n_br_account.invoice.invalid.number form New
l10n_br_account_invoice_invalid_number_tree l10n_br_account.invoice.invalid.number.tree l10n_br_account.invoice.invalid.number tree New
l10n_br_account_invoice_supplier_form l10n_br_account.invoice.supplier.form account.invoice button Inherits account.invoice_supplier_form
l10n_br_account_invoice_tree l10n_br_account.invoice.tree account.invoice field Inherits account.invoice_tree
l10n_br_account_position_form l10n_br_account.fiscal.position.form account.fiscal.position form Inherits account.view_account_position_form
l10n_br_account_position_template_form l10n_br_account.fiscal.position.template.form account.fiscal.position.template form Inherits account.view_account_position_template_form
l10n_br_account_position_tree l10n_br_account.fiscal.position.tree account.fiscal.position field Inherits account.view_account_position_tree
l10n_br_account_product_template_form_view l10n_br_account_product_template_form_view product.template field Inherits product.product_template_form_view
l10n_br_account_view_account_invoice_report_search l10n_br_account.invoice.report.search account.invoice.report filter Inherits account.view_account_invoice_report_search
l10n_br_account_view_partner_form l10n_br_account.partner.form res.partner field Inherits l10n_br_base.view_l10n_br_base_partner_form
view_account_config_settings_l10n_br_account account.config.settings.l10n_br_account account.config.settings data Inherits account.view_account_config_settings
view_l10n_br_account_cnae_form l10n_br_account.cnae.form l10n_br_account.cnae form New
view_l10n_br_account_cnae_structure l10n_br_account.cnae.structure l10n_br_account.cnae tree New
view_l10n_br_account_cnae_tree l10n_br_account.cnae.tree l10n_br_account.cnae tree New
view_l10n_br_account_company_form l10n_br_account.company res.company notebook Inherits base.view_company_form
view_l10n_br_account_document_serie_form l10n_br_account.document.serie l10n_br_account.document.serie form New
view_l10n_br_account_document_serie_tree l10n_br_account.document.serie l10n_br_account.document.serie tree New
view_l10n_br_account_fiscal_category_form l10n_br_account.fiscal.category.form l10n_br_account.fiscal.category form New
view_l10n_br_account_fiscal_category_tree l10n_br_account.fiscal.category.tree l10n_br_account.fiscal.category tree New
view_l10n_br_account_fiscal_document_form l10n_br_account.fiscal.document l10n_br_account.fiscal.document form New
view_l10n_br_account_fiscal_document_tree l10n_br_account.fiscal.document l10n_br_account.fiscal.document tree New
view_l10n_br_account_fiscal_position_rule_form l10n_br_account.fiscal.position.rule.form account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_form
view_l10n_br_account_fiscal_position_rule_template_form l10n_br_account.fiscal.position.rule.template.form account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_form
view_l10n_br_account_fiscal_position_rule_template_tree l10n_br_account.fiscal.position.rule.template.tree account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_tree
view_l10n_br_account_fiscal_position_rule_tree l10n_br_account.fiscal.position.rule.tree account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_tree
view_l10n_br_account_invoice_form l10n_br_account.invoice.form account.invoice button Inherits account.invoice_form
view_l10n_br_account_journal_form l10n_br_account.journal.form account.journal notebook Inherits account.view_account_journal_form
view_l10n_br_account_partner_filter l10n_br_account.partner.filter account.invoice field Inherits account.view_account_invoice_filter
view_l10n_br_account_partner_fiscal_type_form l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type form New
view_l10n_br_account_partner_fiscal_type_tree l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type tree New
view_l10n_br_account_partner_special_fiscal_type_form l10n_br_account.partner.special.fiscal.type l10n_br_account.partner.special.fiscal.type form New
view_l10n_br_account_partner_special_fiscal_type_tree l10n_br_account.partner.special.fiscal.type l10n_br_account.partner.special.fiscal.type tree New
view_l10n_br_account_position_template_form l10n_br_account.move.line.form account.move.line field Inherits account.view_account_move_line_filter
view_l10n_br_account_service_type_form l10n_br_account.service.type.form l10n_br_account.service.type form New
view_l10n_br_account_service_type_structure l10n_br_account.service.type.structure l10n_br_account.service.type tree New
view_l10n_br_account_service_type_tree l10n_br_account.service.type.tree l10n_br_account.service.type tree New
view_l10n_br_sale_fiscal_position_rule_search l10n_br_sale.fiscal.position.rule.search account.fiscal.position.rule xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_search
view_l10n_br_sale_fiscal_position_rule_template_search l10n_br_sale.fiscal.position.rule.template.search account.fiscal.position.rule.template xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_search
Models touched (32)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • ibpt_update_days Integer
    related='company_id.ibpt_update_days' string='Quantidade de dias para Atualizar'
  • ipbt_token Char
    related='company_id.ipbt_token' string='IPBT Token'
Public methods (0)

No public methods.

New fields (8)
  • asset_operation Boolean
    help='Caso seja marcada essa opção, será incluido o IPI na base de\n calculo do ICMS.' args: 'Operação de Aquisição de Ativo'
  • fiscal_category_fiscal_type Selection
    readonly=True related='fiscal_category_id.fiscal_type' store=True string='Fiscal Type' args: PRODUCT_FISCAL_TYPE
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal'
  • inv_copy_note Boolean
    args: 'Copiar Observação na Nota Fiscal'
  • name Char
    required=True size=128 args: 'Fiscal Position'
  • state Selection
    default='draft' readonly=True select=True track_visibility='onchange' args: [('draft', 'Rascunho'), ('review', 'Revisão'), ('approved', 'Aprovada'), ('unapproved', 'Não Aprovada')], 'Status'
  • type Selection
    args: TYPE, 'Tipo'
  • type_tax_use Selection
    args: [('sale', 'Sale'), ('purchase', 'Purchase'), ('all', 'All')], 'Tax Application'
Public methods (4)
  • map_tax(self, cr, uid, fposition_id, taxes, context=None)
    @api.v7
  • map_tax(self, taxes)
    @api.v8
  • onchange_fiscal_category_id(self, fiscal_category_id=None)
    @api.multi
  • onchange_type(self, type)
    @api.multi

New fields (8)
  • child_ids One2many → account.fiscal.position.rule
    args: 'account.fiscal.position.rule', 'parent_id', 'Regras Filhas'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria'
  • fiscal_type Selection
    default=COMPANY_FISCAL_TYPE_DEFAULT required=True args: COMPANY_FISCAL_TYPE, 'Regime Tributário'
  • parent_id Many2one → account.fiscal.position.rule
    args: 'account.fiscal.position.rule', 'Regra Pai'
  • partner_fiscal_type_id Many2many → l10n_br_account.partner.fiscal.type
    column1='afp_id' column2='partner_fiscal_type_id' comodel_name='l10n_br_account.partner.fiscal.type' relation='afp_rule_l10n_br_account_partner_fiscal_type' string='Tipo Fiscal do Parceiro'
  • partner_special_fiscal_type_id Many2many → l10n_br_account.partner.special.fiscal.type
    column1='afp_id' column2='partner_special_fiscal_type_id' comodel_name='l10n_br_account.partner.special.fiscal.type' relation='afp_rule_l10n_br_account_partner_special_fiscal_type' string='Regime especial'
  • revenue_end Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faixa inicial de faturamento bruto' args: 'Faturamento Final'
  • revenue_start Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faixa inicial de faturamento bruto' args: 'Faturamento Inicial'
Public methods (1)
  • product_fiscal_category_map(self, product_id, fiscal_category_id, to_state_id=None)

New fields (8)
  • child_ids One2many → account.fiscal.position.rule.template
    args: 'account.fiscal.position.rule.template', 'parent_id', 'Regras Filhas'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria'
  • fiscal_type Selection
    default=COMPANY_FISCAL_TYPE_DEFAULT required=True args: COMPANY_FISCAL_TYPE, 'Regime Tributário'
  • parent_id Many2one → account.fiscal.position.rule.template
    args: 'account.fiscal.position.rule.template', 'Regra Pai'
  • partner_fiscal_type_id Many2many → l10n_br_account.partner.fiscal.type
    column1='afp_template' column2='partner_fiscal_type' comodel_name='l10n_br_account.partner.fiscal.type' relation='afp_rule_template_l10n_br_account_partner_fiscal_type' string='Tipo Fiscal do Parceiro'
  • partner_special_fiscal_type_id Many2many → l10n_br_account.partner.special.fiscal.type
    column1='afp_id' column2='partner_special_fiscal_type_id' comodel_name='l10n_br_account.partner.special.fiscal.type' relation='afp_rule_template_l10n_br_account_partner_special_fiscal_type' string='Regime especial'
  • revenue_end Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faixa inicial de faturamento bruto' args: 'Faturamento Final'
  • revenue_start Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faixa inicial de faturamento bruto' args: 'Faturamento Inicial'
Public methods (0)

No public methods.

New fields (4)
  • tax_code_dest_id Many2one → account.tax.code
    args: 'account.tax.code', 'Replacement Tax Code'
  • tax_code_src_id Many2one → account.tax.code
    args: 'account.tax.code', 'Código Taxa Origem'
  • tax_src_domain Char
    related='tax_src_id.domain'
  • tax_src_id Many2one → account.tax
    required=False string='Tax Source' args: 'account.tax'
Public methods (1)
  • onchange_tax_src_id(self)
    @api.onchange('tax_src_id', 'tax_code_src_id')

New fields (4)
  • tax_code_dest_id Many2one → account.tax.code.template
    string='Replacement Tax Code' args: 'account.tax.code.template'
  • tax_code_src_id Many2one → account.tax.code.template
    string='Código Taxa Origem' args: 'account.tax.code.template'
  • tax_src_domain Char
    related='tax_src_id.domain' string='Tax Domain'
  • tax_src_id Many2one → account.tax.template
    required=False string='Tax Source' args: 'account.tax.template'
Public methods (1)
  • onchange_tax_src_id(self)
    @api.onchange('tax_src_id', 'tax_code_src_id')

New fields (8)
  • asset_operation Boolean
    help='Caso seja marcada essa opção, será incluido o IPI na base de\n calculo do ICMS.' args: 'Operação de Aquisição de Ativo'
  • fiscal_category_fiscal_type Selection
    readonly=True related='fiscal_category_id.fiscal_type' store=True string='Fiscal Type' args: PRODUCT_FISCAL_TYPE
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal'
  • inv_copy_note Boolean
    args: 'Copiar Observação na Nota Fiscal'
  • name Char
    required=True size=128 args: 'Fiscal Position'
  • state Selection
    default='draft' readonly=True select=True track_visibility='onchange' args: [('draft', 'Rascunho'), ('review', 'Revisão'), ('approved', 'Aprovada'), ('unapproved', 'Não Aprovada')], 'Status'
  • type Selection
    args: TYPE, 'Tipo'
  • type_tax_use Selection
    args: [('sale', 'Sale'), ('purchase', 'Purchase'), ('all', 'All')], 'Tax Application'
Public methods (3)
  • generate_fiscal_position(self, cr, uid, chart_temp_id, tax_template_ref, acc_template_ref, company_id, context=None)
    This method generate Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param chart_temp_id: Chart Template Id. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: selected from wizard.multi.charts.accounts. :returns: True
  • onchange_fiscal_category_id(self, fiscal_category_id=None)
    @api.multi
  • onchange_type(self, type)
    @api.multi

New fields (14)
  • account_document_event_ids One2many → l10n_br_account.document_event
    args: 'l10n_br_account.document_event', 'document_event_ids', 'Eventos'
  • cnpj_cpf Char
    related='partner_id.cnpj_cpf' string='CNPJ/CPF'
  • document_serie_id Many2one → l10n_br_account.document.serie
    domain="[('fiscal_document_id', '=', fiscal_document_id), ('company_id','=',company_id)]" readonly=True states={'draft': [('readonly', False)]} string='Série' args: 'l10n_br_account.document.serie'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    readonly=True states={'draft': [('readonly', False)]} args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal'
  • fiscal_comment Text
    args: 'Observação Fiscal'
  • fiscal_document_code Char
    readonly=True related='fiscal_document_id.code' store=True string='Document Code'
  • fiscal_document_electronic Boolean
    readonly=True related='fiscal_document_id.electronic' store=True string='Electronic' type='boolean'
  • fiscal_document_id Many2one → l10n_br_account.fiscal.document
    readonly=True states={'draft': [('readonly', False)]} string='Documento' args: 'l10n_br_account.fiscal.document'
  • fiscal_position Many2one → account.fiscal.position
    readonly=True states={'draft': [('readonly', False)]} args: 'account.fiscal.position', 'Fiscal Position'
  • ie Char
    related='partner_id.inscr_est' string='Inscrição Estadual'
  • legal_name Char
    related='partner_id.legal_name' string='Razão Social'
  • move_line_receivable_id Many2many → account.move.line
    compute='_compute_receivables' string='Receivables' args: 'account.move.line'
  • revenue_expense Boolean
    readonly=True related='journal_id.revenue_expense' store=True string='Gera Financeiro'
  • state Selection
    selection_add=[('sefaz_export', 'Enviar para Receita'), ('sefaz_exception', 'Erro de autorização da Receita'), ('sefaz_cancelled', 'Cancelado no Sefaz'), ('sefaz_denied', 'Denegada no Sefaz')]
Public methods (3)
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
    finalize_invoice_move_lines(move_lines) -> move_lines Hook method to be overridden in additional modules to verify and possibly alter the move lines to be created by an invoice, for special cases. :param move_lines: list of dictionaries with the account.move.lines (as for create()) :return: the (possibly updated) final move_lines to create for this invoice
  • name_get(self)
    @api.multi
  • open_fiscal_document(self)
    @api.multi

New fields (4)
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal'
  • fiscal_position Many2one → account.fiscal.position
    args: 'account.fiscal.position', 'Posição Fiscal'
  • invoice_line_tax_id Many2many → account.tax
    domain=[('parent_id', '=', False)] string='Taxes' args: 'account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id'
  • price_tax_discount Float
    compute='_compute_price' digits=dp.get_precision('Account') readonly=True store=True string='Price Tax discount'
Public methods (1)
  • move_line_get_item(self, line)
    @api.model
    Overrrite core to fix invoice total account.move :param line: :return:

New fields (8)
  • document_serie_id Many2one → l10n_br_account.document.serie
    readonly=True string='Série' args: 'l10n_br_account.document.serie'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    readonly=True args: 'l10n_br_account.fiscal.category', 'Fiscal Category'
  • fiscal_document_electronic Boolean
    readonly=True string='Electronic'
  • internal_number Char
    readonly=True size=32 string='Invoice Number'
  • l10n_br_city_id Many2one → l10n_br_base.city
    string='Municipio' args: 'l10n_br_base.city'
  • revenue_expense Char
    readonly=True size=32 string='Gera Financeiro'
  • state Selection
    selection_add=[('sefaz_export', 'Enviar para Receita'), ('sefaz_exception', 'Erro de autorização da Receita'), ('sefaz_cancelled', 'Cancelado no Sefaz'), ('sefaz_denied', 'Denegada no Sefaz')]
  • state_id Many2one → res.country.state
    required=True string='Estado' args: 'res.country.state'
Public methods (0)

No public methods.

New fields (1)
  • revenue_expense Boolean
    args: 'Gera Financeiro'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • compute_all(self, cr, uid, taxes, price_unit, quantity, product=None, partner=None, force_excluded=False, fiscal_position=False, insurance_value=0.0, freight_value=0.0, other_costs_value=0.0)
    @api.v7
    Compute taxes Returns a dict of the form:: { 'total': Total without taxes, 'total_included': Total with taxes, 'total_tax_discount': Total Tax Discounts, 'taxes': <list of taxes, objects>, 'total_base': Total Base by tax, } :Parameters: - 'cr': Database cursor. - 'uid': Current user. - 'taxes': List with all taxes id. - 'price_unit': Product price unit. - 'quantity': Product quantity. - 'force_excluded': Used to say that we don't want to consider the value of field price_include of tax. It's used in encoding by line where you don't matter if you encoded a tax with that boolean to True or False.
  • compute_all(self, price_unit, quantity, product=None, partner=None, force_excluded=False, fiscal_position=False, insurance_value=0.0, freight_value=0.0, other_costs_value=0.0)
    @api.v8

New fields (1)
  • name Char
    size=64 args: 'Name'
Public methods (0)

No public methods.

New fields (6)
  • child_ids One2many → l10n_br_account.cnae
    args: 'l10n_br_account.cnae', 'parent_id', 'CNAEs Filhos'
  • code Char
    required=True size=16 args: 'Código'
  • internal_type Selection
    default='normal' required=True args: [('view', 'Visualização'), ('normal', 'Normal')], 'Tipo Interno'
  • name Char
    required=True size=64 args: 'Descrição'
  • parent_id Many2one → l10n_br_account.cnae
    args: 'l10n_br_account.cnae', 'CNAE Pai'
  • version Char
    required=True size=16 args: 'Versão'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (7)
  • active Boolean
    args: 'Ativo'
  • code Char
    required=True size=3 args: 'Código'
  • company_id Many2one → res.company
    required=True args: 'res.company', 'Empresa'
  • fiscal_document_id Many2one → l10n_br_account.fiscal.document
    required=True args: 'l10n_br_account.fiscal.document', 'Documento Fiscal'
  • fiscal_type Selection
    default=PRODUCT_FISCAL_TYPE_DEFAULT args: PRODUCT_FISCAL_TYPE, 'Tipo Fiscal'
  • internal_sequence_id Many2one → ir.sequence
    args: 'ir.sequence', 'Sequência Interna'
  • name Char
    required=True args: 'Descrição'
Public methods (1)
  • create(self, vals)
    @api.model
    Overwrite method to create a new ir.sequence if this field is null

New fields (16)
  • cancel_document_event_id Many2one → l10n_br_account.invoice.cancel
    args: 'l10n_br_account.invoice.cancel', 'Cancelamento'
  • company_id Many2one → res.company
    readonly=True states={'draft': [('readonly', False)]} args: 'res.company', 'Empresa'
  • create_date Datetime
    readonly=True args: 'Data Criação'
  • display_name Char
    compute='_compute_display_name' string='Nome'
  • document_event_ids Many2one → account.invoice
    args: 'account.invoice', 'Documentos'
  • end_date Datetime
    readonly=True args: 'Data Finalização'
  • file_returned Char
    readonly=True args: 'Retorno'
  • file_sent Char
    readonly=True args: 'Envio'
  • invalid_number_document_event_id Many2one → l10n_br_account.invoice.invalid.number
    args: 'l10n_br_account.invoice.invalid.number', 'Inutilização'
  • message Char
    readonly=True args: 'Mensagem'
  • origin Char
    help='Referência ao documento que gerou o evento.' readonly=True size=64 states={'draft': [('readonly', False)]} args: 'Documento de Origem'
  • response Char
    readonly=True size=64 args: 'Descrição'
  • state Selection
    default='draft' readonly=True select=True args: [('draft', 'Rascunho'), ('send', 'Enviado'), ('wait', 'Aguardando Retorno'), ('done', 'Recebido Retorno')], 'Status'
  • status Char
    readonly=True args: 'Código'
  • type Selection
    args: [('-1', 'Exception'), ('0', 'Envio Lote'), ('1', 'Consulta Recibo'), ('2', 'Cancelamento'), ('3', 'Inutilização'), ('4', 'Consulta NFE'), ('5', 'Consulta Situação'), ('6', 'Consulta Cadastro'), ('7', 'DPEC Recepção'), ('8', 'DPEC Consulta'), ('9', 'Recepção Evento'), ('10', 'Download'), ('11', 'Consulta Destinadas'), ('12', 'Distribuição DFe'), ('13', 'Manifestação')], 'Serviço'
  • write_date Datetime
    readonly=True args: 'Data Alteração'
Public methods (1)
  • set_done(self)
    @api.multi

New fields (11)
  • code Char
    required=True size=254 args: 'Código'
  • fiscal_position_ids One2many → account.fiscal.position
    string='Posições Fiscais' args: 'account.fiscal.position', 'fiscal_category_id'
  • fiscal_type Selection
    default=PRODUCT_FISCAL_TYPE_DEFAULT args: PRODUCT_FISCAL_TYPE, 'Tipo Fiscal'
  • journal_type Selection
    default='sale' required=True size=32 args: [('sale', 'Saída'), ('sale_refund', 'Devolução de Saída'), ('purchase', 'Entrada'), ('purchase_refund', 'Devolução de Entrada')], 'Tipo do Diário'
  • name Char
    help='Natureza da operação informada no XML' size=254 string='Descrição'
  • note Text
    args: 'Observações'
  • property_journal Many2one → account.journal
    company_dependent=True help='Diário utilizado para esta categoria de operação fiscal' string='Diário Contábil' args: 'account.journal'
  • refund_fiscal_category_id Many2one → l10n_br_account.fiscal.category
    domain="[('type', '!=', type), ('fiscal_type', '=', fiscal_type),\n ('journal_type', 'like', journal_type),\n ('state', '=', 'approved')]" args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal de Devolução'
  • reverse_fiscal_category_id Many2one → l10n_br_account.fiscal.category
    domain="[('type', '!=', type), ('fiscal_type', '=', fiscal_type),\n ('state', '=', 'approved')]" args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal Inversa'
  • state Selection
    default='draft' readonly=True select=True track_visibility='onchange' args: [('draft', 'Rascunho'), ('review', 'Revisão'), ('approved', 'Aprovada'), ('unapproved', 'Não Aprovada')], 'Status'
  • type Selection
    default='output' args: TYPE, 'Tipo'
Public methods (2)
  • action_unapproved_draft(self)
    @api.multi
    Set state to draft and create a new workflow instance
  • onchange_journal_type(self, journal_type)
    @api.multi
    Clear property_journal

New fields (3)
  • code Char
    required=True size=8 args: 'Codigo'
  • electronic Boolean
    args: 'Eletrônico'
  • name Char
    size=64 args: 'Descrição'
Public methods (0)

No public methods.

New fields (5)
  • cancel_document_event_ids One2many → l10n_br_account.document_event
    args: 'l10n_br_account.document_event', 'cancel_document_event_id', 'Eventos'
  • display_name Char
    compute='_compute_display_name' string='Nome'
  • invoice_id Many2one → account.invoice
    args: 'account.invoice', 'Fatura'
  • justificative Char
    readonly=True required=True size=255 string='Justificativa'
  • partner_id Many2one → res.partner
    related='invoice_id.partner_id' string='Cliente' args: 'res.partner'
Public methods (0)

No public methods.

New fields (5)
  • cce_document_event_ids One2many → l10n_br_account.document_event
    args: 'l10n_br_account.document_event', 'document_event_ids', 'Eventos'
  • display_name Char
    compute='_compute_display_name' string='Name'
  • invoice_id Many2one → account.invoice
    args: 'account.invoice', 'Fatura'
  • motivo Text
    readonly=True required=True args: 'Motivo'
  • sequencia Char
    help='Indica a sequência da carta de correcão' args: 'Sequência'
Public methods (0)

No public methods.

New fields (8)
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} args: 'res.company', 'Empresa'
  • document_serie_id Many2one → l10n_br_account.document.serie
    domain="[('fiscal_document_id', '=', fiscal_document_id), ('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} args: 'l10n_br_account.document.serie', 'Série'
  • fiscal_document_id Many2one → l10n_br_account.fiscal.document
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'l10n_br_account.fiscal.document', 'Documento Fiscal'
  • invalid_number_document_event_ids One2many → l10n_br_account.document_event
    states={'done': [('readonly', True)]} args: 'l10n_br_account.document_event', 'invalid_number_document_event_id', 'Eventos'
  • justificative Char
    readonly=True required=True size=255 states={'draft': [('readonly', False)]} args: 'Justificativa'
  • number_end Integer
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Número Final'
  • number_start Integer
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Número Inicial'
  • state Selection
    default='draft' required=True args: [('draft', 'Rascunho'), ('cancel', 'Cancelado'), ('done', 'Concluído')], 'Status'
Public methods (3)
  • action_draft_done(self)
  • name_get(self)
    @api.multi
  • unlink(self)
    @api.multi

New fields (6)
  • code Char
    required=True size=16 args: 'Código'
  • default Boolean
    default=True args: 'Tipo Fiscal Padrão'
  • icms Boolean
    args: 'Recupera ICMS'
  • ipi Boolean
    args: 'Recupera IPI'
  • is_company Boolean
    args: 'Pessoa Jurídica?'
  • name Char
    size=64 args: 'Descrição'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    size=20 args: 'Nome'
Public methods (0)

No public methods.

New fields (4)
  • fiscal_category_destination_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria de Destino'
  • fiscal_category_source_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria de Origem'
  • product_tmpl_id Many2one → product.template
    ondelete='cascade' args: 'product.template', 'Produto'
  • to_state_id Many2one → res.country.state
    args: 'res.country.state', 'Estado Destino'
Public methods (0)

No public methods.

New fields (5)
  • child_ids One2many → l10n_br_account.service.type
    args: 'l10n_br_account.service.type', 'parent_id', 'Tipo de Serviço Filhos'
  • code Char
    required=True size=16 args: 'Código'
  • internal_type Selection
    default='normal' required=True args: [('view', 'Visualização'), ('normal', 'Normal')], 'Tipo Interno'
  • name Char
    required=True size=256 args: 'Descrição'
  • parent_id Many2one → l10n_br_account.service.type
    args: 'l10n_br_account.service.type', 'Tipo de Serviço Pai'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (3)
  • fiscal_category_default_ids One2many → l10n_br_account.product.category
    args: 'l10n_br_account.product.category', 'product_tmpl_id', 'Categoria de Operação Fiscal Padrões'
  • fiscal_type Selection
    default=PRODUCT_FISCAL_TYPE_DEFAULT args: PRODUCT_FISCAL_TYPE, 'Tipo Fiscal'
  • service_type_id Many2one → l10n_br_account.service.type
    args: 'l10n_br_account.service.type', 'Tipo de Serviço'
Public methods (0)

No public methods.

New fields (11)
  • annual_revenue Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faturamento Bruto dos últimos 12 meses' required=True args: 'Faturamento Anual'
  • cnae_main_id Many2one → l10n_br_account.cnae
    args: 'l10n_br_account.cnae', 'CNAE Primário'
  • cnae_secondary_ids Many2many → l10n_br_account.cnae
    args: 'l10n_br_account.cnae', 'res_company_l10n_br_account_cnae', 'company_id', 'cnae_id', 'CNAE Segundários'
  • document_serie_service_id Many2one → l10n_br_account.document.serie
    domain="[('company_id', '=', active_id),('active','=',True),('fiscal_type','=','service')]" args: 'l10n_br_account.document.serie', 'Série Fiscais para Serviço'
  • ecnpj_a1_file Binary
    args: 'Arquivo e-CNPJ A1'
  • ecnpj_a1_password Char
    size=64 args: 'Senha e-CNPJ A1'
  • fiscal_rule_parent_id Many2one → account.fiscal.position.rule
    domain="[('parent_id', '=', False)]" args: 'account.fiscal.position.rule', 'Conjunto de Regras Fiscais'
  • fiscal_type Selection
    default=COMPANY_FISCAL_TYPE_DEFAULT required=True args: COMPANY_FISCAL_TYPE, 'Regime Tributário'
  • ibpt_update_days Integer
    string='IPBT Token'
  • ipbt_token Char
    string='IPBT Token'
  • service_invoice_id Many2one → l10n_br_account.fiscal.document
    args: 'l10n_br_account.fiscal.document', 'Documento Fiscal'
Public methods (0)

No public methods.

New fields (2)
  • partner_fiscal_type_id Many2one → l10n_br_account.partner.fiscal.type
    default=_default_partner_fiscal_type_id domain="[('is_company', '=', is_company)]" args: 'l10n_br_account.partner.fiscal.type', 'Tipo Fiscal do Parceiro'
  • partner_special_fiscal_type_id Many2many → l10n_br_account.partner.special.fiscal.type
    comodel_name='l10n_br_account.partner.special.fiscal.type' relation='res_partner_l10n_br_special_type' string='Regime especial'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_create(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • execute(self, cr, uid, ids, context=None)
    @api.v7
    This function is called at the confirmation of the wizard to generate the COA from the templates. It will read all the provided information to create the accounts, the banks, the journals, the taxes, the tax codes, the accounting properties... accordingly for the chosen company. This is override in Brazilian Localization to copy CFOP from fiscal positions template to fiscal positions. :Parameters: - 'cr': Database cursor. - 'uid': Current user. - 'ids': orm_memory id used to read all data. - 'context': Context.
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/8.0/l10n_br_account
VERSION
VERSION 2.0.0
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSStéphane Bidoul, Raphaël Valyi, Renato Lima, GitHub, Luis Felipe Mileo, Danimar Ribeiro, Magno, Luis Felipe Miléo, fernandomr, sadamo, mstuttgart, Magno Costa - Akretion, renato, Michell Stuttgart, Hendrix Costa, Developer, Raphael Valyi
WEBSITE
WEBSITEhttp://odoobrasil.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-fiscal-rule:
    - account_fiscal_position_rule
OCA/l10n-brazil:
    - l10n_br_base
OCA/server-tools:
    - web_context_tunnel
odoo/odoo:
    - l10n_br
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - report
    - analytic
    - board
    - edi
    - email_template
    - account_chart
    - account_cancel
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES num2words
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (45)
XML IDNameModelTypeStatus
l10n_br_account_cce_form l10n_br_account.invoice.cce.form l10n_br_account.invoice.cce form New
l10n_br_account_cce_tree l10n_br_account.invoice.cce.tree l10n_br_account.invoice.cce tree New
l10n_br_account_document_event_form l10n_br_account.document_event.form l10n_br_account.document_event form New
l10n_br_account_document_event_tree l10n_br_account.document_event.tree l10n_br_account.document_event tree New
l10n_br_account_fiscal_category_search l10n_br_account.fiscal.category.search l10n_br_account.fiscal.category search New
l10n_br_account_invoice_cancel_form l10n_br_account.invoice.cancel.form l10n_br_account.invoice.cancel form New
l10n_br_account_invoice_cancel_tree l10n_br_account.invoice.cancel.tree l10n_br_account.invoice.cancel tree New
l10n_br_account_invoice_invalid_number_form l10n_br_account.invoice.invalid.number.form l10n_br_account.invoice.invalid.number form New
l10n_br_account_invoice_invalid_number_tree l10n_br_account.invoice.invalid.number.tree l10n_br_account.invoice.invalid.number tree New
l10n_br_account_invoice_supplier_form l10n_br_account.invoice.supplier.form account.invoice button Inherits account.invoice_supplier_form
l10n_br_account_invoice_tree l10n_br_account.invoice.tree account.invoice field Inherits account.invoice_tree
l10n_br_account_position_form l10n_br_account.fiscal.position.form account.fiscal.position form Inherits account.view_account_position_form
l10n_br_account_position_template_form l10n_br_account.fiscal.position.template.form account.fiscal.position.template form Inherits account.view_account_position_template_form
l10n_br_account_position_tree l10n_br_account.fiscal.position.tree account.fiscal.position field Inherits account.view_account_position_tree
l10n_br_account_product_template_form_view l10n_br_account_product_template_form_view product.template field Inherits product.product_template_form_view
l10n_br_account_view_account_invoice_report_search l10n_br_account.invoice.report.search account.invoice.report filter Inherits account.view_account_invoice_report_search
l10n_br_account_view_partner_form l10n_br_account.partner.form res.partner field Inherits l10n_br_base.view_l10n_br_base_partner_form
view_account_config_settings_l10n_br_account account.config.settings.l10n_br_account account.config.settings data Inherits account.view_account_config_settings
view_l10n_br_account_cnae_form l10n_br_account.cnae.form l10n_br_account.cnae form New
view_l10n_br_account_cnae_structure l10n_br_account.cnae.structure l10n_br_account.cnae tree New
view_l10n_br_account_cnae_tree l10n_br_account.cnae.tree l10n_br_account.cnae tree New
view_l10n_br_account_company_form l10n_br_account.company res.company notebook Inherits base.view_company_form
view_l10n_br_account_document_serie_form l10n_br_account.document.serie l10n_br_account.document.serie form New
view_l10n_br_account_document_serie_tree l10n_br_account.document.serie l10n_br_account.document.serie tree New
view_l10n_br_account_fiscal_category_form l10n_br_account.fiscal.category.form l10n_br_account.fiscal.category form New
view_l10n_br_account_fiscal_category_tree l10n_br_account.fiscal.category.tree l10n_br_account.fiscal.category tree New
view_l10n_br_account_fiscal_document_form l10n_br_account.fiscal.document l10n_br_account.fiscal.document form New
view_l10n_br_account_fiscal_document_tree l10n_br_account.fiscal.document l10n_br_account.fiscal.document tree New
view_l10n_br_account_fiscal_position_rule_form l10n_br_account.fiscal.position.rule.form account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_form
view_l10n_br_account_fiscal_position_rule_template_form l10n_br_account.fiscal.position.rule.template.form account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_form
view_l10n_br_account_fiscal_position_rule_template_tree l10n_br_account.fiscal.position.rule.template.tree account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_tree
view_l10n_br_account_fiscal_position_rule_tree l10n_br_account.fiscal.position.rule.tree account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_tree
view_l10n_br_account_invoice_form l10n_br_account.invoice.form account.invoice button Inherits account.invoice_form
view_l10n_br_account_journal_form l10n_br_account.journal.form account.journal notebook Inherits account.view_account_journal_form
view_l10n_br_account_partner_filter l10n_br_account.partner.filter account.invoice field Inherits account.view_account_invoice_filter
view_l10n_br_account_partner_fiscal_type_form l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type form New
view_l10n_br_account_partner_fiscal_type_tree l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type tree New
view_l10n_br_account_partner_special_fiscal_type_form l10n_br_account.partner.special.fiscal.type l10n_br_account.partner.special.fiscal.type form New
view_l10n_br_account_partner_special_fiscal_type_tree l10n_br_account.partner.special.fiscal.type l10n_br_account.partner.special.fiscal.type tree New
view_l10n_br_account_position_template_form l10n_br_account.move.line.form account.move.line field Inherits account.view_account_move_line_filter
view_l10n_br_account_service_type_form l10n_br_account.service.type.form l10n_br_account.service.type form New
view_l10n_br_account_service_type_structure l10n_br_account.service.type.structure l10n_br_account.service.type tree New
view_l10n_br_account_service_type_tree l10n_br_account.service.type.tree l10n_br_account.service.type tree New
view_l10n_br_sale_fiscal_position_rule_search l10n_br_sale.fiscal.position.rule.search account.fiscal.position.rule xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_search
view_l10n_br_sale_fiscal_position_rule_template_search l10n_br_sale.fiscal.position.rule.template.search account.fiscal.position.rule.template xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_search
Models touched (33)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • ibpt_update_days Integer
    related='company_id.ibpt_update_days' string='Quantidade de dias para Atualizar'
  • ipbt_token Char
    related='company_id.ipbt_token' string='IPBT Token'
Public methods (0)

No public methods.

New fields (8)
  • asset_operation Boolean
    help='Caso seja marcada essa opção, será incluido o IPI na base de\n calculo do ICMS.' args: 'Operação de Aquisição de Ativo'
  • fiscal_category_fiscal_type Selection
    readonly=True related='fiscal_category_id.fiscal_type' store=True string='Fiscal Type' args: PRODUCT_FISCAL_TYPE
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal'
  • inv_copy_note Boolean
    args: 'Copiar Observação na Nota Fiscal'
  • name Char
    required=True size=128 args: 'Fiscal Position'
  • state Selection
    default='draft' readonly=True select=True track_visibility='onchange' args: [('draft', 'Rascunho'), ('review', 'Revisão'), ('approved', 'Aprovada'), ('unapproved', 'Não Aprovada')], 'Status'
  • type Selection
    args: TYPE, 'Tipo'
  • type_tax_use Selection
    args: [('sale', 'Sale'), ('purchase', 'Purchase'), ('all', 'All')], 'Tax Application'
Public methods (4)
  • map_tax(self, cr, uid, fposition_id, taxes, context=None)
    @api.v7
  • map_tax(self, taxes)
    @api.v8
  • onchange_fiscal_category_id(self, fiscal_category_id=None)
    @api.multi
  • onchange_type(self, type)
    @api.multi

New fields (8)
  • child_ids One2many → account.fiscal.position.rule
    args: 'account.fiscal.position.rule', 'parent_id', 'Regras Filhas'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria'
  • fiscal_type Selection
    default=COMPANY_FISCAL_TYPE_DEFAULT required=True args: COMPANY_FISCAL_TYPE, 'Regime Tributário'
  • parent_id Many2one → account.fiscal.position.rule
    args: 'account.fiscal.position.rule', 'Regra Pai'
  • partner_fiscal_type_id Many2many → l10n_br_account.partner.fiscal.type
    column1='afp_id' column2='partner_fiscal_type_id' comodel_name='l10n_br_account.partner.fiscal.type' relation='afp_rule_l10n_br_account_partner_fiscal_type' string='Tipo Fiscal do Parceiro'
  • partner_special_fiscal_type_id Many2many → l10n_br_account.partner.special.fiscal.type
    column1='afp_id' column2='partner_special_fiscal_type_id' comodel_name='l10n_br_account.partner.special.fiscal.type' relation='afp_rule_l10n_br_account_partner_special_fiscal_type' string='Regime especial'
  • revenue_end Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faixa inicial de faturamento bruto' args: 'Faturamento Final'
  • revenue_start Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faixa inicial de faturamento bruto' args: 'Faturamento Inicial'
Public methods (1)
  • product_fiscal_category_map(self, product_id, fiscal_category_id, to_state_id=None)

New fields (8)
  • child_ids One2many → account.fiscal.position.rule.template
    args: 'account.fiscal.position.rule.template', 'parent_id', 'Regras Filhas'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria'
  • fiscal_type Selection
    default=COMPANY_FISCAL_TYPE_DEFAULT required=True args: COMPANY_FISCAL_TYPE, 'Regime Tributário'
  • parent_id Many2one → account.fiscal.position.rule.template
    args: 'account.fiscal.position.rule.template', 'Regra Pai'
  • partner_fiscal_type_id Many2many → l10n_br_account.partner.fiscal.type
    column1='afp_template' column2='partner_fiscal_type' comodel_name='l10n_br_account.partner.fiscal.type' relation='afp_rule_template_l10n_br_account_partner_fiscal_type' string='Tipo Fiscal do Parceiro'
  • partner_special_fiscal_type_id Many2many → l10n_br_account.partner.special.fiscal.type
    column1='afp_id' column2='partner_special_fiscal_type_id' comodel_name='l10n_br_account.partner.special.fiscal.type' relation='afp_rule_template_l10n_br_account_partner_special_fiscal_type' string='Regime especial'
  • revenue_end Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faixa inicial de faturamento bruto' args: 'Faturamento Final'
  • revenue_start Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faixa inicial de faturamento bruto' args: 'Faturamento Inicial'
Public methods (0)

No public methods.

New fields (4)
  • tax_code_dest_id Many2one → account.tax.code
    args: 'account.tax.code', 'Replacement Tax Code'
  • tax_code_src_id Many2one → account.tax.code
    args: 'account.tax.code', 'Código Taxa Origem'
  • tax_src_domain Char
    related='tax_src_id.domain'
  • tax_src_id Many2one → account.tax
    required=False string='Tax Source' args: 'account.tax'
Public methods (1)
  • onchange_tax_src_id(self)
    @api.onchange('tax_src_id', 'tax_code_src_id')

New fields (4)
  • tax_code_dest_id Many2one → account.tax.code.template
    string='Replacement Tax Code' args: 'account.tax.code.template'
  • tax_code_src_id Many2one → account.tax.code.template
    string='Código Taxa Origem' args: 'account.tax.code.template'
  • tax_src_domain Char
    related='tax_src_id.domain' string='Tax Domain'
  • tax_src_id Many2one → account.tax.template
    required=False string='Tax Source' args: 'account.tax.template'
Public methods (1)
  • onchange_tax_src_id(self)
    @api.onchange('tax_src_id', 'tax_code_src_id')

New fields (8)
  • asset_operation Boolean
    help='Caso seja marcada essa opção, será incluido o IPI na base de\n calculo do ICMS.' args: 'Operação de Aquisição de Ativo'
  • fiscal_category_fiscal_type Selection
    readonly=True related='fiscal_category_id.fiscal_type' store=True string='Fiscal Type' args: PRODUCT_FISCAL_TYPE
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal'
  • inv_copy_note Boolean
    args: 'Copiar Observação na Nota Fiscal'
  • name Char
    required=True size=128 args: 'Fiscal Position'
  • state Selection
    default='draft' readonly=True select=True track_visibility='onchange' args: [('draft', 'Rascunho'), ('review', 'Revisão'), ('approved', 'Aprovada'), ('unapproved', 'Não Aprovada')], 'Status'
  • type Selection
    args: TYPE, 'Tipo'
  • type_tax_use Selection
    args: [('sale', 'Sale'), ('purchase', 'Purchase'), ('all', 'All')], 'Tax Application'
Public methods (3)
  • generate_fiscal_position(self, cr, uid, chart_temp_id, tax_template_ref, acc_template_ref, company_id, context=None)
    This method generate Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param chart_temp_id: Chart Template Id. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: selected from wizard.multi.charts.accounts. :returns: True
  • onchange_fiscal_category_id(self, fiscal_category_id=None)
    @api.multi
  • onchange_type(self, type)
    @api.multi

New fields (14)
  • account_document_event_ids One2many → l10n_br_account.document_event
    args: 'l10n_br_account.document_event', 'document_event_ids', 'Eventos'
  • cnpj_cpf Char
    related='partner_id.cnpj_cpf' string='CNPJ/CPF'
  • document_serie_id Many2one → l10n_br_account.document.serie
    domain="[('fiscal_document_id', '=', fiscal_document_id), ('company_id','=',company_id)]" readonly=True states={'draft': [('readonly', False)]} string='Série' args: 'l10n_br_account.document.serie'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    readonly=True states={'draft': [('readonly', False)]} args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal'
  • fiscal_comment Text
    args: 'Observação Fiscal'
  • fiscal_document_code Char
    readonly=True related='fiscal_document_id.code' store=True string='Document Code'
  • fiscal_document_electronic Boolean
    readonly=True related='fiscal_document_id.electronic' store=True string='Electronic' type='boolean'
  • fiscal_document_id Many2one → l10n_br_account.fiscal.document
    readonly=True states={'draft': [('readonly', False)]} string='Documento' args: 'l10n_br_account.fiscal.document'
  • fiscal_position Many2one → account.fiscal.position
    readonly=True states={'draft': [('readonly', False)]} args: 'account.fiscal.position', 'Fiscal Position'
  • ie Char
    related='partner_id.inscr_est' string='Inscrição Estadual'
  • legal_name Char
    related='partner_id.legal_name' string='Razão Social'
  • move_line_receivable_id Many2many → account.move.line
    compute='_compute_receivables' string='Receivables' args: 'account.move.line'
  • revenue_expense Boolean
    readonly=True related='journal_id.revenue_expense' store=True string='Gera Financeiro'
  • state Selection
    selection_add=[('sefaz_export', 'Enviar para Receita'), ('sefaz_exception', 'Erro de autorização da Receita'), ('sefaz_cancelled', 'Cancelado no Sefaz'), ('sefaz_denied', 'Denegada no Sefaz')]
Public methods (3)
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
    finalize_invoice_move_lines(move_lines) -> move_lines Hook method to be overridden in additional modules to verify and possibly alter the move lines to be created by an invoice, for special cases. :param move_lines: list of dictionaries with the account.move.lines (as for create()) :return: the (possibly updated) final move_lines to create for this invoice
  • name_get(self)
    @api.multi
  • open_fiscal_document(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • invoice_confirm(self)
    @api.multi

New fields (4)
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal'
  • fiscal_position Many2one → account.fiscal.position
    args: 'account.fiscal.position', 'Posição Fiscal'
  • invoice_line_tax_id Many2many → account.tax
    domain=[('parent_id', '=', False)] string='Taxes' args: 'account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id'
  • price_tax_discount Float
    compute='_compute_price' digits=dp.get_precision('Account') readonly=True store=True string='Price Tax discount'
Public methods (1)
  • move_line_get_item(self, line)
    @api.model
    Overrrite core to fix invoice total account.move :param line: :return:

New fields (8)
  • document_serie_id Many2one → l10n_br_account.document.serie
    readonly=True string='Série' args: 'l10n_br_account.document.serie'
  • fiscal_category_id Many2one → l10n_br_account.fiscal.category
    readonly=True args: 'l10n_br_account.fiscal.category', 'Fiscal Category'
  • fiscal_document_electronic Boolean
    readonly=True string='Electronic'
  • internal_number Char
    readonly=True size=32 string='Invoice Number'
  • l10n_br_city_id Many2one → l10n_br_base.city
    string='Municipio' args: 'l10n_br_base.city'
  • revenue_expense Char
    readonly=True size=32 string='Gera Financeiro'
  • state Selection
    selection_add=[('sefaz_export', 'Enviar para Receita'), ('sefaz_exception', 'Erro de autorização da Receita'), ('sefaz_cancelled', 'Cancelado no Sefaz'), ('sefaz_denied', 'Denegada no Sefaz')]
  • state_id Many2one → res.country.state
    required=True string='Estado' args: 'res.country.state'
Public methods (0)

No public methods.

New fields (1)
  • revenue_expense Boolean
    args: 'Gera Financeiro'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • compute_all(self, cr, uid, taxes, price_unit, quantity, product=None, partner=None, force_excluded=False, fiscal_position=False, insurance_value=0.0, freight_value=0.0, other_costs_value=0.0)
    @api.v7
    Compute taxes Returns a dict of the form:: { 'total': Total without taxes, 'total_included': Total with taxes, 'total_tax_discount': Total Tax Discounts, 'taxes': <list of taxes, objects>, 'total_base': Total Base by tax, } :Parameters: - 'cr': Database cursor. - 'uid': Current user. - 'taxes': List with all taxes id. - 'price_unit': Product price unit. - 'quantity': Product quantity. - 'force_excluded': Used to say that we don't want to consider the value of field price_include of tax. It's used in encoding by line where you don't matter if you encoded a tax with that boolean to True or False.
  • compute_all(self, price_unit, quantity, product=None, partner=None, force_excluded=False, fiscal_position=False, insurance_value=0.0, freight_value=0.0, other_costs_value=0.0)
    @api.v8

New fields (1)
  • name Char
    size=64 args: 'Name'
Public methods (0)

No public methods.

New fields (6)
  • child_ids One2many → l10n_br_account.cnae
    args: 'l10n_br_account.cnae', 'parent_id', 'CNAEs Filhos'
  • code Char
    required=True size=16 args: 'Código'
  • internal_type Selection
    default='normal' required=True args: [('view', 'Visualização'), ('normal', 'Normal')], 'Tipo Interno'
  • name Char
    required=True size=64 args: 'Descrição'
  • parent_id Many2one → l10n_br_account.cnae
    args: 'l10n_br_account.cnae', 'CNAE Pai'
  • version Char
    required=True size=16 args: 'Versão'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (7)
  • active Boolean
    args: 'Ativo'
  • code Char
    required=True size=3 args: 'Código'
  • company_id Many2one → res.company
    required=True args: 'res.company', 'Empresa'
  • fiscal_document_id Many2one → l10n_br_account.fiscal.document
    required=True args: 'l10n_br_account.fiscal.document', 'Documento Fiscal'
  • fiscal_type Selection
    default=PRODUCT_FISCAL_TYPE_DEFAULT args: PRODUCT_FISCAL_TYPE, 'Tipo Fiscal'
  • internal_sequence_id Many2one → ir.sequence
    args: 'ir.sequence', 'Sequência Interna'
  • name Char
    required=True args: 'Descrição'
Public methods (1)
  • create(self, vals)
    @api.model
    Overwrite method to create a new ir.sequence if this field is null

New fields (16)
  • cancel_document_event_id Many2one → l10n_br_account.invoice.cancel
    args: 'l10n_br_account.invoice.cancel', 'Cancelamento'
  • company_id Many2one → res.company
    readonly=True states={'draft': [('readonly', False)]} args: 'res.company', 'Empresa'
  • create_date Datetime
    readonly=True args: 'Data Criação'
  • display_name Char
    compute='_compute_display_name' string='Nome'
  • document_event_ids Many2one → account.invoice
    args: 'account.invoice', 'Documentos'
  • end_date Datetime
    readonly=True args: 'Data Finalização'
  • file_returned Char
    readonly=True args: 'Retorno'
  • file_sent Char
    readonly=True args: 'Envio'
  • invalid_number_document_event_id Many2one → l10n_br_account.invoice.invalid.number
    args: 'l10n_br_account.invoice.invalid.number', 'Inutilização'
  • message Char
    readonly=True args: 'Mensagem'
  • origin Char
    help='Referência ao documento que gerou o evento.' readonly=True size=64 states={'draft': [('readonly', False)]} args: 'Documento de Origem'
  • response Char
    readonly=True size=64 args: 'Descrição'
  • state Selection
    default='draft' readonly=True select=True args: [('draft', 'Rascunho'), ('send', 'Enviado'), ('wait', 'Aguardando Retorno'), ('done', 'Recebido Retorno')], 'Status'
  • status Char
    readonly=True args: 'Código'
  • type Selection
    args: [('-1', 'Exception'), ('0', 'Envio Lote'), ('1', 'Consulta Recibo'), ('2', 'Cancelamento'), ('3', 'Inutilização'), ('4', 'Consulta NFE'), ('5', 'Consulta Situação'), ('6', 'Consulta Cadastro'), ('7', 'DPEC Recepção'), ('8', 'DPEC Consulta'), ('9', 'Recepção Evento'), ('10', 'Download'), ('11', 'Consulta Destinadas'), ('12', 'Distribuição DFe'), ('13', 'Manifestação')], 'Serviço'
  • write_date Datetime
    readonly=True args: 'Data Alteração'
Public methods (1)
  • set_done(self)
    @api.multi

New fields (11)
  • code Char
    required=True size=254 args: 'Código'
  • fiscal_position_ids One2many → account.fiscal.position
    string='Posições Fiscais' args: 'account.fiscal.position', 'fiscal_category_id'
  • fiscal_type Selection
    default=PRODUCT_FISCAL_TYPE_DEFAULT args: PRODUCT_FISCAL_TYPE, 'Tipo Fiscal'
  • journal_type Selection
    default='sale' required=True size=32 args: [('sale', 'Saída'), ('sale_refund', 'Devolução de Saída'), ('purchase', 'Entrada'), ('purchase_refund', 'Devolução de Entrada')], 'Tipo do Diário'
  • name Char
    help='Natureza da operação informada no XML' size=254 string='Descrição'
  • note Text
    args: 'Observações'
  • property_journal Many2one → account.journal
    company_dependent=True help='Diário utilizado para esta categoria de operação fiscal' string='Diário Contábil' args: 'account.journal'
  • refund_fiscal_category_id Many2one → l10n_br_account.fiscal.category
    domain="[('type', '!=', type), ('fiscal_type', '=', fiscal_type),\n ('journal_type', 'like', journal_type),\n ('state', '=', 'approved')]" args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal de Devolução'
  • reverse_fiscal_category_id Many2one → l10n_br_account.fiscal.category
    domain="[('type', '!=', type), ('fiscal_type', '=', fiscal_type),\n ('state', '=', 'approved')]" args: 'l10n_br_account.fiscal.category', 'Categoria Fiscal Inversa'
  • state Selection
    default='draft' readonly=True select=True track_visibility='onchange' args: [('draft', 'Rascunho'), ('review', 'Revisão'), ('approved', 'Aprovada'), ('unapproved', 'Não Aprovada')], 'Status'
  • type Selection
    default='output' args: TYPE, 'Tipo'
Public methods (2)
  • action_unapproved_draft(self)
    @api.multi
    Set state to draft and create a new workflow instance
  • onchange_journal_type(self, journal_type)
    @api.multi
    Clear property_journal

New fields (3)
  • code Char
    required=True size=8 args: 'Codigo'
  • electronic Boolean
    args: 'Eletrônico'
  • name Char
    size=64 args: 'Descrição'
Public methods (0)

No public methods.

New fields (5)
  • cancel_document_event_ids One2many → l10n_br_account.document_event
    args: 'l10n_br_account.document_event', 'cancel_document_event_id', 'Eventos'
  • display_name Char
    compute='_compute_display_name' string='Nome'
  • invoice_id Many2one → account.invoice
    args: 'account.invoice', 'Fatura'
  • justificative Char
    readonly=True required=True size=255 string='Justificativa'
  • partner_id Many2one → res.partner
    related='invoice_id.partner_id' string='Cliente' args: 'res.partner'
Public methods (0)

No public methods.

New fields (5)
  • cce_document_event_ids One2many → l10n_br_account.document_event
    args: 'l10n_br_account.document_event', 'document_event_ids', 'Eventos'
  • display_name Char
    compute='_compute_display_name' string='Name'
  • invoice_id Many2one → account.invoice
    args: 'account.invoice', 'Fatura'
  • motivo Text
    readonly=True required=True args: 'Motivo'
  • sequencia Char
    help='Indica a sequência da carta de correcão' args: 'Sequência'
Public methods (0)

No public methods.

New fields (8)
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} args: 'res.company', 'Empresa'
  • document_serie_id Many2one → l10n_br_account.document.serie
    domain="[('fiscal_document_id', '=', fiscal_document_id), ('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} args: 'l10n_br_account.document.serie', 'Série'
  • fiscal_document_id Many2one → l10n_br_account.fiscal.document
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'l10n_br_account.fiscal.document', 'Documento Fiscal'
  • invalid_number_document_event_ids One2many → l10n_br_account.document_event
    states={'done': [('readonly', True)]} args: 'l10n_br_account.document_event', 'invalid_number_document_event_id', 'Eventos'
  • justificative Char
    readonly=True required=True size=255 states={'draft': [('readonly', False)]} args: 'Justificativa'
  • number_end Integer
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Número Final'
  • number_start Integer
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Número Inicial'
  • state Selection
    default='draft' required=True args: [('draft', 'Rascunho'), ('cancel', 'Cancelado'), ('done', 'Concluído')], 'Status'
Public methods (3)
  • action_draft_done(self)
  • name_get(self)
    @api.multi
  • unlink(self)
    @api.multi

New fields (6)
  • code Char
    required=True size=16 args: 'Código'
  • default Boolean
    default=True args: 'Tipo Fiscal Padrão'
  • icms Boolean
    args: 'Recupera ICMS'
  • ipi Boolean
    args: 'Recupera IPI'
  • is_company Boolean
    args: 'Pessoa Jurídica?'
  • name Char
    size=64 args: 'Descrição'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    size=20 args: 'Nome'
Public methods (0)

No public methods.

New fields (4)
  • fiscal_category_destination_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria de Destino'
  • fiscal_category_source_id Many2one → l10n_br_account.fiscal.category
    args: 'l10n_br_account.fiscal.category', 'Categoria de Origem'
  • product_tmpl_id Many2one → product.template
    ondelete='cascade' args: 'product.template', 'Produto'
  • to_state_id Many2one → res.country.state
    args: 'res.country.state', 'Estado Destino'
Public methods (0)

No public methods.

New fields (5)
  • child_ids One2many → l10n_br_account.service.type
    args: 'l10n_br_account.service.type', 'parent_id', 'Tipo de Serviço Filhos'
  • code Char
    required=True size=16 args: 'Código'
  • internal_type Selection
    default='normal' required=True args: [('view', 'Visualização'), ('normal', 'Normal')], 'Tipo Interno'
  • name Char
    required=True size=256 args: 'Descrição'
  • parent_id Many2one → l10n_br_account.service.type
    args: 'l10n_br_account.service.type', 'Tipo de Serviço Pai'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (3)
  • fiscal_category_default_ids One2many → l10n_br_account.product.category
    args: 'l10n_br_account.product.category', 'product_tmpl_id', 'Categoria de Operação Fiscal Padrões'
  • fiscal_type Selection
    default=PRODUCT_FISCAL_TYPE_DEFAULT args: PRODUCT_FISCAL_TYPE, 'Tipo Fiscal'
  • service_type_id Many2one → l10n_br_account.service.type
    args: 'l10n_br_account.service.type', 'Tipo de Serviço'
Public methods (0)

No public methods.

New fields (11)
  • annual_revenue Float
    default=0.0 digits_compute=dp.get_precision('Account') help='Faturamento Bruto dos últimos 12 meses' required=True args: 'Faturamento Anual'
  • cnae_main_id Many2one → l10n_br_account.cnae
    args: 'l10n_br_account.cnae', 'CNAE Primário'
  • cnae_secondary_ids Many2many → l10n_br_account.cnae
    args: 'l10n_br_account.cnae', 'res_company_l10n_br_account_cnae', 'company_id', 'cnae_id', 'CNAE Segundários'
  • document_serie_service_id Many2one → l10n_br_account.document.serie
    domain="[('company_id', '=', active_id),('active','=',True),('fiscal_type','=','service')]" args: 'l10n_br_account.document.serie', 'Série Fiscais para Serviço'
  • ecnpj_a1_file Binary
    args: 'Arquivo e-CNPJ A1'
  • ecnpj_a1_password Char
    size=64 args: 'Senha e-CNPJ A1'
  • fiscal_rule_parent_id Many2one → account.fiscal.position.rule
    domain="[('parent_id', '=', False)]" args: 'account.fiscal.position.rule', 'Conjunto de Regras Fiscais'
  • fiscal_type Selection
    default=COMPANY_FISCAL_TYPE_DEFAULT required=True args: COMPANY_FISCAL_TYPE, 'Regime Tributário'
  • ibpt_update_days Integer
    string='IPBT Token'
  • ipbt_token Char
    string='IPBT Token'
  • service_invoice_id Many2one → l10n_br_account.fiscal.document
    args: 'l10n_br_account.fiscal.document', 'Documento Fiscal'
Public methods (0)

No public methods.

New fields (2)
  • partner_fiscal_type_id Many2one → l10n_br_account.partner.fiscal.type
    default=_default_partner_fiscal_type_id domain="[('is_company', '=', is_company)]" args: 'l10n_br_account.partner.fiscal.type', 'Tipo Fiscal do Parceiro'
  • partner_special_fiscal_type_id Many2many → l10n_br_account.partner.special.fiscal.type
    comodel_name='l10n_br_account.partner.special.fiscal.type' relation='res_partner_l10n_br_special_type' string='Regime especial'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_create(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • execute(self, cr, uid, ids, context=None)
    @api.v7
    This function is called at the confirmation of the wizard to generate the COA from the templates. It will read all the provided information to create the accounts, the banks, the journals, the taxes, the tax codes, the accounting properties... accordingly for the chosen company. This is override in Brazilian Localization to copy CFOP from fiscal positions template to fiscal positions. :Parameters: - 'cr': Database cursor. - 'uid': Current user. - 'ids': orm_memory id used to read all data. - 'context': Context.
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/7.0/l10n_br_account
VERSION
VERSION 7.0
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSAkretion, OpenERP Brasil
MAINTAINERS
MAINTAINERSAkretion, OpenERP Brasil
COMMITTERS
COMMITTERSRaphaël Valyi, Renato Lima, Luis Felipe Mileo, Danimar Ribeiro, mileo, cma, Luis Felipe Miléo, Carlos Almeida, Daniel-Furcht, Daniel Furcht
WEBSITE
WEBSITEhttp://openerpbrasil.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:07:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-fiscal-rule:
    - account_fiscal_position_rule
OCA/l10n-brazil:
    - l10n_br_base
    - l10n_br_product
OCA/server-tools:
    - web_context_tunnel
odoo/odoo:
    - l10n_br
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - process
    - decimal_precision
    - mail
    - analytic
    - board
    - edi
    - email_template
    - account_chart
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Brazilian Localization Account

Code Analysis

Views touched (46)
XML IDNameModelTypeStatus
l10n_br_account_cce_form l10n_br_account.invoice.cce.form l10n_br_account.invoice.cce form New
l10n_br_account_cce_tree l10n_br_account.invoice.cce.tree l10n_br_account.invoice.cce tree New
l10n_br_account_document_event_form l10n_br_account.document_event.form l10n_br_account.document_event form New
l10n_br_account_document_event_tree l10n_br_account.document_event.tree l10n_br_account.document_event tree New
l10n_br_account_fiscal_category_search l10n_br_account.fiscal.category.search l10n_br_account.fiscal.category search New
l10n_br_account_invoice_cancel_form l10n_br_account.invoice.cancel.form l10n_br_account.invoice.cancel form New
l10n_br_account_invoice_cancel_tree l10n_br_account.invoice.cancel.tree l10n_br_account.invoice.cancel tree New
l10n_br_account_invoice_filter l10n_br_account.invoice.select account.invoice field Inherits account.view_account_invoice_filter
l10n_br_account_invoice_invalid_number_form l10n_br_account.invoice.invalid.number.form l10n_br_account.invoice.invalid.number form New
l10n_br_account_invoice_invalid_number_tree l10n_br_account.invoice.invalid.number.tree l10n_br_account.invoice.invalid.number tree New
l10n_br_account_invoice_line_tree l10n_br_account.invoice.line.tree account.invoice.line field Inherits account.view_invoice_line_tree
l10n_br_account_invoice_supplier_form l10n_br_account.invoice.supplier.form account.invoice page Inherits account.invoice_supplier_form
l10n_br_account_position_form l10n_br_account.fiscal.position.form account.fiscal.position form Inherits account.view_account_position_form
l10n_br_account_position_template_form l10n_br_account.fiscal.position.template.form account.fiscal.position.template form Inherits account.view_account_position_template_form
l10n_br_account_position_tree l10n_br_account.fiscal.position.tree account.fiscal.position field Inherits account.view_account_position_tree
l10n_br_account_product_normal_form_view l10n_br_account.normal.form product.product field Inherits product.product_normal_form_view
l10n_br_account_product_template_form_view l10n_br_account_product_template_form_view product.template notebook Inherits product.product_template_form_view
l10n_br_account_view_partner_form l10n_br_account.partner.form res.partner field Inherits l10n_br_base.view_l10n_br_base_partner_form
view_l10n_br_account_cnae_form l10n_br_account.cnae.form l10n_br_account.cnae form New
view_l10n_br_account_cnae_structure l10n_br_account.cnae.structure l10n_br_account.cnae tree New
view_l10n_br_account_cnae_tree l10n_br_account.cnae.tree l10n_br_account.cnae tree New
view_l10n_br_account_company_form l10n_br_account.company res.company notebook Inherits base.view_company_form
view_l10n_br_account_document_serie_form l10n_br_account.document.serie l10n_br_account.document.serie form New
view_l10n_br_account_document_serie_tree l10n_br_account.document.serie l10n_br_account.document.serie tree New
view_l10n_br_account_fiscal_category_form l10n_br_account.fiscal.category.form l10n_br_account.fiscal.category form New
view_l10n_br_account_fiscal_category_tree l10n_br_account.fiscal.category.tree l10n_br_account.fiscal.category tree New
view_l10n_br_account_fiscal_document_form l10n_br_account.fiscal.document l10n_br_account.fiscal.document form New
view_l10n_br_account_fiscal_document_tree l10n_br_account.fiscal.document l10n_br_account.fiscal.document tree New
view_l10n_br_account_fiscal_position_rule_form l10n_br_account.fiscal.position.rule.form account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_form
view_l10n_br_account_fiscal_position_rule_template_form l10n_br_account.fiscal.position.rule.template.form account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_form
view_l10n_br_account_fiscal_position_rule_template_tree l10n_br_account.fiscal.position.rule.template.tree account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_tree
view_l10n_br_account_fiscal_position_rule_tree l10n_br_account.fiscal.position.rule.tree account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_tree
view_l10n_br_account_invoice_form l10n_br_account.invoice.form account.invoice field Inherits account.invoice_form
view_l10n_br_account_invoice_supplier_form3 l10n_br_account.invoice.supplier.form3 account.invoice field Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_tree l10n_br_account.invoice.tree account.invoice field Inherits account.invoice_tree
view_l10n_br_account_journal_form l10n_br_account.journal.form account.journal notebook Inherits account.view_account_journal_form
view_l10n_br_account_partner_fiscal_type_form l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type form New
view_l10n_br_account_partner_fiscal_type_tree l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type tree New
view_l10n_br_account_position_template_form l10n_br_account.move.line.form account.move.line field Inherits account.view_account_move_line_filter
view_l10n_br_account_service_type_form l10n_br_account.service.type.form l10n_br_account.service.type form New
view_l10n_br_account_service_type_structure l10n_br_account.service.type.structure l10n_br_account.service.type tree New
view_l10n_br_account_service_type_tree l10n_br_account.service.type.tree l10n_br_account.service.type tree New
view_l10n_br_sale_fiscal_position_rule_search l10n_br_sale.fiscal.position.rule.search account.fiscal.position.rule xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_search
view_l10n_br_sale_fiscal_position_rule_template_search l10n_br_sale.fiscal.position.rule.template.search account.fiscal.position.rule.template xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_search
view_l10n_br_tax_definition_form l10n_br_tax.definition.form l10n_br_tax.definition form New
view_l10n_br_tax_definition_tree l10n_br_tax.definition.tree l10n_br_tax.definition tree New
Models touched (30)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • map_tax(self, cr, uid, fposition_id, taxes, context=None)
  • map_tax_code(self, cr, uid, product_id, fiscal_position, company_id=False, tax_ids=False, context=None)
  • onchange_fiscal_category_id(self, cr, uid, ids, fiscal_category_id=False, context=None)
  • onchange_type(self, cr, uid, ids, type=False, context=None)

New fields (0)

No new fields.

Public methods (1)
  • product_fiscal_category_map(self, cr, uid, product_id=False, fiscal_category_id=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • onchange_tax_code_src_id(self, cr, uid, ids, tax_src_id=False, tax_code_src_id=False, context=None)
  • onchange_tax_src_id(self, cr, uid, ids, tax_src_id=False, tax_code_src_id=False, context=None)

New fields (0)

No new fields.

Public methods (2)
  • onchange_tax_code_src_id(self, cr, uid, ids, tax_src_id=False, tax_code_src_id=False, context=None)
  • onchange_tax_src_id(self, cr, uid, ids, tax_src_id=False, tax_code_src_id=False, context=None)

New fields (0)

No new fields.

Public methods (3)
  • generate_fiscal_position(self, cr, uid, chart_temp_id, tax_template_ref, acc_template_ref, company_id, context=None)
    This method generate Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param chart_temp_id: Chart Template Id. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: selected from wizard.multi.charts.accounts. :returns: True
  • onchange_fiscal_category_id(self, cr, uid, ids, fiscal_category_id=False, context=None)
  • onchange_type(self, cr, uid, ids, type=False, context=None)

New fields (0)

No new fields.

Public methods (11)
  • action_cancel_draft(self, cr, uid, ids, *args)
  • action_internal_number(self, cr, uid, ids, context=None)
  • action_number(self, cr, uid, ids, context=None)
  • copy(self, cr, uid, id, default={}, context=None)
  • fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False)
  • finalize_invoice_move_lines(self, cr, uid, invoice_browse, move_lines)
    finalize_invoice_move_lines(cr, uid, invoice, move_lines) -> move_lines Hook method to be overridden in additional modules to verify and possibly alter the move lines to be created by an invoice, for special cases. :param invoice_browse: browsable record of the invoice that is generating the move lines :param move_lines: list of dictionaries with the account.move.lines (as for create()) :return: the (possibly updated) final move_lines to create for this invoice
  • init(self, cr)
  • onchange_company_id(self, cr, uid, ids, company_id, partner_id, type, invoice_line, currency_id, fiscal_category_id=False)
  • onchange_fiscal_category_id(self, cr, uid, ids, partner_address_id=False, partner_id=False, company_id=False, fiscal_category_id=False)
  • onchange_fiscal_document_id(self, cr, uid, ids, fiscal_document_id, company_id, issuer, fiscal_type, context=None)
  • onchange_partner_id(self, cr, uid, ids, type, partner_id, date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False, fiscal_category_id=False)

New fields (0)

No new fields.

Public methods (6)
  • fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False)
  • onchange_account_id(self, cr, uid, ids, product_id, partner_id, inv_type, fposition_id, account_id=False, context=None, fiscal_category_id=False, company_id=False)
  • onchange_fiscal_category_id(self, cr, uid, ids, partner_id, company_id, product_id, fiscal_category_id, account_id, context)
  • onchange_fiscal_position(self, cr, uid, ids, partner_id, company_id, product_id, fiscal_category_id, account_id, context)
  • product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=False, parent_fiscal_category_id=False, parent_fposition_id=False)
  • uos_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None, fiscal_category_id=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • compute_all(self, cr, uid, taxes, price_unit, quantity, product=None, partner=None, force_excluded=False, fiscal_position=False, insurance_value=0.0, freight_value=0.0, other_costs_value=0.0)
    Compute taxes Returns a dict of the form:: { 'total': Total without taxes, 'total_included': Total with taxes, 'total_tax_discount': Total Tax Discounts, 'taxes': <list of taxes, objects>, 'total_base': Total Base by tax, } :Parameters: - 'cr': Database cursor. - 'uid': Current user. - 'taxes': List with all taxes id. - 'price_unit': Product price unit. - 'quantity': Product quantity. - 'force_excluded': Used to say that we don't want to consider the value of field price_include of tax. It's used in encoding by line where you don't matter if you encoded a tax with that boolean to True or False.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • name_get(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (2)
  • create(self, cr, uid, vals, context=None)
    Overwrite method to create a new ir.sequence if this field is null
  • create_sequence(self, cr, uid, vals, context=None)
    Create new no_gap entry sequence for every new document serie

New fields (0)

No new fields.

Public methods (1)
  • set_done(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • action_unapproved_draft(self, cr, uid, ids, *args)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_draft_done(self, cr, uid, ids, *args)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • action_draft_done(self, cr, uid, ids, *args)
  • unlink(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • name_get(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • onchange_tax_id(self, cr, uid, ids, tax_id=False, context=None)

New fields (0)

No new fields.

Public methods (1)
  • onchange_tax_id(self, cr, uid, ids, tax_id=False, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • onchange_mask_cnpj_cpf(self, cr, uid, ids, is_company, cnpj_cpf, context=None)

New fields (0)

No new fields.

Public methods (1)
  • action_create(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • execute(self, cr, uid, ids, context=None)
    This function is called at the confirmation of the wizard to generate the COA from the templates. It will read all the provided information to create the accounts, the banks, the journals, the taxes, the tax codes, the accounting properties... accordingly for the chosen company. This is override in Brazilian Localization to copy CFOP from fiscal positions template to fiscal positions. :Parameters: - 'cr': Database cursor. - 'uid': Current user. - 'ids': orm_memory id used to read all data. - 'context': Context.
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/6.1/l10n_br_account
VERSION
VERSION 0.6
CATEGORY
CATEGORYLocalisation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSAkretion, OpenERP Brasil
MAINTAINERS
MAINTAINERSAkretion, OpenERP Brasil
COMMITTERS
COMMITTERSRaphaël Valyi, Renato Lima, Leonardo Santagada, Vinicius Dittgen
WEBSITE
WEBSITEhttp://openerpbrasil.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:04:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-fiscal-rule:
    - account_fiscal_position_rule
    - account_product_fiscal_classification
OCA/l10n-brazil:
    - l10n_br_base
odoo/odoo:
    - l10n_br
    - account
    - base_setup
    - base
    - product
    - process
    - decimal_precision
    - analytic
    - board
    - edi
    - email_template
    - mail
    - base_tools
    - account_chart
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Brazilian Localization

Code Analysis

Views touched (67)
XML IDNameModelTypeStatus
l10n_br_account_product_normal_form_view l10n_br_account.normal.form product.product notebook Inherits product.product_normal_form_view
l10n_br_account_product_normal_form_view_1 l10n_br_account.normal.form1 product.product field Inherits product.product_normal_form_view
l10n_br_account_product_normal_form_view_2 l10n_br_account.normal.form2 product.product field Inherits product.product_normal_form_view
l10n_br_account_product_operation_category_form l10n_br_account.product.operation.category.form l10n_br_account.product.operation.category field New
l10n_br_account_product_template_form_view l10n_br_account_product_template_form_view product.template notebook Inherits product.product_template_form_view
l10n_br_account_view_partner_form l10n_br_account.partner.form res.partner field Inherits l10n_br_base.l10n_br_base_view_partner_form5
l10n_br_account_view_partner_form2 l10n_br_account.partner.form2 res.partner xpath Inherits account.view_partner_property_form
l10n_br_account_view_partner_form3 l10n_br_account.partner.form3 res.partner xpath Inherits account.view_partner_property_form
l10n_br_account_view_partner_form4 l10n_br_account.partner.form4 res.partner xpath Inherits account.view_partner_property_form
product_is_on_service_invoice_form_view product_is_on_service_invoice_form_view product.product field Inherits product.product_normal_form_view
view_l10n_br_account_cfop_form l10n_br_account.cfop.name l10n_br_account.cfop form New
view_l10n_br_account_cfop_search l10n_br_account.cfop.search l10n_br_account.cfop search New
view_l10n_br_account_cfop_structure l10n_br_account.cfop.structure l10n_br_account.cfop tree New
view_l10n_br_account_cfop_tree l10n_br_account.cfop l10n_br_account.cfop tree New
view_l10n_br_account_cnae_form l10n_br_account.cnae.form l10n_br_account.cnae form New
view_l10n_br_account_cnae_structure l10n_br_account.cnae.structure l10n_br_account.cnae tree New
view_l10n_br_account_cnae_tree l10n_br_account.cnae.tree l10n_br_account.cnae tree New
view_l10n_br_account_company_form l10n_br_account.company res.company notebook Inherits base.view_company_form
view_l10n_br_account_document_serie_form l10n_br_account.document.serie l10n_br_account.document.serie form New
view_l10n_br_account_document_serie_tree l10n_br_account.document.serie l10n_br_account.document.serie tree New
view_l10n_br_account_fiscal_document_form l10n_br_account.fiscal.document l10n_br_account.fiscal.document form New
view_l10n_br_account_fiscal_document_tree l10n_br_account.fiscal.document l10n_br_account.fiscal.document tree New
view_l10n_br_account_fiscal_operation_category_form l10n_br_account.fiscal.operation.category l10n_br_account.fiscal.operation.category form New
view_l10n_br_account_fiscal_operation_category_tree l10n_br_account.fiscal.operation.category l10n_br_account.fiscal.operation.category tree New
view_l10n_br_account_fiscal_operation_form l10n_br_account.fiscal.operation l10n_br_account.fiscal.operation form New
view_l10n_br_account_fiscal_operation_line_form l10n_br_account.fiscal.operation.line l10n_br_account.fiscal.operation.line form New
view_l10n_br_account_fiscal_operation_line_tree l10n_br_account.fiscal.operation.line l10n_br_account.fiscal.operation.line tree New
view_l10n_br_account_fiscal_operation_tree l10n_br_account.fiscal.operation l10n_br_account.fiscal.operation tree New
view_l10n_br_account_fiscal_position_rule_form l10n_br_account.fiscal.position.rule.form account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_form
view_l10n_br_account_fiscal_position_rule_template_form l10n_br_account.fiscal.position.rule.template.form account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_form
view_l10n_br_account_fiscal_position_rule_template_tree l10n_br_account.fiscal.position.rule.template.tree account.fiscal.position.rule.template field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_tree
view_l10n_br_account_fiscal_position_rule_tree l10n_br_account.fiscal.position.rule.tree account.fiscal.position.rule field Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_tree
view_l10n_br_account_invoice_filter l10n_br_account.invoice.select account.invoice filter Inherits account.view_account_invoice_filter
view_l10n_br_account_invoice_filter1 l10n_br_account.invoice.select1 account.invoice field Inherits account.view_account_invoice_filter
view_l10n_br_account_invoice_form l10n_br_account.invoice.form account.invoice page Inherits account.invoice_form
view_l10n_br_account_invoice_form1 l10n_br_account.invoice.form1 account.invoice field Inherits account.invoice_form
view_l10n_br_account_invoice_form10 l10n_br_account.invoice.form10 account.invoice notebook Inherits account.invoice_form
view_l10n_br_account_invoice_form2 l10n_br_account.invoice.form2 account.invoice field Inherits account.invoice_form
view_l10n_br_account_invoice_form5 l10n_br_account.invoice.form5 account.invoice button Inherits account.invoice_form
view_l10n_br_account_invoice_form6 l10n_br_account.invoice.form6 account.invoice button Inherits account.invoice_form
view_l10n_br_account_invoice_form7 l10n_br_account.invoice.form7 account.invoice field Inherits account.invoice_form
view_l10n_br_account_invoice_line_form l10n_br_account.invoice.line.form account.invoice.line form Inherits account.view_invoice_line_form
view_l10n_br_account_invoice_line_tree l10n_br_account.invoice.line.tree1 account.invoice.line field Inherits account.view_invoice_line_tree
view_l10n_br_account_invoice_supplier_form l10n_br_account.invoice.supplier.form account.invoice notebook Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_supplier_form1 l10n_br_account.invoice.supplier.form1 account.invoice field Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_supplier_form2 l10n_br_account.invoice.supplier.form2 account.invoice field Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_supplier_form3 l10n_br_account.invoice.supplier.form3 account.invoice field Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_supplier_form4 l10n_br_account.invoice.supplier.form4 account.invoice button Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_supplier_form5 l10n_br_account.invoice.supplier.form5 account.invoice button Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_supplier_form6 l10n_br_account.invoice.supplier.form6 account.invoice field Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_supplier_form8 l10n_br_account.invoice.supplier.form8 account.invoice page Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_supplier_form9 l10n_br_account.invoice.supplier.form9 account.invoice field Inherits account.invoice_supplier_form
view_l10n_br_account_invoice_tree l10n_br_account.invoice.tree account.invoice field Inherits account.invoice_tree
view_l10n_br_account_journal_form l10n_br_account.journal.form account.journal notebook Inherits account.view_account_journal_form
view_l10n_br_account_nfe_export Exportar Nota Fiscal l10n_br_account.nfe_export form New
view_l10n_br_account_partner_fiscal_type_form l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type form New
view_l10n_br_account_partner_fiscal_type_tree l10n_br_account.partner.fiscal.type l10n_br_account.partner.fiscal.type tree New
view_l10n_br_account_position_form l10n_br_account.fiscal.position.form account.fiscal.position field Inherits account.view_account_position_form
view_l10n_br_account_position_template_form l10n_br_account.fiscal.position.template.form account.fiscal.position.template field Inherits account.view_account_position_template_form
view_l10n_br_account_position_template_form l10n_br_account.move.line.form account.move.line field Inherits account.view_account_move_line_filter
view_l10n_br_account_service_type_form l10n_br_account.service.type.form l10n_br_account.service.type form New
view_l10n_br_account_service_type_structure l10n_br_account.service.type.structure l10n_br_account.service.type tree New
view_l10n_br_account_service_type_tree l10n_br_account.service.type.tree l10n_br_account.service.type tree New
view_l10n_br_delivery_invoice_form11 l10n_br_account.invoice.form11 account.invoice field Inherits account.invoice_form
view_l10n_br_sale_fiscal_position_rule_search l10n_br_sale.fiscal.position.rule.search account.fiscal.position.rule xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_search
view_l10n_br_sale_fiscal_position_rule_template_search l10n_br_sale.fiscal.position.rule.template.search account.fiscal.position.rule.template xpath Inherits account_fiscal_position_rule.view_account_fiscal_position_rule_template_search
view_nfe_export_from_invoice Exportar Nota Fiscal l10n_br_account.nfe_export_from_invoice form New
Models touched (0)

No models found for this module.