Ir para conteúdo
  • Cadastre-se

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á 1870 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

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

 

 

Postado

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
Postado

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á.

  • Moderadores
  • Solution
Postado

Enviei ajuste para o repositório com base na sua sugestão, rev. 21830.

Favor atualizar os fontes e testar.

  • Curtir 1
  • Obrigado 3
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Este tópico foi criado há 1870 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...