Eu estou tentando atualizar um antigo validador de NFs e tenho alguma dificuldade.
Gostaria de entender um pouco melhor como funciona a rotina de validação...
Em primeiro, se o padrão é UTF-8, por que não existe suporte aos nossos caracteres especiais do português brasileiro?
Coloquei um caracter "ç" no texto de um XML e validei no validador on-line do RS... Por que funciona?
Quais são os caracteres permitidos no texto do XML?? menores que 128 na tabela ASCII?
Nas 232 páginas do manual, não consigo encontrar que texto diz que caracter é válido ou não...
Por que um apostolo, como em D'angelo e Cia, não é válido se ele é número 39 na tabela ASCII??
Estou fazendo tentativas e erros usando o Software Gratuito do Sefaz para testes, mas me parece que ele é meio mal feitinho...
A validação seguindo o Manual, examinando
Tipo
Ocorrência
Tamanho
não é o suficiente???
Obrigado por seus comentários,
Bernardo Höhl
Rio de Janeiro
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+un...@googlegroups.com
Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
-------
FAQ: https://www.assembla.com/wiki/show/nfephp/FAQ
Como Participar: https://www.assembla.com/wiki/show/nfephp/Como_participar
Como Utilizar: http://www.assembla.com/wiki/show/nfephp/Como_utilizar
Tb acho feio o próprio governo dizer para não usarmos caracteres
acentuados do nosso idioma.
Sobre a validação do XML: Sugiro que a montagem do XML seja feita não
utilizando concatenação simples, e sim usando um objeto/biblioteca,
que nesse caso vc não tem q se preocupar com escaping, etc. A
conversão TXT -> XML do NFePHP é feita usando a classe DOMDocument do
PHP, eu faço da mesma forma e não tive problemas.
Sobre o cedilha: Aparentemente valida sem problemas. Tenho NF-e's
contendo cedilhas nas informações complementares (infCpl) que foram
validadas em produção na Sefaz Virtual do RS e também em homologação
na Sefaz do Paraná (ainda não estou em produção no PR).
Abraço
Em 17 de setembro de 2010 18:05, Bernardo Hoehl
<bern...@correiofacil.com> escreveu:
> --
> Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
> Para Postar: nfe...@googlegroups.com
> Para Sair do Grupo: nfephp+un...@googlegroups.com
> Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
> -------
> FAQ: https://www.assembla.com/wiki/show/nfephp/FAQ
> Como Participar: https://www.assembla.com/wiki/show/nfephp/Como_participar
> Como Utilizar: http://www.assembla.com/wiki/show/nfephp/Como_utilizar
>
--
Edmar Wiggers
Macrovita Alimentos
Tel.: 48-3233-4615 / 48-9966-0074
Email: e...@macrovita.com.br
Web: www.macrovita.com.br
Noto que todos programas de NFe substituem cedilhas, tils, agudos, etc...
Onde no manual diz que devemos fazer isso?
Li muito e não encontro onde...
De onde veio esta idéia?
Unicode suporta até mesmo chinês...
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+un...@googlegroups.com
Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
-------
FAQ: https://www.assembla.com/wiki/show/nfephp/FAQ
Como Participar: https://www.assembla.com/wiki/show/nfephp/Como_participar
Como Utilizar: http://www.assembla.com/wiki/show/nfephp/Como_utilizar
"O uso de caracteres acentuados e símbolos especiais para o
preenchimento dos campos alfanuméricos devem ser evitados. Os espaços
informados no início e no final do campo alfanumérico também devem ser
evitados;"
Em 19 de setembro de 2010 15:52, FerreiraH.
<helder.m...@gmail.com> escreveu:
--
Mas "evitado" não é proibido. É?
Por exemplo:
[]{}#%€£¥@():
Acima não são acentuados e podem ser usados?
Eu esperava que num manual tão extenso houvesse uma definição mais
precisa.
Atenciosamente,
Bernardo Hõhl
http://www.rutenium.com.br
http://www.macfacil.com.br/blog/
Eu lembro ter lido este texto.
Mas "evitado" não é proibido. É?
Por exemplo:
[]{}#%€£¥@():
Acima não são acentuados e podem ser usados?
Eu esperava que num manual tão extenso houvesse uma definição mais precisa.
Atenciosamente,
Bernardo Hõhl
http://www.rutenium.com.br
http://www.macfacil.com.br/blog/
Em 19/09/2010, às 17:34, Edmar Wiggers <e...@macrovita.com.br> escreveu:
Além da página 71 indicada pelo Ferreira, vide também a página 132 do
Manual de Integração v3.0:
"O uso de caracteres acentuados e símbolos especiais para o
preenchimento dos campos alfanuméricos devem ser evitados. Os espaços
informados no início e no final do campo alfanumérico também devem ser
evitados;"
Em 19 de setembro de 2010 15:52, FerreiraH.
<helder.m...@gmail.com> escreveu:
Me parece que o validador é que não suporta
Também o Mysql no meu caso preciso corrigir tudo para aceitar nomes de
clientes do o apostrofe.
No meu caso eu faço um array com toda a nota depois eu troco estes
caracteres que atrapalham a validação ai eu faço a converção do array
utilizando aquela função que postei outro dia e passando o array já com o
jeitinho brasileiro para o txttoxml.php
Mas se voce verificar no sintegra a maioria dos nomes de rua e Razão social
Fica a recomendação de usar uma biblioteca q faça escaping automático
para montar o XML, acredito q evita a maioria dos problemas.
Em 19 de setembro de 2010 17:56, Bernardo Höhl
<bern...@correiofacil.com> escreveu:
> Eu lembro ter lido este texto.
>
> Mas "evitado" não é proibido. É?
>
> Por exemplo:
>
> []{}#%€£¥@():
>
> Acima não são acentuados e podem ser usados?
>
> Eu esperava que num manual tão extenso houvesse uma definição mais precisa.
>
> Atenciosamente,
>
> Bernardo Hõhl
>
> http://www.rutenium.com.br
> http://www.macfacil.com.br/blog/
>
> Em 19/09/2010, às 17:34, Edmar Wiggers <e...@macrovita.com.br> escreveu:
>
>> Além da página 71 indicada pelo Ferreira, vide também a página 132 do
>> Manual de Integração v3.0:
>>
>> "O uso de caracteres acentuados e símbolos especiais para o
>> preenchimento dos campos alfanuméricos devem ser evitados. Os espaços
>> informados no início e no final do campo alfanumérico também devem ser
>> evitados;"
>>
>> Em 19 de setembro de 2010 15:52, FerreiraH.
>> <helder.m...@gmail.com> escreveu:
>>>
>>> Me parece que o validador é que não suporta
>>> Também o Mysql no meu caso preciso corrigir tudo para aceitar nomes de
>>> clientes do o apostrofe.
>>> No meu caso eu faço um array com toda a nota depois eu troco estes
>>> caracteres que atrapalham a validação ai eu faço a converção do array
>>> utilizando aquela função que postei outro dia e passando o array já com o
Meio off-topic, mas considero AAAA-MM-DD bem melhor que dd/mm/aaaa, pq
ordena automaticamente de forma cronológica em qq lugar, e não gera
dúvida entre dd/mm/aaaa (nosso e europeu) e mm/dd/aaaa (americano).
Além disso é padrão ISO/internacional (
http://en.wikipedia.org/wiki/ISO_8601 , não é formato americano, que
eu saiba é usado no dia a dia apenas no Japão).
Agora é off-topic mesmo, desculpem:
http://en.wikipedia.org/wiki/Date_and_time_notation_by_country
aaaa-mm-dd é usado em mais países na Ásia
O que acontece é que eu estou usando o NfePHP apenas no envio do xml, consulta e cancelamento.
Não conheço código PHP, mas parece que o PHP tem uma extensa biblioteca que faz as coisas bem mais faceis para vocês...
Tenho grande admiração e gratidão a todos vocês.
O que ocorre é que gostaria de entender como funciona a cabeça dos caras que desenvolveram o NFe, e como é realmente a validação. Mas é falha, de qualquer forma.
Minha rotinas antigas são todas em Applescript, e de alguma forma tenho que escrever tudo na unha ou a melhor opção chamar um unix shell para resolver cada problema.
Voltando a caracteres válidos, por exemplo, estas descrições de produtos são válidas?
Abaixo:
1) Gesso Nº 3 (saco plastico) embalagem 1kg ---> Veja o que temos depois do "N"
2) Silica Coloidal Concentracao 30% (frasco plastico) embalagem 500ml --> Sinal percentual
3) Quartzo moído malha #325 (saco de papel) embalagem 25kg --> Cerquilha, vulgarmente chamado pelo atendentes de operadoras telefônicas por "joguinho da velha"
No meu entendimento todas 3 frases acima não conteem caracteres acentuados ou simbolos.
O que acham?
Obrigado!
Bernardo
===================
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+un...@googlegroups.com
Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
-------
FAQ: https://www.assembla.com/wiki/show/nfephp/FAQ
Como Participar: https://www.assembla.com/wiki/show/nfephp/Como_participar
Como Utilizar: http://www.assembla.com/wiki/show/nfephp/Como_utilizar
Sempre repassam a responsabilidade ou onus para outrém...
Estou pensando em algo aqui e gostaria de saber se algu�m tem esta
solu��o ou ja viu algo assim.
Alguns fornecedores da empresa n�o enviam o XML, dificultando a
implanta��o da NFE aqui.
Recebo o arquivo impresso com a chave.
Existe algum site que com a chave da sefaz, eu consiga fazer o download
deste XML?
Obrigado
Rodrigo Fernando
Marcos
eu instruí meu depto financeiro a só pagar NFEs quando tivermos o XML.
Marcos
On 20/09/2010 08:52, Rodrigo Fernando wrote:
Pessoal, bom dia
Estou pensando em algo aqui e gostaria de saber se alguém tem esta
solução ou ja viu algo assim.
Alguns fornecedores da empresa não enviam o XML, dificultando a
implantação da NFE aqui.
Recebo o arquivo impresso com a chave.
Existe algum site que com a chave da sefaz, eu consiga fazer o download
deste XML?
Obrigado
Rodrigo Fernando
Senhores,
Alguns de meus clientes começaram a reclamar que o programa da receita visualizador de NF-e acusa que o existe um erro no meu certificado da NF-e.
Porem o mesmo passou por todo o procedimento.
Assinado, validade, transmitido e confirmado.
O que poderia estar ocorrendo ???
O problema e no programa da receita ou podemos estar cometendo algum equivoco.
Felipe Bonato
//salva o xml como string em uma variável
$procXML = $procnfe->saveXML();
//remove as informações indesejadas
$procXML = str_replace('default:','',$procXML);
$procXML = str_replace("\n",'',$procXML);
$procXML = str_replace("\r",'',$procXML);
$procXML = str_replace('NFe xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:default="http://www.w3.org/2000/09/xmldsig#"','NFe xmlns="http://www.portalfiscal.inf.br/nfe"',$procXML);
return $procXML;
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+un...@googlegroups.com
Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
-------
FAQ: https://www.assembla.com/wiki/show/nfephp/FAQ
Como Participar: https://www.assembla.com/wiki/show/nfephp/Como_participar
Como Utilizar: http://www.assembla.com/wiki/show/nfephp/Como_utilizar
É ISSO MESMO, EU TAMBÉM ESTAVA COM O MESMO PROBLEMA. ISSO RESOLVEU
Leandro Santana
Tecnologia da Informação - TI
(
Celular: (11) 7232-0066
* leandro...@gmail.com
"de fazer convergir em Cristo, na dispensação da plenitude dos tempos, todas as coisas, tanto as do céu, como as da terra;" - Efésios 1:10
Ferreira,
Obrigado pela ajuda, porem não encontrei esta parte do código no meu ToolsNFePHP.class.php
Posso estar com o arquivo errado ????
Segue abaixo minha rotina addProt();
public function addProt($nfefile, $protfile) {
//protocolo do lote enviado
$prot = new DOMDocument(); //cria objeto DOM
$prot->formatOutput = false;
$prot->preserveWhiteSpace = false;
//NFe enviada
$docnfe = new DOMDocument(); //cria objeto DOM
$docnfe->formatOutput = false;
$docnfe->preserveWhiteSpace = false;
$xmlnfe = file_get_contents($nfefile);
$docnfe->loadXML($xmlnfe,LIBXML_NOBLANKS | LIBXML_NOEMPTYTAG);
$nfe = $docnfe->getElementsByTagName("NFe")->item(0);
//carrega o protocolo e seus dados
$xmlprot = file_get_contents($protfile);
$prot->loadXML($xmlprot,LIBXML_NOBLANKS | LIBXML_NOEMPTYTAG);
$tpAmb = $prot->getElementsByTagName("tpAmb")->item(0)->nodeValue;
$verAplic = $prot->getElementsByTagName("verAplic")->item(0)->nodeValue;
$chNFe=$prot->getElementsByTagName("chNFe")->item(0)->nodeValue;
$dhRecbto=$prot->getElementsByTagName("dhRecbto")->item(0)->nodeValue;
$nProt=$prot->getElementsByTagName("nProt")->item(0)->nodeValue;
$digVal=$prot->getElementsByTagName("digVal")->item(0)->nodeValue;
$cStat=$prot->getElementsByTagName("cStat")->item(0)->nodeValue;
$xMotivo=$prot->getElementsByTagName("xMotivo")->item(0)->nodeValue;
//NFe processada com a tag do protocolo
$procnfe = new DOMDocument('1.0', 'utf-8');
$procnfe->formatOutput = false;
$procnfe->preserveWhiteSpace = false;
//cria a tag nfeProc
$nfeProc = $procnfe->appendChild($procnfe->createElement('nfeProc'));
//estabele o atributo de versão
$nfeProc_att1 = $nfeProc->appendChild($procnfe->createAttribute('versao'));
$nfeProc_att1->appendChild($procnfe->createTextNode('1.10'));
//estabelece o atributo xmlns
$nfeProc_att2 = $nfeProc->appendChild($procnfe->createAttribute('xmlns'));
$nfeProc_att2->appendChild($procnfe->createTextNode($this->URLnfe));
//inclui NFe
$node = $procnfe->importNode($nfe, true);
$nfeProc = $nfeProc->appendChild($node);
//cria tag protNFe
$protNFe = $nfeProc->appendChild($procnfe->createElement('protNFe'));
//estabele o atributo de versão
$protNFe_att1 = $protNFe->appendChild($procnfe->createAttribute('versao'));
$protNFe_att1->appendChild($procnfe->createTextNode('1.10'));
//cria tag infProt
$infProt = $protNFe->appendChild($procnfe->createElement('infProt'));
$infProt->appendChild($procnfe->createElement('tpAmb',$tpAmb));
$infProt->appendChild($procnfe->createElement('verAplic',$verAplic));
$infProt->appendChild($procnfe->createElement('chNFe',$chNFe));
$infProt->appendChild($procnfe->createElement('dhRecbto',$dhRecbto));
$infProt->appendChild($procnfe->createElement('nProt',$nProt));
$infProt->appendChild($procnfe->createElement('digVal',$digVal));
$infProt->appendChild($procnfe->createElement('cStat',$cStat));
$infProt->appendChild($procnfe->createElement('xMotivo',$xMotivo));
return $procnfe->saveXML();
} //fim da função
Como devo proeder ???
Já agradecendo antecipadamente,
Felipe Bonato
De:
nfe...@googlegroups.com [mailto:nfe...@googlegroups.com] Em nome de FerreiraH.
Enviada em: segunda-feira, 20 de setembro de 2010 13:05
Para: nfe...@googlegroups.com
Assunto: Re: [nfephp] Erro de Leitura do Certificado Digital pelo
Programa da Receita
o erro ocorre ao protocolar quando voce pega a nota enviada
e junta o protocolo o xml da nota é alterado acrecentando algumas tag
/**
* addProt
* Este método adiciona a tag do protocolo a NFe, preparando a mesma
* para impressão e envio ao destinatário.
*
* @param string $nfefile path completo para o arquivo contendo a NFe
* @param string $protfile path completo para o arquivo contendo o protocolo
* @return string Retorna a NFe com o protocolo
*/
public function addProt($nfefile, $protfile) {
//protocolo do lote enviado
$prot = new DOMDocument(); //cria objeto DOM
$prot->formatOutput = false;
$prot->preserveWhiteSpace = false;
//NFe enviada
$docnfe = new DOMDocument(); //cria objeto DOM
$docnfe->formatOutput = false;
$docnfe->preserveWhiteSpace = false;
$xmlnfe = file_get_contents($nfefile);
$docnfe->loadXML($xmlnfe,LIBXML_NOBLANKS | LIBXML_NOEMPTYTAG);
$nfe = $docnfe->getElementsByTagName("NFe")->item(0);
//carrega o protocolo e seus dados
$xmlprot = file_get_contents($protfile);
$prot->loadXML($xmlprot,LIBXML_NOBLANKS | LIBXML_NOEMPTYTAG);
$tpAmb = $prot->getElementsByTagName("tpAmb")->item(0)->nodeValue;
$verAplic = $prot->getElementsByTagName("verAplic")->item(0)->nodeValue;
$chNFe=$prot->getElementsByTagName("chNFe")->item(0)->nodeValue;
$dhRecbto=$prot->getElementsByTagName("dhRecbto")->item(0)->nodeValue;
$nProt=$prot->getElementsByTagName("nProt")->item(0)->nodeValue;
$digVal=$prot->getElementsByTagName("digVal")->item(0)->nodeValue;
$cStat=$prot->getElementsByTagName("cStat")->item(0)->nodeValue;
$xMotivo=$prot->getElementsByTagName("xMotivo")->item(0)->nodeValue;
//NFe processada com a tag do protocolo
$procnfe = new DOMDocument('1.0', 'utf-8');
$procnfe->formatOutput = false;
$procnfe->preserveWhiteSpace = false;
//cria a tag nfeProc
$nfeProc = $procnfe->createElement('nfeProc');
$procnfe->appendChild($nfeProc);
//estabele o atributo de versão
$nfeProc_att1 = $nfeProc->appendChild($procnfe->createAttribute('versao'));
$nfeProc_att1->appendChild($procnfe->createTextNode('1.10'));
//estabelece o atributo xmlns
$nfeProc_att2 = $nfeProc->appendChild($procnfe->createAttribute('xmlns'));
$nfeProc_att2->appendChild($procnfe->createTextNode($this->URLnfe));
//inclui NFe
$node = $procnfe->importNode($nfe, true);
$nfeProc->appendChild($node);
//cria tag protNFe
$protNFe = $procnfe->createElement('protNFe');
$nfeProc->appendChild($protNFe);
//estabele o atributo de versão
$protNFe_att1 = $protNFe->appendChild($procnfe->createAttribute('versao'));
$protNFe_att1->appendChild($procnfe->createTextNode('1.10'));
//cria tag infProt
$infProt = $procnfe->createElement('infProt');
$protNFe->appendChild($infProt);
$infProt->appendChild($procnfe->createElement('tpAmb',$tpAmb));
$infProt->appendChild($procnfe->createElement('verAplic',$verAplic));
$infProt->appendChild($procnfe->createElement('chNFe',$chNFe));
$infProt->appendChild($procnfe->createElement('dhRecbto',$dhRecbto));
$infProt->appendChild($procnfe->createElement('nProt',$nProt));
$infProt->appendChild($procnfe->createElement('digVal',$digVal));
$infProt->appendChild($procnfe->createElement('cStat',$cStat));
$infProt->appendChild($procnfe->createElement('xMotivo',$xMotivo));
//salva o xml como string em uma variável
$procXML = $procnfe->saveXML();
//remove as informações indesejadas
$procXML = str_replace('default:','',$procXML);
$procXML = str_replace("\n",'',$procXML);
$procXML = str_replace("\r",'',$procXML);
$procXML = str_replace('NFe xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:default="http://www.w3.org/2000/09/xmldsig#"','NFe xmlns="http://www.portalfiscal.inf.br/nfe"',$procXML);
return $procXML;
} //fim da função
Obrigado pela sua atenção e pelo seu tempo
Vou testar e te aviso.