Provedor: GovDigital (Várzea Paulista - SP)
Versão do ACBrMonitorPlus: 1.4.0.434
Erro retornado: Codigo=GOV110 - Necessário informar a Situação Tributária PIS/COFINS quando informado esses valores
Causa: O método TNFSeW_GovDigital200.GerarValores em GovDigital_GravarXml.pas depende de NFSe.Servico.Valores.CSTPis estar populado, mas a leitura do INI via LerINIValoresTribFederal não estava populando corretamente o campo antes da geração do XML
Arquivo alterado: GovDigital_GravarXml.pas
Correção: Adicionar fallback para tribFed.CST e tribFed.tpRetPisCofins quando CSTPis e tpRetPisCofins estiverem vazios, além de um fallback final com valores padrão
Olá a todos, precisei fazer uma alteração para que as tags CST e tpRetPisCofins constasse no XML do RPS. Peço a gentileza de verificarem se essa minha alteração faz sentido, mas foi a única forma de fazer as tags constar no XML.
Função Anterior
function TNFSeW_GovDigital200.GerarValores: TACBrXmlNode;
begin
Result := inherited GerarValores;
if (NFSe.Servico.Valores.ValorPis>0) or (NFSe.Servico.Valores.ValorCofins>0) then
begin
Result.AppendChild(AddNode(tcStr, '#1', 'CST', 2, 2, 0,
CSTPisToStr(NFSe.Servico.Valores.CSTPis), ''));
if not (StrToIntDef(CSTPisToStr(NFSe.Servico.Valores.CSTPis),0) in [0,8,9]) then
Result.AppendChild(AddNode(tcStr, '#1', 'TpRetPisCofins', 1, 1, 0,
tpRetPisCofinsToStr(NFSe.Servico.Valores.tpRetPisCofins), ''));
end;
end;
Nova Função
function TNFSeW_GovDigital200.GerarValores: TACBrXmlNode;
var
sCST: string;
sRet: string;
begin
Result := inherited GerarValores;
if (NFSe.Servico.Valores.ValorPis > 0) or (NFSe.Servico.Valores.ValorCofins > 0) then
begin
// Tenta CSTPis primeiro, usa tribFed.CST como fallback
sCST := CSTPisToStr(NFSe.Servico.Valores.CSTPis);
if sCST = '' then
sCST := CSTToStr(NFSe.Servico.Valores.tribFed.CST);
if sCST = '' then
sCST := '01'; // fallback final: operação tributável alíquota normal
Result.AppendChild(AddNode(tcStr, '#1', 'CST', 2, 2, 1, sCST, ''));
if not (StrToIntDef(sCST, 0) in [0, 8, 9]) then
begin
// Tenta tpRetPisCofins, usa tribFed como fallback
sRet := tpRetPisCofinsToStr(NFSe.Servico.Valores.tpRetPisCofins);
if sRet = '' then
sRet := tpRetPisCofinsToStr(NFSe.Servico.Valores.tribFed.tpRetPisCofins);
if sRet = '' then
sRet := '1'; // fallback final: retido
Result.AppendChild(AddNode(tcStr, '#1', 'TpRetPisCofins', 1, 1, 1, sRet, ''));
end;
end;
end;
GovDigital.GravarXml.pas