MDF-e: emissão e encerramento com o SUOT Fiscal SDK
Gerencie Manifestos Eletrônicos de Documentos Fiscais com o SUOT Fiscal SDK: emissão, encerramento e inclusão de condutor tipados.
O MDF-e (Manifesto Eletrônico de Documentos Fiscais) agrupa CT-e e NF-e em uma única declaração de carga por viagem no transporte rodoviário, sendo exigido pela SEFAZ para operações interestaduais e de cabotagem. O SUOT Fiscal SDK expõe Commands e Handlers tipados para cada operação do ciclo de vida do MDF-e — emissão, encerramento, inclusão de condutor e cancelamento —, sempre retornando um Result estruturado ou lançando InfrastructureException em caso de falha técnica. Da ordem ao resultado.
Use MDFeBuilder com o padrão Step Builder para compor o EmitirMDFeCommand. Cada etapa da construção retorna a próxima interface obrigatória, impedindo estados inválidos antes mesmo da execução.
As chaves de CT-e informadas em adicionarMunicipioCarga() devem corresponder a documentos já autorizados pela SEFAZ. O SDK valida o formato das chaves (44 dígitos com dígito verificador correto) no momento da construção, mas a validação de existência é feita pelo fisco no momento da transmissão.
O encerramento deve ser realizado ao término de cada viagem. Use EncerrarMDFeCommand com a chave e protocolo do manifesto autorizado, além do município e UF de encerramento.
<?phpuse Suot\Fiscal\MDFe\Command\EncerrarMDFeCommand;use Suot\Fiscal\MDFe\Handler\EncerrarMDFeHandler;use Suot\Fiscal\ValueObjects\ChaveMDFe;use Suot\Fiscal\ValueObjects\Protocolo;use Suot\Fiscal\ValueObjects\Municipio;use Suot\Fiscal\ValueObjects\Uf;$encerramento = new EncerrarMDFeCommand( chave: ChaveMDFe::from('35250612345678000199580010000005011234567890'), protocolo: Protocolo::from('135250000012345'), dataEncerramento: new DateTimeImmutable('2025-06-15'), municipioEncerramento: Municipio::from(codigoIbge: '3304557'), // Rio de Janeiro - RJ ufEncerramento: Uf::RJ,);/** @var EncerrarMDFeHandler $handler */$resultado = $handler->handle($encerramento);if ($resultado->isSuccess()) { logger()->info('MDF-e encerrado com sucesso', [ 'protocolo_encerramento' => (string) $resultado->getProtocolo(), ]);}
Um MDF-e deve ser encerrado antes que um novo manifesto seja emitido para o mesmo veículo (placa) com cargas na mesma UF de início de percurso. A SEFAZ rejeita novos MDF-e enquanto o anterior permanecer aberto — código de rejeição 677.