Ir para conteúdo
  • Cadastre-se

dev botao

Provedor Ginfes Jundiai/SP NFSe cancelada mas TStatusNFSe.snNormal


Ver Solução Respondido por Diego Foliene,

Recommended Posts

  • Membros Pro
Postado

Boa tarde,

O processo de cancelamento da NFSe esta normal ela é cancelada com sucesso posso verificar isso pelo site do provedor, porem ao consultar a NFSe pelo RPS ela nao retorna os dados do cancelamento, até ai normal né o provedor nao tem um padrao e por isso nao retorna as informações do cancelamento.

Ao consultar a NFSe pelo Numero dela entao ai sim o XML de retorno vem com os dados do cancelamento no caso uma a tag

<NfseCancelamento>
        <Confirmacao>
            <Pedido>
                <InfPedidoCancelamento>
                    <IdentificacaoNfse>
                        <Numero>918</Numero>
                        <Cnpj>01190940000153</Cnpj>
                        <CodigoMunicipio>0</CodigoMunicipio>
                    </IdentificacaoNfse>
                    <CodigoCancelamento>0</CodigoCancelamento>
                </InfPedidoCancelamento>
            </Pedido>
        </Confirmacao>
    </NfseCancelamento>

 Porem a propriedade ACBrNFSeX1.NotasFiscais.Items[0].NFSe.SituacaoNfse = TStatusNFSe.snNormal no caso acredito que o componente precise ler essa tag acima mencionada e se ela existir no XML então define a propriedade ACBrNFSeX1.NotasFiscais.Items[0].NFSe.SituacaoNfse = TStatusNFSe.snCancelado segue os XMLs em anexo para analise.

pela NFSe com dados do CANC 3524030119094000015356000000000000918-nfse.xml Pelo RPS sem dados do CANC 3524030119094000015356000000000000918-nfse.xml

  • Consultores
Postado

Boa tarde!

Conferindo nas units relacionadas é possível observar que existe tratamento para leitura do grupo NfseCancelamento na rotina que trata o retorno da consulta de NFSe por RPS.

Criada a #TK-5204 para análise da possibilidade de adição no retorno da consulta por número.

Por favor, se possível, peço que disponibilize em [email protected] o arquivo de envelope do retorno da consulta de NFSe por número para que possamos utilizar nos testes. Ele tem -soap no nome e para que seja gerado é preciso definir ACBrNFSeX.Configuracoes.WebServices.Salvar := True;

Não se esqueça de adicionar no corpo do e-mail o link do tópico do fórum para posterior identificação.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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
26 minutos atrás, Destak disse:

Boa tarde,

E-mail enviado com sucesso, da uma verificada se chegou por gentileza.

Boa tarde!

Arquivos recebidos e anexados na respectiva tarefa.

Qualquer novidade será comunicada aqui.

Muito obrigado!

 

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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

Boa tarde @Destak,

Tenho notado que alguns provedores possuem uma rotina que gera o XML da NFS-e para cada serviço que retorna o XML da NFS-e.

O provedor Ginfes possui os seguintes serviços que retornam o XML da NFS-e: ConsultarLote, ConsultarNFSePorRps e ConsultarNFSe.

Gostaria que você fizesse um teste com os 3 serviços.

Quero saber se os 3 retornos traz o XML de uma nota cancelada com o grupo referente ao cancelamento.

Notei pela sua postagem inicial que no grupo NfseCancelamento consta o numero da nota e o CNPJ do prestador, mas não consta o código do município e nem o código do motivo do cancelamento, em ambos a informação é um zero.

Não consta também a tag DataHora ou DataHoraCancelamento.

Essa informação é utilizada para determinar o valor do campo SituacaoNfse, veja:

        if DataHora > 0 then
          NFSe.SituacaoNfse := snCancelado;

Os arquivos que você enviou para nós se refere ao ConsultarNFSe, por favor faça um teste com os outros 2 tipos de consulta.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado

Boa noite,

Segue em anexo o teste com os outros dois tipos de consulta conforme solicitado, reparei que nesses dois não vem o grupo de cancelamento, só vem esse grupo na consultaNFSe por numero. ou seja uma falta do mínimo de padrão desse provedor, o que não é novidade certo.

Acredito que nesse caso deve ser verificado somente se o grupo existe e se existir então blz quer dizer que é uma NFSe cancelada, infelizmente é a única forma no casso desse provedor.

ConsultaNFSeporProtocolo6313638.zip ConsultaNFSeporRPS5302MY-comp-nfse.zip

  • Curtir 1
  • Consultores
Postado
14 horas atrás, Destak disse:

Boa noite,

Segue em anexo o teste com os outros dois tipos de consulta conforme solicitado, reparei que nesses dois não vem o grupo de cancelamento, só vem esse grupo na consultaNFSe por numero. ou seja uma falta do mínimo de padrão desse provedor, o que não é novidade certo.

Acredito que nesse caso deve ser verificado somente se o grupo existe e se existir então blz quer dizer que é uma NFSe cancelada, infelizmente é a única forma no casso desse provedor.

ConsultaNFSeporProtocolo6313638.zip 7.83 kB · 0 downloads ConsultaNFSeporRPS5302MY-comp-nfse.zip 7.83 kB · 0 downloads

O provedor Ginfes herda das classes responsáveis pelo Layout da ABRASF na versão 1.

Conferindo na unit Ginfes.Provider, é possível ver que ele não modifica os métodos, então ele usa os da classe mãe e nela temos:

procedure TACBrNFSeProviderABRASFv1.LerCancelamento(ANode: TACBrXmlNode;
  Response: TNFSeConsultaNFSeporRpsResponse);
var
  AuxNodeCanc: TACBrXmlNode;
begin
  AuxNodeCanc := ANode.Childrens.FindAnyNs('NfseCancelamento');

  if AuxNodeCanc <> nil then
  begin
    AuxNodeCanc := AuxNodeCanc.Childrens.FindAnyNs('Confirmacao');

    if AuxNodeCanc = nil then
      AuxNodeCanc := ANode.Childrens.FindAnyNs('ConfirmacaoCancelamento');

    if AuxNodeCanc <> nil then
    begin
      AuxNodeCanc := AuxNodeCanc.Childrens.FindAnyNs('InfConfirmacaoCancelamento');

      if AuxNodeCanc <> nil then
        Response.DataCanc := ObterConteudoTag(AuxNodeCanc.Childrens.FindAnyNs('DataHora'), FpFormatoDataHora);

      if Response.DataCanc = 0 then
        Response.DataCanc := ObterConteudoTag(ANode.Childrens.FindAnyNs('DataHoraCancelamento'), FpFormatoDataHora);

      if Response.DataCanc = 0 then
        Response.DataCanc := ObterConteudoTag(ANode.Childrens.FindAnyNs('DataHora'), FpFormatoDataHora);
    end;

    Response.DescSituacao := '';

    if Response.DataCanc > 0 then
      Response.DescSituacao := 'Nota Cancelada';
  end;
end;

procedure TACBrNFSeProviderABRASFv1.TratarRetornoConsultaNFSeporRps(Response: TNFSeConsultaNFSeporRpsResponse);
var
//...
begin
  Document := TACBrXmlDocument.Create;

  try
    try
      //...
      if Response.Sucesso then
      begin
        ANode := Document.Root.Childrens.FindAnyNs('CompNfse');
        if ANode = nil then
          ANode := Document.Root.Childrens.FindAnyNs('ComplNfse');

        if not Assigned(ANode) then
        begin
          AErro := Response.Erros.New;
          AErro.Codigo := Cod203;
          AErro.Descricao := ACBrStr(Desc203);
          Exit;
        end;

        AuxNode := ANode.Childrens.FindAnyNs('tcCompNfse');

        if AuxNode = nil then
        begin
          LerCancelamento(ANode, Response);

          AuxNode := ANode.Childrens.FindAnyNs('Nfse')
        end
        else
        begin
          LerCancelamento(AuxNode, Response);

          AuxNode := AuxNode.Childrens.FindAnyNs('Nfse');
        end;
        //...
      end;
    except
      on E:Exception do
      begin
        AErro := Response.Erros.New;
        AErro.Codigo := Cod999;
        AErro.Descricao := ACBrStr(Desc999 + E.Message);
      end;
    end;
  finally
    FreeAndNil(Document);
  end;
end;

Vamos analisar na TK mencionada a adição desta rotina na TratarRetornoConsultaNFSe

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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 !!

  • Membros Pro
Postado (editado)

Boa tarde,

@Italo Giurizzato Junior Sim essas consultas foram realizadas numa NFS-e que foi e esta cancelada, confiro isso pelo site do provedor e fui eu mesmo quem cancelou pelo componente mesmo.

Acho que você não leu o post todo com calma, pois o problema é exatamente esse, mas vou explicar de novo aqui:

1. Se consulto a NFSe pelo numero ela traz o grupo <NfseCancelamento>, exatamente da forma que esta abaixo:

<NfseCancelamento>
        <Confirmacao>
            <Pedido>
                <InfPedidoCancelamento>
                    <IdentificacaoNfse>
                        <Numero>918</Numero>
                        <Cnpj>01190940000153</Cnpj>
                        <CodigoMunicipio>0</CodigoMunicipio>
                    </IdentificacaoNfse>
                    <CodigoCancelamento>0</CodigoCancelamento>
                </InfPedidoCancelamento>
            </Pedido>
        </Confirmacao>
    </NfseCancelamento>

2. Se consulto essa mesma NFSe pelo RPS ela simplesmente não trás esse grupo ou informação alguma sobre cancelamento.

3. Se consulto essa mesma NFSe pelo Protocolo ela simplesmente não trás esse grupo ou informação alguma sobre cancelamento.

É esse o problema entende, o provedor é uma zorra simplesmente isso, a solução que eu propus no inicio desse topíco é que o componente verifique se existe a tag <NfseCancelamento> e se existir então define a propriedade ACBrNFSeX1.NotasFiscais.Items[0].NFSe.SituacaoNfse = TStatusNFSe.snCancelado.

Voca ja disse que o componente faz essa verificação 

Em 12/03/2024 at 15:32, Italo Giurizzato Junior disse:
 if DataHora > 0 then
          NFSe.SituacaoNfse := snCancelado;

Porem como constatamos o provedor não manda essa informação no XML que esta de fato cancelado, veja a  imagem em anexo, sendo assim somente a existência da tag <NfseCancelamento> com a tag filho <Confirmacao> é o suficiente para que confirmemos que a mesma esta cancelada, dai p ficar mais simples vc pode mudar de ao inves de verificar DataHora veja apenas se tem o numero da nota e ou o CNPJ.

Lembrando que essa informação vem apenas na consulta da NFSe pelo numero, nas outras consultas nem isso vem, não vem nada, ou seja eles retornam como se fosse uma NFSe com situação normal.

Ta na cara que não tem um responsável la naquela empresa (provedor) verificando uma informação tão importante como essa no retorno do XML.

NFSe 918 cancelada.jpg

Editado por Destak
  • Curtir 1
  • Obrigado 1
  • Consultores
Postado

Bom dia @Destak,

Quando você fez o teste de ConsultarLote consta no retorno o seguinte:

image.png

Já ao fazer o teste de ConsultarNfsePorRps temos o seguinte retorno:

image.png

Citar

É esse o problema entende, o provedor é uma zorra simplesmente isso, a solução que eu propus no inicio desse topíco é que o componente verifique se existe a tag <NfseCancelamento> e se existir então define a propriedade ACBrNFSeX1.NotasFiscais.Items[0].NFSe.SituacaoNfse = TStatusNFSe.snCancelado.

Se adotarmos a sua proposta, pelo ConsultarLote a nota esta cancelada, mas pelo ConsultarNfsePorRps a nota não esta cancelada.

Antes de tomar uma decisão do que fazer eu gostaria de ver o XML de retorno do pedido de cancelamento da nota.

Esses XMLs que você nos disponibilizou são da consulta de uma nota cancelada.

  • Curtir 2
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado
Em 14/03/2024 at 14:47, Destak disse:

1. Se consulto a NFSe pelo numero ela traz o grupo <NfseCancelamento>, exatamente da forma que esta abaixo:

<NfseCancelamento>
        <Confirmacao>
            <Pedido>
                <InfPedidoCancelamento>
                    <IdentificacaoNfse>
                        <Numero>918</Numero>
                        <Cnpj>01190940000153</Cnpj>
                        <CodigoMunicipio>0</CodigoMunicipio>
                    </IdentificacaoNfse>
                    <CodigoCancelamento>0</CodigoCancelamento>
                </InfPedidoCancelamento>
            </Pedido>
        </Confirmacao>
    </NfseCancelamento>

2. Se consulto essa mesma NFSe pelo RPS ela simplesmente não trás esse grupo ou informação alguma sobre cancelamento.

3. Se consulto essa mesma NFSe pelo Protocolo ela simplesmente não trás esse grupo ou informação alguma sobre cancelamento.

Boa tarde @Italo Giurizzato Junior

Somete para reafirmar e conforme essa menção acima, só vem informação de cancelamento quando ConsultarNFSeporNumero, ja quando ConsultarLoteRps vem a tag <NfseCancelamento/> porem ja fechada sem nada dentro e quando ConsultarNFSeporRps não vem nem a tag <NfseCancelamento/> simplesmente não vem nada relacionado a cancelamento.

Então hoje atualmente a unica forma de verificar se a NFSe esta cancelada ou não é usando ConsultarNFSeporNumero e se néla houver a tag <NfseCancelamento/> com o Numero da nota e ou o CNPJ da empresa podemos ter certeza de que se trata de uma NFSe cancelada.

Segue em anexo os XMLs que pediu porem de outra nota, pois a da 918 não tenho mais, então gerei e cancelei uma NFSe so para obter os arquivos solicitados.

Arquivos solicitadosNFSe.zip

  • Obrigado 1
  • Consultores
Postado

Boa tarde @Destak,

Analisando o arquivo de pedido de cancelamento *-ped-can.xml notei que esta correto.

Por outro lado o arquivo de retorno *-can.xml contem algumas tags mas todas estão vazias, veja:

<CancelarNfseResposta xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns:ns4="http://www.ginfes.com.br/tipos_v03.xsd" xmlns:ns3="http://www.ginfes.com.br/servico_cancelar_nfse_resposta_v03.xsd">
	<Cancelamento/>
	<ListaMensagemRetorno>
		<MensagemRetorno>
			<Codigo/>
			<Correcao/>
		</MensagemRetorno>
	</ListaMensagemRetorno>
</CancelarNfseResposta>

Antes de fazermos qualquer alteração no componente, lhe recomendo entrar em contato com o provedor com a prefeitura e relatar o problema no webservice no que se refere ao cancelamento da nota.

Pelo retorno do pedido de cancelamento não temos condições se o cancelamento foi realizado com sucesso ou não e se não foi por qual motivo.

  • Curtir 1
  • Triste 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • 2 semanas depois ...
  • Administradores
Postado

Tópico fechado por falta de retorno do usuário

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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

Tópico reaberto a pedido do usuário.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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
  • Solution
Postado

Boa tarde!

Foi enviado ao SVN na Rev-33052 alteração nas classes base para que o componente leia as informações de cancelamento e substituição, de acordo com o leiaute ABRASF, em todas as consultas que devolvam NFSe.

Vale ressaltar que a leitura está seguindo o leiaute ABRASF(ao qual o Ginfes implementa), então as informações são lidas do grupo tcInfConfirmacaoCancelamento o qual não está sendo devolvido nos retornos que disponibilizou. Por isso, o contato com o provedor para relatar o problema é de suma importância.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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 !!

  • 4 meses depois ...
  • Consultores
Postado

Bom dia @Destak,

A empresa EICON que desenvolveu o provedor Ginfes tem um outro webservice que eles chama de GissOnline e que nós implementamos como sendo o provedor Giss.

Para algumas cidades eles disponibilizaram esse novo webservice que trabalha na versão 2.04 do layout da ABRASF.

Já foi feito diversos ajustes no componente ACBrNFSeX visando o provedor Giss.

Caso tenha interesse em realizar testes faça o seguinte:

1. Atualize todos os fontes de todas as pastas e reinstale o ACBr.

2. Compile o programa exemplo ou a sua aplicação com a opção Build.

3. Copie para dentro da pasta do EXE do programa exemplo ou da sua aplicação o arquivo ACBrNFSeXServicos.ini

4. Faça seguinte alteração nele:

[3525904]
; Atualizado em 03/01/2024
Nome=Jundiai
UF=SP
Provedor=Giss
Versao=2.04
ProRecepcionar=https://ws-jundiai.giss.com.br/service-ws/nf/nfse-ws

5. Faça os testes.

Observação: note que não existe URL de homologação, portanto emita uma nova de valor baixo (1 Real) e depois cancela, uma vez que o envio da nota vai ser para o ambiente de produção.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

×
×
  • 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.