Gerando uma NF-e/NFC-e com a API da SEFAZ
O processo resumido de geração de uma nota fiscal usando nossa API é descrito abaixo. Dúvidas e referências devem ser consultadas no material oficial disponibilizado pela SEFAZ, em especial o manual oficial da SEFAZ, Notas técnicas e os XSDs disponibilizados no site: http://www.nfe.fazenda.gov.br/portal/principal.aspx .
Parte 1 – Gerando o XML
- Crie um conector:
- Caso o certifcado não tenha explicito o CNPJ e Nome do emissor utilize a função: SEFAZ – Definir dados do emissor(…).
Dados básicos
- Caso o certifcado não tenha explicito o CNPJ e Nome do emissor utilize a função: SEFAZ – Definir dados do emissor(…).
- Crie uma nova nota fiscal para o lote através da função “SEFAZ NF-e – Criar Nota Fiscal“, passando os seguintes parâmetros:
- Conector;
- Data de Emissão (Data)
- Modelo (Letras) – “55” para NF-e ou “65” para NFC-e;
- Série (Letras) – Série do documento;
- Nº da NF-e (Letras) – Número sequencial da nota, controlado pelo emissor;
- Tipo de Emissão (Inteiro);
- Código numérico que compõe a Chave de Acesso (Letras) cNF – Identificador único da nota no banco de dados do cliente;
- Versão (Letras) do XML da NF-e, EX: “4.00”, “3.10”.
- Utilize a função “SEFAZ NF-e – Adicionar Elemento ao XML” para adicionar os dados do XML do documento. A função recebe como parâmetro os seguintes itens:
- O retorno da função “SEFAZ NF-e – Criar Nota Fiscal“;
- No segundo parâmetro ela recebe o caminho da tag a ser adicionada;
- No terceiro o valor a ser adicionado;
- E por último, como OPCIONAL a máscara de formatação, caso não deseja que a função formate o valor adicione a constante “TString” nesse parâmetro.
- Adicionar os dados do emitente (“infNFe/ide/”) usando a função “SEFAZ NF-e – Adicionar Elemento ao XML“;
- Algumas UFs exigem a relação de pessoas (físicas ou jurídicas) autorizadas a acessar a nota, para tal usar as tags abaixo para preencher esse item:
infNFe/autXML/CNPJ[x]
infNFe/autXML/CPF[x]
Se não informada você receberá uma mensagem de erro: Rejeição 486: Não informado o Grupo de Autorização para UF que exige a identificação do Escritório de Contabilidade na Nota Fiscal
- Se for uma nota de devolução informe a NF-e referenciada usando as tags:
"infNFe/ide/NFref/
refNFe[x]";
- Adicione os dados do destinatário (“infNFe/dest/”);
Produtos/Serviços
- Utilizando a mesma função “SEFAZ NF-e – Adicionar Elemento ao XML“, adicione os CNPJs ou CPFs autorizador a baixar o XML usando a tags de “infNFe/autXML/CNPJ[x]” ou “infNFe/autXML/CPF[x]”, passando o número no lugar do x (1, 2, 3, …). Importante, esta tag é obrigatória em algumas UFs:
- Adicionar itens (produtos ou serviços) usando a mesma função de definit tag passando o indice do item, ‘infNFe/det[“@nItem=1”];’.
- Definindo o ICMS:
- Observe o ICMS40 (e outros na mesma situação), o nome da tag não muda para as variações 40, 41, 50 e 51, a tag continua se chamando “ICMS40” e o detalhamento é feito no “CST”.
- Dica: A tag “infNFe/det[X]/imposto/ICMSUFDest/pICMSInter” recebe constantes pré-definidas. “4.00”, “7.00” e “12.00”, e não está definida como número e sim como letras (‘string’) nos XSDs da SEFAZ. Assim, o valor já deve vir formatado com 2 decimais, pois não será feita nenhuma formatação automática neste valor.
Totais
- Dados de cobrança:
- infNFe/cobr/dup[1]/nDup
- infNFe/cobr/dup[1]/dVenc
- Adicione os detalhes de pagamento. Para adicionar mais de uma tag indique o indice usando colchetes como no exemplo a seguir:
- Versão 4.00:
- infNFe/pag/detPag[1]/tPag
- infNFe/pag/detPag[1]/vPag
- infNFe/pag/detPag[2]/tPag
- infNFe/pag/detPag[2]/vPag
- Versão 3.10:
- infNFe/pag[1]/tPag
- infNFe/pag[1]/vPag
- infNFe/pag[2]/tPag
- Versão 4.00:
Montando o lote e assinando
- Após informar todos os dados utilize a função “SEFAZ NF-e – Montar Lote” para gerar o XML:
- Conector (Variante) – Veja como criar um conector aqui;
- Versão: Versão do lote “4.00”, “3.10”;
- ID do lote: Identificador único, incremental do lote;
- Sincrono – Importante, nem todas as UFs disponibilizam esse serviço, caso não o tenha, informe falso, outras exigem que seja verdadeiro (true), quando houver apenas uma nota no lote;
- Nota fiscal (Variante) – Uma única, ou uma lista de NFs para serem emitidas.
- Ao final assine o XML, chamando a função “SEFAZ – Assinar XML“. e passando os seguintes parâmetros:
- Conector (Variante);
- XML Original – (Letras) Texto do XML gerado;
- Nome da tag: Informar a constante Letras: “infNFe”.
- Obter o retorno da função com o XML assinado e gravar em arquivo ou no banco usando as funções nativas do Maker:
- DICA: Para gravar no banco utilize um campo de texto longo (TEXT, CLOB) com o mesmo charset do XML (UTF-8) ou BLOB (Bytea, VARBINARY, Image, …);
Parte 2 – Transmitindo o XML
- Após montar todo o XML de um lote com a Nota Fiscal desejada precisamos envia-la para SEFAZ, para isso se utiliza a função “SEFAZ NF-e – Obter Autorização da SEFAZ“;
- Por fim, grave a resposta em XML da SEFAZ. Ela será usada na consulta da NF-e;
- Obter o XML retornado no envio da NF-e verificar o seu conteúdo;
- Usar a função “SEFAZ – Processar XML de Retorno” para verificar se retornou um “nRec” para consulta posterior, ou um erro a ser tratado;
- Esta função trabalha de forma análoga à de montagem de XML, assim, as tags são reduzidas a uma forma de estrututra de pastas, de acordo com a estrtutura do XML, assim, para pegr o nRec por exemplo se passa o caminho completo: “retEnviNFe/infRec/nRec”;
- DICA: Utilize o depurador de fluxos do Maker para ver exatamente os dados retornados por essa função.
Parte 3 – Consultando a situação do lote
- Após obter o retorno da autorizadora você terá o número do recibo de entrega (nRec) dentro do XML retornado;
- Para extrair o nRec do XML você pode utilizar a função “SEFAZ – Processar XML de Retorno” com o XML retornado no envio do lote;
- Utilize o nRec para gerar o XML de consulta da autoriação, passando-o como o segundo parâmetro da função “SEFAZ – NF-e – Consulta Autorização Montar XML(transporte, nRec)”, o primeiro parâmetro será um conector criado com os mesmos dados do envio;
- Depois de montado, use a função “SEFAZ NF-e – Consultar Autorização” para enviar a consulta da situação do lote para o servidor da SEFAZ, passando o Conector e o XML de consulta;
- A resposta irá indicar a situação da NF-e, use a função “SEFAZ – Processar XML de Retorno” para transformar o XML em um mapa;
- Leia o item “retConsReciNFe/cStat” para saber a situação do lote:
- 105 – Em processamento, aguarde e tente novamente;
- 104 – Processado, continue ou caso contrário houve um erro.
- Após o fim do processamento (cStat = 104), leia o item “retConsReciNFe/protNFe/infProt/cStat” para saber a situação do protocolo:
- Caso a situação seja “100” o lote foi aprovado, caso contrário houve um erro;
- Em caso de erro, leia o item “retConsReciNFe/protNFe/infProt/xMotivo” para obter uma descrição do erro.
- Em caso de lote aprovado (infProt/cStat = 100) salve o XML completo, pois ele contém os dados da autorização que serão utilizado na montagem do XML de distribuição.
Parte 4 – XML de distribuição
- Para montar o XML de distribuição será utilizada a função “SEFAZ – Montar XML de distribuição“, os parâmetros de entrada são:
- O XML do lote enviado;
- O XML retornado na consulta da situação do lote;
- A chave da NF-e desejada, quando o lote contém mais de uma NF-e se deixar em branco irá pegar a primeira;
- A função irá retornar o XML de distribuição que pode ser usado para enviar ao cliente e/ou gerar a DANFE.
Parte 5 – Gerar DANFE
- Para gerar a DANFE em PDF utilize a função “SEFAZ NF-e – Gerar DANFE”, passando como parâmetros:
- Caminho completo do arquivo XML de distribuição ou conteúdo do XML de distribuição (Letras);
- Caminho da logomarca a ser impressa (Letras), pode ser deixado em branco;
- cIdToken (Letras) – Usado na NFC-e apenas (Opcional);
- csc (Letras) – Usado na NFC-e apenas (Opcional).
- DICA: Você pode obter o caminho relativo do PDF gerado através da seguinte sequencia:
- Remova o caminho absoluto do arquivo obtendo somente o nome;
- Adicione antes do nome do arquivo “tmp/”;
- A URL final deve ficar “tmp/nomeArquivo.pdf”;
- Use a função de abrir URL numa moldura, ou download para enviar para o cliente.