Package: odoo12-addon-l10n-br-fiscal
Classificações fiscaisPrimeramente, este módulo traz uma variedade de cadastros fiscais para produtos, parceiros ou empresas. Na hora de emitir documentos fiscais como NF-e, NFS-e etc… até empresas do regime simplificado ou MEI precisam de vários desses cadastros. E empresas do regime normal precisam deles para calcular os impostos ou emitir documentos fiscais.Produtos:tipo fiscalNCM (com ligações com os impostos)genêro fiscalCESTNBMNBStipo de serviçounidades fiscaisParceiros:CNAEperfil fiscalConceito de documento fiscalO Odoo nativo não tem o conceito de documento fiscal. O conceito mais parecido seria oaccount.invoicee até a versão 10.0 a localização estendia o invoice para suportar as NF-e e NFS-e apenas. Naquela época não era razoável você cogitar fazer o SPED no Odoo, o próprio core do Odoo não tinha maturidade para isso então era válido a abordagem empírica de ir suportando mais casos de NFe dentro do invoice Odoo apenas.Porém, na v12, amadurecemos o framework XML/SOAP de forma que se torna razoável suportar vários documentos fiscais (NF-e, NFS-e, MDF-e, CT-e, EFD-Reinf, e-Social, GNRE, BP-e…) com a qualidade OCA dentro do Odoo. Também, apesar de complexo, o core do Odoo finalmente tem suporte suficiente para as operações de uma empresa que faria o SPED.Nisso se torna interessante ter o conceito de documento fiscall10n_br_fiscal.documentindependente do invoice Odoo para suportar todos os documentos fiscais mesmo, de forma modular. Um outro motivo para ter o conceito de documento fiscal fora do módulo account é que quando você analisa o código deste módulol10n_br_fiscal, quase nada dele poderia ser feito pelo módulo account do Odoo. Então ter esse módulo l10n_br_fiscal que não depende do módulo account também é uma forma de modularizar a localização para facilitar a manutenção dela, especialmente quando se trata de migrar e que o módulo pode ter mudado bastante como foi o caso entre a v8.0 e a v9.0 ou a v12.0 e v13.0 por exemplo. Facilita também a governança do projeto possibilitando que pessoas sejam responsáveis por diferentes partes. O módulo l10n_br_fiscal foi principalmente extraído do módulo l10n_br_l10n_br_account_product das v7.0 as v.10.0.Esse módulol10n_br_fiscalé agnóstico de qualquer tecnologia XML ou SOAP. Ele contém apenas o que há de comum entre os documentos fiscais mas esses últimos são implementados em outros módulos. Para um determinado documento fiscal como a Nf-e, você tem então por exemplo:nfelib: um pacote de data bindings puro Python (que não depende do Odoo). Em geral usamos um gerador de código para gerar esses bindings a partir dos esquemas XSD da fazenda.l10n_br_nfe_spec: um modulo de mixins Odoo geridos também a partir dos XSD. Esses mixins são apenas as estruturas de dados das especificações antes de ser injectados em objetos Odoo existantes (como res.partner ou l10n_br_fiscal.document) ou até tornados concretos caso não exite objetos na Odoo ou na OCA para eles já.l10n_br_nfe: um módulo Odoo que trata de injectar esses mappings fiscais nos objetos Odoo e que implementa a lógica como os wizards para a transmissão.A transmissão é realizada usando uma lib de transmissão comoerpbrasil.doc(baseada em Python Zeep). Importante: no caso daNFS-e, a ausência de padrão nacional hoje e a simplicidade do modelo (comparado com a NFe) faz que foi decidido de não usar um módulo de mixins fiscais Odoo geridos, o mapping é com a lib de binding é feito manualmente, família de NFS-e por família.Alem disso a maioria do codigo dol10n_br_fiscal.documente das linhas delel10n_br_fiscal.document.lineé na verdade feito dentro de mixins10n_br_fiscal.document.mixine10n_br_fiscal.document.line.mixinrespectivamente. Esses mixins podem assim ser injectados em outros objetos Odoo que precedem os documentos fiscais e podem armazenar então o mesmo tipo de informação:sale.order,purchase.order,stock.picking… Isso é bem visível nos módulos que estendem esse módulo:|-- l10n_br_fiscal
    |-- l10n_br_sale
    |-- l10n_br_purchase
    |-- l10n_br_account
    |-- ...Porem o caso do invoice Odoo no modulol10n_br_accounté diferente ainda. Pois já se tem a tabela independente do documento fiscal cuja grande maioria das dezenas e até centenas de campos fiscais (no caso de muitos tipos de documentos fiscais) não são redundante com os do invoice Odoo. Se a gente injetasse esses mixins dentro do invoice, aí sim essas centenas de campos seriam duplicados entre o invoice e o documento fiscal. Por isso, o sistema que foi adotado no modulol10n_br_accounté que um invoice Odoo passa a ter um_inherits = "l10n_br_fiscal.document"de forma que se pilota o documento fiscal através do invoice, oferecendo o mesmo tipo de integração como antes. O mesmo tipo de mecanismo acontece com a linha do documento fiscal.Sendo assim, já pelos _inherits, o invoice Odoo e as linhas dele já vão puxar todos campos fiscais como se eles fossem das suas respectivas tabelas sem duplicar eles no banco. Se alem disso a gente injetasse os mixins10n_br_fiscal.document.mixine10n_br_fiscal.document.line.mixinno invoice e invoice.line, esses campos fiscais apareceriam também nas tabelasaccount_invoiceeaccount_invoice_linede forma redundantes com os campos puxados pelos _inherits. Para não ter esse problema, os métodos fiscais comuns (sem os campos) foram ainda extraidos nos mixins:10n_br_fiscal.document.mixin.methodse10n_br_fiscal.document.line.mixin.methodsque são injectados nos objetosaccount_invoiceeaccount_invoice_linerespectivamente dentro do modulol10n_br_account.Impostos brasileirosO módulo l10n_br_fiscal lida com os principais impostos brasileiros como:ICMS do Simples NacionalICMS do Regime normalIPIPISCOFINSISSQNIRPJIICSLLINSSO módulo l10n_br_fiscal também lida com:STretençõesÉ notório que o cálculo dos impostos no Brasil é muito especial e muito trabalhoso. Geralmente é o motivo pelo qual os ERPs internacionais não tem grande fatia de mercado brasileiro.Até a versão 10.0, tentamos usar e estender o objeto Odooaccount.tax. A Akretion até criou o projetoOCA/account-fiscal-rulepara determinar as alíquotas de cada imposto de accordo com os parâmetros da operação fiscal. Porém, a gente acabava usando quase nada doaccount.fiscal.positionnativo na parte fiscal e pelo contrário, isso nos obrigava a ter um registroaccount.taxpara cada aliquota e nos obrigava a manter centenas de taxas e dezenas de milhares de regras para selecionar a “posição fiscal” Odoo que aplicaria as taxas corretas. E você ainda tinha que gerir essas dezenas de milhares de regras para uma determinada empresa do regime normal. Conclusão: era inviável nos projetos menores de tentar se encaixa na lógica do Odoo para calcular os impostos brasileiros.Nisso criamos neste módulo os modelos de taxas que representam exatamente o funcionamentos dos impostos brasileiros. Além dos cálculos, esses modelos também nos servem a carregar as tabelas dos impostos. E mais adiante, no módulol10n_br_account, ligamos os objetos nativosaccount.taxas alíquotas dos impostos brasileiros.Claro esses modelos dos impostos atendem as empresas do regime normal, mas é bom lembrar que até empresas do regime simplificado precisam desses modelos para realizar as operações com ST (Substituição Tributária)…Operações fiscaisNo Odoo nativo, o conceito mais parecido com a operação fiscal e o ´´account.fiscal.position´´. E ate a versão 10.0, era o que a gente usava. Porém, a posição fiscal do Odoo não resolve muito os nossos problemas pois:no Brasil se tem uma operação fiscal por linha de documento fiscala posição fiscal do Odoo desconhece a lógica da parametrização fiscal brasileirajá que puxamos o cadastro dos impostos no módulo l10n_br_fiscal fora do módulo account (sem depender dele), não temos ainda o objetoaccount.fiscal.positionneste módulo.Com tudo, optamos por criar um objetol10n_br_fiscal.operationque faz exactamente o que precisamos para o Brasil. Mais adiante, no módulol10n_br_accounté realizado a integração entre a posição fiscal do Odoo e essa operação fiscal.Table of contentsInstallationConfigurationUsageKnown issues / RoadmapBug TrackerCreditsInstallationTo install this module, you need to:do this …ConfigurationTo configure this module, you need to:go to …UsageTo use this module, you need to:go to …Known issues / RoadmapTODO!Bug TrackerBugs are tracked onGitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomedfeedback.Do not contact contributors directly about support or help with technical issues.CreditsAuthorsAkretionContributorsRenato Lima <renato.lima@akretion.com.br>Raphaël Valyi <raphael.valyi@akretion.com.br>Magno Costa <magno.costa@akretion.com.br>Luis Felipe Mileo <mileo@kmee.com.br>Marcel Savegnago <marcel.savegnago@escodoo.com.br>Luis Otavio Malta Conceição <luis.malta@kmee.com.br>MaintainersThis module is maintained by the OCA.OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.Currentmaintainer:This module is part of theOCA/l10n-brazilproject on GitHub.You are welcome to contribute. To learn how please visithttps://odoo-community.org/page/Contribute.