Ouvir transcrição
MDF-e precisa ser emitido e encerrado no momento certo para evitar frota parada, rejeições e multas que podem passar de R$ 1.000 por viagem. A forma mais segura de escalar isso é integrar uma API que valide documentos, acompanhe eventos da SEFAZ e automatize o encerramento com webhooks ou polling. Com a API MagelNet, isso pode começar com poucas linhas de código.
O problema real: MDF-e atrasado vira multa, parada de frota e retrabalho
Imagine sua frota parada porque o MDF-e não encerrou a tempo, o próximo carregamento não pode sair e o time operacional começa a caçar erro em chave de acesso, protocolo e retorno da SEFAZ. Esse cenário é comum em transportadoras, TMS e ERPs logísticos que ainda dependem de rotinas frágeis ou integrações incompletas.
Para quem desenvolve sistemas de transporte, o desafio não é só 'emitir um manifesto'. É garantir orquestração entre CT-e, NF-e, veículo, UF de carregamento, percurso, evento de autorização e evento de encerramento. Quando uma dessas peças falha, o impacto sai do código e entra na operação.

O que é MDF-e e quando ele deve ser emitido ou encerrado
O MDF-e (Manifesto Eletrônico de Documentos Fiscais) consolida os documentos fiscais transportados em uma operação, normalmente CT-e e/ou NF-e, vinculando carga, veículo, percurso e responsável pelo transporte. Na prática, ele funciona como a camada de controle da viagem.
| Evento | Quando acontece | O que validar no sistema | Risco se falhar |
|---|---|---|---|
| Emissão do MDF-e | Antes do início do transporte | UF, RNTRC, placa, condutor, CT-e/NF-e vinculados, tipo de emitente | Rejeição, viagem bloqueada, atraso operacional |
| Inclusão de documentos | Na composição da carga | Chaves com 44 dígitos, documentos autorizados, compatibilidade com UF/modal | Erro de schema ou rejeição por documento inválido |
| Autorização | Após envio à SEFAZ | Recibo, protocolo, status, persistência idempotente | Duplicidade de envio ou perda de protocolo |
| Encerramento | Ao fim da viagem ou descarregamento | Município de encerramento, MDF-e autorizado, vínculo correto da viagem | Multa, impossibilidade de novo manifesto para o mesmo veículo/UF |
| Consulta histórica | Após operação finalizada | XML, protocolo, eventos e trilha de auditoria | Perda de evidência, dificuldade em auditoria e suporte |
Gatilhos mais comuns de emissão e encerramento no back-end logístico
Checklist técnico de gatilhos que vale automatizar
As dores que quebram integrações de MDF-e na prática
Erros em chaves de NF-e/CT-e com 44 dígitos, documentos não autorizados ou chaves vinculadas à operação errada geram rejeições difíceis de rastrear. O ideal é validar formato, autorização e pertencimento da carga antes do envio do MDF-e.
Arquitetura recomendada: como integrar a API MagelNet sem criar dívida técnica
A ideia é simples: seu sistema continua dono da regra de negócio logística, enquanto a API MagelNet assume a parte mais sensível do documento fiscal eletrônico: validações, comunicação com a SEFAZ, contingências, eventos e armazenamento histórico. Isso reduz complexidade no seu código e aumenta previsibilidade operacional.
Pipeline técnico de MDF-e com API especializada
Fluxo sugerido para emissão e encerramento sem gargalo manual.
Passo a passo técnico: autenticação, payload e eventos
Abaixo está um blueprint de integração para times de desenvolvimento. Os nomes de campos podem variar conforme a versão da API, mas o fluxo arquitetural é este: autenticar, montar payload do manifesto, incluir documentos, enviar, acompanhar autorização e encerrar automaticamente.
1) Autenticação da API
Use credenciais da sandbox para obter o token e injete-o no seu client HTTP. Boas práticas: timeout curto, retry com backoff, correlation-id e logs estruturados por viagem/MDF-e.
Se o seu serviço de MDF-e não é idempotente, ele ainda não está pronto para produção.
Exemplo em Node.js para autenticação e envio inicial do manifesto:
const axios = require('axios');
const api = axios.create({
baseURL: 'https://sandbox.magelnet.com/api',
timeout: 15000,
headers: { 'Content-Type': 'application/json' }
});
async function autenticar() {
const { data } = await api.post('/auth/token', {
client_id: process.env.MAGELNET_CLIENT_ID,
client_secret: process.env.MAGELNET_CLIENT_SECRET
});
api.defaults.headers.Authorization = `Bearer ${data.access_token}`;
return data.access_token;
}
2) Payload de emissão com documentos vinculados
Monte o payload com foco em consistência. Antes de enviar, valide localmente: UF de carregamento/descarga, placa, condutor, RNTRC, ambiente, tipo de emitente e lista de chaves de CT-e/NF-e.
async function emitirMdfe() {
const payload = {
ambiente: 'homologacao',
carga: {
municipio_carregamento: '3550308',
uf_carregamento: 'SP'
},
veiculo: {
placa: 'ABC1D23',
rntrc: '12345678'
},
condutor: {
cpf: '12345678901',
nome: 'Motorista Exemplo'
},
documentos: [
{ tipo: 'CTE', chave: '35240112345678000123570010000012341000012345' },
{ tipo: 'NFE', chave: '35240112345678000123550010000098761000098765' }
],
percurso: ['SP', 'MG']
};
const { data } = await api.post('/mdfe', payload, {
headers: {
'Idempotency-Key': 'viagem-8471-mdfe-emissao'
}
});
return data;
}
3) Webhook para eventos de autorização e encerramento
Configure um endpoint para receber eventos da API MagelNet. Assim, seu sistema deixa de depender apenas de consulta ativa e reage em tempo real a mudanças como autorizado, rejeitado, encerrado ou contingência ativada.
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhooks/magelnet/mdfe', async (req, res) => {
const evento = req.body;
// valide assinatura/hmac se disponível
// persista evento bruto para auditoria
switch (evento.tipo) {
case 'MDFE_AUTORIZADO':
await atualizarViagem(evento.mdfe_id, 'autorizado', evento.protocolo);
break;
case 'MDFE_REJEITADO':
await registrarErro(evento.mdfe_id, evento.codigo, evento.mensagem);
break;
case 'MDFE_ENCERRADO':
await atualizarViagem(evento.mdfe_id, 'encerrado', evento.protocolo);
break;
}
res.status(200).send({ ok: true });
});
4) Polling seguro para fallback e encerramento automático
Webhook é o caminho ideal, mas times experientes sempre mantêm fallback por polling para cobrir atraso de eventos, indisponibilidade temporária ou inconsistência de rede. O segredo é usar janela de consulta, backoff e trava idempotente.
async function acompanharEEncerrar(mdfeId, municipioEncerramento) {
for (let tentativa = 1; tentativa <= 12; tentativa++) {
const { data: status } = await api.get(`/mdfe/${mdfeId}/status`);
if (status.situacao === 'AUTORIZADO') {
const { data: encerramento } = await api.post(`/mdfe/${mdfeId}/encerrar`, {
municipio_encerramento: municipioEncerramento
}, {
headers: {
'Idempotency-Key': `mdfe-${mdfeId}-encerramento`
}
});
return encerramento;
}
if (status.situacao === 'REJEITADO') {
throw new Error(`MDF-e rejeitado: ${status.codigo} - ${status.mensagem}`);
}
await new Promise(r => setTimeout(r, tentativa * 5000));
}
throw new Error('Timeout aguardando autorização do MDF-e');
}
Pitfalls reais que vale tratar antes de ir para produção
| Pitfall | Sintoma | Prevenção recomendada |
|---|---|---|
| Reenvio sem idempotência | Manifesto duplicado ou inconsistência de status | Use `Idempotency-Key` por operação crítica |
| Documento fiscal não autorizado | Rejeição na vinculação de CT-e/NF-e | Consulte status do documento antes de montar o MDF-e |
| Timeout sem reconciliação | Sistema marca falha, mas SEFAZ autorizou | Implemente job de reconciliação por recibo/protocolo |
| Encerramento manual | Viagem finalizada sem evento fiscal | Crie job automático baseado em ocorrência de entrega |
| Logs insuficientes | Suporte não consegue reproduzir o erro | Salve request, response, protocolo, XML e timeline de eventos |
Case prático: redução de rejeições com automação de consulta e encerramento
Em um cenário típico de integração logística, o ganho aparece quando a equipe para de tratar MDF-e como uma chamada isolada e passa a operar um pipeline observável. Com pré-validação de chaves, idempotência, webhook e fallback por polling, a emissão fica previsível e o encerramento deixa de depender de ação humana.
Impacto operacional de uma integração MDF-e madura
Exemplo ilustrativo de ganhos observados após automatizar emissão, monitoramento e encerramento.
No exemplo acima, uma operação sai de 9,8% para 2,1% de rejeições, aumenta o encerramento no prazo de 61% para 96% e reduz o tempo médio de tratamento de 18 para 6 minutos. Não é mágica: é arquitetura correta, validação antecipada e automação de eventos.
Por que o repositório central da MagelNet faz diferença para MDF-e histórico
Além da emissão e do encerramento, existe outra dor silenciosa: guardar e recuperar MDF-e, XMLs, protocolos e eventos antigos. Quando isso fica espalhado em banco local, storage improvisado ou dependente de janelas curtas de consulta, o suporte vira arqueologia.
Com o repositório central da MagelNet, sua operação mantém histórico documental com muito mais previsibilidade. Isso ajuda em auditoria, suporte, reconciliação, disputas operacionais e reprocessamento sem ficar preso às limitações comuns de consulta e download.
O que o repositório central resolve no dia a dia
Blueprint de produção para times de engenharia
FAQ técnico sobre integração MDF-e
Perguntas frequentes de desenvolvedores
Webhook substitui polling?
Não totalmente. Webhook deve ser o mecanismo principal para reagir em tempo real, mas polling continua útil como fallback para reconciliação e tratamento de indisponibilidade.
Preciso validar CT-e e NF-e antes de montar o MDF-e?
Sim. Validar autorização, formato da chave e vínculo da operação antes do envio reduz bastante rejeições e retrabalho.
Como evitar duplicidade de emissão ou encerramento?
Implemente idempotência por operação crítica, correlacionando viagem, manifesto e ação. Também persista o status antes de reenviar requests.
O que deve ir para log e auditoria?
Payload, headers de correlação, recibo, protocolo, status retornado, XML final, eventos recebidos e histórico de tentativas. Isso acelera suporte e debugging.
Qual o benefício de uma API especializada em vez de manter tudo internamente?
Você reduz complexidade em regras fiscais, contingências, eventos e armazenamento histórico, liberando o time para evoluir o core logístico do produto.
Conclusão: menos código fiscal acoplado, mais fluxo logístico confiável
Se o seu sistema gerencia frota, expedição ou documentos de transporte, MDF-e não pode ser um ponto frágil da arquitetura. Emitir e encerrar em tempo real exige validação, observabilidade, fallback e trilha documental. Quando essa complexidade fica abstraída por uma API especializada, seu time ganha velocidade sem comprometer conformidade.
A API da MagelNet abstrai a complexidade do MDF-e — incluindo validações, contingências, eventos e repositório central — para que sua engenharia foque no core do negócio logístico. Teste grátis a integração MDF-e na sandbox da MagelNet e veja seu pipeline rodar sem interrupções: acesse a documentação da API e integre agora.
A MagelNet está comprometida em ajudar empresas de todos os tamanhos a tomar decisões informadas. Seguimos diretrizes editoriais rigorosas para garantir que nosso conteúdo atinja e mantenha nossos altos padrões.
O que você achou deste artigo?

Geraldo Magela Fraga
Fundador da MagelNet e do Grupo Magel. Empresário. Advogado. Mestrando em Computação Aplicada. MBA em Business Intelligence.
Comentários (0)
Seja o primeiro a comentar!



