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: , , , ,

Comments are closed.