Help us shape the future of Go! Take the 2026 Go Developer Survey

mdfe

package
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 17, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Overview

Package mdfe implementa o Manifesto Eletrônico de Documentos Fiscais, modelo 58, no leiaute 3.00.

O MDF-e agrupa os documentos fiscais de uma viagem: ele não descreve uma operação nem uma prestação, e sim o conjunto de NF-e e CT-e que estão dentro do mesmo veículo, organizados por município de descarregamento. É o documento que acompanha o motorista.

Diferente da NF-e e do CT-e, o MDF-e tem ciclo de vida em duas pontas: ele é autorizado no início da viagem e precisa ser **encerrado** quando ela termina. Um manifesto não encerrado bloqueia a emissão dos seguintes.

O que está implementado

O modelo 58 no leiaute 3.00, com o modal rodoviário completo — que é o único de uso corrente — e as estruturas dos modais aéreo, aquaviário e ferroviário.

Index

Constants

View Source
const (
	// StatusAutorizado indica MDF-e autorizado.
	StatusAutorizado = 100
	// StatusCancelado indica MDF-e cancelado.
	StatusCancelado = 101
	// StatusEncerrado indica MDF-e encerrado.
	StatusEncerrado = 132
	// StatusServicoEmOperacao indica serviço em operação.
	StatusServicoEmOperacao = 107
)

Códigos de status devolvidos pela SEFAZ.

View Source
const Espaco = "http://www.portalfiscal.inf.br/mdfe"

Espaco é o namespace XML do MDF-e.

View Source
const Versao = "3.00"

Versao é a versão do leiaute implementada por este pacote.

View Source
const VersaoModal = "3.00"

VersaoModal é a versão do grupo específico do modal.

Variables

View Source
var ErrDadosInvalidos = errors.New("mdfe: dados inválidos")

ErrDadosInvalidos é a base dos erros de montagem de evento.

Functions

func LerMDFeProc

func LerMDFeProc(dados []byte) (*MDFe, *ProtMDFe, error)

LerMDFeProc separa o manifesto e o protocolo de um arquivo de distribuição.

func MontarEnvioSincrono added in v0.4.0

func MontarEnvioSincrono(mdfeAssinado []byte) ([]byte, error)

MontarEnvioSincrono prepara a mensagem do serviço de recepção síncrona, que no leiaute 3.00 substituiu o envio em lote.

O conteúdo vai comprimido: o serviço recebe o manifesto assinado em gzip codificado em base64. A compressão não altera os bytes assinados, então a assinatura continua conferindo do outro lado.

func MontarIdEvento

func MontarIdEvento(tipo TipoEvento, chaveAcesso string, sequencia int) string

MontarIdEvento compõe o atributo Id de um evento: "ID", o tipo, a chave de acesso e o número sequencial com dois dígitos.

func MontarMDFeProc

func MontarMDFeProc(mdfeAssinado []byte, prot *ProtMDFe) ([]byte, error)

MontarMDFeProc envelopa o manifesto assinado com o protocolo de autorização, preservando os bytes assinados.

func XMLDeclarado

func XMLDeclarado(documento []byte) []byte

XMLDeclarado antepõe a declaração XML em UTF-8 ao documento.

Types

type Aereo

type Aereo struct {
	Nac     string     `xml:"nac"`
	Matr    string     `xml:"matr"`
	NVoo    string     `xml:"nVoo"`
	CAerEmb string     `xml:"cAerEmb"`
	CAerDes string     `xml:"cAerDes"`
	DVoo    tipos.Data `xml:"dVoo"`
}

Aereo é o modal aéreo.

type Ambiente

type Ambiente string

Ambiente distingue produção de homologação.

const (
	// Producao emite documentos com valor fiscal.
	Producao Ambiente = "1"
	// Homologacao emite documentos sem valor fiscal, para teste.
	Homologacao Ambiente = "2"
)

type Aquav

type Aquav struct {
	CNPJAgeNav       string        `xml:"CNPJAgeNav,omitempty" norm:"num"`
	TpEmb            string        `xml:"tpEmb"`
	CEmbar           string        `xml:"cEmbar"`
	XEmbar           string        `xml:"xEmbar"`
	NViag            string        `xml:"nViag"`
	CPrtEmb          string        `xml:"cPrtEmb"`
	CPrtDest         string        `xml:"cPrtDest"`
	PrtTrans         string        `xml:"prtTrans,omitempty"`
	TpNav            string        `xml:"tpNav,omitempty"`
	InfTermCarreg    []InfTerminal `xml:"infTermCarreg,omitempty"`
	InfTermDescarreg []InfTerminal `xml:"infTermDescarreg,omitempty"`
	InfEmbComb       []InfEmbComb  `xml:"infEmbComb,omitempty"`
}

Aquav é o modal aquaviário.

type AutXML

type AutXML struct {
	CNPJ string `xml:"CNPJ,omitempty" norm:"num"`
	CPF  string `xml:"CPF,omitempty" norm:"num"`
}

AutXML autoriza um CNPJ ou CPF a obter o XML do manifesto.

type CompPag

type CompPag struct {
	TpComp string        `xml:"tpComp"`
	VComp  tipos.Decimal `xml:"vComp" dec:"2"`
	XComp  string        `xml:"xComp,omitempty"`
}

CompPag é um componente do pagamento.

type Condutor

type Condutor struct {
	XNome string `xml:"xNome"`
	CPF   string `xml:"CPF" norm:"num"`
}

Condutor é um motorista do veículo.

type DadosCancelamento

type DadosCancelamento struct {
	Chave         string
	CNPJ          string
	CPF           string
	Ambiente      Ambiente
	UF            uf.UF
	Protocolo     string
	Justificativa string
	Sequencia     int
	DataHora      tipos.DataHora
}

DadosCancelamento descreve o cancelamento de um manifesto.

type DadosEncerramento

type DadosEncerramento struct {
	// Chave é a chave de acesso do manifesto a encerrar.
	Chave string
	// CNPJ ou CPF de quem encerra.
	CNPJ string
	CPF  string
	// Ambiente distingue produção de homologação.
	Ambiente Ambiente
	// Protocolo é o número do protocolo de autorização do manifesto.
	Protocolo string
	// UF onde a viagem terminou.
	UF uf.UF
	// CodigoMunicipio é o código do IBGE do município onde a viagem terminou.
	CodigoMunicipio int
	// DataEncerramento é o dia em que a viagem terminou; vazio usa hoje.
	DataEncerramento tipos.Data
	// Sequencia é o número do evento; zero equivale a 1.
	Sequencia int
	// DataHora é o instante do registro; vazio usa o momento atual.
	DataHora tipos.DataHora
}

DadosEncerramento descreve o encerramento de uma viagem.

type DadosInclusaoCondutor

type DadosInclusaoCondutor struct {
	Chave     string
	CNPJ      string
	CPF       string
	Ambiente  Ambiente
	UF        uf.UF
	Sequencia int
	DataHora  tipos.DataHora

	// NomeCondutor é o nome do motorista a incluir.
	NomeCondutor string
	// CPFCondutor é o CPF do motorista a incluir.
	CPFCondutor string
}

DadosInclusaoCondutor descreve a inclusão de um motorista na viagem.

type DetEvento

type DetEvento struct {
	VersaoEvento string `xml:"versaoEvento,attr"`

	EvEncerramento     *EvEncerramento     `xml:"evEncMDFe,omitempty"`
	EvCancelamento     *EvCancelamento     `xml:"evCancMDFe,omitempty"`
	EvInclusaoCondutor *EvInclusaoCondutor `xml:"evIncCondutorMDFe,omitempty"`
}

DetEvento envolve o detalhamento específico de cada tipo de evento.

type DispositivoPedagio

type DispositivoPedagio struct {
	CNPJForn  string         `xml:"CNPJForn" norm:"num"`
	CNPJPg    string         `xml:"CNPJPg,omitempty" norm:"num"`
	CPFPg     string         `xml:"CPFPg,omitempty" norm:"num"`
	NCompra   string         `xml:"nCompra,omitempty"`
	VValePed  *tipos.Decimal `xml:"vValePed,omitempty" dec:"2"`
	TpValePed string         `xml:"tpValePed,omitempty"`
}

DispositivoPedagio é um vale-pedágio.

type Emit

type Emit struct {
	CNPJ      string   `xml:"CNPJ,omitempty" norm:"num"`
	CPF       string   `xml:"CPF,omitempty" norm:"num"`
	IE        string   `xml:"IE" norm:"upper"`
	XNome     string   `xml:"xNome"`
	XFant     string   `xml:"xFant,omitempty"`
	EnderEmit Endereco `xml:"enderEmit"`
}

Emit é o emitente do manifesto.

type Endereco

type Endereco struct {
	XLgr    string `xml:"xLgr"`
	Nro     string `xml:"nro"`
	XCpl    string `xml:"xCpl,omitempty"`
	XBairro string `xml:"xBairro"`
	CMun    int    `xml:"cMun"`
	XMun    string `xml:"xMun"`
	CEP     string `xml:"CEP,omitempty" norm:"num"`
	UF      string `xml:"UF" norm:"upper"`
	Fone    string `xml:"fone,omitempty" norm:"num"`
	Email   string `xml:"email,omitempty"`
}

Endereco é o endereço do emitente.

type Erro

type Erro struct {
	Campo    string
	Mensagem string
}

Erro é uma inconsistência encontrada por MDFe.Validar.

func (Erro) Error

func (e Erro) Error() string

type Erros

type Erros []Erro

Erros é o conjunto de inconsistências de um manifesto.

func (Erros) Error

func (e Erros) Error() string

type EvCancelamento

type EvCancelamento struct {
	DescEvento string `xml:"descEvento"`
	NProt      string `xml:"nProt" norm:"num"`
	XJust      string `xml:"xJust"`
}

EvCancelamento é o detalhamento do cancelamento do manifesto.

type EvEncerramento

type EvEncerramento struct {
	DescEvento string     `xml:"descEvento"`
	NProt      string     `xml:"nProt" norm:"num"`
	DtEnc      tipos.Data `xml:"dtEnc"`
	CUF        int        `xml:"cUF"`
	CMun       int        `xml:"cMun"`
}

EvEncerramento é o detalhamento do encerramento da viagem.

type EvInclusaoCondutor

type EvInclusaoCondutor struct {
	DescEvento string   `xml:"descEvento"`
	Condutor   Condutor `xml:"condutor"`
}

EvInclusaoCondutor é o detalhamento da inclusão de um motorista.

type Evento

type Evento struct {
	XMLName   xml.Name      `xml:"http://www.portalfiscal.inf.br/mdfe eventoMDFe"`
	Versao    string        `xml:"versao,attr"`
	InfEvento InfEventoMDFe `xml:"infEvento"`
}

Evento é um evento do MDF-e.

func LerEvento

func LerEvento(dados []byte) (*Evento, error)

LerEvento interpreta o XML de um evento do MDF-e.

func NovaInclusaoCondutor

func NovaInclusaoCondutor(d DadosInclusaoCondutor) (*Evento, error)

NovaInclusaoCondutor monta o evento que acrescenta um motorista à viagem em curso — o caso da troca de turno em viagens longas.

func NovoCancelamento

func NovoCancelamento(d DadosCancelamento) (*Evento, error)

NovoCancelamento monta o evento de cancelamento do manifesto.

O cancelamento só é possível enquanto a viagem não começou: depois de haver documentos transportados, o caminho é o encerramento.

func NovoEncerramento

func NovoEncerramento(d DadosEncerramento) (*Evento, error)

NovoEncerramento monta o evento que encerra a viagem.

O encerramento é o que libera a emissão do próximo manifesto: um MDF-e em aberto bloqueia os seguintes. Ele deve ser registrado quando a última carga é descarregada, informando onde a viagem terminou — que pode não ser o município de destino previsto.

func (*Evento) AssinarCom

func (e *Evento) AssinarCom(assinante xmldsig.Assinante) ([]byte, error)

AssinarCom serializa e assina o evento, referenciando o grupo infEvento.

func (*Evento) Chave

func (e *Evento) Chave() string

Chave devolve a chave de acesso do manifesto a que o evento se refere.

func (*Evento) Tipo

func (e *Evento) Tipo() TipoEvento

Tipo devolve o tipo do evento.

func (*Evento) XML

func (e *Evento) XML() ([]byte, error)

XML serializa o evento.

type Ferrov

type Ferrov struct {
	Trem *Trem   `xml:"trem,omitempty"`
	Vag  []Vagao `xml:"vag,omitempty"`
}

Ferrov é o modal ferroviário.

type Ide

type Ide struct {
	// CUF é o código do IBGE da UF do emitente.
	CUF int `xml:"cUF"`
	// TpAmb distingue produção de homologação.
	TpAmb Ambiente `xml:"tpAmb"`
	// TpEmit classifica quem emite o manifesto.
	TpEmit TipoEmitente `xml:"tpEmit"`
	// TpTransp classifica o transportador na ANTT.
	TpTransp TipoTransportador `xml:"tpTransp,omitempty"`
	// Mod é o modelo do documento: 58.
	Mod Modelo `xml:"mod"`
	// Serie é a série do documento.
	Serie int `xml:"serie"`
	// NMDF é o número do manifesto.
	NMDF int `xml:"nMDF"`
	// CMDF é o código numérico de oito dígitos que compõe a chave de acesso.
	CMDF string `xml:"cMDF" norm:"num"`
	// CDV é o dígito verificador da chave de acesso.
	CDV int `xml:"cDV"`
	// Modal é o meio de transporte.
	Modal Modal `xml:"modal"`
	// DhEmi é a data e hora de emissão, no fuso da UF do emitente.
	DhEmi tipos.DataHora `xml:"dhEmi"`
	// TpEmis é a forma de emissão.
	TpEmis TipoEmissao `xml:"tpEmis"`
	// ProcEmi identifica o processo de emissão.
	ProcEmi ProcessoEmissao `xml:"procEmi"`
	// VerProc é a versão do aplicativo emissor.
	VerProc string `xml:"verProc"`
	// UFIni é a UF de início da viagem.
	UFIni string `xml:"UFIni" norm:"upper"`
	// UFFim é a UF de término da viagem.
	UFFim string `xml:"UFFim" norm:"upper"`
	// InfMunCarrega lista os municípios de carregamento.
	InfMunCarrega []InfMunCarrega `xml:"infMunCarrega"`
	// InfPercurso lista as UFs de passagem entre a origem e o destino.
	InfPercurso []InfPercurso `xml:"infPercurso,omitempty"`
	// DhIniViagem é a data e hora prevista do início da viagem.
	DhIniViagem *tipos.DataHora `xml:"dhIniViagem,omitempty"`
	// IndCanalVerde indica adesão ao canal verde de fronteira.
	IndCanalVerde string `xml:"indCanalVerde,omitempty"`
	// IndCarregaPosterior indica carregamento posterior à emissão.
	IndCarregaPosterior string `xml:"indCarregaPosterior,omitempty"`
}

Ide é o grupo de identificação do manifesto.

type InfANTT

type InfANTT struct {
	// RNTRC é o Registro Nacional de Transportadores Rodoviários de Carga.
	RNTRC string `xml:"RNTRC,omitempty" norm:"upper"`
	// InfCIOT lista os Códigos Identificadores da Operação de Transporte.
	InfCIOT []InfCIOT `xml:"infCIOT,omitempty"`
	// ValePed traz os vales-pedágio.
	ValePed *ValePed `xml:"valePed,omitempty"`
	// InfContratante lista os contratantes do serviço.
	InfContratante []InfContratante `xml:"infContratante,omitempty"`
	// InfPag detalha o pagamento do frete ao transportador autônomo.
	InfPag []InfPag `xml:"infPag,omitempty"`
}

InfANTT reúne registro, contratantes e informações de pagamento do frete.

type InfAdic

type InfAdic struct {
	InfAdFisco string `xml:"infAdFisco,omitempty"`
	InfCpl     string `xml:"infCpl,omitempty"`
}

InfAdic são as informações adicionais do manifesto.

type InfBanc

type InfBanc struct {
	CodBanco   string `xml:"codBanco,omitempty"`
	CodAgencia string `xml:"codAgencia,omitempty"`
	CNPJIPEF   string `xml:"CNPJIPEF,omitempty" norm:"num"`
	PIX        string `xml:"PIX,omitempty"`
}

InfBanc são os dados bancários do recebedor do frete.

type InfCIOT

type InfCIOT struct {
	CIOT string `xml:"CIOT"`
	CNPJ string `xml:"CNPJ,omitempty" norm:"num"`
	CPF  string `xml:"CPF,omitempty" norm:"num"`
}

InfCIOT é um Código Identificador da Operação de Transporte.

type InfCTe

type InfCTe struct {
	ChCTe         string          `xml:"chCTe" norm:"num"`
	SegCodBarra   string          `xml:"SegCodBarra,omitempty"`
	IndReentrega  string          `xml:"indReentrega,omitempty"`
	InfUnidTransp []InfUnidTransp `xml:"infUnidTransp,omitempty"`
	Peri          []Peri          `xml:"peri,omitempty"`
}

InfCTe é um CT-e transportado, identificado pela chave de acesso.

type InfContratante

type InfContratante struct {
	XNome         string       `xml:"xNome,omitempty"`
	CNPJ          string       `xml:"CNPJ,omitempty" norm:"num"`
	CPF           string       `xml:"CPF,omitempty" norm:"num"`
	IdEstrangeiro string       `xml:"idEstrangeiro,omitempty"`
	InfContrato   *InfContrato `xml:"infContrato,omitempty"`
}

InfContratante identifica quem contratou o transporte.

type InfContrato

type InfContrato struct {
	NContrato       string        `xml:"NroContrato"`
	VContratoGlobal tipos.Decimal `xml:"vContratoGlobal" dec:"2"`
}

InfContrato descreve o contrato de transporte.

type InfDoc

type InfDoc struct {
	InfMunDescarga []InfMunDescarga `xml:"infMunDescarga"`
}

InfDoc lista os documentos da viagem, agrupados por município de descarregamento.

type InfEmbComb

type InfEmbComb struct {
	CEmbComb string `xml:"cEmbComb"`
	XBalsa   string `xml:"xBalsa"`
}

InfEmbComb identifica uma embarcação do comboio.

type InfEventoMDFe

type InfEventoMDFe struct {
	Id         string         `xml:"Id,attr"`
	COrgao     int            `xml:"cOrgao"`
	TpAmb      Ambiente       `xml:"tpAmb"`
	CNPJ       string         `xml:"CNPJ,omitempty" norm:"num"`
	CPF        string         `xml:"CPF,omitempty" norm:"num"`
	ChMDFe     string         `xml:"chMDFe" norm:"num"`
	DhEvento   tipos.DataHora `xml:"dhEvento"`
	TpEvento   TipoEvento     `xml:"tpEvento"`
	NSeqEvento int            `xml:"nSeqEvento"`
	DetEvento  DetEvento      `xml:"detEvento"`
}

InfEventoMDFe são as informações do evento, o bloco assinado.

type InfLocal

type InfLocal struct {
	CEP       string `xml:"CEP,omitempty" norm:"num"`
	Latitude  string `xml:"latitude,omitempty"`
	Longitude string `xml:"longitude,omitempty"`
}

InfLocal identifica um local por CEP ou por coordenadas.

type InfLotacao

type InfLotacao struct {
	InfLocalCarrega    InfLocal `xml:"infLocalCarrega"`
	InfLocalDescarrega InfLocal `xml:"infLocalDescarrega"`
}

InfLotacao descreve a origem e o destino de uma carga lotação.

type InfMDFe

type InfMDFe struct {
	Versao string `xml:"versao,attr"`
	Id     string `xml:"Id,attr"`

	Ide      Ide      `xml:"ide"`
	Emit     Emit     `xml:"emit"`
	InfModal InfModal `xml:"infModal"`
	InfDoc   InfDoc   `xml:"infDoc"`
	Seg      []Seguro `xml:"seg,omitempty"`
	// ProdPred é o produto predominante da carga.
	ProdPred   *ProdPred   `xml:"prodPred,omitempty"`
	Tot        Tot         `xml:"tot"`
	Lacres     []Lacre     `xml:"lacres,omitempty"`
	AutXML     []AutXML    `xml:"autXML,omitempty"`
	InfAdic    *InfAdic    `xml:"infAdic,omitempty"`
	InfRespTec *InfRespTec `xml:"infRespTec,omitempty"`
}

InfMDFe são as informações do manifesto, o bloco assinado.

type InfMDFeSupl

type InfMDFeSupl struct {
	QrCodMDFe string `xml:"qrCodMDFe" norm:"-"`
}

InfMDFeSupl traz o QR Code do documento auxiliar.

type InfMDFeTransp

type InfMDFeTransp struct {
	ChMDFe        string          `xml:"chMDFe" norm:"num"`
	IndReentrega  string          `xml:"indReentrega,omitempty"`
	InfUnidTransp []InfUnidTransp `xml:"infUnidTransp,omitempty"`
	Peri          []Peri          `xml:"peri,omitempty"`
}

InfMDFeTransp é um MDF-e transportado dentro deste, no transporte multimodal.

type InfModal

type InfModal struct {
	VersaoModal string `xml:"versaoModal,attr"`

	Rodo   *Rodo   `xml:"rodo,omitempty"`
	Aereo  *Aereo  `xml:"aereo,omitempty"`
	Aquav  *Aquav  `xml:"aquav,omitempty"`
	Ferrov *Ferrov `xml:"ferrov,omitempty"`
}

InfModal envolve o grupo específico do meio de transporte.

type InfMunCarrega

type InfMunCarrega struct {
	CMunCarrega int    `xml:"cMunCarrega"`
	XMunCarrega string `xml:"xMunCarrega"`
}

InfMunCarrega é um município de carregamento.

type InfMunDescarga

type InfMunDescarga struct {
	CMunDescarga int    `xml:"cMunDescarga"`
	XMunDescarga string `xml:"xMunDescarga"`

	InfCTe        []InfCTe        `xml:"infCTe,omitempty"`
	InfNFe        []InfNFe        `xml:"infNFe,omitempty"`
	InfMDFeTransp []InfMDFeTransp `xml:"infMDFeTransp,omitempty"`
}

InfMunDescarga é um município onde parte da carga será descarregada.

type InfNFe

type InfNFe struct {
	ChNFe         string          `xml:"chNFe" norm:"num"`
	SegCodBarra   string          `xml:"SegCodBarra,omitempty"`
	IndReentrega  string          `xml:"indReentrega,omitempty"`
	InfUnidTransp []InfUnidTransp `xml:"infUnidTransp,omitempty"`
	Peri          []Peri          `xml:"peri,omitempty"`
}

InfNFe é uma NF-e transportada, identificada pela chave de acesso.

type InfPag

type InfPag struct {
	XNome         string         `xml:"xNome,omitempty"`
	CNPJ          string         `xml:"CNPJ,omitempty" norm:"num"`
	CPF           string         `xml:"CPF,omitempty" norm:"num"`
	IdEstrangeiro string         `xml:"idEstrangeiro,omitempty"`
	Comp          []CompPag      `xml:"Comp"`
	VContrato     tipos.Decimal  `xml:"vContrato" dec:"2"`
	IndAltoDesemp string         `xml:"indAltoDesemp,omitempty"`
	IndPag        string         `xml:"indPag"`
	VAdiant       *tipos.Decimal `xml:"vAdiant,omitempty" dec:"2"`
	InfPrazo      []InfPrazo     `xml:"infPrazo,omitempty"`
	InfBanc       *InfBanc       `xml:"infBanc,omitempty"`
}

InfPag detalha o pagamento do frete.

type InfPercurso

type InfPercurso struct {
	UFPer string `xml:"UFPer" norm:"upper"`
}

InfPercurso é uma UF de passagem da viagem.

type InfPrazo

type InfPrazo struct {
	NParcela int           `xml:"nParcela"`
	DVenc    tipos.Data    `xml:"dVenc"`
	VParcela tipos.Decimal `xml:"vParcela" dec:"2"`
}

InfPrazo é uma parcela do pagamento a prazo.

type InfProt

type InfProt struct {
	Id       string         `xml:"Id,attr,omitempty"`
	TpAmb    Ambiente       `xml:"tpAmb"`
	VerAplic string         `xml:"verAplic"`
	ChMDFe   string         `xml:"chMDFe"`
	DhRecbto tipos.DataHora `xml:"dhRecbto"`
	NProt    string         `xml:"nProt,omitempty"`
	DigVal   string         `xml:"digVal,omitempty"`
	CStat    int            `xml:"cStat"`
	XMotivo  string         `xml:"xMotivo"`
}

InfProt são os dados do protocolo.

type InfResp

type InfResp struct {
	RespSeg string `xml:"respSeg"`
	CNPJ    string `xml:"CNPJ,omitempty" norm:"num"`
	CPF     string `xml:"CPF,omitempty" norm:"num"`
}

InfResp identifica o responsável pelo seguro.

type InfRespTec

type InfRespTec struct {
	CNPJ     string `xml:"CNPJ" norm:"num"`
	XContato string `xml:"xContato"`
	Email    string `xml:"email"`
	Fone     string `xml:"fone" norm:"num"`
	CSRT     string `xml:"idCSRT,omitempty"`
	HashCSRT string `xml:"hashCSRT,omitempty" norm:"-"`
}

InfRespTec identifica o responsável técnico pelo sistema emissor.

type InfSeg

type InfSeg struct {
	XSeg string `xml:"xSeg"`
	CNPJ string `xml:"CNPJ" norm:"num"`
}

InfSeg identifica a seguradora.

type InfTerminal

type InfTerminal struct {
	CTermCarreg    string `xml:"cTermCarreg,omitempty"`
	XTermCarreg    string `xml:"xTermCarreg,omitempty"`
	CTermDescarreg string `xml:"cTermDescarreg,omitempty"`
	XTermDescarreg string `xml:"xTermDescarreg,omitempty"`
}

InfTerminal identifica um terminal portuário.

type InfUnidCarga

type InfUnidCarga struct {
	TpUnidCarga  string         `xml:"tpUnidCarga"`
	IdUnidCarga  string         `xml:"idUnidCarga"`
	LacUnidCarga []LacreUnidade `xml:"lacUnidCarga,omitempty"`
	QtdRat       *tipos.Decimal `xml:"qtdRat,omitempty" dec:"2"`
}

InfUnidCarga é uma unidade de carga dentro da unidade de transporte.

type InfUnidTransp

type InfUnidTransp struct {
	TpUnidTransp  string         `xml:"tpUnidTransp"`
	IdUnidTransp  string         `xml:"idUnidTransp"`
	LacUnidTransp []LacreUnidade `xml:"lacUnidTransp,omitempty"`
	InfUnidCarga  []InfUnidCarga `xml:"infUnidCarga,omitempty"`
	QtdRat        *tipos.Decimal `xml:"qtdRat,omitempty" dec:"2"`
}

InfUnidTransp é uma unidade de transporte, como um contêiner.

type Lacre

type Lacre struct {
	NLacre string `xml:"nLacre"`
}

Lacre é um lacre do manifesto.

type LacreRodo

type LacreRodo struct {
	NLacre string `xml:"nLacre"`
}

LacreRodo é um lacre do transporte rodoviário.

type LacreUnidade

type LacreUnidade struct {
	NLacre string `xml:"nLacre"`
}

LacreUnidade é o lacre de uma unidade de transporte.

type MDFe

type MDFe struct {
	XMLName xml.Name `xml:"http://www.portalfiscal.inf.br/mdfe MDFe"`

	InfMDFe InfMDFe `xml:"infMDFe"`
	// InfMDFeSupl traz o QR Code do DAMDFE.
	InfMDFeSupl *InfMDFeSupl `xml:"infMDFeSupl,omitempty"`
}

MDFe é o documento completo, correspondente ao elemento raiz <MDFe>.

func Ler

func Ler(dados []byte) (*MDFe, error)

Ler interpreta o XML de um MDF-e. Aceita o elemento <MDFe> isolado ou dentro de um <mdfeProc>.

func Novo

func Novo(modal Modal) *MDFe

Novo devolve um MDF-e com os campos de estrutura preenchidos com os padrões do leiaute: versão 3.00, modelo 58, emissão normal e o modal informado.

func (*MDFe) AssinarCom

func (m *MDFe) AssinarCom(assinante xmldsig.Assinante) ([]byte, error)

AssinarCom prepara, serializa e assina o manifesto em uma única chamada.

func (*MDFe) Chave

func (m *MDFe) Chave() string

Chave devolve a chave de acesso de 44 dígitos, extraída do atributo Id.

func (*MDFe) ContarDocumentos

func (m *MDFe) ContarDocumentos()

ContarDocumentos preenche as quantidades de CT-e, NF-e e MDF-e do grupo de totais a partir dos documentos relacionados em cada município de descarregamento.

O valor e o peso da carga não são calculados: eles não saem dos documentos relacionados, e sim da pesagem e da nota de quem embarca.

func (*MDFe) Documentos

func (m *MDFe) Documentos() []string

Documentos devolve todas as chaves de acesso relacionadas no manifesto, em ordem de município de descarregamento.

func (*MDFe) Modal

func (m *MDFe) Modal() Modal

Modal devolve o meio de transporte da viagem.

func (*MDFe) Preparar

func (m *MDFe) Preparar(opcoes ...OpcoesPreparo) error

Preparar deixa o manifesto pronto para serialização: normaliza os campos de texto, reescala os decimais, conta os documentos relacionados e monta a chave de acesso.

Preparar é idempotente.

func (*MDFe) Validar

func (m *MDFe) Validar() error

Validar confere o manifesto contra as regras estruturais do leiaute 3.00.

func (*MDFe) XML

func (m *MDFe) XML() ([]byte, error)

XML serializa o manifesto, sem declaração XML e sem espaços supérfluos.

type Modal string

Modal é o meio de transporte da viagem.

const (
	ModalRodoviario  Modal = "1"
	ModalAereo       Modal = "2"
	ModalAquaviario  Modal = "3"
	ModalFerroviario Modal = "4"
)

func (Modal) Descricao

func (m Modal) Descricao() string

Descricao devolve o nome do modal por extenso.

type Modelo

type Modelo string

Modelo identifica o documento.

const ModeloMDFe Modelo = "58"

ModeloMDFe é o Manifesto Eletrônico de Documentos Fiscais.

func (Modelo) Numero

func (m Modelo) Numero() int

Numero devolve o modelo como inteiro.

type OpcoesPreparo

type OpcoesPreparo struct {
	// SemContagemDeDocumentos preserva as quantidades do grupo tot como
	// preenchidas pelo chamador.
	SemContagemDeDocumentos bool
}

OpcoesPreparo ajusta o comportamento de MDFe.Preparar.

type Peri

type Peri struct {
	NONU      string `xml:"nONU"`
	XNomeAE   string `xml:"xNomeAE,omitempty"`
	XClaRisco string `xml:"xClaRisco,omitempty"`
	GrEmb     string `xml:"grEmb,omitempty"`
	QTotProd  string `xml:"qTotProd"`
	QVolTipo  string `xml:"qVolTipo,omitempty"`
}

Peri descreve carga perigosa.

type ProcessoEmissao

type ProcessoEmissao string

ProcessoEmissao identifica o programa emissor.

const EmissaoAplicativoContribuinte ProcessoEmissao = "0"

EmissaoAplicativoContribuinte é o aplicativo do próprio contribuinte.

type ProdPred

type ProdPred struct {
	TpCarga    string      `xml:"tpCarga"`
	XProd      string      `xml:"xProd"`
	InfLotacao *InfLotacao `xml:"infLotacao,omitempty"`
}

ProdPred descreve o produto predominante da carga.

type Proprietario

type Proprietario struct {
	CPF    string `xml:"CPF,omitempty" norm:"num"`
	CNPJ   string `xml:"CNPJ,omitempty" norm:"num"`
	RNTRC  string `xml:"RNTRC" norm:"upper"`
	XNome  string `xml:"xNome"`
	IE     string `xml:"IE,omitempty" norm:"upper"`
	UF     string `xml:"UF,omitempty" norm:"upper"`
	TpProp string `xml:"tpProp"`
}

Proprietario identifica o dono do veículo, quando não é o emitente.

type ProtMDFe

type ProtMDFe struct {
	XMLName xml.Name `xml:"protMDFe"`
	Versao  string   `xml:"versao,attr"`
	InfProt InfProt  `xml:"infProt"`
}

ProtMDFe é o protocolo de autorização devolvido pela SEFAZ.

func (*ProtMDFe) Autorizado

func (p *ProtMDFe) Autorizado() bool

Autorizado informa se o protocolo representa uma autorização de uso.

func (*ProtMDFe) Resumo

func (p *ProtMDFe) Resumo() string

Resumo devolve uma descrição de uma linha do protocolo.

type Rodo

type Rodo struct {
	// InfANTT reúne os dados exigidos pela Agência Nacional de Transportes
	// Terrestres.
	InfANTT *InfANTT `xml:"infANTT,omitempty"`
	// VeicTracao é o veículo que puxa a carga.
	VeicTracao VeicTracao `xml:"veicTracao"`
	// VeicReboque lista os reboques acoplados.
	VeicReboque []VeicReboque `xml:"veicReboque,omitempty"`
	// CodAgPorto é o código de agendamento no porto.
	CodAgPorto string `xml:"codAgPorto,omitempty"`
	// LacRodo lista os lacres do transporte rodoviário.
	LacRodo []LacreRodo `xml:"lacRodo,omitempty"`
}

Rodo é o modal rodoviário — o único de uso corrente no MDF-e.

É aqui que ficam o veículo de tração, os reboques e os condutores, que no CT-e 4.00 deixaram de existir justamente porque migraram para cá.

type Seguro

type Seguro struct {
	InfResp InfResp  `xml:"infResp"`
	InfSeg  *InfSeg  `xml:"infSeg,omitempty"`
	NApol   string   `xml:"nApol,omitempty"`
	NAver   []string `xml:"nAver,omitempty"`
}

Seguro descreve a averbação do seguro da carga.

type TipoCarroceria

type TipoCarroceria string

TipoCarroceria classifica a carroceria do veículo.

const (
	CarroceriaNaoAplicavel   TipoCarroceria = "00"
	CarroceriaAberta         TipoCarroceria = "01"
	CarroceriaFechadaBau     TipoCarroceria = "02"
	CarroceriaGraneleira     TipoCarroceria = "03"
	CarroceriaPortaContainer TipoCarroceria = "04"
	CarroceriaSider          TipoCarroceria = "05"
)

type TipoEmissao

type TipoEmissao string

TipoEmissao identifica a forma de emissão e entra na chave de acesso.

const (
	// EmissaoNormal é a emissão normal, sem contingência.
	EmissaoNormal TipoEmissao = "1"
	// EmissaoContingencia é a emissão em contingência.
	EmissaoContingencia TipoEmissao = "2"
)

func (TipoEmissao) Contingencia

func (t TipoEmissao) Contingencia() bool

Contingencia informa se a forma de emissão é uma contingência.

func (TipoEmissao) Numero

func (t TipoEmissao) Numero() int

Numero devolve a forma de emissão como inteiro.

type TipoEmitente

type TipoEmitente string

TipoEmitente classifica quem emite o manifesto.

const (
	// EmitentePrestadorServico é a transportadora que presta serviço de
	// transporte.
	EmitentePrestadorServico TipoEmitente = "1"
	// EmitenteCargaPropria é quem transporta carga própria.
	EmitenteCargaPropria TipoEmitente = "2"
	// EmitenteCTeGlobalizado é o emitente de CT-e globalizado.
	EmitenteCTeGlobalizado TipoEmitente = "3"
)

type TipoEvento

type TipoEvento string

TipoEvento é o código de seis dígitos que identifica o evento do MDF-e.

const (
	// EventoCancelamento cancela um manifesto autorizado.
	EventoCancelamento TipoEvento = "110111"
	// EventoEncerramento encerra a viagem. É o evento que a operação do MDF-e
	// gira em torno: sem ele, o manifesto seguinte não é autorizado.
	EventoEncerramento TipoEvento = "110112"
	// EventoInclusaoCondutor acrescenta um motorista à viagem em curso.
	EventoInclusaoCondutor TipoEvento = "110114"
	// EventoInclusaoDFe acrescenta documentos ao manifesto em curso.
	EventoInclusaoDFe TipoEvento = "110115"
)

func (TipoEvento) Conhecido

func (t TipoEvento) Conhecido() bool

Conhecido informa se o tipo é implementado por este pacote.

func (TipoEvento) Descricao

func (t TipoEvento) Descricao() string

Descricao devolve o texto do campo descEvento correspondente ao tipo.

func (TipoEvento) Rotulo

func (t TipoEvento) Rotulo() string

Rotulo devolve o código seguido da descrição, para mensagens e logs.

type TipoRodado

type TipoRodado string

TipoRodado classifica o veículo de tração.

const (
	RodadoTruck      TipoRodado = "01"
	RodadoToco       TipoRodado = "02"
	RodadoCavaloMec  TipoRodado = "03"
	RodadoVAN        TipoRodado = "04"
	RodadoUtilitario TipoRodado = "05"
	RodadoOutros     TipoRodado = "06"
)

type TipoTransportador

type TipoTransportador string

TipoTransportador classifica o transportador na ANTT.

const (
	TransportadorETC TipoTransportador = "1"
	TransportadorTAC TipoTransportador = "2"
	TransportadorCTC TipoTransportador = "3"
)

type Tot

type Tot struct {
	// QCTe é a quantidade de CT-e relacionados.
	QCTe int `xml:"qCTe,omitempty"`
	// QNFe é a quantidade de NF-e relacionadas.
	QNFe int `xml:"qNFe,omitempty"`
	// QMDFe é a quantidade de MDF-e relacionados.
	QMDFe int `xml:"qMDFe,omitempty"`
	// VCarga é o valor total da carga.
	VCarga tipos.Decimal `xml:"vCarga" dec:"2"`
	// CUnid é a unidade de medida do peso.
	CUnid UnidadeDeMedida `xml:"cUnid"`
	// QCarga é o peso bruto total.
	QCarga tipos.Decimal `xml:"qCarga" dec:"4"`
}

Tot são os totais do manifesto.

type Trem

type Trem struct {
	XPref  string          `xml:"xPref"`
	DhTrem *tipos.DataHora `xml:"dhTrem,omitempty"`
	XOri   string          `xml:"xOri"`
	XDest  string          `xml:"xDest"`
	QVag   int             `xml:"qVag"`
}

Trem identifica a composição ferroviária.

type UnidadeDeMedida

type UnidadeDeMedida string

UnidadeDeMedida é a unidade do peso da carga.

const (
	// UnidadeKG é o quilograma.
	UnidadeKG UnidadeDeMedida = "01"
	// UnidadeTON é a tonelada.
	UnidadeTON UnidadeDeMedida = "02"
)

type Vagao

type Vagao struct {
	PesoBC tipos.Decimal `xml:"pesoBC" dec:"3"`
	PesoR  tipos.Decimal `xml:"pesoR" dec:"3"`
	TpVag  string        `xml:"tpVag,omitempty"`
	Serie  string        `xml:"serie"`
	NVag   int           `xml:"nVag"`
	NSeq   int           `xml:"nSeq,omitempty"`
	TU     tipos.Decimal `xml:"TU" dec:"3"`
}

Vagao é um vagão da composição.

type ValePed

type ValePed struct {
	Disp          []DispositivoPedagio `xml:"disp,omitempty"`
	CategCombVeic string               `xml:"categCombVeic,omitempty"`
}

ValePed lista os vales-pedágio da viagem.

type VeicReboque

type VeicReboque struct {
	CInt    string         `xml:"cInt,omitempty"`
	Placa   string         `xml:"placa" norm:"upper"`
	RENAVAM string         `xml:"RENAVAM,omitempty" norm:"num"`
	Tara    int            `xml:"tara"`
	CapKG   int            `xml:"capKG,omitempty"`
	CapM3   int            `xml:"capM3,omitempty"`
	Prop    *Proprietario  `xml:"prop,omitempty"`
	TpCar   TipoCarroceria `xml:"tpCar"`
	UF      string         `xml:"UF,omitempty" norm:"upper"`
}

VeicReboque é um reboque acoplado ao veículo de tração.

type VeicTracao

type VeicTracao struct {
	// CInt é o código interno do veículo no sistema do emitente.
	CInt string `xml:"cInt,omitempty"`
	// Placa do veículo, sem hífen.
	Placa string `xml:"placa" norm:"upper"`
	// RENAVAM do veículo.
	RENAVAM string `xml:"RENAVAM,omitempty" norm:"num"`
	// Tara é o peso do veículo vazio, em quilogramas.
	Tara int `xml:"tara"`
	// CapKG é a capacidade em quilogramas.
	CapKG int `xml:"capKG,omitempty"`
	// CapM3 é a capacidade em metros cúbicos.
	CapM3 int `xml:"capM3,omitempty"`
	// Prop identifica o proprietário quando ele não é o emitente.
	Prop *Proprietario `xml:"prop,omitempty"`
	// Condutor lista os motoristas do veículo.
	Condutor []Condutor `xml:"condutor"`
	// TpRod classifica o rodado.
	TpRod TipoRodado `xml:"tpRod"`
	// TpCar classifica a carroceria.
	TpCar TipoCarroceria `xml:"tpCar"`
	// UF de licenciamento do veículo.
	UF string `xml:"UF,omitempty" norm:"upper"`
}

VeicTracao é o veículo que puxa a carga.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL