Ir para conteúdo
  • Cadastre-se

ISSSaoPaulo - Correção na assinatura do DPS/RPS para atender emissão da NFS-e no padrão nacional.


Ver Solução Respondido por leonardo.gomes,
  • Este tópico foi criado há 177 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Solution
Postado

Prezados,

Para viabilizar o envio de RPS/DPS no layout 2.0 da Prefeitura de São Paulo utilizando as fontes atualizadas do ACBRNFSex, foi necessário aplicar uma correção no método AssinaturaAdicional da classe ISSSaoPaulo.Provider.

Encaminho em anexo o objeto atualizado com o ajuste realizado.
Peço, por gentileza, que avaliem a possibilidade de incorporar essa correção ao repositório oficial.

Conforme o manual da Prefeitura de São Paulo:

"Observação: não é necessário informar os dados de intermediário na assinatura se não houver intermediário. ..."

Correção realizada:

procedure TACBrNFSeProviderISSSaoPaulo.AssinaturaAdicional(Nota: TNotaFiscal);
var
  sSituacao, sISSRetido, sCPFCNPJTomador, sIndTomador, sTomador,
  sCPFCNPJInter, sIndInter, sISSRetidoInter, sInter, sAssinatura, sNIF: string;
  iTamanhoIM: Integer;
begin
  with Nota do
  begin
    sSituacao := EnumeradoToStr(NFSe.SituacaoNfse, ['N', 'C'], [snNormal, snCancelado]);

    sISSRetido := EnumeradoToStr(NFSe.Servico.Valores.IssRetido,
                                 ['N', 'S'], [stNormal, stRetencao]);

    // Tomador do Serviço
    sCPFCNPJTomador := OnlyNumber(NFSe.Tomador.IdentificacaoTomador.CpfCnpj);

    if sCPFCNPJTomador = '' then
      sIndTomador := '3'
    else
      if Length(sCPFCNPJTomador) <= 11 then
        sIndTomador := '1'
      else
        if Length(sCPFCNPJTomador) <= 14 then
          sIndTomador := '2';

    sTomador := sIndTomador + Poem_Zeros(sCPFCNPJTomador, 14);

    // Prestador Intermediario
    sCPFCNPJInter := OnlyNumber(NFSe.Intermediario.Identificacao.CpfCnpj);

    if sCPFCNPJInter = '' then
      sIndInter := '3'
    else
      if Length(sCPFCNPJInter) <= 11 then
        sIndInter := '1'
      else
        if Length(sCPFCNPJInter) <= 14 then
          sIndInter := '2';

    sISSRetidoInter := EnumeradoToStr(NFSe.Intermediario.IssRetido,
                                      ['N', 'S'], [stNormal, stRetencao]);

    sNIF := trim(NFSe.Intermediario.Identificacao.Nif);

    if sIndInter = '3' then
      sNIF := NaoNIFToStr(NFSe.Intermediario.Identificacao.cNaoNIF);

    if FPVersaoDFe = '2' then
    begin
      if (sCPFCNPJInter <> '') then
        sInter := sIndInter + Poem_Zeros(sCPFCNPJInter, 14) + sISSRetidoInter + sNIF
      else
        sInter := '';

      iTamanhoIM := 12;
    end
    else
    begin
      if sIndInter <> '3' then
        sInter := sIndInter + Poem_Zeros(sCPFCNPJInter, 14) + sISSRetidoInter
      else
        sInter := '';

      iTamanhoIM := 8;
    end;

    sAssinatura := Poem_Zeros(NFSe.Prestador.IdentificacaoPrestador.InscricaoMunicipal, iTamanhoIM) +
                   PadRight(NFSe.IdentificacaoRps.Serie, 5, ' ') +
                   Poem_Zeros(NFSe.IdentificacaoRps.Numero, 12) +
                   FormatDateTime('yyyymmdd', NFse.DataEmissao) +
                   TipoTributacaoRPSToStr(NFSe.TipoTributacaoRPS) +
                   sSituacao +
                   sISSRetido +
                   Poem_Zeros(OnlyNumber(FormatFloat('#0.00', NFSe.Servico.Valores.ValorServicos)), 15) +
                   Poem_Zeros(OnlyNumber(FormatFloat('#0.00', NFSe.Servico.Valores.ValorDeducoes)), 15) +
                   Poem_Zeros(OnlyNumber(NFSe.Servico.ItemListaServico), 5) +
                   sTomador +
                   sInter;

    NFSe.Assinatura := string(TACBrNFSeX(FAOwner).SSL.CalcHash(AnsiString(sAssinatura), dgstSHA1, outBase64, True));
  end;
end;

ISSSaoPaulo.Provider.pas

  • Curtir 1
  • Este tópico foi criado há 177 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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.