Repository navigation
Conversation
|
Hi @renatonlima, @mileo, @marcelsavegnago, |
d866e34 to
4cef30f
Compare
4cef30f to
9ff1ead
Compare
9ff1ead to
a36413b
Compare
|
There hasn't been any activity on this pull request in the past 4 months, so it has been marked as stale and it will be closed automatically if no further activity occurs in the next 30 days. |
|
Hi @mileo, @renatonlima, |
2b51423 to
e69f741
Compare
|
@antoniospneto dei um rebase e ta passando os testes. Esse PR eh meio que minimalista +153/-95 Lines mas vou fazer um outro melhor com um switch erpbrasil.edoc/nfelib e alguns corretivos a mais. Ai na 16.0 poderiamos ter esse switch com a transmissao erpbrasil.edoc por padrao e na 18.0 a gente poderia ativar a transmissao nfelib por padrao... |
4dc11e7 to
d6dbe72
Compare
…g_parameter Keep the legacy erpbrasil.edoc transmission as the default and dispatch to the new nfelib SOAP clients only when the l10n_br_nfe.nfelib_soap_transmission system parameter is True. The 16.0 code paths are restored verbatim so they keep master's coverage, and the nfelib variants are factored into _nfelib_* methods reusing the shared helpers (_check_nfe_environment, _nfe_save_protocol, _nfe_process_send_asynchronous, _nfe_process_authorization, event saving, cancelation and correction flows). This branch ships the parameter enabled in data/ir_config_parameter.xml to keep proving the nfelib clients; after the merge into 16.0 the record can be dropped to fall back to erpbrasil.edoc, and on 18.0 the helper default flips to nfelib.
With brazil-fiscal-client exposing the legacy webservice names on WrappedResponse, the nfelib and erpbrasil.edoc paths share the same _nfe_update_status_and_save_data body again: protNFe is tested for a list (works for both) and processo_xml is decoded only if bytes.
…tilizacao - _nfe_send_for_authorization shares its body again between the erpbrasil.edoc and nfelib paths: only the generator call differs (processar_documento vs processar_lote) since WrappedResponse exposes the legacy webservice names. - get_nfce_qrcode uses the new NfceClient.monta_qrcode_contingencia facade (signs with the client certificate) and get_nfce_qrcode_url relies on the consulta_qrcode_url compatibility alias. - invalidate_number: envia_inutilizacao(evento=...) works on both clients now (nfelib accepts the keyword). - drop the fake_certificate workaround: brazil-fiscal-client normalizes pkcs12_data so the mTLS adapter works with the base64 Odoo value.
Add ResCompany._get_nfe_certificate_data() returning the (pkcs12 bytes, password) pair used by the SOAP clients and by signing, replacing the inline company.certificate.file/password reads. Besides the factorization, this anticipates the 18.0 certificate refactor (PR 5107) where l10n_br_fiscal_certificate extends the core certificate.certificate model: only this method has to change (to _get_br_certificate() + certificate.content / certificate.pkcs12_password), the SOAP builders and _document_export stay untouched. The PKCS12 is returned decoded, the convention used by l10n_br_nfe_dfe in that PR; nfelib re-encodes it for erpbrasil.assinatura when signing and brazil_fiscal_client normalizes it for the mTLS transport.
Converts the Manifestacao do Destinatario (md_event) transmission to the nfelib MdeClient (brazil-fiscal-client mTLS transport) when the l10n_br_nfe.nfelib_soap_transmission parameter is enabled, keeping the legacy MDeAdapter path as the default: - _nfelib_get_processor() builds the MdeClient from the company certificate; _send_event() branches on the parameter - validate_event_response() reads the response text from either a requests.Response, a brazil-fiscal-client WrappedHTTPResponse or a test fake (_retorno_text helper) - new justification field: the nfelib client (and the SEFAZ) requires a 15-255 chars justification for the 210240 event; a default is provided when empty - tests: the legacy-path tests now explicitly disable the parameter (this branch enables it via demo data), and a new TestNFeMDENfelib class asserts the signed event really goes on the wire (Signature + tpEvento in the outgoing payload), the state/protocol handling and the 573 duplicate case Requires nfelib 3.0.0-soap-v2 (fix for the <evento/> self-closing placeholder injection in the MdeClient). Assisted-by: Hermes Agent (Nous Research)
d6dbe72 to
99376e5
Compare
antoniospneto
left a comment
There was a problem hiding this comment.
Testei a PR em homologação com o certificado e o cadastro de uma empresa real (SC, autorizadora SVRS; MD-e no Ambiente Nacional), comparando com o caminho erpbrasil.edoc na mesma base (cópia neutralizada de produção, 16.0 + esta PR).
Resultado
| operação | erpbrasil.edoc | nfelib (esta PR) | nfelib + correções |
|---|---|---|---|
| autorização (síncrona) | 100 | 297 Assinatura difere do calculado | 100 |
| autorização com a empresa em modo assíncrono | — | — | 100 (vai indSinc=1 mesmo assim) |
| consulta | ok | ok | ok |
| CC-e | — | envelope vazio | 135 |
| cancelamento | — | envelope vazio | 135 |
| inutilização | — | envelope vazio | 102 |
| MD-e (ciência) | lote 128 / evento 575* | erro de certificado (empresa só com e-CNPJ); corrigindo o certificado, 404 prefixo de namespace | lote 128 / evento 575* |
* 575 é esperado: usei a chave de uma nota emitida pela própria empresa. O que conta é passar no schema igual ao legado.
Os "envelope vazio" não chegaram a sair: a trava do teste barrou antes de enviar.
Correções (PRs abertas)
- akretion/brazil-fiscal-client#25: o 297. O corpo ia como
str(ohttp.clientcodifica em latin-1 com o urllib3 1.x, o do Odoo 16) e o content-typetext/xmlia sem charset; toda NF-e com acento era recusada. - akretion/nfelib#167: cancelamento, CC-e e inutilização. Os placeholders viram tags auto-fechadas, a regex não casava e o
nfeDadosMsgia vazio; a CC-e ainda saía como<TEvento xmlns="">. - akretion/nfelib#168: MD-e montado com os tipos
TenvEvento/Tevento(<ns2:TEnvEvento>), recusado com 404. - akretion#342 (na branch desta PR, vale também pro #5318 que está empilhado nela): certificado do MD-e da empresa do evento (com fallback pro e-CNPJ);
nfelib>=3.0.0+brazil_fiscal_clientno manifest; campojustificationdo MD-e no formulário; e o teste do MD-e aceitando payload em bytes. - #5336 (código anterior a esta PR): recusa de lote no MD-e (ex.: o 404) estourava
IndexErrorem vez de mostrar o motivo.
Pontos pra discutir
- Os testes mockam o
DefaultTransport.poste devolvem resposta pronta sem olhar o request; por isso cancelamento, CC-e, inutilização e MD-e passavam no CI com o envelope errado. Sugiro conferir o conteúdo assinado dentro do elemento esperado no payload capturado, como os testes do akretion/nfelib#167 e akretion/nfelib#168 passaram a fazer. Mando esses testes assim que sair uma nfelib com essas correções (com a 3.0.0 eles falham, justamente por provar o bug). - O caminho padrão (erpbrasil.edoc) perdeu a cobertura dos testes de workflow, porque o
NFeMockagora simula só o transporte da nfelib e as classes ligam a flag. Vale rodar a suíte nos dois modos enquanto o legado for o padrão? - O
processar_loteda nfelib não repassa oenvio_sincrono: sempre mandaindSinc=1, ignorando a configuração da empresa. Vou abrir um PR na nfelib.
Não testei NFC-e nem contingência.
|
Valeu @antoniospneto vou olhar seus PRs. Vc tem razão, melhor manter os 2 caminhos de teste, na 16.0 pelo menos. Com esse cliente nosso que foi hackeado (sem ser pelo Odoo ou coisa que a gente cuidava) a gente não teve tempo para testar muito recentemente mas pretendo testar de novo. Minha preocupação foi resolver isso antes de jogar o módulo de NFe para as versões 19 ou 20 por examplo, porque a gente sabe quanto custa fazer os refatores pesados em muitas branches ao mesmo tempo. Por examplo se não fosse a necessidade da reescrita dos módulos l10n_br_fiscal_edi ou l10n_br_fiscal_dfe, eu teria botado apenas uns 30 módulos na branch 17.0 em vez de uns 50 e teríamos poupados dezenas e dezenas de PRs na 17.0... |
|
Obrigado, @antoniospneto, pelo teste com empresa real nas duas pilhas: é exatamente a medida que faltava nesta discussão, e os quatro PRs que você abriu dizem mais do que qualquer argumento. Quero responder ao corpo do PR, porque ele ficou um ano sem resposta e algumas afirmações não batem com o registro.
Sobre o rumo, para ser direto: a KMEE não tem biblioteca de estimação. Se a transmissão da SEFAZ convergir na nfelib, ótimo, desde que funcione igual ao que está em produção. O que proponho, e me comprometo a fazer:
Se isso serve, a gente tira a discussão do campo de quem é competente e leva para o campo de quem mede. É o que o Antônio acabou de fazer. |
|
Boa noite @mileo. então esse PR começou um ano atrás num tempo que vc já não fazia mais nada no OCA/l10n-brazil uns 2 anos (só ver nos commits no repo). E qdo fazia antes, sua opção era de forçar a barra com completos iniciantes (Benedito e outros) que nunca tinham o nível para contribuir algo na OCA e essa forçaçao de barra com pessoas incompetentes foi algo bem nítido para todos... Até que vc tem um nível melhorzinho, poderia ter sujo a mão para fazer vc mesmo, mas não era sua visão então sei lá vc que sabia né... Vc só voltou a se interessar pelo projeto uns 2 meses atrás agora que tá bombando né... Fato é tb que nos últimos 5 anos a Kmee não deve ter feito 5% da manutenção do módulo l10n_br_nfe nem de outros módulos essenciais como l10n_br_fiscal e fez muito pouca manutenção no próprio erpbasil.edoc. Então tivemos que nos organizar sem ter que contar com a Kmee ou vc... Vc até "pagou" sim pro Gabriel Cardoso fazer uma parte significativa do l10n_br_nfe, por isso tá como com autor mas enfim isso foi uns 6 anos atrás e quem fazia era o Gabriel, não vc... Seria como se os acionistas que compraram a CampToCamp viesse agora dar palpite de como tem que ser o roadmap do módulo queue_job sobre o pretexto que o Guewen era funcionário da CampToCamp né... Então tem bibliotecas da "org" erpbrasil que tem como manter e ajeitar, como erpbrasil.base ou erpbrasil.assinatura e nos fazemos. E tem outras que o nível de amadorismo tá alem de qualquer conserto, como o erpbrasil.edoc. Sei que vc resgatou lá a lib pysped do Ary e fez o que pude 10 anos atras. Mas vc sabe muito bem, pelo menos hoje que o Ary tinha um nível de programação muito fraco né. Se esforçou mas era fraquinho né (e te falamos sobre isso 15 anos já atrás né). O pysped tinha tipo 20k linhas de vômito de Python e nem tinha um teste na época do OpenERP 8 né... Coisa que pude trocar com algumas linhas de gerador de código na nfelib. E bom na parte do SOAP, a partir do momento que teve o xsdata foi um pouco a mesma coisa né... Vamos lá, vc teve queijo e faca na mão uns 10 anos para brilhar com erpbrasil.edoc e não fez, isso foi opção sua né, agora tá um pouco tarde para reverter esses 10 anos né. Po a lib não teve 27 estrelas em 10 anos mano... Pagou lá uns PJs aleatórios para empilhar umas merdinhas, foi o Antônio que arrumou o pouco de teste que tem... Olha que te avisei até uns dias atrás que era legal vc cuidar minimamente da migração dos módulos de POS, de gateway, de pix, de e-commerce... Eh sempre a mesma coisa, faz mil coisas de forma extremamente superficial e depois deixa largado por anos e se surpreende quando as pessoas acabam procurando alternativas dignas da OCA. Ninguém ia ter muito interesse em ir consertar o impossível a consertar que foi um trabalho bem intenso para ter vc no meio que fosse dar carta branca para iniciante fazer merda a vontade (ou agora com AI) e ainda ir arrotar em cima da lib como se tivesse feito, meio que desviando a imagem do projeto para vc. Basta ver seu site ou seus posts de IA de LinkedIn para promover realidade para lá de paralela e cima do trabalho dos outros depois de ter promovido as piores merdas no projeto por anos (sim junto com trabalho relevante, mas infelizmente a assim como uma construção, a fragilidade é das partes mais fracas). Por isso que era melhor vc fazer 10x menos coisas no OCA/l10n-brazil mas ter feito com qualidade te falamos várias e várias vezes isso. Mas podemos fazer como a lib erpbrasil.edoc.pdf, podemos deixar como opção de usar a nfelib para a NFe na 16.0 (na Akretion não temos interesse na transmissão da CTe ou MDFe na 16.0) e como padrão na 18.0 e talvez como módulo(s) opcionais na 19 ou 20. Dessa forma vc pode usar e manter erpbrasil.edoc se quiser sem atrasar a vida dos outros, mas aposto com vc que será como o erpbrasil.edoc.pdf e que vc nem vai manter. Por isso nem entendo muito esse sua mensagem anterior na real. |
_nfelib_get_processor read env.company.certificate_nfe_id: it signed with the certificate of the user's current company instead of the event company, and failed for companies having only an e-CNPJ certificate, which the erpbrasil.edoc path accepts. Use _get_nfe_certificate_data() of the event company, the single point of access to the certificate.
document.py and invalidate_number.py import the nfelib SOAP clients at module level, so l10n_br_nfe no longer loads, even with the legacy erpbrasil.edoc transmission, when nfelib is older than 3.0.0 (nfelib.nfe.client is missing) or installed without brazil_fiscal_client (only declared by l10n_br_nfe_dfe). Declare both, so pip and the addon wheel pull them and Odoo reports a version conflict instead of an ImportError.
Esse é um refator principalmente dos módulos
l10n_br_fiscal_dfeel10n_br_nfepara funcionar diretamente com o novo suporte SOAP danfelibe não depender mais deerpbrasil.edoc. Eh um POC rascunho, não tem pressa em mesclar. Porem eu acho que temos que ter isso bem definido até a reforma tributaria do inicio de 2026 e para ver a v18 também...Já que o
l10n_br_fiscal_dfefoi mesclado pela Kmee sem nem nunca funcionar direito, eu diria que poderíamos fazer o refator no l10n_br_fiscal_dfe sem muito questionamento. Juntando com #4096 , ol10n_br_fiscal_dfepoderia até se chegar num estagio Production/Stable...Agora para o
l10n_br_nfeonde a parte SOAP é critica, temos que cogitar bem o que podemos fazer. Algumas alternativas na mesa:Por fim quais seriam as vantagens de substituir o erpbrasil.edoc pela nfelib:
Por fim, esse PR é meio que o refator mínimo para ter os testes passando, é meio que o POC. Eh claro que muita coisa poderia ser melhorado. Inclusive, numa hipótese onde conservamos o erpbrasil.edoc no modulo l10_br_nfe ou num modulo extra, poderia se cogitar alguns refatores para tentar mutuzalizar o código adiante. No nfelib, eu procurei replicar o mais possível o API do pysped/erpbrasil.edoc. Porem eu anotei vários lugares onde seria possível mudar para um API mais amigável. Em especial: deixar a lib cuidar da assinatura (pros eventos inclusive), chamar o API apenas com parâmetros simples, naõ ter que montar bindings fora da lib para passar como parâmetros, API para transmissão em lote etc...
cc @OCA/local-brazil-maintainers