Distribuição da NF-e para o Destinatário
O projeto da NF-e prevê que o armazenamento e distribuição das NF-e deve ser realizada em uma estrutura XML que contenha a NF-e autorizada e o seu respectivo protocolo de autorização de uso.
Esta definição consta do item 10 do Manual de Integração do Contribuinte, mas muitos desenvolvedores não haviam notado este detalhe e estão com dificuldades para cumprir este requisito do projeto.
A estrutura do procNFe é bastante simples:
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<nfeProc xmlns=”http://www.portalfiscal.inf.br/nfe” versao=”1.10″>
<NFe xmlns=”http://www.portalfiscal.inf.br/nfe”>
(…) detalhe da NF-e
</NFe>
<protNFe versao=”1.10″>
<infProt Id=”NFe143090022222702″>
<tpAmb>1</tpAmb>
<verAplic>RS20090728151044</verAplic>
<chNFe>430900000000000191550000000001112456712141</chNFe>
<dhRecbto>2009-09-03T09:32:31</dhRecbto>
<nProt>143090022222702</nProt>
<digVal>Kf5DSwarO9iCXWn5BNXN25duesU=</digVal>
<cStat>100</cStat>
<xMotivo>Autorizado o uso da NF-e</xMotivo>
</infProt>
</protNFe>
</nfeProc>
Em azul é o XML da NF-e, em vermelho o protocolo de autorização de uso, em preto estrutura do procNFe.
O arquivo deve ser gravado na codificação UTF-8, pois caso contrário, os browsers e o Aplicativo Visualizador da NF-e podem rejeitar o arquivo.
Os usuários de Delphi devem utilizar a função AnsiToUTF8 para converter a string com a procNFe antes da gravação.
Os usuários de VB podem utilizar o seguinte código para converter em UTF-8:
‘
‘ Converte a string para codificação UTF-8
‘
‘ Este processo evita problemas de leitura via browser
‘ e principalmente no visualizador da RFB
‘
Private Function UTF8_Encode(ByVal sStr As String)
Dim l As Long, lChar As Integer, sUtf8 As String
For l = 1 To Len(sStr)
lChar = AscW(Mid(sStr, l, 1))
If lChar < 128 Then
sUtf8 = sUtf8 + Mid(sStr, l, 1)
ElseIf ((lChar > 127) And (lChar < 2048)) Then
sUtf8 = sUtf8 + Chr(((lChar \ 64) Or 192))
sUtf8 = sUtf8 + Chr(((lChar And 63) Or 128))
Else
sUtf8 = sUtf8 + Chr(((lChar \ 144) Or 234))
sUtf8 = sUtf8 + Chr((((lChar \ 64) And 63) Or 128))
sUtf8 = sUtf8 + Chr(((lChar And 63) Or 128))
End If
Next l
UTF8_Encode = sUtf8
End Function
* Deixamos de citar a fonte do código acima, pois aparentemente trata-se de código de autoria desconhecida que pode ser encontrada em diversos locais na internet e podemos estar atribuindo a autoria indevidamente.
Tags: NFE, nfeproc, Nota Fiscal eletronica, procnfe, xml