A Reforma Tributária não é mais apenas uma discussão política; para nós, desenvolvedores, ela já tem nome e sobrenome: Nota Técnica 2025.002, que está va versão 1.32 no momento que este artigo foi escrito.
A partir de 2026, entramos no Período de Teste, onde conviveremos com o sistema atual (ICMS/ISS/PIS/COFINS) e o novo sistema (IBS/CBS). O desafio técnico é que as tags do XML mudaram drasticamente em relação ao que conhecíamos. Não se trata de novos campos no grupo Imposto, mas sim de um novo grupo “pai” chamado IBSCBS.
Neste artigo, vou mostrar a hierarquia correta das classes no componente ACBrNFe, como preencher as alíquotas de teste de 2026 e como calcular os totais sem erros de validação, considerando o básico a preencher para essa primeira fase.
1. O Cenário de 2026: Alíquotas e Regras
Antes de abrir o Delphi, precisamos alinhar a regra de negócio. Em 2026, a cobrança é educativa e de calibração.
- CBS (Federal): Alíquota de 0,90%.
- IBS (Estadual/Municipal): Alíquota de 0,10%.
- Total: 1,00% sobre a operação.
Importante: Mesmo sendo um teste, o preenchimento é obrigatório para a validação da nota a partir das datas definidas na NT (Produção em 2026). O não preenchimento gerará rejeição.
2. A Nova Estrutura do Componente ACBr
No ACBr (Trunk2 atualizado), a estrutura foi consolidada para refletir o XML.
Det.Imposto.IBSCBS: O grupo pai.CSTecClassTrib: Definidos na raiz deste grupo.gIBSCBS: Subgrupo para operações tributadas por valor (Ad Valorem).gIBSCBSMono: Subgrupo para operações monofásicas (Ad Rem – Combustíveis).
2.1. Tabela de CSTs (3 Dígitos)
Os CSTs agora possuem 3 dígitos. Os códigos antigos (00, 20, 90) não servem aqui. Consultando a Tabela Oficial (disponível no Portal da NFe):
- 001: Operação tributável com alíquota ad valorem.
- 002: Operação tributável com alíquota ad rem.
- 070: Operação com isenção.
3. Implementação Prática (Delphi)
Vamos ao código para uma venda simples (CST 001), aplicando as alíquotas de 2026.
Snippet de código
procedure TForm1.PreencherIBS_CBS_2026(Item: TDetCollectionItem; ValorProduto: Currency);
begin
// Acessamos o novo grupo IBSCBS (Certifique-se que seu ACBr está atualizado)
with Item.Imposto.IBSCBS do
begin
// 1. Definição do CST (Use String ou Enum se disponível na sua versão)
// 001 = Tributação Normal Ad Valorem
CST := '001';
// 2. Classificação Tributária (Novo Campo Obrigatório)
// Tabela publicada no Portal NFe. Exemplo genérico:
cClassTrib := '001000';
// 3. Preenchimento do Grupo Ad Valorem (gIBSCBS)
// Se fosse Combustível, usaríamos o with gIBSCBSMono
with gIBSCBS do
begin
// Base de Cálculo (Geralmente o valor da operação)
vBC := ValorProduto;
// --- CBS (Federal - 0,90%) ---
with gCBS do
begin
pCBS := 0.90; // Alíquota fixa 2026
vCBS := RoundABNT(vBC * (pCBS / 100), 2);
end;
// --- IBS (Estadual/Municipal - 0,10%) ---
// O IBS é compartilhado. Na fase de teste, a alíquota de 0,1% deve ser informada.
// A divisão exata entre UF e Município depende da legislação local,
// mas para validação, a soma deve bater.
// Parte Estadual (Exemplo: Alocando o 0,1% aqui)
with gIBSUF do
begin
pIBSUF := 0.10;
vIBSUF := RoundABNT(vBC * (pIBSUF / 100), 2);
end;
// Parte Municipal (Se houver split na sua UF, ajuste aqui)
with gIBSMun do
begin
pIBSMun := 0.00;
vIBSMun := 0.00;
end;
// --- Totalizador do Item ---
// A soma das partes do IBS (UF + Mun) deve ser preenchida no vIBS
vIBS := gIBSUF.vIBSUF + gIBSMun.vIBSMun;
end;
// tag de valor do item, deve ser gerada quando o ibs/cbs é gerado
vItem := Prod.vProd + IBSCBS.gIBSCBS.vIBS + IBSCBS.gIBSCBS.gCBS.vCBS + ISel.vIS;
end;
end;
4. Onde ficam os Totalizadores?
A estrutura de totais também mudou. Não procure em Total.ICMS. Existe um objeto específico para os novos tributos.
// A classe correta é Total.IBSCBS
Total.IBSCBSTot.vBCIBSCBS
Total.IBSCBSTot.gIBS.gIBSUFTot.vIBSUF
Total.IBSCBSTot.gIBS.gIBSMunTot.vIBSMun
Total.IBSCBSTot.gIBS.vIBS
Total.IBSCBSTot.gCBS.vCBS
// Lembre-se: Em 2026, estes valores SOMAM ao vNFtot (Valor Total da Nota),
// mas não substituem o destaque do ICMS/PIS/COFINS. Eles convivem.
Total.vNFTot := Total.ICMSTot.vNF + Total.IBSCBSTot.gIBS.vIBS + Total.IBSCBSTot.gCBS.vCBS + Total.ISTot.vIS;
5. Cuidados Essenciais e Validação
- Compatibilidade de Schemas: Se você atualizar o componente mas não atualizar os arquivos
.xsdna pastaSchemas/NFedo seu cliente, a nota será rejeitada com erro de “Elemento não esperado” (unexpected element IBSCBS). - Regra do Valor Total: O
vNFTot (Valor da Nota) deve considerar o IBS e CBS.- Fórmula:
vNFTot =vProd–vDesc+vST+vFrete… +vIBS+vCBS.
- Fórmula:
- Tabelas de Apoio: Você precisará das tabelas de CST e cClassTrib. Elas não são fixas no código, podem sofrer atualizações. Recomendo criar uma tabela no banco de dados para importá-las.
6. Referências Oficiais
Para aprofundamento, utilize as fontes utilizadas para a construção deste artigo:
- Fórum ACBr: Tópico Oficial de Implementação (Discussão Técnica)
- Portal da NFe: Tabelas de CST e Classificação Tributária
- Nota Técnica 2025.002 v.1.32 – Publicada em 25/11/2025
Descubra mais sobre Régys Borges da Silveira
Assine para receber nossas notícias mais recentes por e-mail.
Dê-nos sua opinião, seu comentário ajuda o site a crescer e melhorar a qualidade dos artigos.