durvalcastro Postado 30 Junho Postado 30 Junho Algum tem exemplo prático de NFe com IBS e CBS e quais campos informar pra validar as NFes agora pra agosto/26
osmarbentojr Postado 1 Julho Postado 1 Julho Bom dia, depende do "exemplo" prático, pq para cada cst\cclasstrib a estrutura muda, e muda bastante, tenho alguns clientes rodando com algumas situações, se precisar de uma consultoria, me chama no privado.
Membro Pro Verificado MARCOS LIVIO SACUCCI Postado 1 Julho Membro Pro Verificado Postado 1 Julho 20 horas atrás, durvalcastro disse: Algum tem exemplo prático de NFe com IBS e CBS e quais campos informar pra validar as NFes agora pra agosto/26 Bom dia.... pq desta pergunta Durval? O que irá mudar em agosto que seja diferente do que já implantamos em jan/26 com relação ao IBS/CBS? 1
durvalcastro Postado 1 Julho Autor Postado 1 Julho 1 hora atrás, MARCOS LIVIO SACUCCI disse: Bom dia.... pq desta pergunta Durval? O que irá mudar em agosto que seja diferente do que já implantamos em jan/26 com relação ao IBS/CBS? é o exemplo de NFe que ta nos fontes?
Marcelo Cabello Postado 1 Julho Postado 1 Julho (editado) Boa tarde Sres, antes de mais nada parabens por esse espaço e pelo belo trabalho na ACBR, Conforme disse o colega eu tb estou com dificuldades e gostaria de submeter o que fiz pra vcs me darem algum pitaco, desde ja meu mt obrigado IBSCBS.Valores.trib.gIBSCBS.CST := cst010; IBSCBS.Valores.trib.gIBSCBS.cClassTrib := '101001'; // Código fornecido pela contabilidade IBSCBS.valores.trib.gIBSCBS.cCredPres := cpNenhum; IBSCBS.valores.trib.gIBSCBS.gTribRegular.CSTReg := cstNenhum; IBSCBS.valores.trib.gIBSCBS.gTribRegular.cClassTribReg := ''; IBSCBS.Valores.Cbs := 0.9; // Alíquota de CBS (%) IBSCBS.Valores.ValorCbs := 0.90; // Valor calculado da CBS (R$) IBSCBS.Valores.IbsEstadual := 0.1; // Alíquota do IBS Estadual (%) IBSCBS.Valores.ValorIbsEstadual := 0.10; // Valor do IBS Estadual (R$) IBSCBS.Valores.IbsMunicipal := 0.05; // Alíquota do IBS Municipal (%) IBSCBS.Valores.ValorIbsMunicipal := 0.05; // Valor do IBS Municipal (R$) InfNFSe.IBSCBS.Valores.vBC := strtofloat(pValor); infNFSe.IBSCBS.cLocalidadeIncid := StrToIntDef(pMunicipioIncide,0); // Código da localidade InfNFSe.IBSCBS.Valores.trib.gIBSCBS.CST := cst010; infNFSe.IBSCBS.xLocalidadeIncid := pNomeMunicipio; infNFSe.IBSCBS.Valores.uf.pAliqEfetUF := 0.10; infNFSe.IBSCBS.Valores.fed.pAliqEfetCBS := 0.90; infNFSe.IBSCBS.Valores.fed.pCBS := 0.90; infNFSe.IBSCBS.Valores.uf.pIBSUF := 0.10; Editado 1 Julho por Marcelo Cabello
durvalcastro Postado 1 Julho Autor Postado 1 Julho 17 minutos atrás, Marcelo Cabello disse: Boa tarde Sres, antes de mais nada parabens por esse espaço e pelo belo trabalho na ACBR, Conforme disse o colega eu tb estou com dificuldades e gostaria de submeter o que fiz pra vcs me darem algum pitaco, desde ja meu mt obrigado IBSCBS.Valores.trib.gIBSCBS.CST := cst010; IBSCBS.Valores.trib.gIBSCBS.cClassTrib := '101001'; // Código fornecido pela contabilidade IBSCBS.valores.trib.gIBSCBS.cCredPres := cpNenhum; IBSCBS.valores.trib.gIBSCBS.gTribRegular.CSTReg := cstNenhum; IBSCBS.valores.trib.gIBSCBS.gTribRegular.cClassTribReg := ''; IBSCBS.Valores.Cbs := 0.9; // Alíquota de CBS (%) IBSCBS.Valores.ValorCbs := 0.90; // Valor calculado da CBS (R$) IBSCBS.Valores.IbsEstadual := 0.1; // Alíquota do IBS Estadual (%) IBSCBS.Valores.ValorIbsEstadual := 0.10; // Valor do IBS Estadual (R$) IBSCBS.Valores.IbsMunicipal := 0.05; // Alíquota do IBS Municipal (%) IBSCBS.Valores.ValorIbsMunicipal := 0.05; // Valor do IBS Municipal (R$) InfNFSe.IBSCBS.Valores.vBC := strtofloat(pValor); infNFSe.IBSCBS.cLocalidadeIncid := StrToIntDef(pMunicipioIncide,0); // Código da localidade InfNFSe.IBSCBS.Valores.trib.gIBSCBS.CST := cst010; infNFSe.IBSCBS.xLocalidadeIncid := pNomeMunicipio; infNFSe.IBSCBS.Valores.uf.pAliqEfetUF := 0.10; infNFSe.IBSCBS.Valores.fed.pAliqEfetCBS := 0.90; infNFSe.IBSCBS.Valores.fed.pCBS := 0.90; infNFSe.IBSCBS.Valores.uf.pIBSUF := 0.10; Seria esse o padrão pra Sefa aceitar a NFe / NFCe?
Anderson Eccker Postado 1 Julho Postado 1 Julho 3 horas atrás, Marcelo Cabello disse: Boa tarde Sres, antes de mais nada parabens por esse espaço e pelo belo trabalho na ACBR, Conforme disse o colega eu tb estou com dificuldades e gostaria de submeter o que fiz pra vcs me darem algum pitaco, desde ja meu mt obrigado IBSCBS.Valores.trib.gIBSCBS.CST := cst010; IBSCBS.Valores.trib.gIBSCBS.cClassTrib := '101001'; // Código fornecido pela contabilidade IBSCBS.valores.trib.gIBSCBS.cCredPres := cpNenhum; IBSCBS.valores.trib.gIBSCBS.gTribRegular.CSTReg := cstNenhum; IBSCBS.valores.trib.gIBSCBS.gTribRegular.cClassTribReg := ''; IBSCBS.Valores.Cbs := 0.9; // Alíquota de CBS (%) IBSCBS.Valores.ValorCbs := 0.90; // Valor calculado da CBS (R$) IBSCBS.Valores.IbsEstadual := 0.1; // Alíquota do IBS Estadual (%) IBSCBS.Valores.ValorIbsEstadual := 0.10; // Valor do IBS Estadual (R$) IBSCBS.Valores.IbsMunicipal := 0.05; // Alíquota do IBS Municipal (%) IBSCBS.Valores.ValorIbsMunicipal := 0.05; // Valor do IBS Municipal (R$) InfNFSe.IBSCBS.Valores.vBC := strtofloat(pValor); infNFSe.IBSCBS.cLocalidadeIncid := StrToIntDef(pMunicipioIncide,0); // Código da localidade InfNFSe.IBSCBS.Valores.trib.gIBSCBS.CST := cst010; infNFSe.IBSCBS.xLocalidadeIncid := pNomeMunicipio; infNFSe.IBSCBS.Valores.uf.pAliqEfetUF := 0.10; infNFSe.IBSCBS.Valores.fed.pAliqEfetCBS := 0.90; infNFSe.IBSCBS.Valores.fed.pCBS := 0.90; infNFSe.IBSCBS.Valores.uf.pIBSUF := 0.10; Sugiro você ler a NT do Sefaz e entender bem antes de desenvolver, não faz sentido esse CST e cClassTrib Você esta misturando tags de Nota de Serviço NFS-e com as tags NF-e,
osmarbentojr Postado 2 Julho Postado 2 Julho Bom dia @durvalcastro, na verdade é assim, o ACBR da um exemplo "genérico" de todos os campos "possíveis", não significa que colocando desse jeito para qualquer grupo de CST\CLASSTRIB funcione, pelo contrário, a depender do conjunto de informações, essa estrutura do exemplo muda, assim como os totais. Já tenho clientes em produção usando o CST 000, CST 200 e CST 600, todos ok, mas para cada um deles, existem uma variação desse exemplo.
durvalcastro Postado 6 Julho Autor Postado 6 Julho Em 02/07/2026 at 07:06, osmarbentojr disse: Bom dia @durvalcastro, na verdade é assim, o ACBR da um exemplo "genérico" de todos os campos "possíveis", não significa que colocando desse jeito para qualquer grupo de CST\CLASSTRIB funcione, pelo contrário, a depender do conjunto de informações, essa estrutura do exemplo muda, assim como os totais. Já tenho clientes em produção usando o CST 000, CST 200 e CST 600, todos ok, mas para cada um deles, existem uma variação desse exemplo. Poxa mano da uma dica do basico, tipo o CST tributado e um não tributado...
osmarbentojr Postado 7 Julho Postado 7 Julho Bom dia @durvalcastro, na verdade eu acho que você não entendeu bem, não existe um "gesso" que vc molda daquele jeito e esta funcionando, tem que conhecer a legislação, ir testando e enviando em homologação. Abaixo segue uma parte do meu código, que ainda esta sendo ajustado para atender a todas as situações, mas que já funciona em produção if dm.Q1.FieldByName('pro_rcst').AsString = '000' then IBSCBS.CST := cst000; if dm.Q1.FieldByName('pro_rcst').AsString = '010' then IBSCBS.CST := cst010; if dm.Q1.FieldByName('pro_rcst').AsString = '011' then IBSCBS.CST := cst011; if dm.Q1.FieldByName('pro_rcst').AsString = '200' then IBSCBS.CST := cst200; if dm.Q1.FieldByName('pro_rcst').AsString = '220' then IBSCBS.CST := cst220; if dm.Q1.FieldByName('pro_rcst').AsString = '221' then IBSCBS.CST := cst221; if dm.Q1.FieldByName('pro_rcst').AsString = '222' then IBSCBS.CST := cst222; if dm.Q1.FieldByName('pro_rcst').AsString = '400' then IBSCBS.CST := cst400; if dm.Q1.FieldByName('pro_rcst').AsString = '410' then IBSCBS.CST := cst410; if dm.Q1.FieldByName('pro_rcst').AsString = '510' then IBSCBS.CST := cst510; if dm.Q1.FieldByName('pro_rcst').AsString = '515' then IBSCBS.CST := cst515; if dm.Q1.FieldByName('pro_rcst').AsString = '550' then IBSCBS.CST := cst550; if dm.Q1.FieldByName('pro_rcst').AsString = '620' then IBSCBS.CST := cst620; if dm.Q1.FieldByName('pro_rcst').AsString = '800' then IBSCBS.CST := cst800; if dm.Q1.FieldByName('pro_rcst').AsString = '810' then IBSCBS.CST := cst810; if dm.Q1.FieldByName('pro_rcst').AsString = '811' then IBSCBS.CST := cst811; if dm.Q1.FieldByName('pro_rcst').AsString = '820' then IBSCBS.CST := cst820; if dm.Q1.FieldByName('pro_rcst').AsString = '830' then IBSCBS.CST := cst830; IBSCBS.cClassTrib := dm.Q1.FieldByName('pro_cclasstrib').AsString; _vitem := dm.Q1.FieldByName('itenfe_quantidade').AsFloat * dm.Q1.FieldByName('itenfe_valor').AsFloat; _tot_baseibscbs := _tot_baseibscbs + _vitem; _val_ibsuf := (_vitem / 100) * 0.1; _val_ibsmun := (_vitem / 100) * 0.0; _val_cbs := (_vitem / 100) * 0.9; IBSCBS.gIBSCBS.vBC := _vitem; IBSCBS.gIBSCBS.gIBSUF.pIBSUF := 0.1; if dm.Q1.FieldByName('pro_rcst').AsString = '200' then //grupo de redução de base begin IBSCBS.gIBSCBS.gIBSUF.gRed.pRedAliq := 100; IBSCBS.gIBSCBS.gIBSUF.gRed.pAliqEfet := 0; _val_ibsuf := 0; end; IBSCBS.gIBSCBS.gIBSUF.vIBSUF := _val_ibsuf; IBSCBS.gIBSCBS.gIBSMun.pIBSMun := 0; if dm.Q1.FieldByName('pro_rcst').AsString = '200' then begin IBSCBS.gIBSCBS.gIBSMun.gRed.pRedAliq := 100; IBSCBS.gIBSCBS.gIBSMun.gRed.pAliqEfet := 0; _tot_ibsmun := 0; end; IBSCBS.gIBSCBS.gIBSMun.vIBSMun := _tot_ibsmun; IBSCBS.gIBSCBS.vIBS := _val_ibsmun + _val_ibsuf; IBSCBS.gIBSCBS.gCBS.pCBS := 0.9; if dm.Q1.FieldByName('pro_rcst').AsString = '200' then begin IBSCBS.gIBSCBS.gCBS.gRed.pRedAliq := 100; IBSCBS.gIBSCBS.gCBS.gRed.pAliqEfet := 0; _val_cbs := 0; end; IBSCBS.gIBSCBS.gCBS.vCBS := _val_cbs; _tot_ibsuf := _tot_ibsuf + _val_ibsuf; _tot_ibsmun := _tot_ibsmun + _val_ibsmun; _tot_cbs := _tot_cbs + _val_cbs; if dm.Q1.FieldByName('pro_rcst').AsString = '410' then begin _tot_ibsuf := 0; _tot_ibsmun := 0; _tot_cbs := 0; _tot_baseibscbs := 0; end; if dm.Q1.FieldByName('pro_rcst').AsString = '600' then begin IBSCBS.gIBSCBSMono.vTotCBSMonoItem := 0; IBSCBS.gIBSCBSMono.vTotIBSMonoItem := 0; end; end;
durvalcastro Postado 7 Julho Autor Postado 7 Julho 50 minutos atrás, osmarbentojr disse: Bom dia @durvalcastro, na verdade eu acho que você não entendeu bem, não existe um "gesso" que vc molda daquele jeito e esta funcionando, tem que conhecer a legislação, ir testando e enviando em homologação. Abaixo segue uma parte do meu código, que ainda esta sendo ajustado para atender a todas as situações, mas que já funciona em produção if dm.Q1.FieldByName('pro_rcst').AsString = '000' then IBSCBS.CST := cst000; if dm.Q1.FieldByName('pro_rcst').AsString = '010' then IBSCBS.CST := cst010; if dm.Q1.FieldByName('pro_rcst').AsString = '011' then IBSCBS.CST := cst011; if dm.Q1.FieldByName('pro_rcst').AsString = '200' then IBSCBS.CST := cst200; if dm.Q1.FieldByName('pro_rcst').AsString = '220' then IBSCBS.CST := cst220; if dm.Q1.FieldByName('pro_rcst').AsString = '221' then IBSCBS.CST := cst221; if dm.Q1.FieldByName('pro_rcst').AsString = '222' then IBSCBS.CST := cst222; if dm.Q1.FieldByName('pro_rcst').AsString = '400' then IBSCBS.CST := cst400; if dm.Q1.FieldByName('pro_rcst').AsString = '410' then IBSCBS.CST := cst410; if dm.Q1.FieldByName('pro_rcst').AsString = '510' then IBSCBS.CST := cst510; if dm.Q1.FieldByName('pro_rcst').AsString = '515' then IBSCBS.CST := cst515; if dm.Q1.FieldByName('pro_rcst').AsString = '550' then IBSCBS.CST := cst550; if dm.Q1.FieldByName('pro_rcst').AsString = '620' then IBSCBS.CST := cst620; if dm.Q1.FieldByName('pro_rcst').AsString = '800' then IBSCBS.CST := cst800; if dm.Q1.FieldByName('pro_rcst').AsString = '810' then IBSCBS.CST := cst810; if dm.Q1.FieldByName('pro_rcst').AsString = '811' then IBSCBS.CST := cst811; if dm.Q1.FieldByName('pro_rcst').AsString = '820' then IBSCBS.CST := cst820; if dm.Q1.FieldByName('pro_rcst').AsString = '830' then IBSCBS.CST := cst830; IBSCBS.cClassTrib := dm.Q1.FieldByName('pro_cclasstrib').AsString; _vitem := dm.Q1.FieldByName('itenfe_quantidade').AsFloat * dm.Q1.FieldByName('itenfe_valor').AsFloat; _tot_baseibscbs := _tot_baseibscbs + _vitem; _val_ibsuf := (_vitem / 100) * 0.1; _val_ibsmun := (_vitem / 100) * 0.0; _val_cbs := (_vitem / 100) * 0.9; IBSCBS.gIBSCBS.vBC := _vitem; IBSCBS.gIBSCBS.gIBSUF.pIBSUF := 0.1; if dm.Q1.FieldByName('pro_rcst').AsString = '200' then //grupo de redução de base begin IBSCBS.gIBSCBS.gIBSUF.gRed.pRedAliq := 100; IBSCBS.gIBSCBS.gIBSUF.gRed.pAliqEfet := 0; _val_ibsuf := 0; end; IBSCBS.gIBSCBS.gIBSUF.vIBSUF := _val_ibsuf; IBSCBS.gIBSCBS.gIBSMun.pIBSMun := 0; if dm.Q1.FieldByName('pro_rcst').AsString = '200' then begin IBSCBS.gIBSCBS.gIBSMun.gRed.pRedAliq := 100; IBSCBS.gIBSCBS.gIBSMun.gRed.pAliqEfet := 0; _tot_ibsmun := 0; end; IBSCBS.gIBSCBS.gIBSMun.vIBSMun := _tot_ibsmun; IBSCBS.gIBSCBS.vIBS := _val_ibsmun + _val_ibsuf; IBSCBS.gIBSCBS.gCBS.pCBS := 0.9; if dm.Q1.FieldByName('pro_rcst').AsString = '200' then begin IBSCBS.gIBSCBS.gCBS.gRed.pRedAliq := 100; IBSCBS.gIBSCBS.gCBS.gRed.pAliqEfet := 0; _val_cbs := 0; end; IBSCBS.gIBSCBS.gCBS.vCBS := _val_cbs; _tot_ibsuf := _tot_ibsuf + _val_ibsuf; _tot_ibsmun := _tot_ibsmun + _val_ibsmun; _tot_cbs := _tot_cbs + _val_cbs; if dm.Q1.FieldByName('pro_rcst').AsString = '410' then begin _tot_ibsuf := 0; _tot_ibsmun := 0; _tot_cbs := 0; _tot_baseibscbs := 0; end; if dm.Q1.FieldByName('pro_rcst').AsString = '600' then begin IBSCBS.gIBSCBSMono.vTotCBSMonoItem := 0; IBSCBS.gIBSCBSMono.vTotIBSMonoItem := 0; end; end; Valeu, já ajuda
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora