odoo-addon-l10n-br-fiscal 16.0.1.18.1__py3-none-any.whl → 16.0.1.18.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of odoo-addon-l10n-br-fiscal might be problematic. Click here for more details.

Files changed (41) hide show
  1. odoo/addons/l10n_br_fiscal/README.rst +225 -105
  2. odoo/addons/l10n_br_fiscal/__manifest__.py +1 -1
  3. odoo/addons/l10n_br_fiscal/i18n/l10n_br_fiscal.pot +93 -5
  4. odoo/addons/l10n_br_fiscal/models/comment.py +4 -4
  5. odoo/addons/l10n_br_fiscal/models/data_abstract.py +3 -3
  6. odoo/addons/l10n_br_fiscal/models/data_ncm_nbs_abstract.py +7 -9
  7. odoo/addons/l10n_br_fiscal/models/document_eletronic.py +3 -4
  8. odoo/addons/l10n_br_fiscal/models/document_event.py +1 -1
  9. odoo/addons/l10n_br_fiscal/models/document_fiscal_line_mixin_methods.py +4 -3
  10. odoo/addons/l10n_br_fiscal/models/document_fiscal_mixin_fields.py +2 -2
  11. odoo/addons/l10n_br_fiscal/models/document_fiscal_mixin_methods.py +37 -31
  12. odoo/addons/l10n_br_fiscal/models/document_move_mixin.py +3 -1
  13. odoo/addons/l10n_br_fiscal/models/document_serie.py +1 -1
  14. odoo/addons/l10n_br_fiscal/models/product_template.py +2 -2
  15. odoo/addons/l10n_br_fiscal/models/subsequent_document.py +0 -1
  16. odoo/addons/l10n_br_fiscal/models/subsequent_operation.py +0 -2
  17. odoo/addons/l10n_br_fiscal/models/tax_definition.py +1 -5
  18. odoo/addons/l10n_br_fiscal/readme/CONFIGURE.md +7 -0
  19. odoo/addons/l10n_br_fiscal/readme/CONTRIBUTORS.md +12 -0
  20. odoo/addons/l10n_br_fiscal/readme/DESCRIPTION.md +196 -0
  21. odoo/addons/l10n_br_fiscal/readme/HISTORY.md +1 -0
  22. odoo/addons/l10n_br_fiscal/readme/INSTALL.md +5 -0
  23. odoo/addons/l10n_br_fiscal/readme/ROADMAP.md +1 -0
  24. odoo/addons/l10n_br_fiscal/readme/USAGE.md +4 -0
  25. odoo/addons/l10n_br_fiscal/static/description/index.html +155 -43
  26. odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_generic.py +1 -1
  27. odoo/addons/l10n_br_fiscal/tests/test_ibpt.py +1 -2
  28. odoo/addons/l10n_br_fiscal/tools.py +2 -2
  29. odoo_addon_l10n_br_fiscal-16.0.1.18.2.dist-info/METADATA +364 -0
  30. {odoo_addon_l10n_br_fiscal-16.0.1.18.1.dist-info → odoo_addon_l10n_br_fiscal-16.0.1.18.2.dist-info}/RECORD +32 -32
  31. {odoo_addon_l10n_br_fiscal-16.0.1.18.1.dist-info → odoo_addon_l10n_br_fiscal-16.0.1.18.2.dist-info}/WHEEL +1 -1
  32. odoo_addon_l10n_br_fiscal-16.0.1.18.2.dist-info/top_level.txt +1 -0
  33. odoo/addons/l10n_br_fiscal/readme/CONFIGURE.rst +0 -5
  34. odoo/addons/l10n_br_fiscal/readme/CONTRIBUTORS.rst +0 -19
  35. odoo/addons/l10n_br_fiscal/readme/DESCRIPTION.rst +0 -103
  36. odoo/addons/l10n_br_fiscal/readme/HISTORY.rst +0 -0
  37. odoo/addons/l10n_br_fiscal/readme/INSTALL.rst +0 -4
  38. odoo/addons/l10n_br_fiscal/readme/ROADMAP.rst +0 -0
  39. odoo/addons/l10n_br_fiscal/readme/USAGE.rst +0 -1
  40. odoo_addon_l10n_br_fiscal-16.0.1.18.1.dist-info/METADATA +0 -244
  41. odoo_addon_l10n_br_fiscal-16.0.1.18.1.dist-info/top_level.txt +0 -1
@@ -367,16 +367,19 @@ ul.auto-toc {
367
367
  !! This file is generated by oca-gen-addon-readme !!
368
368
  !! changes will be overwritten. !!
369
369
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
370
- !! source digest: sha256:9fa01cd837e4c47121656b5ea00d0dd8a35417a08afadb987905da99d4ae3699
370
+ !! source digest: sha256:a248da3cdce943ad2d1d06331dca73ca572668dbf62b6786726192e4a000e1f2
371
371
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
372
372
  <p><a class="reference external image-reference" 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 image-reference" 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 image-reference" href="https://github.com/OCA/l10n-brazil/tree/16.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 image-reference" href="https://translation.odoo-community.org/projects/l10n-brazil-16-0/l10n-brazil-16-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 image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/l10n-brazil&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
373
- <img alt="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_dashboard.png" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_dashboard.png" />
373
+ <p><img alt="image" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_dashboard.png" /></p>
374
374
  <div class="section" id="classificacoes-fiscais">
375
375
  <h1>Classificações fiscais</h1>
376
- <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>
377
- <dl class="docutils">
378
- <dt>Produtos:</dt>
379
- <dd><ul class="first last simple">
376
+ <p>Primeramente, este módulo traz uma variedade de cadastros fiscais para
377
+ produtos, parceiros ou empresas. Na hora de emitir documentos fiscais
378
+ como NF-e, NFS-e etc… até empresas do regime simplificado ou MEI
379
+ precisam de vários desses cadastros. E empresas do regime normal
380
+ precisam deles para calcular os impostos ou emitir documentos fiscais.</p>
381
+ <p>Produtos:</p>
382
+ <ul class="simple">
380
383
  <li>tipo fiscal</li>
381
384
  <li>NCM (com ligações com os impostos)</li>
382
385
  <li>genêro fiscal</li>
@@ -386,28 +389,71 @@ ul.auto-toc {
386
389
  <li>tipo de serviço</li>
387
390
  <li>unidades fiscais</li>
388
391
  </ul>
389
- </dd>
390
- <dt>Parceiros:</dt>
391
- <dd><ul class="first last simple">
392
+ <p>Parceiros:</p>
393
+ <ul class="simple">
392
394
  <li>CNAE</li>
393
395
  <li>perfil fiscal</li>
394
396
  </ul>
395
- </dd>
396
- </dl>
397
397
  </div>
398
398
  <div class="section" id="conceito-de-documento-fiscal">
399
399
  <h1>Conceito de documento fiscal</h1>
400
- <p>O Odoo nativo não tem o conceito de documento fiscal. O conceito mais parecido seria o <tt class="docutils literal">account.move</tt> 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>
401
- <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>
402
- <p>Nisso se torna interessante ter o conceito de documento fiscal <tt class="docutils literal">l10n_br_fiscal.document</tt> 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 <tt class="docutils literal">l10n_br_fiscal</tt>, 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>
403
- <p>Esse módulo <tt class="docutils literal">l10n_br_fiscal</tt> é agnóstico de qualquer tecnologia XML ou SOAP. Ele contém apenas o que 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>
400
+ <p>O Odoo nativo não tem o conceito de documento fiscal. O conceito mais
401
+ parecido seria o <tt class="docutils literal">account.move</tt> e até a versão 10.0 a localização
402
+ estendia o invoice para suportar as NF-e e NFS-e apenas. Naquela época
403
+ não era razoável você cogitar fazer o SPED no Odoo, o próprio core do
404
+ Odoo não tinha maturidade para isso então era válido a abordagem
405
+ empírica de ir suportando mais casos de NFe dentro do invoice Odoo
406
+ apenas.</p>
407
+ <p>Porém, na v12, amadurecemos o framework XML/SOAP de forma que se torna
408
+ razoável suportar vários documentos fiscais (NF-e, NFS-e, MDF-e, CT-e,
409
+ EFD-Reinf, e-Social, GNRE, BP-e…) com a qualidade OCA dentro do Odoo.
410
+ Também, apesar de complexo, o core do Odoo finalmente tem suporte
411
+ suficiente para as operações de uma empresa que faria o SPED.</p>
412
+ <p>Nisso se torna interessante ter o conceito de documento fiscal
413
+ <tt class="docutils literal">l10n_br_fiscal.document</tt> independente do invoice Odoo para suportar
414
+ todos os documentos fiscais mesmo, de forma modular. Um outro motivo
415
+ para ter o conceito de documento fiscal fora do módulo account é que
416
+ quando você analisa o código deste módulo <tt class="docutils literal">l10n_br_fiscal</tt>, quase nada
417
+ dele poderia ser feito pelo módulo account do Odoo. Então ter esse
418
+ módulo l10n_br_fiscal que não depende do módulo account também é uma
419
+ forma de modularizar a localização para facilitar a manutenção dela,
420
+ especialmente quando se trata de migrar e que o módulo pode ter mudado
421
+ bastante como foi o caso entre a v8.0 e a v9.0 ou a v12.0 e v13.0 por
422
+ exemplo. Facilita também a governança do projeto possibilitando que
423
+ pessoas sejam responsáveis por diferentes partes. O módulo
424
+ l10n_br_fiscal foi principalmente extraído do módulo
425
+ l10n_br_l10n_br_account_product das v7.0 as v.10.0.</p>
426
+ <p>Esse módulo <tt class="docutils literal">l10n_br_fiscal</tt> é agnóstico de qualquer tecnologia XML ou
427
+ SOAP. Ele contém apenas o que há de comum entre os documentos fiscais
428
+ mas esses últimos são implementados em outros módulos. Para um
429
+ determinado documento fiscal como a Nf-e, você tem então por exemplo:</p>
404
430
  <ul class="simple">
405
- <li><tt class="docutils literal">nfelib</tt>: 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>
406
- <li><tt class="docutils literal">l10n_br_nfe_spec</tt>: 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>
407
- <li><tt class="docutils literal">l10n_br_nfe</tt>: 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>
431
+ <li><tt class="docutils literal">nfelib</tt>: um pacote de data bindings puro Python (que não depende
432
+ do Odoo). Em geral usamos um gerador de código para gerar esses
433
+ bindings a partir dos esquemas XSD da fazenda.</li>
434
+ <li><tt class="docutils literal">l10n_br_nfe_spec</tt>: um modulo de mixins Odoo geridos também a
435
+ partir dos XSD. Esses mixins são apenas as estruturas de dados das
436
+ especificações antes de ser injectados em objetos Odoo existantes
437
+ (como res.partner ou l10n_br_fiscal.document) ou até tornados
438
+ concretos caso não exite objetos na Odoo ou na OCA para eles já.</li>
439
+ <li><tt class="docutils literal">l10n_br_nfe</tt>: um módulo Odoo que trata de injectar esses mappings
440
+ fiscais nos objetos Odoo e que implementa a lógica como os wizards
441
+ para a transmissão.</li>
408
442
  </ul>
409
- <p>A transmissão é realizada usando uma lib de transmissão como <tt class="docutils literal">erpbrasil.doc</tt> (baseada em Python Zeep). Importante: no caso da <tt class="docutils literal"><span class="pre">NFS-e</span></tt>, 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>
410
- <p>Alem disso a maioria do codigo do <tt class="docutils literal">l10n_br_fiscal.document</tt> e das linhas dele <tt class="docutils literal">l10n_br_fiscal.document.line</tt> é na verdade feito dentro de mixins <tt class="docutils literal">10n_br_fiscal.document.mixin</tt> e <tt class="docutils literal">10n_br_fiscal.document.line.mixin</tt> 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: <tt class="docutils literal">sale.order</tt>, <tt class="docutils literal">purchase.order</tt>, <tt class="docutils literal">stock.picking</tt>… Isso é bem visível nos módulos que estendem esse módulo:</p>
443
+ <p>A transmissão é realizada usando uma lib de transmissão como
444
+ <tt class="docutils literal">erpbrasil.doc</tt> (baseada em Python Zeep). Importante: no caso da
445
+ <tt class="docutils literal"><span class="pre">NFS-e</span></tt>, a ausência de padrão nacional hoje e a simplicidade do modelo
446
+ (comparado com a NFe) faz que foi decidido de não usar um módulo de
447
+ mixins fiscais Odoo geridos, o mapping é com a lib de binding é feito
448
+ manualmente, família de NFS-e por família.</p>
449
+ <p>Alem disso a maioria do codigo do <tt class="docutils literal">l10n_br_fiscal.document</tt> e das
450
+ linhas dele <tt class="docutils literal">l10n_br_fiscal.document.line</tt> é na verdade feito dentro
451
+ de mixins <tt class="docutils literal">10n_br_fiscal.document.mixin</tt> e
452
+ <tt class="docutils literal">10n_br_fiscal.document.line.mixin</tt> respectivamente. Esses mixins
453
+ podem assim ser injectados em outros objetos Odoo que precedem os
454
+ documentos fiscais e podem armazenar então o mesmo tipo de informação:
455
+ <tt class="docutils literal">sale.order</tt>, <tt class="docutils literal">purchase.order</tt>, <tt class="docutils literal">stock.picking</tt>… Isso é bem
456
+ visível nos módulos que estendem esse módulo:</p>
411
457
  <pre class="code text literal-block">
412
458
  |-- l10n_br_fiscal
413
459
  |-- l10n_br_sale
@@ -415,12 +461,36 @@ ul.auto-toc {
415
461
  |-- l10n_br_account
416
462
  |-- ...
417
463
  </pre>
418
- <p>Porem o caso do invoice Odoo no modulo <tt class="docutils literal">l10n_br_account</tt> é 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 <tt class="docutils literal">l10n_br_account</tt> é que um invoice Odoo passa a ter um <tt class="docutils literal">_inherits = &quot;l10n_br_fiscal.document&quot;</tt> 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>
419
- <p>Sendo assim,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 <tt class="docutils literal">10n_br_fiscal.document.mixin</tt> e <tt class="docutils literal">10n_br_fiscal.document.line.mixin</tt> no invoice e invoice.line, esses campos fiscais apareceriam também nas tabelas <tt class="docutils literal">account_move</tt> e <tt class="docutils literal">account_move_line</tt> 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: <tt class="docutils literal">10n_br_fiscal.document.mixin.methods</tt> e <tt class="docutils literal">10n_br_fiscal.document.line.mixin.methods</tt> que são injectados nos objetos <tt class="docutils literal">account_move</tt> e <tt class="docutils literal">account_move_line</tt> respectivamente dentro do modulo <tt class="docutils literal">l10n_br_account</tt>.</p>
464
+ <p>Porem o caso do invoice Odoo no modulo <tt class="docutils literal">l10n_br_account</tt> é diferente
465
+ ainda. Pois já se tem a tabela independente do documento fiscal cuja
466
+ grande maioria das dezenas e até centenas de campos fiscais (no caso de
467
+ muitos tipos de documentos fiscais) não são redundante com os do invoice
468
+ Odoo. Se a gente injetasse esses mixins dentro do invoice, aí sim essas
469
+ centenas de campos seriam duplicados entre o invoice e o documento
470
+ fiscal. Por isso, o sistema que foi adotado no modulo
471
+ <tt class="docutils literal">l10n_br_account</tt> é que um invoice Odoo passa a ter um
472
+ <tt class="docutils literal">_inherits = &quot;l10n_br_fiscal.document&quot;</tt> de forma que se pilota o
473
+ documento fiscal através do invoice, oferecendo o mesmo tipo de
474
+ integração como antes. O mesmo tipo de mecanismo acontece com a linha do
475
+ documento fiscal.</p>
476
+ <p>Sendo assim, já pelos _inherits, o invoice Odoo e as linhas dele já vão
477
+ puxar todos campos fiscais como se eles fossem das suas respectivas
478
+ tabelas sem duplicar eles no banco. Se alem disso a gente injetasse os
479
+ mixins <tt class="docutils literal">10n_br_fiscal.document.mixin</tt> e
480
+ <tt class="docutils literal">10n_br_fiscal.document.line.mixin</tt> no invoice e invoice.line, esses
481
+ campos fiscais apareceriam também nas tabelas <tt class="docutils literal">account_move</tt> e
482
+ <tt class="docutils literal">account_move_line</tt> de forma redundantes com os campos puxados pelos
483
+ _inherits. Para não ter esse problema, os métodos fiscais comuns (sem
484
+ os campos) foram ainda extraidos nos mixins:
485
+ <tt class="docutils literal">10n_br_fiscal.document.mixin.methods</tt> e
486
+ <tt class="docutils literal">10n_br_fiscal.document.line.mixin.methods</tt> que são injectados nos
487
+ objetos <tt class="docutils literal">account_move</tt> e <tt class="docutils literal">account_move_line</tt> respectivamente dentro
488
+ do modulo <tt class="docutils literal">l10n_br_account</tt>.</p>
420
489
  </div>
421
490
  <div class="section" id="impostos-brasileiros">
422
491
  <h1>Impostos brasileiros</h1>
423
- <p>O módulo l10n_br_fiscal lida com os principais impostos brasileiros como:</p>
492
+ <p>O módulo l10n_br_fiscal lida com os principais impostos brasileiros
493
+ como:</p>
424
494
  <ul class="simple">
425
495
  <li>ICMS do Simples Nacional</li>
426
496
  <li>ICMS do Regime normal</li>
@@ -438,38 +508,69 @@ ul.auto-toc {
438
508
  <li>ST</li>
439
509
  <li>retenções</li>
440
510
  </ul>
441
- <img alt="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_line.png" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_line.png" />
442
- <img alt="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_total.png" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_total.png" />
443
- <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>
444
- <p>Até a versão 10.0, tentamos usar e estender o objeto Odoo <tt class="docutils literal">account.tax</tt>. A Akretion até criou o projeto <tt class="docutils literal"><span class="pre">OCA/account-fiscal-rule</span></tt> 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 <tt class="docutils literal">account.fiscal.position</tt> nativo na parte fiscal e pelo contrário, isso nos obrigava a ter um registro <tt class="docutils literal">account.tax</tt> 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>
445
- <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 <tt class="docutils literal">l10n_br_account</tt>, ligamos os objetos nativos <tt class="docutils literal">account.tax</tt> as alíquotas dos impostos brasileiros.</p>
446
- <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>
511
+ <p><img alt="image1" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_line.png" /></p>
512
+ <p><img alt="image2" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_total.png" /></p>
513
+ <p>É notório que o cálculo dos impostos no Brasil é muito especial e muito
514
+ trabalhoso. Geralmente é o motivo pelo qual os ERPs internacionais não
515
+ tem grande fatia de mercado brasileiro.</p>
516
+ <p>Até a versão 10.0, tentamos usar e estender o objeto Odoo
517
+ <tt class="docutils literal">account.tax</tt>. A Akretion até criou o projeto
518
+ <tt class="docutils literal"><span class="pre">OCA/account-fiscal-rule</span></tt> para determinar as alíquotas de cada imposto
519
+ de accordo com os parâmetros da operação fiscal. Porém, a gente acabava
520
+ usando quase nada do <tt class="docutils literal">account.fiscal.position</tt> nativo na parte fiscal
521
+ e pelo contrário, isso nos obrigava a ter um registro <tt class="docutils literal">account.tax</tt>
522
+ para cada aliquota e nos obrigava a manter centenas de taxas e dezenas
523
+ de milhares de regras para selecionar a “posição fiscal” Odoo que
524
+ aplicaria as taxas corretas. E você ainda tinha que gerir essas dezenas
525
+ de milhares de regras para uma determinada empresa do regime normal.
526
+ Conclusão: era inviável nos projetos menores de tentar se encaixa na
527
+ lógica do Odoo para calcular os impostos brasileiros.</p>
528
+ <p>Nisso criamos neste módulo os modelos de taxas que representam
529
+ exatamente o funcionamentos dos impostos brasileiros. Além dos cálculos,
530
+ esses modelos também nos servem a carregar as tabelas dos impostos. E
531
+ mais adiante, no módulo <tt class="docutils literal">l10n_br_account</tt>, ligamos os objetos nativos
532
+ <tt class="docutils literal">account.tax</tt> as alíquotas dos impostos brasileiros.</p>
533
+ <p>Claro esses modelos dos impostos atendem as empresas do regime normal,
534
+ mas é bom lembrar que até empresas do regime simplificado precisam
535
+ desses modelos para realizar as operações com ST (Substituição
536
+ Tributária)…</p>
447
537
  </div>
448
538
  <div class="section" id="operacoes-fiscais">
449
539
  <h1>Operações fiscais</h1>
450
540
  <blockquote>
451
- <img alt="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_operation.png" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_operation.png" />
452
- </blockquote>
453
- <p>No Odoo nativo, o conceito mais parecido com a operação fiscal e o <tt class="docutils literal">account.fiscal.position</tt>. 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>
541
+ <img alt="image3" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_operation.png" /></blockquote>
542
+ <p>No Odoo nativo, o conceito mais parecido com a operação fiscal e o
543
+ <tt class="docutils literal">account.fiscal.position</tt>. E ate a versão 10.0, era o que a gente
544
+ usava. Porém, a posição fiscal do Odoo não resolve muito os nossos
545
+ problemas pois:</p>
454
546
  <ul class="simple">
455
547
  <li>no Brasil se tem uma operação fiscal por linha de documento fiscal</li>
456
- <li>a posição fiscal do Odoo desconhece a lógica da parametrização fiscal brasileira</li>
457
- <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 <tt class="docutils literal">account.fiscal.position</tt> neste módulo.</li>
548
+ <li>a posição fiscal do Odoo desconhece a lógica da parametrização fiscal
549
+ brasileira</li>
550
+ <li>já que puxamos o cadastro dos impostos no módulo l10n_br_fiscal fora
551
+ do módulo account (sem depender dele), não temos ainda o objeto
552
+ <tt class="docutils literal">account.fiscal.position</tt> neste módulo.</li>
458
553
  </ul>
459
- <p>Com tudo, optamos por criar um objeto <tt class="docutils literal">l10n_br_fiscal.operation</tt> que faz exactamente o que precisamos para o Brasil. Mais adiante, no módulo <tt class="docutils literal">l10n_br_account</tt> é realizado a integração entre a posição fiscal do Odoo e essa operação fiscal.</p>
554
+ <p>Com tudo, optamos por criar um objeto <tt class="docutils literal">l10n_br_fiscal.operation</tt> que
555
+ faz exactamente o que precisamos para o Brasil. Mais adiante, no módulo
556
+ <tt class="docutils literal">l10n_br_account</tt> é realizado a integração entre a posição fiscal do
557
+ Odoo e essa operação fiscal.</p>
460
558
  <p><strong>Table of contents</strong></p>
461
559
  <div class="contents local topic" id="contents">
462
560
  <ul class="simple">
463
561
  <li><a class="reference internal" href="#installation" id="toc-entry-1">Installation</a></li>
464
562
  <li><a class="reference internal" href="#configuration" id="toc-entry-2">Configuration</a></li>
465
563
  <li><a class="reference internal" href="#usage" id="toc-entry-3">Usage</a></li>
466
- <li><a class="reference internal" href="#bug-tracker" id="toc-entry-4">Bug Tracker</a></li>
467
- <li><a class="reference internal" href="#credits" id="toc-entry-5">Credits</a></li>
564
+ <li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-4">Known issues / Roadmap</a></li>
565
+ <li><a class="reference internal" href="#changelog" id="toc-entry-5">Changelog</a></li>
566
+ <li><a class="reference internal" href="#bug-tracker" id="toc-entry-6">Bug Tracker</a></li>
567
+ <li><a class="reference internal" href="#credits" id="toc-entry-7">Credits</a></li>
468
568
  </ul>
469
569
  </div>
470
570
  <div class="section" id="installation">
471
571
  <h2><a class="toc-backref" href="#toc-entry-1">Installation</a></h2>
472
- <p>Para instalar o módulo l10n_br_fiscal, você precisa de instalar primeiro os pacotes Python</p>
572
+ <p>Para instalar o módulo l10n_br_fiscal, você precisa de instalar primeiro
573
+ os pacotes Python</p>
473
574
  <ul class="simple">
474
575
  <li>erpbrasil.base</li>
475
576
  <li>erpbrasil.assinatura</li>
@@ -479,17 +580,28 @@ ul.auto-toc {
479
580
  <h2><a class="toc-backref" href="#toc-entry-2">Configuration</a></h2>
480
581
  <p>Para uma boa configuração fiscal, você tem que revisar bem:</p>
481
582
  <ul class="simple">
482
- <li>em Configurações: as operaçoes fiscais que você vai usar, as linhas de operação fiscal e as definições das taxas nessas linhas.</li>
583
+ <li>em Configurações: as operaçoes fiscais que você vai usar, as linhas
584
+ de operação fiscal e as definições das taxas nessas linhas.</li>
483
585
  <li>a configuração fiscal da sua empresa (aba fiscal)</li>
484
- <li>a configuração fiscal dos clientes e fornecedores (aba fiscal) e dos produtos (aba fiscal).</li>
586
+ <li>a configuração fiscal dos clientes e fornecedores (aba fiscal) e dos
587
+ produtos (aba fiscal).</li>
485
588
  </ul>
486
589
  </div>
487
590
  <div class="section" id="usage">
488
591
  <h2><a class="toc-backref" href="#toc-entry-3">Usage</a></h2>
489
- <p>Você pode criar documentos fiscais direitamente pelo menu fiscal, mas a princípio você vai pilotar a criação de documentos fiscais a partir dos invoices Odoo, usando módulos adicionais como l10n_br_account, l10n_br_sale, l10n_br_purchase…</p>
592
+ <p>Você pode criar documentos fiscais direitamente pelo menu fiscal, mas a
593
+ princípio você vai pilotar a criação de documentos fiscais a partir dos
594
+ invoices Odoo, usando módulos adicionais como l10n_br_account,
595
+ l10n_br_sale, l10n_br_purchase…</p>
596
+ </div>
597
+ <div class="section" id="known-issues-roadmap">
598
+ <h2><a class="toc-backref" href="#toc-entry-4">Known issues / Roadmap</a></h2>
599
+ </div>
600
+ <div class="section" id="changelog">
601
+ <h2><a class="toc-backref" href="#toc-entry-5">Changelog</a></h2>
490
602
  </div>
491
603
  <div class="section" id="bug-tracker">
492
- <h2><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h2>
604
+ <h2><a class="toc-backref" href="#toc-entry-6">Bug Tracker</a></h2>
493
605
  <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/l10n-brazil/issues">GitHub Issues</a>.
494
606
  In case of trouble, please check there if your issue has already been reported.
495
607
  If you spotted it first, help us to smash it by providing a detailed and welcomed
@@ -497,7 +609,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
497
609
  <p>Do not contact contributors directly about support or help with technical issues.</p>
498
610
  </div>
499
611
  <div class="section" id="credits">
500
- <h2><a class="toc-backref" href="#toc-entry-5">Credits</a></h2>
612
+ <h2><a class="toc-backref" href="#toc-entry-7">Credits</a></h2>
501
613
  </div>
502
614
  </div>
503
615
  <div class="section" id="authors">
@@ -1076,7 +1076,7 @@ class TestFiscalDocumentGeneric(TransactionCase):
1076
1076
  additional_data = self.nfe_not_taxpayer.fiscal_line_ids[0].additional_data
1077
1077
  self.assertEqual(
1078
1078
  additional_data,
1079
- "manual comment test - Valor Aprox. dos Tributos: R$ 0,00"
1079
+ "manual comment test - Valor Aprox. dos Tributos: R$ 0,00",
1080
1080
  # TODO FIXME changed 0.00 to 0,00 to get tests pass on v13, but not
1081
1081
  # correct
1082
1082
  )
@@ -25,8 +25,7 @@ def _not_every_day_test(method, self, modulo=7, remaining=0):
25
25
  return method(self)
26
26
  else:
27
27
  return lambda: _logger.info(
28
- "Skipping test today because datetime.now().day %% %s != %s"
29
- % (modulo, remaining)
28
+ f"Skipping test today because datetime.now().day % {modulo} != {remaining}"
30
29
  )
31
30
 
32
31
 
@@ -72,13 +72,13 @@ def build_edoc_path(
72
72
  try:
73
73
  os.makedirs(caminho, exist_ok=True)
74
74
  except Exception as e:
75
- _logger.error("Falha de permissão ao acessar diretorio do e-doc {}".format(e))
75
+ _logger.error(f"Falha de permissão ao acessar diretorio do e-doc {e}")
76
76
  return caminho
77
77
 
78
78
 
79
79
  def remove_non_ascii_characters(value):
80
80
  result = ""
81
- if value and type(value) is str:
81
+ if value and isinstance(value, str):
82
82
  result = (
83
83
  normalize("NFKD", value)
84
84
  .encode("ASCII", "ignore")