Skip to content

Conversation

@felipemotter
Copy link
Contributor

@felipemotter felipemotter commented Feb 10, 2026

Resumo

Esta PR é uma versão atualizada e consolidada da #4224, com diversas melhorias e correções realizadas desde então. O trabalho envolveu contribuições de múltiplos desenvolvedores ao longo do tempo.

Principais mudanças

  • Migração do DFe Monitor para res.company: Toda a lógica de distribuição de DF-e foi migrada do modelo dfe_monitor para res.company, simplificando a arquitetura e eliminando um modelo intermediário desnecessário.

  • Consolidação de modelos: Renomeação de dfe_access_key para dfe_document, reestruturação de views e menus, e refatoração do modelo MDE para nfe_recipient_manifestation_event no módulo l10n_br_nfe.

  • Uso do cliente SOAP via nfelib: Substituição da implementação SOAP manual pelo cliente da nfelib, simplificando o código e melhorando a manutenibilidade.

  • Tratamento de NSU zero (consChNFe): Correção do format_nsu para valores None, vazios e não-numéricos. Implementação de estratégia de deduplicação dupla: por NSU quando válido, por access_key + schema_type quando NSU é zero (caso do consChNFe em homologação).

  • Extração de CFOPs: CFOPs são agora extraídos do XML da NF-e completa (procNFe) e exibidos nas views de documentos, facilitando a identificação do tipo de operação.

  • Banner KPI na tree de documentos: Adicionado banner com informações da empresa (última consulta, NSU, total de documentos, pendentes de importação) e botões de ação (Pesquisar Todos, Pesquisa Específica) diretamente na tela principal.

    Nota: O banner ainda está em avaliação e pode sofrer alterações nos cards e informações exibidas.

  • Log de distribuição: Novo modelo dfe.distribution.log para registrar cada consulta à SEFAZ com status, NSUs e contagem de documentos.

  • Bloqueio de criação manual: Adicionado create="false" nos form views dos modelos dfe.document e dfe para evitar criação manual de registros.

  • Wizard de pesquisa específica: Wizard para buscar DF-e por chave de acesso (consChNFe).

Testes

Fotos das views:
menu
documents
consulta df-e
log
2026-02-11_15-24

Testes

  • Testes para format_nsu com casos edge (None, vazio, não-numérico, zero)
  • Testes para deduplicação com NSU zero
  • Testes para extração de CFOPs do XML procNFe
  • Teste de distribuição NF-e movido de l10n_br_nfe para l10n_br_fiscal_dfe

Dependências

Autores

  • CristianoMafraJunior - implementação inicial do DFe e refatoração do l10n_br_nfe
  • Raphaël Valyi (@rvalyi) - integração SOAP com nfelib
  • Antônio Neto (@antoniospneto) - consolidação de modelos e views
  • Felipe Motter (@felipemotter) - migração para res.company, NSU zero, CFOPs, banner, testes

@OCA-git-bot
Copy link
Contributor

Hi @rvalyi, @renatonlima, @marcelsavegnago, @mileo,
some modules you are maintaining are being modified, check this out!

@felipemotter felipemotter marked this pull request as draft February 10, 2026 21:43
@felipemotter
Copy link
Contributor Author

Resumo técnico das mudanças (oca/16.0 → esta PR)

55 arquivos alterados nos módulos l10n_br_fiscal_dfe e l10n_br_nfe (+2691 / -1351 linhas).


l10n_br_fiscal_dfe — Módulo principal de distribuição DF-e

Modelos

Modelo O que mudou
res.company Absorveu toda a lógica que antes estava no dfe_monitor. Métodos de distribuição (distDFeInt), consulta específica (consChNFe), download de documento, processamento de XML, criação de registros, e cron. Campos: last_nsu, max_nsu, dfe_last_query, dfe_last_status, dfe_last_status_code, dfe_certificate_id.
dfe_monitor Removido. Toda lógica migrada para res.company.
dfe_document Novo (substituiu dfe_access_key). Agrupa registros DFe pela chave de acesso. Campos computed: emitter, document_amount, document_state, cfop_ids, manifestation_status, color_status, is_own_document. Ações: download XML, DANFE, importar, manifestar.
document.py Removido (modelo antigo).
dfe Refatorado: campos reorganizados, cfop_ids agora é computed stored (extrai CFOPs do XML do attachment automaticamente), campo schema_type adicionado, campo imported_document_id para rastrear importação.
dfe_distribution_log Novo. Registra cada consulta à SEFAZ com timestamp, NSUs (inicial/final/máximo), contagem de documentos e status de resposta.
nfe_md_event Novo. Proxy que herda l10n_br_nfe.md_event para uso interno do módulo.

Distribuição e processamento

  • _dfe_process_distribution(): Deduplicação inteligente — por NSU quando válido, por access_key + schema_type quando NSU é zero (caso do consChNFe em homologação).
  • format_nsu(): Corrigido para None, string vazia, e valores não-numéricos (antes str(None) virava "00000000000None").
  • ACCESS_KEY_EXTRACTORS: Dict que extrai chave de acesso de cada tipo de schema (procNFe, resNFe, resEvento, procEventoNFe).
  • CFOPs: Extraídos automaticamente do XML procNFe via campo computed stored no modelo dfe. Exibidos como tags nas views de documento.

Views e UX

Componente Descrição
Banner KPI Cards acima da tree: última consulta, NSU (atual/máximo + badge sync), total de documentos, pendentes de importação. Botões "Search All" e "Specific Search".
Tree Documents Badge de tipo (NF-e Completa / Resumo / Evento), CFOPs como tags, manifestação como badge, botões de ação. Filtro padrão "Third-party" (esconde documentos próprios).
Form Documents create="false", campos readonly, botões de ação no header.
Form DFe create="false".
Search Filtros "Third-party" (padrão) e "Own Documents".
Specific Search Wizard Novo. Permite buscar DF-e por chave de acesso (consChNFe).
Distribution Log Novo. Tree view com log de todas as consultas à SEFAZ.
Company Settings Aba DF-e com campos de configuração (certificado, NSUs, status).

Dados e segurança

  • Cron atualizado: agora chama res.company._cron_dfe_search_documents().
  • Server actions para botões do banner (action_server_search_all_dfe, action_server_specific_search_dfe).
  • Regras de acesso para novos modelos (dfe_document, dfe_distribution_log).

l10n_br_nfe — Módulo NF-e

O que mudou Detalhes
MDE → nfe_md_event Modelo mde renomeado para nfe_md_event (l10n_br_nfe.md_event). Views, wizards e menus atualizados.
Manifestação Wizard nfe_md_event_wizard para manifestação do destinatário (confirmação, ciência, desconhecimento, não realizada).
DFe removido Modelos dfe e dfe_access_key do l10n_br_nfe removidos — lógica consolidada no l10n_br_fiscal_dfe.
Testes test_nfe_dfe movido para l10n_br_fiscal_dfe. test_nfe_recipient_manifestation_event atualizado para novos nomes.

Testes

Teste Cobertura
test_search_dfe_success Distribuição com mock SOAP, criação de registros, extração de CFOPs.
test_search_dfe_error_conditions Erro HTTP 500 da SEFAZ.
test_search_specific_zero_nsu consChNFe com NSU zero, dedup por access_key.
test_zero_nsu_different_documents Dois documentos com NSU zero mas schemas diferentes, ambos criados.
test_cron_search_documents Execução do cron.
test_utils format_nsu com None, vazio, não-numérico, zero, normal.
test_nfe_dfe (4 testes) Download XML, download múltiplo, DANFE, distribuição via l10n_br_nfe.
test_nfe_recipient_manifestation_event Manifestação do destinatário.

Commits

780387fb CristianoMafraJunior - [IMP] l10n_br_fiscal_dfe: DFe implementation
0482aefc CristianoMafraJunior - [REF] l10n_br_nfe: DFe implementation
d7f586cf Raphaël Valyi         - [IMP] l10n_br_fiscal_dfe: SOAP with nfelib
70241798 CristianoMafraJunior - [IMP] l10n_br_fiscal_dfe, l10n_br_nfe: update docs and tests
fc663e79 Antônio Neto         - [IMP] l10n_br_fiscal_dfe, l10n_br_nfe: consolidate DFe models
99187e05 Felipe Motter        - [IMP] l10n_br_fiscal_dfe: migrate DFe monitor to res.company
2a36726e Felipe Motter        - [IMP] l10n_br_fiscal_dfe: add tests for DFe distribution
caf3a988 Felipe Motter        - [IMP] l10n_br_nfe: move DFe test and update tests
4bd81f1c Felipe Motter        - [FIX] l10n_br_fiscal_dfe: use anchor tags for banner buttons
17805816 Felipe Motter        - [IMP] l10n_br_fiscal_dfe: compute CFOPs from XML attachment
28439911 Felipe Motter        - [IMP] l10n_br_fiscal_dfe: add own document filter and type badge

Copy link
Member

@rvalyi rvalyi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Valeu pelo trabalho @felipemotter .
Comentei sobre o test-requirements.txt. Vc tb poderia emendar para não dar commits nos arquivos index.html e README.rst nos varios modulos? Isso parece ser devido a versões diferentes de algumas libs mas não é legal ficar dando commits nesses arquivos ainda em PRS extensos como esse pois acaba ferrando o signal/noise do PR.

odoo-test-helper # Needed by spec_driven_model
pyopenssl==22.1.0
nfelib[soap] @ git+https://github.com/akretion/nfelib@soap-nfe-wip
brazil-fiscal-client @ git+https://github.com/akretion/brazil-fiscal-client@wrapped-response2
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@felipemotter vc poderia remover o commit desse arquivo? Essas duas branches foram mescladas (pelo menos a parte sobre a DFe a respeito da nfelib e isso a erro no CI no momento...

@felipemotter
Copy link
Contributor Author

estou ajeitando os commits ainda. tem monte de coisa errada

CristianoMafraJunior and others added 6 commits February 11, 2026 14:53
Rename dfe_access_key to dfe_document, restructure views, add
specific search wizard, fix certificate in SOAP client.
Rename MDE to nfe_md_event, update views and wizards, remove
dfe and dfe_access_key models consolidated into l10n_br_fiscal_dfe.
@felipemotter felipemotter force-pushed the 16.0-imp-dfe-distribution branch from 4fecd43 to cf75d36 Compare February 11, 2026 18:04
Move distribution logic from standalone dfe.monitor model into
res.company, add banner with KPI cards (documents today, NSU,
last query, pending import), improve company DF-e tab layout,
add own/third-party document filter, compute CFOPs from XML,
block manual record creation and remove orphaned files from
initial implementation.
Update DFe and MDE tests for the refactored distribution module.
Remove orphaned files superseded during refactoring (dfe_access_key,
nfe_recipient_manifestation_event model/views/wizards).
@felipemotter felipemotter force-pushed the 16.0-imp-dfe-distribution branch from 1856c2d to 8c15864 Compare February 11, 2026 19:13
@felipemotter felipemotter marked this pull request as ready for review February 11, 2026 19:16
@felipemotter
Copy link
Contributor Author

Acho que ta ok, vou esperar rolar os testes, @rvalyi @antoniospneto dão um geral ai tambem por favor.

PS: Vou colocar prints das views na descrição da PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants