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
- Variables
- func LerMDFeProc(dados []byte) (*MDFe, *ProtMDFe, error)
- func MontarEnvioSincrono(mdfeAssinado []byte) ([]byte, error)
- func MontarIdEvento(tipo TipoEvento, chaveAcesso string, sequencia int) string
- func MontarMDFeProc(mdfeAssinado []byte, prot *ProtMDFe) ([]byte, error)
- func XMLDeclarado(documento []byte) []byte
- type Aereo
- type Ambiente
- type Aquav
- type AutXML
- type CompPag
- type Condutor
- type DadosCancelamento
- type DadosEncerramento
- type DadosInclusaoCondutor
- type DetEvento
- type DispositivoPedagio
- type Emit
- type Endereco
- type Erro
- type Erros
- type EvCancelamento
- type EvEncerramento
- type EvInclusaoCondutor
- type Evento
- type Ferrov
- type Ide
- type InfANTT
- type InfAdic
- type InfBanc
- type InfCIOT
- type InfCTe
- type InfContratante
- type InfContrato
- type InfDoc
- type InfEmbComb
- type InfEventoMDFe
- type InfLocal
- type InfLotacao
- type InfMDFe
- type InfMDFeSupl
- type InfMDFeTransp
- type InfModal
- type InfMunCarrega
- type InfMunDescarga
- type InfNFe
- type InfPag
- type InfPercurso
- type InfPrazo
- type InfProt
- type InfResp
- type InfRespTec
- type InfSeg
- type InfTerminal
- type InfUnidCarga
- type InfUnidTransp
- type Lacre
- type LacreRodo
- type LacreUnidade
- type MDFe
- func (m *MDFe) AssinarCom(assinante xmldsig.Assinante) ([]byte, error)
- func (m *MDFe) Chave() string
- func (m *MDFe) ContarDocumentos()
- func (m *MDFe) Documentos() []string
- func (m *MDFe) Modal() Modal
- func (m *MDFe) Preparar(opcoes ...OpcoesPreparo) error
- func (m *MDFe) Validar() error
- func (m *MDFe) XML() ([]byte, error)
- type Modal
- type Modelo
- type OpcoesPreparo
- type Peri
- type ProcessoEmissao
- type ProdPred
- type Proprietario
- type ProtMDFe
- type Rodo
- type Seguro
- type TipoCarroceria
- type TipoEmissao
- type TipoEmitente
- type TipoEvento
- type TipoRodado
- type TipoTransportador
- type Tot
- type Trem
- type UnidadeDeMedida
- type Vagao
- type ValePed
- type VeicReboque
- type VeicTracao
Constants ¶
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.
const Espaco = "http://www.portalfiscal.inf.br/mdfe"
Espaco é o namespace XML do MDF-e.
const Versao = "3.00"
Versao é a versão do leiaute implementada por este pacote.
const VersaoModal = "3.00"
VersaoModal é a versão do grupo específico do modal.
Variables ¶
var ErrDadosInvalidos = errors.New("mdfe: dados inválidos")
ErrDadosInvalidos é a base dos erros de montagem de evento.
Functions ¶
func LerMDFeProc ¶
LerMDFeProc separa o manifesto e o protocolo de um arquivo de distribuição.
func MontarEnvioSincrono ¶ added in v0.4.0
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 ¶
MontarMDFeProc envelopa o manifesto assinado com o protocolo de autorização, preservando os bytes assinados.
func XMLDeclarado ¶
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 Aquav ¶
type Aquav struct {
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"`
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 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 ¶
Erro é uma inconsistência encontrada por MDFe.Validar.
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 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 ¶
AssinarCom serializa e assina o evento, referenciando o grupo infEvento.
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 ¶
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 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 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 ¶
Ler interpreta o XML de um MDF-e. Aceita o elemento <MDFe> isolado ou dentro de um <mdfeProc>.
func Novo ¶
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 ¶
AssinarCom prepara, serializa e assina o manifesto em uma única chamada.
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 ¶
Documentos devolve todas as chaves de acesso relacionadas no manifesto, em ordem de município de descarregamento.
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.
type Modelo ¶
type Modelo string
Modelo identifica o documento.
const ModeloMDFe Modelo = "58"
ModeloMDFe é o Manifesto Eletrônico de Documentos Fiscais.
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 ¶
Autorizado informa se o protocolo representa uma autorização de uso.
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.