Author: |
Akretion, Odoo Community Association (OCA) |
License: |
AGPL-3 |
Branch: |
feature/reimprimir_cupom_fiscal_sat |
Repository: |
odoo-brazil/l10n-brazil |
Dependencies: |
base,
decimal_precision,
l10n_br_base,
product,
and
uom |
Languages: |
HTML (449, 1.3%),
PO File (3426, 10.1%),
Python (15249, 45.0%),
XML (14558, 43.0%),
and
reStructuredText (175, 0.5%) |
Other branches: |
12-l10n_br_base-readme,
12.0,
12.0-backport-l10n_br_base,
12.0-emissao-nfe,
12.0-emissao-nfe-bkp,
12.0-l10n_br_coa-readme,
12.0-l10n_br_contract,
12.0-l10n_br_mdfe,
12.0-l10n_br_nfe,
12.0-l10n_br_nfe-ak-filtered,
12.0-l10n_br_nfe-ak-filtered-odb,
12.0-l10n_br_nfe-cherrypick-hacks,
12.0-l10n_br_nfe_nfse,
12.0-l10n_br_nfse,
12.0-l10n_br_nfse_dsf,
12.0-l10n_br_pix,
12.0-l10n_br_pos_pix,
12.0-mi-hw_sat_cancel_no_print,
12.0-mig-cnab_erpbrasil_febraban,
12.0-mig-hw_sat,
12.0-mig-hw_sat_imports,
12.0-mig-hw_sat_worker_print,
12.0-mig-l10n_br_account_payment_cobranca,
12.0-mig-l10n_br_account_payment_cobranca-bk,
12.0-mig-l10n_br_account_payment_cobranca-rebased,
12.0-mig-l10n_br_account_payment_cobranca_new,
12.0-mig-l10n_br_cfe,
12.0-mig-l10n_br_contabilidade,
12.0-mig-l10n_br_fiscal_queue,
12.0-mig-l10n_br_hr_arquivos_governo,
12.0-mig-l10n_br_hr_benefit,
12.0-mig-l10n_br_hr_payment_order,
12.0-mig-l10n_br_hr_payroll,
12.0-mig-l10n_br_hr_payroll_account,
12.0-mig-l10n_br_hr_payroll_connector,
12.0-mig-l10n_br_hr_payroll_report,
12.0-mig-l10n_br_hr_substituicao,
12.0-mig-l10n_br_hr_syndicate,
12.0-mig-l10n_br_hr_vacation,
12.0-mig-l10n_br_mdfe,
12.0-mig-l10n_br_pos,
12.0-mig-l10n_br_ressarcimento,
12.0-mig-l10n_br_ressarcimento_account,
12.0-mig-l10n_br_sale,
12.0-mig-l10n_br_sale_commission,
12.0-mig-l10n_br_sped_efd,
12.0-mig-l10n_br_tef,
12.0-mig-l10n_br_vacation,
12.0-mig-sped_efdreinf,
12.0-mig-sped_esocial,
12.0-mig-sped_tabelas,
12.0-mig-sped_transmissao,
12.0.1.0-staging,
14.0-improve-icms-regulation,
14.0-mig-l10n_br_fiscal,
14.0-mig-l10n_br_pos,
14.0-mig-l10n_br_pos_amounts_calc,
14.0-mig-l10n_br_pos_cfe_export_xml,
14.0-mig-l10n_br_pos_nfce,
14.0-mig-l10n_br_pos_orders_finalizations,
14.0-mig-l10n_br_tef,
16.0-mig-l10n_br_fiscal,
backup/12.0-l10n_br_nfe,
backup/12.0-l10n_br_nfe-ak-filtered-odb,
backup/12.0-mig-cnab_erpbrasil_febraban,
backup/exportacao_generateds,
backup/feature/820,
backup/feature/cnab-multiple-payments,
backup/feature/contabil-financeiro,
backup/feature/payment_in_fiscal,
backup/l10n_br_nfe_spec,
backup/spec_driven_model,
bkp-2020-06-05-12.0-l10n_br_nfe,
bkp/14.0-mig-l10n_br_pos,
bkp/feature/contabil-financeiro,
feature/12.0-cfop-compras-devolucao,
feature/12.0-l10n_br_contract,
feature/12.0-l10n_br_fiscal-natureza-operacao,
feature/12.0-nfse-fiscal,
feature/12.0-withholding,
feature/820,
feature/abstract-model-event,
feature/adicionar_informação_adicional_cupom_fiscal,
feature/calculo-total-simples,
feature/cancelar_cupom_fiscal_sat,
feature/cnab-multiple-payments,
feature/coa_cfc,
feature/consumidor-anonimo,
feature/contabil-financeiro,
feature/dashboard_fiscal,
feature/demo-l10n_br_stock,
feature/description,
feature/devolucao-back2draft,
feature/entry_document_fields,
feature/export-fiscal-files,
feature/exportacao_generateds,
feature/exportacao_generateds_2,
feature/financial,
feature/fiscal_tax_adjustments,
feature/informacoes_adicionais_cfe,
feature/l10n_br_nfe,
feature/l10n_br_nfe_spec,
feature/l10n_br_nfe_spec2,
feature/l10n_br_website_sale,
feature/new_users,
feature/onchange_zip,
feature/payment_in_fiscal,
feature/payment_in_fiscal_rem_conditions,
feature/product-contract,
feature/ref-contract,
feature/reload_server_data,
feature/rename-l10n_br_account,
feature/rename-module,
feature/spec_driven_model-backup,
feature/validar_sessao_sat,
feature/workflow-documentos-fiscais,
fiscal/12.0-extract,
fix-961,
fix/auto-fill-city,
fix/cadastro_empresa,
fix/city_taxation_code,
fix/client_document_number_to_sat,
fix/close-flake8,
fix/compute_all,
fix/constantes-fiscais,
fix/contract-dummy-list,
fix/demo-company-data,
fix/document_line_price_from_sale,
fix/document_type,
fix/email_create_return_picking_pos_order,
fix/events-without-key,
fix/fiscal-state-on-tree,
fix/fiscal_type,
fix/fluxo_offline_cancelar_cupom,
fix/invoice_quantity,
fix/l10n_br_contract,
fix/l10n_br_pos_cancel_flow,
fix/no_send_email_pos_order,
fix/pagamentos_no_refund_do_cancelamento,
fix/portal_tests,
fix/reimpressao_cancelamento,
fix/rem-duplicate,
fix/rename-data,
fix/rename-fiscal-operation-type-label,
fix/rename_field_operation_id,
fix/runbot-product-quantity,
fix/sale-required-fields,
fix/ssl,
fix/test-fiscal-close,
fix/timezone_problem_paid_orders_show_list,
fix/travis-12.0-mig-l10n_br_account_product,
fix/trazer_todas_pos_orders_transmitidas_sefaz,
fix/uom_uom_search,
fix/update_pos_fiscal_map,
imp/12.0-cnae_code,
imp/l10n_br_account_payment_order,
imp/mock-nfe-tests,
imp/tax-receipt-cancel-reason,
imp/tests_remove_dead_code,
mig-12.0-l10n_br_delivery,
mileo-patch-1,
odb/12.0-l10n_br_account_nfe,
and
teste-merge-fields-nfe |
Other repositories: |
Escodoo/l10n-brazil,
LTechCS/l10n-brazil,
Melodivo/l10n-brazil-fork,
OCA/l10n-brazil,
Startec-sh/l10n-brazil,
akretion/l10n-brazil,
augustodinizl/l10n-brazil,
britoederr/l10n-brazil,
codions-labs/l10n-brazil,
crsilveira/l10n-brazil,
fmnapoli/l10n-brazil,
hendrixcosta/l10n-brazil,
jhonataneduardo/l10n-brazil,
kmee/l10n-brazil,
marceloengecom/l10n-brazil,
marcelsavegnago/l10n-brazil,
marcos-mendez/l10n-brazil,
popsolutions/l10n-brazil,
renatonlima/l10n_br_core,
and
rvalyi/l10n-brazil |
<h1 class="title">Módulo fiscal brasileiro</h1>
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/l10n-brazil/tree/12.0/l10n_br_fiscal"><img alt="OCA/l10n-brazil" src="https://img.shields.io/badge/github-OCA%2Fl10n--brazil-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/l10n-brazil-12-0/l10n-brazil-12-0-l10n_br_fiscal"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/124/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<img alt="https://raw.githubusercontent.com/OCA/l10n-brazil/12.0/l10n_br_fiscal/static/img/fiscal_dashboard.png" src="https://raw.githubusercontent.com/OCA/l10n-brazil/12.0/l10n_br_fiscal/static/img/fiscal_dashboard.png" />
<a name="classificacoes-fiscais"></a>
<h2>Classificações fiscais</h2>
<p>Primeramente, 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.</p>
<dl class="docutils">
<dt>Produtos:</dt>
<dd><ul class="first last simple">
<li>tipo fiscal</li>
<li>NCM (com ligações com os impostos)</li>
<li>genêro fiscal</li>
<li>CEST</li>
<li>NBM</li>
<li>NBS</li>
<li>tipo de serviço</li>
<li>unidades fiscais</li>
</ul>
</dd>
<dt>Parceiros:</dt>
<dd><ul class="first last simple">
<li>CNAE</li>
<li>perfil fiscal</li>
</ul>
</dd>
</dl>
<a name="conceito-de-documento-fiscal"></a>
<h2>Conceito de documento fiscal</h2>
<p>O Odoo nativo não tem o conceito de documento fiscal. O conceito mais parecido seria o <code>account.invoice</code> e 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.</p>
<p>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.</p>
<p>Nisso se torna interessante ter o conceito de documento fiscal <code>l10n_br_fiscal.document</code> independente 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ódulo <code>l10n_br_fiscal</code>, 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.</p>
<p>Esse módulo <code>l10n_br_fiscal</code> é 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:</p>
<ul class="simple">
<li><code>nfelib</code>: 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.</li>
<li><code>l10n_br_nfe_spec</code>: 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á.</li>
<li><code>l10n_br_nfe</code>: 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.</li>
</ul>
<p>A transmissão é realizada usando uma lib de transmissão como <code>erpbrasil.doc</code> (baseada em Python Zeep). Importante: no caso da <code>NFS-e</code>, 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.</p>
<p>Alem disso a maioria do codigo do <code>l10n_br_fiscal.document</code> e das linhas dele <code>l10n_br_fiscal.document.line</code> é na verdade feito dentro de mixins <code>10n_br_fiscal.document.mixin</code> e <code>10n_br_fiscal.document.line.mixin</code> respectivamente. 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: <code>sale.order</code>, <code>purchase.order</code>, <code>stock.picking</code>... Isso é bem visível nos módulos que estendem esse módulo:</p>
<pre>
<code lang="text">|-- l10n_br_fiscal
|-- l10n_br_sale
|-- l10n_br_purchase
|-- l10n_br_account
|-- ...</code>
</pre>
<p>Porem o caso do invoice Odoo no modulo <code>l10n_br_account</code> é 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 modulo <code>l10n_br_account</code> é que um invoice Odoo passa a ter um <code>_inherits = "l10n_br_fiscal.document"</code> 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.</p>
<p>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 mixins <code>10n_br_fiscal.document.mixin</code> e <code>10n_br_fiscal.document.line.mixin</code> no invoice e invoice.line, esses campos fiscais apareceriam também nas tabelas <code>account_invoice</code> e <code>account_invoice_line</code> de 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: <code>10n_br_fiscal.document.mixin.methods</code> e <code>10n_br_fiscal.document.line.mixin.methods</code> que são injectados nos objetos <code>account_invoice</code> e <code>account_invoice_line</code> respectivamente dentro do modulo <code>l10n_br_account</code>.</p>
<a name="impostos-brasileiros"></a>
<h2>Impostos brasileiros</h2>
<p>O módulo l10n_br_fiscal lida com os principais impostos brasileiros como:</p>
<ul class="simple">
<li>ICMS do Simples Nacional</li>
<li>ICMS do Regime normal</li>
<li>IPI</li>
<li>PIS</li>
<li>COFINS</li>
<li>ISSQN</li>
<li>IRPJ</li>
<li>II</li>
<li>CSLL</li>
<li>INSS</li>
</ul>
<p>O módulo l10n_br_fiscal também lida com:</p>
<ul class="simple">
<li>ST</li>
<li>retenções</li>
</ul>
<img alt="https://raw.githubusercontent.com/OCA/l10n-brazil/12.0/l10n_br_fiscal/static/img/fiscal_line.png" src="https://raw.githubusercontent.com/OCA/l10n-brazil/12.0/l10n_br_fiscal/static/img/fiscal_line.png" />
<img alt="https://raw.githubusercontent.com/OCA/l10n-brazil/12.0/l10n_br_fiscal/static/img/fiscal_total.png" src="https://raw.githubusercontent.com/OCA/l10n-brazil/12.0/l10n_br_fiscal/static/img/fiscal_total.png" />
<p>É 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.</p>
<p>Até a versão 10.0, tentamos usar e estender o objeto Odoo <code>account.tax</code>. A Akretion até criou o projeto <code>OCA/account-fiscal-rule</code> para 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 do <code>account.fiscal.position</code> nativo na parte fiscal e pelo contrário, isso nos obrigava a ter um registro <code>account.tax</code> para 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.</p>
<p>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ódulo <code>l10n_br_account</code>, ligamos os objetos nativos <code>account.tax</code> as alíquotas dos impostos brasileiros.</p>
<p>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)...</p>
<a name="operacoes-fiscais"></a>
<h2>Operações fiscais</h2>
<blockquote>
<img alt="https://raw.githubusercontent.com/OCA/l10n-brazil/12.0/l10n_br_fiscal/static/img/fiscal_operation.png" src="https://raw.githubusercontent.com/OCA/l10n-brazil/12.0/l10n_br_fiscal/static/img/fiscal_operation.png" />
</blockquote>
<p>No 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:</p>
<ul class="simple">
<li>no Brasil se tem uma operação fiscal por linha de documento fiscal</li>
<li>a posição fiscal do Odoo desconhece a lógica da parametrização fiscal brasileira</li>
<li>já 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 objeto <code>account.fiscal.position</code> neste módulo.</li>
</ul>
<p>Com tudo, optamos por criar um objeto <code>l10n_br_fiscal.operation</code> que faz exactamente o que precisamos para o Brasil. Mais adiante, no módulo <code>l10n_br_account</code> é realizado a integração entre a posição fiscal do Odoo e essa operação fiscal.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="id1">Installation</a></li>
<li><a class="reference internal" href="#configuration" id="id2">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="id3">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="id4">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id5">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id6">Credits</a></li>
</ul>
</div>
<a name="installation"></a>
<h3><a class="toc-backref" href="#id1">Installation</a></h3>
<p>To install this module, you need to:</p>
<ul class="simple">
<li>do this ...</li>
</ul>
<a name="configuration"></a>
<h3><a class="toc-backref" href="#id2">Configuration</a></h3>
<p>To configure this module, you need to:</p>
<ul class="simple">
<li>go to ...</li>
</ul>
<a name="usage"></a>
<h3><a class="toc-backref" href="#id3">Usage</a></h3>
<p>To use this module, you need to:</p>
<ul class="simple">
<li>go to ...</li>
</ul>
<a name="known-issues-roadmap"></a>
<h3><a class="toc-backref" href="#id4">Known issues / Roadmap</a></h3>
<ul class="simple">
<li>TODO!</li>
</ul>
<a name="bug-tracker"></a>
<h3><a class="toc-backref" href="#id5">Bug Tracker</a></h3>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/l10n-brazil/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/l10n-brazil/issues/new?body=module:%20l10n_br_fiscal%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
<a name="credits"></a>
<h3><a class="toc-backref" href="#id6">Credits</a></h3>
<a name="authors"></a>
<h2>Authors</h2>
<ul class="simple">
<li>Akretion</li>
</ul>
<a name="contributors"></a>
<h2>Contributors</h2>
<ul class="simple">
<li>Renato Lima <<a class="reference external" href="mailto:renato.lima@akretion.com.br">renato.lima@akretion.com.br</a>></li>
<li>Raphaël Valyi <<a class="reference external" href="mailto:raphael.valyi@akretion.com.br">raphael.valyi@akretion.com.br</a>></li>
<li>Magno Costa <<a class="reference external" href="mailto:magno.costa@akretion.com.br">magno.costa@akretion.com.br</a>></li>
<li>Luis Felipe Mileo <<a class="reference external" href="mailto:mileo@kmee.com.br">mileo@kmee.com.br</a>></li>
<li>Marcel Savegnago <<a class="reference external" href="mailto:marcel.savegnago@escodoo.com.br">marcel.savegnago@escodoo.com.br</a>></li>
<li>Luis Otavio Malta Conceição <<a class="reference external" href="mailto:luis.malta@kmee.com.br">luis.malta@kmee.com.br</a>></li>
</ul>
<a name="maintainers"></a>
<h2>Maintainers</h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external" href="https://github.com/renatonlima"><img alt="renatonlima" src="https://github.com/renatonlima.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/l10n-brazil/tree/12.0/l10n_br_fiscal">OCA/l10n-brazil</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>