Rotina: Transporte — CT-e e MDF-e
Emissão de Conhecimento de Transporte Eletrônico (CT-e), Manifesto Eletrônico de Documentos Fiscais (MDF-e), controle de viagens, veículos e motoristas.
Módulos Delphi
| Arquivo | Papel |
|---|---|
source/MTR001/UMTR001.pas | Form principal — viagens, rotas, despesas |
source/MTR001/UdmMTR001.pas | DataModule de viagens |
source/jFaturamento/jCTe.pas | Engine de emissão CT-e (assinatura, transmissão, retorno) |
source/jFaturamento/jMDFe.pas | Engine de emissão MDF-e |
source/TFA*/ | Telas de emissão CT-e e MDF-e |
Classes em jCTe.pas:
| Classe | Responsabilidade |
|---|---|
TCTeRecepcao | Transmissão do CT-e à SEFAZ |
TCTeRetRecepcao | Consulta de retorno de lote |
TCTeConsulta | Consulta de situação por chave de acesso |
TCTeCancelamento | Cancelamento de CT-e |
TCTeCartaCorrecao | Carta de Correção Eletrônica (CC-e) |
TCTeInutilizacao | Inutilização de série/numeração |
Enum TAcaoCTe:
acEmitindoCTe
acCancelando
acCartaCorrecao
acConsultando
acInutilizando
acEncerrandoMDFe
Classes em jMDFe.pas:
| Classe | Responsabilidade |
|---|---|
TMDFeRecepcao | Transmissão do MDF-e |
TMDFeEncerramento | Encerramento do MDF-e no destino |
TMDFeTrocaMotorista | Substituição de motorista em viagem |
TMDFeConsulta | Consulta de situação |
TMDFeCancelamento | Cancelamento antes de iniciar viagem |
Enum TAcaoMDFe:
amEmitindoMDFe
amEncerrandoMDFe
amTrocandoMotoristaMDFe
amCancelando
amConsultando
Tabelas do Banco de Dados
MDFE — Manifesto Eletrônico
DDL: docs/schema/tables/MDFE.sql
Chave primária: (CD_EMPRESA, NR_MDFE)
| Campo | Tipo | Descrição |
|---|---|---|
| NR_MDFE | INTEGER | Número sequencial do MDF-e |
| NR_CHAVEACESSO | VARCHAR(44) | Chave de acesso (44 dígitos — mesmo algoritmo NF-e) |
| CD_SERIE | VARCHAR(3) | Série do MDF-e |
| DT_EMISSAO | TIMESTAMP | Data/hora de emissão |
| DT_ENCERRAMENTO | TIMESTAMP | Data/hora de encerramento no destino (NULL = em trânsito) |
| DT_CANCELAMENTO | TIMESTAMP | Data/hora de cancelamento |
| ST_MDFE | CHAR(1) | 'N'=Normal (autorizado), 'C'=Cancelado, 'E'=Encerrado |
| TP_EMIT | CHAR(1) | '1'=Prestador de serviço de transporte, '2'=Transportador de carga própria |
| TP_TRANSP | CHAR(1) | '1'=ETC, '2'=TAC, '3'=CTC |
| CD_UFCARREGAMENTO | VARCHAR(2) | UF de carregamento |
| CD_UFDESTINO | VARCHAR(2) | UF(s) de destino (múltiplas) |
| NR_RNTRC | VARCHAR(8) | Registro Nacional de Transportadores Rodoviários de Carga |
| CD_VEICULO | INTEGER | Veículo trator (FK → VEICULO) |
| VL_CARGA | NUMERIC(15,2) | Valor total da carga |
| QT_CARGA | NUMERIC(15,3) | Quantidade total |
| UN_CARGA | VARCHAR(6) | Unidade (KG, TON, UN) |
| NR_PROTOCOLO | VARCHAR(60) | Protocolo de autorização SEFAZ |
| DS_XMLMDFE | BLOB | XML do MDF-e autorizado |
| DS_ERROS | VARCHAR(4000) | Erros de rejeição |
MDFEMOTORISTA — Motoristas do MDF-e
DDL: docs/schema/tables/MDFEMOTORISTA.sql
Chave primária: (CD_EMPRESA, NR_MDFE, NR_SEQUENCIAL)
| Campo | Tipo | Descrição |
|---|---|---|
| NR_SEQUENCIAL | INTEGER | Ordem do motorista |
| CD_MOTORISTA | INTEGER | Motorista (FK → PESSOA) |
| NR_CPF | VARCHAR(11) | CPF do motorista |
| NM_MOTORISTA | VARCHAR(60) | Nome |
| ST_MOTORISTA | CHAR(1) | 'A'=Ativo, 'S'=Substituído |
| DT_SUBSTITUICAO | TIMESTAMP | Data da troca de motorista |
MDFENOTA — Documentos Vinculados ao MDF-e
DDL: docs/schema/tables/MDFENOTA.sql
Chave primária: (CD_EMPRESA, NR_MDFE, NR_SEQUENCIAL)
| Campo | Tipo | Descrição |
|---|---|---|
| NR_SEQUENCIAL | INTEGER | Sequência |
| TP_DOCUMENTO | CHAR(2) | 'NF'=NF-e, 'CT'=CT-e, 'CF'=CF-e SAT |
| NR_CHAVEACESSO | VARCHAR(44) | Chave de acesso do documento vinculado |
| CD_MUNICIPIO | INTEGER | Município de entrega |
| CD_UF | VARCHAR(2) | UF do município |
MDFEPERCURSO — UFs do Percurso
DDL: docs/schema/tables/MDFEPERCURSO.sql
| Campo | Tipo | Descrição |
|---|---|---|
| NR_MDFE | INTEGER | MDF-e |
| NR_SEQUENCIAL | SMALLINT | Ordem no percurso |
| CD_UFPERCURSO | VARCHAR(2) | UF intermediária (ex: 'PR', 'SP', 'RJ') |
VEICULO — Frota
DDL: docs/schema/tables/VEICULO.sql
Chave primária: (CD_EMPRESA, CD_VEICULO)
| Campo | Tipo | Descrição |
|---|---|---|
| NR_PLACA | VARCHAR(7) | Placa (ex: 'ABC1D23') |
| NR_CHASSIS | VARCHAR(17) | Número de chassi |
| NR_RENAVAM | VARCHAR(11) | RENAVAM |
| NR_RNTRC | VARCHAR(8) | RNTRC do veículo |
| TP_VEICULO | CHAR(1) | 'T'=Trator, 'R'=Reboque, 'S'=Semirreboque |
| CD_TPCARROCERIA | SMALLINT | Tipo de carroceria (SEFAZ) |
| KM_AQUISICAO | INTEGER | Quilometragem de aquisição |
| KM_ATUAL | INTEGER | Quilometragem atual |
| DT_VENCIMENTO_RNTRC | DATE | Vencimento do RNTRC |
| DT_VENCIMENTO_SEGURO | DATE | Vencimento do seguro |
| CD_PROPRIEDADE | CHAR(1) | 'P'=Próprio, 'T'=Terceiro |
| CD_PESSOA | INTEGER | Proprietário (se terceiro) |
CT-e — Tabelas de Conhecimento de Transporte
| Tabela | Descrição |
|---|---|
CTE | Cabeçalho do CT-e (NR_CTE, NR_CHAVEACESSO, ST_CTE: N/C, VL_PRESTACAO) |
CTEPRESTACAO | Componentes do valor (frete, seguro, gris, pedagio) |
CTEMERCADORIA | Mercadorias transportadas |
CTEDOCUMENTO | Documentos fiscais vinculados (NF-e, CF-e) |
CTETOMADOR | Tomador do serviço (remetente, destinatário, expedidor, recebedor) |
ROTATRANSPORTE — Rotas e Viagens
DDL: docs/schema/tables/ROTATRANSPORTE.sql
| Campo | Tipo | Descrição |
|---|---|---|
| NR_ROTA | INTEGER | Sequencial da viagem (PK) |
| CD_MOTORISTA | INTEGER | Motorista (FK → PESSOA) |
| CD_VEICULO | INTEGER | Veículo (FK → VEICULO) |
| DT_SAIDA | TIMESTAMP | Data/hora de saída |
| DT_RETORNO | TIMESTAMP | Data/hora de retorno |
| KM_SAIDA | INTEGER | Hodômetro na saída |
| KM_RETORNO | INTEGER | Hodômetro no retorno |
| VL_FRETE | NUMERIC(15,2) | Valor total do frete |
| VL_DESPESAS | NUMERIC(15,2) | Despesas da viagem |
| ST_VIAGEM | CHAR(1) | 'A'=Aberta, 'E'=Encerrada, 'C'=Cancelada |
| NR_MDFE | INTEGER | MDF-e vinculado à viagem |
Parâmetros (PARMTRANSPORTE)
| Parâmetro | Tipo | Efeito |
|---|---|---|
ST_EMITECTE | S/N | 'S' = empresa emite CT-e (transportadora) |
ST_EMITEMDFE | S/N | 'S' = empresa emite MDF-e |
CD_SERIECT | VARCHAR(3) | Série padrão do CT-e |
CD_SERIEMDFE | VARCHAR(3) | Série padrão do MDF-e |
CD_AMBIENTE_CTE | CHAR | '1'=Produção, '2'=Homologação |
NR_RNTRC_EMPRESA | VARCHAR(8) | RNTRC da empresa transportadora |
TP_EMIT_PADRAO | CHAR | Tipo emitente padrão (1=ETC, 2=carga própria) |
Fluxo de Emissão CT-e
┌──────────────────────────────────────────────────────────┐
│ 1. PRESTAÇÃO DO SERVIÇO │
│ Transportadora recebe NFs para transporte │
│ Informa: tomador, remetente, destinatário │
│ Valor do frete + componentes (gris, pedagio, seguro) │
│ Vincula NF-e(s) ao CT-e (CTEDOCUMENTO) │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 2. EMISSÃO (jCTe.pas — TCTeRecepcao) │
│ Gera XML do CT-e (schema cte_v04_00.xsd) │
│ Assina com certificado digital A1/A3 │
│ Transmite lote à SEFAZ: POST /cte/ws │
│ ST_CTE := 'N' (autorizado) │
│ NR_PROTOCOLO preenchido │
│ DANFE-CT impressa ou enviada por e-mail │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 3. CANCELAMENTO (até 168h após autorização) │
│ TCTeCancelamento → POST /cancelamento │
│ ST_CTE := 'C' │
│ DT_CANCELAMENTO preenchida │
│ Evento registrado na SEFAZ │
└──────────────────────────────────────────────────────────┘
Fluxo de Emissão MDF-e
┌──────────────────────────────────────────────────────────┐
│ 1. INÍCIO DA VIAGEM │
│ Seleciona veículo(s) e motorista(s) │
│ Vincula CT-e(s) ou NF-e(s) (MDFENOTA) │
│ Informa percurso: UF carregamento → UFs percurso → UF destino │
│ VL_CARGA e QT_CARGA calculados dos documentos │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 2. TRANSMISSÃO (jMDFe.pas — TMDFeRecepcao) │
│ Gera XML do MDF-e │
│ Assina com certificado digital │
│ Transmite à SEFAZ: POST /mdfe/ws │
│ ST_MDFE := 'N' (autorizado) │
│ DasMDF-e disponível para motorista │
└─────────────────────────┬────────────────────────────────┘
│
├─── TROCA DE MOTORISTA (TAcaoMDFe = amTrocandoMotoristaMDFe)
│ TMDFeTrocaMotorista → POST /motorista
│ INSERT MDFEMOTORISTA (ST_MOTORISTA='S' no anterior)
│ INSERT MDFEMOTORISTA (novo, ST_MOTORISTA='A')
│
▼
┌──────────────────────────────────────────────────────────┐
│ 3. ENCERRAMENTO (TAcaoMDFe = amEncerrandoMDFe) │
│ TMDFeEncerramento → POST /encerramento │
│ Informa: DT_ENCERRAMENTO, município de encerramento │
│ ST_MDFE := 'E' │
│ DT_ENCERRAMENTO preenchida │
│ ROTATRANSPORTE.KM_RETORNO e DT_RETORNO atualizados │
└──────────────────────────────────────────────────────────┘
Controle de Viagens (MTR001)
O módulo MTR001 complementa o fiscal com:
Diário de bordo:
- Registro de hodômetros (saída/retorno)
- Registro de despesas (combustível, pedágio, refeição)
- Controle de adiantamentos ao motorista
CTRC (Conhecimento de Transporte Rodoviário de Cargas):
- Documento interno para cargas que não exigem CT-e eletrônico
- Controle de fretes pagos e a receber
Controle de manutenção de frota:
- Vinculado a MANUTENCAOEQUIPAMENTO (mesmo módulo da OS de equipamentos)
- Alertas por KM ou prazo (ex: troca de óleo a cada 10.000 km)
Influências em Outros Módulos
→ Emissão NF-e
- CT-e vincula NF-e(s) do carregamento (CTEDOCUMENTO.NR_CHAVEACESSO)
- MDF-e vincula CT-e(s) e/ou NF-e(s) diretas (MDFENOTA)
→ Fiscal e SPED
- CT-e alimenta Bloco D do SPED Fiscal (EFD-ICMS/IPI)
- Retenção de IR/CSLL em fretes alimenta eventos REINF R-2010/R-2020
→ Pedido de Venda
- Entrega de pedidos usa MDF-e para carga própria (TP_EMIT='2')
- Romaneio de expedição pode originar MDF-e de carga própria
→ Ordem de Serviço
- Veículos da frota têm histórico de OS de manutenção vinculados por NR_PLACA
- KM_ATUAL atualizado via MOVESTOQUE.NR_PLACA (abastecimentos)
→ APIs Java
TransporteController— CRUD de viagens e MDF-eVeiculoController— histórico por placa (compartilhado com oficina)