Ir para conteúdo
  • Cadastre-se

dev botao

Alteração do ValidarChave no pcnAuxiliar para abranger todas as Séries, incluindo de CPF


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

Recommended Posts

Boa tarde.

Um cliente meu está tentando importar uma NF-e de Produtor Rural Modelo 55, e ela foi emitida por um Produtor que usa CPF (CPF na chave da Nota), usando uma Série na faixa 910 à 919.

Eu estou usando a seguinte função para validar a Chave dessa Nota: 

ValidarChave(const chave: string)

Essa função está na Unit ACBR\Fontes\PCNComum\pcnAuxiliar.pas.

 

Mas ela está retornando o valor falso, invalidando a chave da Nota, quando na verdade eu verifiquei a chave na consulta NF-e do portal da SEFAZ, e está emitida corretamente, portanto a chave é válida.

 

Nessa função há um trecho de código que faz a validação da chave da Nota tratando como um CNPJ ou CPF dependendo da Série utilizada, onde somente trata como CPF se estiver usando uma Série entre 920 e 969, conforme segue:

case StrToInt(copy(aChave, 23, 3)) of
	// serie reservada para DFe eCPF emitida por aplicativo da Empresa Emitente
	920..969: result := ValidarCPF(copy(aChave, 10, 11));
else
	// serie (001-889) reservada para DFe eCNPJ
	result := ValidarCNPJ(copy(aChave, 7, 14));
end;

 

Verificando a Documentação da NF-e, eu constatei o seguinte tratamento:

Faixa Emissor Identificador Assinatura procEmi
000-889

Aplicativo do Contribuinte

(NFe)

CNPJ e-CNPJ do contribuinte 0 ou 3
890-899 Site do Fisco

(NFA-e)

CNPJ / CPF e-CNPJ da Sefaz 1
900-909 Site do Fisco

(NFA-e)

CNPJ

e-CNPJ da Sefaz

ou

e-CNPJ do contribuinte

1 ou 2
910-919 Site do Fisco

(NFA-e)

CPF

e-CNPJ da Sefaz

ou

e-CPF do contribuinte

1 ou 2
920-969

Aplicativo do Contribuinte

(NFe)

CPF e-CPF do contribuinte 0 ou 3

(No caso, o meu cliente se encaixa na penúltima linha, Série da faixa 910 à 919, NFA-e Modelo 55 emitida por um CPF).

 

Portanto eu fiz alterações nessa parte do código, ficando da seguinte forma:

case StrToInt(copy(aChave, 23, 3)) of
	// Séries (000-889) reservadas para NF-e eCNPJ emitida por aplicativo da Empresa Emitente
	000..889,
	// Séries (900-909) reservadas para NFA-e eCNPJ emitida no Site do Fisco
	900..909:
		result := ValidarCNPJ(copy(aChave, 7, 14));
	// Séries (910-919) reservadas para NFA-e eCPF emitida no Site do Fisco
	910..919,
	// Séries (920-969) reservadas para NF-e eCPF emitida por aplicativo da Empresa Emitente
	920..969:
		result := ValidarCPF(copy(aChave, 10, 11));
else
	// Séries (890-899) reservadas para NFA-e eCNPJ ou eCPF emitida no Site do Fisco, e outras possíveis Séries futuras
	result := ValidarCNPJ(copy(aChave, 7, 14)) or ValidarCPF(copy(aChave, 10, 11));
end;

O arquivo atualizado com as alterações que fiz segue em anexo nesse post. Favor verificar e aprovar a alteração se possível. Aceito sugestões de melhoria. Agradeço desde já. Vlw!

pcnAuxiliar#new.pas

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Moderadores
1 hora atrás, Lucas Martendal disse:

O arquivo atualizado com as alterações que fiz segue em anexo nesse post. Favor verificar e aprovar a alteração se possível. Aceito sugestões de melhoria. Agradeço desde já. Vlw!

Parece correto exceto pelas séries 890-899, o MOC deixa claro que na chave de acesso vai constar o CNPJ da SEFAZ:

image.png

  • Curtir 2
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Bom dia pessoal, agradeço o rápido retorno.

 

Citar

Parece correto exceto pelas séries 890-899, o MOC deixa claro que na chave de acesso vai constar o CNPJ da SEFAZ:

Entendo @EMBarbosa, agradeço a correção.

Que tal dessa forma abaixo?

case StrToInt(copy(aChave, 23, 3)) of
	// Séries (000-889) reservadas para NF-e eCNPJ emitida por aplicativo da Empresa Emitente
	000..889,
	// Séries (890-899) reservadas para NFA-e eCNPJ da SEFAZ emitida no Site do Fisco
	890..899,
	// Séries (900-909) reservadas para NFA-e eCNPJ emitida no Site do Fisco
	900..909:
		result := ValidarCNPJ(copy(aChave, 7, 14));
	// Séries (910-919) reservadas para NFA-e eCPF emitida no Site do Fisco
	910..919,
	// Séries (920-969) reservadas para NF-e eCPF emitida por aplicativo da Empresa Emitente
	920..969:
		result := ValidarCPF(copy(aChave, 10, 11));
else
	// Outras possíveis Séries futuras
	result := ValidarCNPJ(copy(aChave, 7, 14)) or ValidarCPF(copy(aChave, 10, 11));
end;

As alterações já estão em anexo...

pcnAuxiliar#new_v2.pas

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Boa tarde.

Desculpe @BigWings, eu citei o EMBarbosa no meu comentário anterior, mas acabei me confundindo (porque o Daniel Simões citou ele), era pra ter citado você, em continuidade com a sua análise.

Você pode verificar as alterações que fiz no código do último comentário, por favor? Creio estar pronto agora, mas também aceito novas sugestões...

Agradeço desde já.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1051 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.