Ir para conteúdo
  • Cadastre-se

Recommended Posts

Postado

## Descrição (corpo do post)

**Versão ACBr**: trunk2 r45813 em diante (testado também na r45929 de 23/04/2026)
**Componente**: ACBrNFe — `ACBrNFe.XmlWriter.pas`
**Sintoma**: toda NFe (modelo 55) com produto CST=90 é gerada com a tag `<cBenefRBC></cBenefRBC>` vazia, causando rejeição da SEFAZ por falha de schema.

---

### Mensagem da rejeição (cliente real, SEFAZ-CE, 24/04/2026)

```
Falha na validação dos dados da nota: 17784
TAG:%TAGNIVEL% ID:N14a/cBenefRBC(Código de Benefício Fiscal na UF aplicado ao item quando houver RBC.) - Nenhum valor informado.   (×N itens)

1871 - Element {http://www.portalfiscal.inf.br/nfe}cBenefRBC: This element is not expected.
       Expected is one of ({http://www.portalfiscal.inf.br/nfe}pRedBC,
                           {http://www.portalfiscal.inf.br/nfe}pICMS).
```

A primeira mensagem é o `wAlerta` interno do próprio `TACBrXmlWriter.AddNode` (linha 422 do `ACBrXmlWriter.pas`); a segunda (1871) é o validador XSD da SEFAZ rejeitando a tag vazia injetada no XML.

---

### Causa raiz

A revisão **r45813** (16/04/2026 — commit `ACBR-9067 — Alterações visando atender a NT 2022/002 versão 1.30a`) acrescentou a geração de `cBenefRBC` no bloco `cst90, cstPart90` do `GerarDetImpostoICMS`, mas com parâmetros incorretos:

**`ACBrNFe.XmlWriter.pas` linhas 2572-2573 (estado atual)**:

```pascal
xmlNode.AppendChild(AddNode(tcStr, 'N14a', 'cBenefRBC',
  01, 01, 1, NFe.Det[i].Imposto.ICMS.cBenefRBC, DSC_CBENEFRBC));
```

São 2 erros:

1. **Tamanho `01,01`** — a NT 2022.002 v1.30a (página 8, item 237.01) define o campo como tipo `C` com tamanho `8,10` e o XSD oficial `leiauteNFe_v4.00.xsd` declara o pattern `[!-ÿ]{8}|[!-ÿ]{10}`.
2. **Ocorrência mínima `1`** — a NT define ocorrência **`0-1`** (opcional). Combinada com valor vazio (clientes que não têm benefício fiscal cadastrado), o `TACBrXmlWriter.AddNode` (linhas 441-445) gera `<cBenefRBC></cBenefRBC>` E adiciona alerta "Nenhum valor informado".

Para comparação, o bloco `cst51` (linha 2352) está **correto** e usa exatamente os parâmetros que a NT especifica:

```pascal
xmlNode.AppendChild(AddNode(tcStr, 'N14a', 'cBenefRBC', 8, 10, 0,
  NFe.Det[i].Imposto.ICMS.cBenefRBC, DSC_CBENEFRBC));
```

---

### Trecho oficial da NT 2022.002 v1.30a (Grupo N10 — ICMS=90)

| #          | ID       | Campo         | Descrição                                                                | Ele   | Pai       | Tipo  | Ocor.   | Tam.    |
|------------|----------|---------------|--------------------------------------------------------------------------|-------|-----------|-------|---------|---------|
| 237        | N14      | pRedBC        | Percentual da Redução de BC                                              | E     | N12.1     | N     | 0-1     | 3v2-4   |
| **237.01** | **N14a** | **cBenefRBC** | **Código de Benefício Fiscal na UF aplicado ao item quando houver RBC.** | **E** | **N12.1** | **C** | **0-1** | **8,10**|
| 238        | N16      | pICMS         | Alíquota do imposto                                                      | E     | N12.1     | N     | 1-1     | 3v2-4   |

Fonte: [NT 2022.002 v1.30a publicada 26/03/2026](https://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=NpWPjigODyU=) — pg 8.

---

### Patch proposto

```diff
--- a/Fontes/ACBrDFe/ACBrNFe/Base/ACBrNFe.XmlWriter.pas
+++ b/Fontes/ACBrDFe/ACBrNFe/Base/ACBrNFe.XmlWriter.pas
@@ -2572,2 +2572,2 @@
-              xmlNode.AppendChild(AddNode(tcStr, 'N14a', 'cBenefRBC',
-                01, 01, 1, NFe.Det[i].Imposto.ICMS.cBenefRBC, DSC_CBENEFRBC));
+              xmlNode.AppendChild(AddNode(tcStr, 'N14a', 'cBenefRBC',
+                8, 10, 0, NFe.Det[i].Imposto.ICMS.cBenefRBC, DSC_CBENEFRBC));
```

Com `ocorrencias=0` e valor vazio, o `AddNode` omite a tag (linhas 441-448 do `ACBrXmlWriter.pas`) — exatamente o que `cst51` já faz. Para clientes que populam o campo, a tag é gerada com tamanho válido (8 ou 10 chars).

---

### Possível bug adicional na ordem dos elementos do ICMS90

Conforme a NT v1.30a, dentro do grupo `N12.1` a sequência correta é:

```
modBC (N13) → vBC (N15) → pRedBC (N14) → cBenefRBC (N14a) → pICMS (N16)
  → [grupo opcional N16a: vICMSOp (N16b), pDif (N16c), vICMSDif (N16d)]
  → vICMS (N17)
```

Mas o `XmlWriter` linhas 2563-2589 está gerando:

```
modBC → vBC → pRedBC → cBenefRBC → vICMSOp → pDif → vICMSDif → pICMS → vICMS
```

`vICMSOp/pDif/vICMSDif` aparecem **antes** de `pICMS` em vez de **depois** (e fora do grupo opcional `N16a`). Para UFs onde `NrOcorr=0` (CE, MG etc.), os campos zerados são omitidos e o problema não aparece. Mas para RJ/SP/PR (`NrOcorr=1`, linhas 2557-2559), as tags zeradas seriam emitidas em ordem inválida — provavelmente causando outra rejeição de schema.

---

### Como reproduzir

1. Cliente CRT=3, qualquer UF.
2. Cadastrar produto com `cstICMS='090'`, `pICMS=20`, `codCFOP='5403'` (ou 5405).
3. Emitir NFe modelo 55. O XML gerado contém `<cBenefRBC></cBenefRBC>` vazio entre `<pRedBC>` (omitido) e `<vICMSOp>`.
4. SEFAZ rejeita com erro 1871.

---

### Histórico relacionado no log de mudanças

```
r45813 | italojjr | 16/04/2026
-- ACBrNFe.XmlWriter --
[*] ACBR-9067 - Alterações visando atender a NT 2022/002 versão 1.30a
   Por: Italo Giurizzato Junior
```

Obrigado.

  • Consultores
Postado

sugestão de correção anexe a unit modificada

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
Postado

Foi criada a tarefa ACBR-9310 para análise.

  • Curtir 1

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Juliomar Marchetti changed the title to [ACBR-9310] [NFe] cBenefRBC gerado vazio em CST 90 causa rejeição schema (regressão r45813 / ACBR-9067)
  • Membros Pro
Postado

Bom dia estou com o mesmo problema desse tópico. Qualquer NF-e emitida com cst 90 ocorre esse erro.

Postado

Boa noite!

Essas últimas alterações feitas no arquivo "ACBrNFe.XmlWriter.pas" (mês de Abril, precisamente a Revision 45813), causou erro para nós aqui enviarmos a Nota Fiscal de Lançamento de Crédito do Ativo Permanente - CIAP.

Para o CST de ICMS "90 - Outras." foi implementado para adicionar a tag "cBenefRBC" no XML. Mas essa tag segundo a Nota Técnica 2019.001 (última versão 1.70 - Publicada em 18/08/2025) pelo que eu entendi, a mesma deve ser gerada quando for CST "51-Diferimento".

Está causando o erro:
"Falha na validação dos dados da nota: 00000
TAG:%TAGNIVEL% ID:N14a/cBenefRBC(Código de Benefício Fiscal na UF aplicado ao item quando houver RBC.) - Nenhum valor informado."

Fiz uma pequena alteração no arquivo "ACBrNFe.XmlWriter.pas" e resolveu.

Em anexo imagem do XML antes de depois da alteração e do arquivo "ACBrNFe.XmlWriter.pas" alterado.

Erro_ao_gerar_NFEntrada_CIAP_CST_90_CFOP_1604.png

ACBrNFe.XmlWriter.pas

  • Moderadores
Postado
14 horas atrás, cercris disse:

Para o CST de ICMS "90 - Outras." foi implementado para adicionar a tag "cBenefRBC" no XML. Mas essa tag segundo a Nota Técnica 2019.001 (última versão 1.70 - Publicada em 18/08/2025) pelo que eu entendi, a mesma deve ser gerada quando for CST "51-Diferimento".

A NT 2012/002 v1.30a adicionou a tag cBenefRBC no CST 90.

Pela sua imagem gerou a tag vazia o que causou o erro, mas pelo código atual o ACBr não vai gerar a tag caso não informada.

Veja se por acaso não informou string diferente de '' para a tag.

14 horas atrás, cercris disse:

Essas últimas alterações feitas no arquivo "ACBrNFe.XmlWriter.pas" (mês de Abril, precisamente a Revision 45813)

Teve correção na rev. 46034, atualize os fontes.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado
47 minutos atrás, BigWings disse:

A NT 2012/002 v1.30a adicionou a tag cBenefRBC no CST 90.

Pela sua imagem gerou a tag vazia o que causou o erro, mas pelo código atual o ACBr não vai gerar a tag caso não informada.

Veja se por acaso não informou string diferente de '' para a tag.

Teve correção na rev. 46034, atualize os fontes.

Bom dia, Dr. @BigWings

Eu estou com os fontes atualizados.

Em anexo um Print indicado exatamente a alteração feita e que persiste no fonte e que causa o erro que passei.

 

 

Diff_XmlWriter.png

  • Moderadores
Postado
10 minutos atrás, cercris disse:

Em anexo um Print indicado exatamente a alteração feita e que persiste no fonte e que causa o erro que passei.

Novamente, com esse código só vai gerar a tag caso seja informado valor, conforme o sexto parâmetro do método AddNode.

A correção já tinha sido feita na rev. 45940.

image.png

Na sua imagem também gerou as tags de diferimento vICMSOp, pDif, vDif que também não vai ser gerado quando o valor 0, correção esta feita na rev. 46034.

Testei aqui no programa exemplo, está gerando correto:

image.png

Então tem algo errado aí, se está com os fontes atualizados tente reinstalar o ACBr marcando a opção de apagar arquivos antigos.

E veja se não tem outra versão do ACBr que possa estar sendo enxergada pelo Delphi ao compilar.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado
5 horas atrás, BigWings disse:

Novamente, com esse código só vai gerar a tag caso seja informado valor, conforme o sexto parâmetro do método AddNode.

A correção já tinha sido feita na rev. 45940.

image.png

Na sua imagem também gerou as tags de diferimento vICMSOp, pDif, vDif que também não vai ser gerado quando o valor 0, correção esta feita na rev. 46034.

Testei aqui no programa exemplo, está gerando correto:

image.png

Então tem algo errado aí, se está com os fontes atualizados tente reinstalar o ACBr marcando a opção de apagar arquivos antigos.

E veja se não tem outra versão do ACBr que possa estar sendo enxergada pelo Delphi ao compilar.

Sempre que atualizo os fontes eu reinstalo o ACBr. Mas não mando apagar arquivos antigos. Reinstalei apagando os arquivos antigos. E gerei uma NF no ambiente de Homologação e deu certo. Vamos ver... está promissor. kkk
Obrigado pela atenção.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.