Skip to content

fix(legacy): popular descEvento em RecepcaoEventoCancelamentoAsync (alinhado com upstream)#79

Open
john182 wants to merge 1 commit intomasterfrom
fix/legacy-cancel-descEvento-aligned-upstream
Open

fix(legacy): popular descEvento em RecepcaoEventoCancelamentoAsync (alinhado com upstream)#79
john182 wants to merge 1 commit intomasterfrom
fix/legacy-cancel-descEvento-aligned-upstream

Conversation

@john182
Copy link
Copy Markdown

@john182 john182 commented May 8, 2026

Contexto

O fork mantém o método RecepcaoEventoCancelamentoAsync com a signature original (assíncrona, long idlote). Antes, ele construía o detEvento sem descEvento — funcionava por side-effect do setter de nProt em detEvento.cs. O setter foi removido no PR #78 deste fork ao alinhar detEvento.cs com upstream ZeusAutomacao/DFe.NET master.

Sintoma

SEFAZ rejeita o evento de cancelamento (110111) com:

cStat: 493
xMotivo: Rejeição: Evento não atende o Schema XML específico
         (Elemento: envEvento/evento[1]/infEvento/detEvento/nProt)

descEvento é o primeiro elemento da sequence no XSD e110111_v1.00.xsd. Sem ele, o validador encontra nProt na primeira posição e falha.

Fix — refactor estrutural alinhando com upstream

Em vez de simplesmente adicionar descEvento = "Cancelamento" no público, replico a estrutura do upstream master:

  1. Public RecepcaoEventoCancelamentoAsync → delegator que hardcoda NFeTipoEvento.TeNfeCancelamento
  2. Public RecepcaoEventoCancelamentoPorSubstituicaoAsync (NOVO) → suporte a NFe cancelamento por substituição (quando aplicável)
  3. Private RecepcaoEventoCancelamentoAsync(NFeTipoEvento, ...) → implementação compartilhada, body byte-a-byte idêntico ao upstream master (linhas 627-672 de ServicosNFe.cs)

A motivação é manter a method body alinhada com upstream pra que diffs futuros não acusem divergência semântica desta linha. A única divergência inerente é o sufixo Async + tipo de retorno Task<> + helper RecepcaoEventoEAssinaAsync (vs upstream sync RecepcaoEvento) — pre-existente do fork, não introduzida aqui.

Diff vs upstream master para o body

// fork (após este PR)
var detEvento = new detEvento
{
    nProt = protocoloAutorizacao,
    versao = versaoServico,
    xJust = justificativa,
    descEvento = tipoEventoCancelamento.Descricao(),
    cOrgaoAutor = ufAutor,
    tpAutor = tipoAutor,
    verAplic = versaoAplicativo,
    chNFeRef = chaveNfeSubstituta
};

idêntico ao upstream.

Test plan

  • Build: dotnet build NFe.Servicos/NFe.Servicos.csproj — 0 erros
  • App consumidor da method (nfeio-product-invoice) consegue cancelar NFe em homologação sem cStat 493 (via CreateEventToCancel legado, não via essa method, mas validação cruzada do schema)
  • Diff do body desta method vs upstream master → vazio (modulo Task<> async wrapping)

Notas

  • Apps que constroem o detEvento manualmente (ex: nfeio-product-invoice via CreateEventToCancel em GatewayService.cs) podem continuar fazendo seu próprio fix em código do app — este PR não afeta.
  • RecepcaoEventoCartaCorrecaoAsync e RecepcaoEventoEpecAsync já populavam descEvento explicitamente.
  • RecepcaoEventoCancelamentoPorSubstituicaoAsync é nova — adicionada pra simetria com upstream, mesmo que ainda não tenha call-site neste fork.

🤖 Generated with Claude Code

…escricao()

Alinha o metodo legado com o upstream ZeusAutomacao/DFe.NET master, que
popula descEvento explicitamente via tipoEventoCancelamento.Descricao()
(linhas 640-650 do upstream).

Antes, fork dependia de side-effect do setter de nProt em detEvento
(removido no refactor PR #78 ao alinhar detEvento.cs com upstream).
Sem descEvento, schema XSD e110111_v1.00 rejeita com cStat 493:
"Rejeicao: Evento nao atende o Schema XML especifico
 (Elemento: envEvento/evento[1]/infEvento/detEvento/nProt)" — descEvento
e o primeiro elemento da sequence, e validador encontra nProt no lugar
errado.

Usa NFeTipoEvento.TeNfeCancelamento.Descricao() (retorna "Cancelamento"
via [Description] attribute) pra ficar identico ao upstream.

Outros consumers da lib que usavam RecepcaoEventoCancelamentoAsync
estavam quebrando silenciosamente. Apps que constroem o detEvento
manualmente (ex: nfeio-product-invoice via CreateEventToCancel) ja
faziam fix proprio fora da lib.
@john182 john182 force-pushed the fix/legacy-cancel-descEvento-aligned-upstream branch from a086671 to 1647088 Compare May 8, 2026 17:22
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.

1 participant