Blog

Gerando uma MDF-e Síncrono com a API da SEFAZ

O processo resumido de geração de uma MDF-e 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

  1. Crie um conector:
    • Caso o certificado não tenha explicito o CNPJ e Nome do emissor utilize a função: “SEFAZ – Definir dados do emissor(…)”.
  2. O tipo do conector deve ser definido para “MDFE” usando a função “SEFAZ – Definir Tipo de Serviço“.
  3. O servidor de destino é o “SVRS” e deve ser definido usando a função ‘SEFAZ – Definir Servidor‘;
  4. Crie uma novo MDF-e através da função “SEFAZ XML – Criar novo XML”, passando os seguintes parâmetros:
    1. Conector;
    2. “MDFE” (Letras) – Indica o tipo do documento a ser criado.
  5. 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 XML – Criar novo XML“;
    • 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 NÃO formate o valor, adicione a constante “TString” nesse parâmetro. Neste caso, será adicionado a tag com o texto exato passado no terceiro parâmetro, evitando inclusive que valores ZERADOS sejam suprimidos.
  6. Adicionar os dados do emitente (“MDFe/infMDFe/ide/cUF”) usando a função “SEFAZ NF-e – Adicionar Elemento ao XML“;
  7. Após adicionar todas as tags informe o hashCSRT através da função “SEFAZ NF-e – Adicionar Elemento ao XML“, passando os seguintes parâmetros:
    • O retorno da função “SEFAZ XML – Criar novo XML“;
    • Caminho da tag: “MDFe/infMDFe/infRespTec/hashCSRT“;
    • Valor do CSRT usando o seguinte formato: “CSRT:<VALOR DO CSRT>“;
    • No último campo informe a máscara “${hashCSRT}“. Desta forma o hash será calculado baseado nos dados do documento.
  8. Após informar todos os dados utilize a função “SEFAZ XML – Obter XML” para gerar o XML:.
  9. Ao final assine o XML, chamando a função “SEFAZ – Assinar XML“. e passando os seguintes parâmetros:
    1. Conector (Variante);
    2. XML Original – (Letras) Texto do XML gerado;
    3. Nome da tag: Informar a constante Letras: “infMDFe“.
  10. Obter o retorno da função com o XML assinado e gravar em arquivo ou no banco usando as funções  nativas do Maker:
    1. 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

  1. Após montar todo o XML  de MDF-e com os dados desejados precisamos envia-la para SEFAZ, para isso se utiliza a função “SEFAZ MDF-e – Recepção Síncrona“;
  2. Por fim, grave a resposta em XML da SEFAZ. Ela será usada para verifica a situação;
  3. Usar a função “SEFAZ – Processar XML de Retorno” para verificar se retornou com sucesso, ou alguma instrução de erro.
    • Esta função trabalha de forma análoga à de montagem de XML, assim, as tags são reduzidas a uma forma de estrutura de pastas, de acordo com a esttutura do XML, assim, para pegar o tpAmbpor exemplo se passa o caminho completo: “retMDFe/tpAmb“;
    • DICA: Utilize o depurador de fluxos do Maker para ver exatamente os dados retornados por essa função.

Parte 3 – XML de distribuição

  1. 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:
    1. O XML do lote enviado;
    2. O XML retornado na consulta da situação do lote;
    3. Deixar em branco irá pegar a primeira;
    4. 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

  1. Para gerar a DANFE em PDF utilize a função “SEFAZ NF-e – Gerar DANFE”, passando como parâmetros:
    1. Caminho completo do arquivo XML de distribuição ou conteúdo do XML de distribuição (Letras);
  2. DICA: Você pode obter o caminho relativo do PDF gerado através da seguinte sequencia:
    1. Remova o caminho absoluto do arquivo obtendo somente o nome;
    2. Adicione antes do nome do arquivo “tmp/”;
    3. A URL final deve ficar “tmp/nomeArquivo.pdf”;
    4. Use a função de abrir URL numa moldura, ou download para enviar para o cliente.