CIOT — Spec P.O.
Spec de Módulo — CIOT
Sistema: Simplifique (ERP) · Módulo: CIOT · Slug:
ciot
Stack real: Frontend Angular (erp-web) + Backend Spring Boot (erp) + MongoDB (documentociot) + canonical-schema REST
Fonte: Repositório (erp-webeerp)
Disponibilidade: Plano Completo · Perfis: Todos os perfis de usuário (sem restrição de acesso)
Data de geração: 2026-06-02
Última atualização: 2026-06-15 — retificação FRACIONADO: restrições de edição no formulário, validação de prazo e histórico de alterações.
1. Visão Geral
O módulo CIOT (Código Identificador da Operação de Transporte) transforma a obrigação legal do CIOT — exigida para todo transporte rodoviário remunerado de cargas, obrigatória desde 24/05/2026 pela Portaria SUROC nº 6/2026 (com risco de autuação ANTT) — num fluxo automático dentro do ERP.
O módulo resolve quatro dores principais:
Obrigação legal com risco de autuação — emissão centralizada e rastreável dentro do ERP.
Processo manual/fragmentado e propenso a erro — antes o usuário saía do ERP para o portal externo (IPEF/NDD), redigitava CNPJ do contratante/contratado, RNTRC, placa, origem/destino, valor do frete, NCM, e copiava o número do CIOT de volta ao MDF-e. Agora os dados fluem automaticamente.
Ausência de rastreabilidade centralizada de status — o ERP mantém o ciclo de vida (Digitado / Autorizado / Encerrado / Cancelado / Rejeitado / Em Processamento).
Desconexão entre CIOT e MDF-e — os dados fluem automaticamente do MDF-e para o CIOT e o vínculo é bidirecional (
Ciot.mdfeId↔MDFe.rodoviario.ciot.ciots[]).
O CIOT não é um CRUD simples — é um fluxo/processo com máquina de estados, integração externa assíncrona (via provedor de integração abstraído) e regras de negócio ANTT (códigos B1–B122).
Abstração do provedor de integração
Nenhuma mensagem ao usuário cita NDD ou Extratta. O sistema usa sempre o termo "provedor de integração". Internamente existem três providers que implementam a mesma interface CiotIntegracaoProvider:
NDD Cargo (IPEF) — provider principal (REST + OAuth2): emitir, encerrar, cancelar, alterar, consultar status, roteirizador, comprovante PDF.
Extratta — provider alternativo (mesma interface).
Simulado — para dev/testes; executa todo o fluxo localmente sem API externa.
Personas
Operador logístico / Despachante — preenche MDF-e e CIOT no dia a dia.
Contratante / Embarcador — empresa que contrata o transporte e responde pela obrigação perante a ANTT.
ETC (Empresa de Transporte de Cargas) — transportadora contratada.
TAC (Transportador Autônomo de Cargas) — motorista autônomo, depende do contratante para emitir.
CTC (Cooperativa de Transporte de Cargas) — regime coletivo.
Gestor / Financeiro — visibilidade centralizada e gerenciamento de pagamento de frete.
2. Métricas de Sucesso
Prioridade | Categoria | Métrica | Meta |
|---|---|---|---|
P0 | Compliance | % de MDF-e com CIOT vinculado | ≥ 95% |
P0 | Compliance | % de operações sem CIOT no prazo legal | Tende a zero |
P1 | Eficiência | Taxa de rejeição de CIOT na 1ª tentativa | Reduzir |
P1 | Eficiência | Redução do tempo médio de emissão (vs. fluxo manual no portal externo) | Reduzir |
P1 | Eficiência | Volume de retrabalho por rejeição | Reduzir |
P2 | Integridade | CIOTs emitidos mas não encerrados | Reduzir |
P2 | Integridade | Timeouts / | Reduzir |
P2 | Integridade | % de CIOTs com | Aumentar |
P3 | Adoção | % de CIOTs gerados via emissão automática vs. manual | Aumentar |
P3 | Adoção | % de clientes do MDF-e que ativaram o CIOT | Aumentar |
UX | Usabilidade | Nº de chamados de suporte de CIOT | Reduzir |
UX | Usabilidade | Taxa de uso do roteirizador | Monitorar |
UX | Usabilidade | Abandono do formulário antes de salvar | Reduzir |
Métrica mais crítica a curto prazo: % de MDF-e com CIOT vinculado (conformidade com a Portaria SUROC nº 6/2026).
Observações Adicionais
Pontos transversais que orientam o objetivo do módulo e impactam diretamente as métricas acima (cada item indica onde é detalhado no corpo da spec):
Três tipos de CIOT com regras distintas — CONVENCIONAL/Lotação (não retificável após emissão; exige cancelar e emitir novo), FRACIONADO (transportador fixo ETC — combo desabilitado; Contratante Principal via radio "Minha empresa"/"Outro"; lista "Demais Contratantes" obrigatória —
contratantesFracionado→ContratantesCargaFrac[].cpfCnpj, cada item ≠ CNPJ emissor (B119), sem duplicados e ≠ Contratante Principal; retificação FRACIONADO: apenasvalorFrete,ncmequantidadeCargasão editáveis; veículos, condutores, contratantes e distância bloqueados; prazo limitado àdataFim) e AGREGADO/TAC-Agregado (exige OrigemDestino com distância no encerramento; prazo máx. 30 dias vs. 90 dos demais). [ver Seções 5.1, 6.2 e 7.2]Quatro tipos de transportador com validações cruzadas — TAC (não pode
gerPgtoFin=5Outros, B100), ETC (cpfResponsavelobrigatório), CTC (igual ETC) e EQUIPARADO (identidade no payload usa IE). [ver Seção 7.3]Gerenciamento de pagamento (
gerPgtoFin) — apenas PIX e Outros na UI; TED removido desde 24/05/2026; PIX omite os campos bancários do payload. [ver Seção 5.5]Validações ANTT pré-emissão — B30, B69, B100, B115, B119 e B109–B111. [ver Seção 8]
Roteirizador de distância (NDD) — botão na aba CIOT do MDF-e + recálculo automático (debounce 1s); eixos derivados do tipo de veículo (cavalo + reboques); preenche
distanciaKm. [ver Seção 8]Ciclo de vida com estados assíncronos — EM_PROCESSAMENTO ("Consultar status") e EM_PROCESSAMENTO_CANCELAR ("Consultar cancelamento"); MDF-e associado bloqueado em EM_PROCESSAMENTO_CIOT. [ver Seção 6]
Provider SIMULADO para dev/testes — executa o fluxo localmente, sem API externa. [ver Seções 1 e 9]
Comprovante PDF —
GET /v1/ciots/{id}/comprovante(base64 →application/pdfinline; ação "Baixar comprovante"). [ver Seções 3.2 e 7.4]Abstração do provedor — nenhuma mensagem ao usuário cita NDD/Extratta; usa-se sempre "provedor de integração". [ver Seção 1]
Novo layout ANTT/NDD 24/05/2026 — payload plano (era
loteOT[]), TED removido, novos obrigatórios (CodigoTipoCarga, eixos por veículo,ContratantesCargaFrac),retencoesmovido para o nívelvalorese correçãodistanciaPecorrida→distanciaPercorrida. [ver Seção 11]Dados de volume — maiores emissores ~360 MDF-e/mês; cauda longa de dezenas de empresas com 10–100/mês (referência de escala). [ver Seção 11]
3. Escopo de Funcionalidades
3.1 Dentro do escopo
Funcionalidade | Tipo | Observação |
|---|---|---|
Listar CIOTs | CRUD | Listagem com filtros, cards de status, colunas configuráveis |
Cadastrar CIOT (Novo) | Fluxo | Salvar como Digitado ou Salvar e Transmitir (emitir) |
Editar CIOT | CRUD | Apenas status Digitado ou Rejeitado (e Autorizado não-Convencional via "Alterar") |
Visualizar CIOT | CRUD | Tela de detalhe com ações de ciclo de vida |
Copiar CIOT | Fluxo | Clona dados de um CIOT existente para um novo |
Excluir CIOT | CRUD | Apenas Digitado ou Rejeitado (delete lógico) |
Emitir / Transmitir (Gerar) | Ciclo de vida | Digitado → Autorizado (ou Rejeitado / Em Processamento) |
Encerrar | Ciclo de vida | Autorizado → Encerrado |
Cancelar | Ciclo de vida | Autorizado → Cancelado (exige motivo) |
Alterar (retificar) | Ciclo de vida | Apenas Autorizado e tipo ≠ Convencional; FRACIONADO: campos restritos e prazo limitado à dataFim |
Consultar status | Ciclo de vida | Resolve |
Consultar cancelamento | Ciclo de vida | Resolve |
Baixar comprovante | Ação | PDF (apenas Autorizado / Encerrado) |
Calcular distância (roteirizador) | Ação | Preenche |
Consultar transportador (situação RNTRC) | Integração | Endpoint |
Consultar frota do transportador | Integração | Endpoint |
Emissão automática a partir do MDF-e | Integração |
|
Vínculo manual de CIOT ao MDF-e | Integração | Modal "Vincular CIOT" |
3.2 Fora do escopo (não existe no código)
Funcionalidade | Status | Justificativa |
|---|---|---|
Importar CIOT | Fora de escopo | Não há rota/endpoint de importação no |
Exportar CIOT (planilha/CSV) | Fora de escopo | Não há ação de exportação na listagem. |
Enviar e-mail | Fora de escopo | Não há ação de envio de e-mail; o comprovante é aberto/baixado em PDF, não enviado. |
Imprimir | Parcial → "Baixar comprovante" | Não há impressão direta. A ação equivalente é Comprovante (ícone |
3.3 O que o CIOT NÃO gera
O CIOT é um documento de operação de transporte e não dispara nenhum dos efeitos abaixo:
Lançamento financeiro (não gera conta a pagar/receber).
Documento fiscal (NF-e / CT-e).
Atualização de estoque.
Linha contábil.
Envio direto ao SEFAZ (o SEFAZ é coisa do MDF-e; o CIOT vai à ANTT via provedor de integração).
4. Navegação e Acesso
4.1 Rotas (CIOT standalone)
Caminho: transportes/ciot
Rota | Componente | Tela |
|---|---|---|
|
| Listagem |
|
| Novo CIOT |
|
| Visualização |
|
| Edição |
|
| Cópia |
Breadcrumb: Transportes › CIOT › {Novo / Editar / Copiar / Visualizar}.
As rotas de formulário (novo/editar/copiar) usam ExitPageGuard (confirmação ao sair com alterações não salvas).
4.2 Acesso dentro do MDF-e
Transportes › MDF-e › formulário › Aba CIOT (última aba do formulário, após "Produto predominante" e "Totalizadores").
Configura tipo de CIOT,
gerarAutomaticamente, dados bancários, distância e vincula CIOTs.Emissão automática ocorre no "Salvar e Transmitir" do MDF-e.
Nota: a partir desta versão o CIOT é uma aba própria no final do MDF-e — não fica mais como uma seção dentro da aba "Rodoviário".
4.3 Configuração (pré-requisito)
Configurações › Transportes › MDF-e › Dados Gerais — define o
provedorCiot. (Atualização 09/06/2026: os campos bancários — agência/conta/dígito — foram removidos desta tela; os dados bancários do contratante passaram a ser preenchidos automaticamente pelo backend ao cadastrar o contratante no provedor.)Cadastro da Empresa (pré-requisito do provedor de integração) — para emitir/configurar o CIOT com o provedor de integração, o cadastro da empresa deve ter: (1) CPF do responsável preenchido (aba "Dados dos responsáveis") — usado como
documentNumberdo usuário no cadastro do contratante; (2) um e-mail com o processo MDF-e marcado (aba "Contato") — usado como contato. Ao salvar a Configuração de MDF-e com o provedor ativo, o sistema verifica em tempo real se a empresa já possui esses dados. Se estiverem completos, o salvamento é silencioso (apenas toast de sucesso). Se faltar algum dado, um modal de aviso é exibido orientando o preenchimento — o salvamento ocorre normalmente em ambos os casos. (Atualização 17/06/2026: verificação condicional viagetSelfNoImage(); o modal só aparece quando os dados estão de fato ausentes.)Cadastros › Clientes/Fornecedores — campo
cpfResponsavel(obrigatório para PJ contratada) erntrc.
4.4 Perfis e restrições
Perfis de acesso: todos os perfis de usuário.
Restrições de acesso: nenhuma.
5. Modelo de Dados
Entidade MongoDB:
Ciot(@Document("ciot")) — estendeAbstractAuditablePersistable<String>, multi-tenant porcontmaticId, com auditoria (createdBy/ipCreatedBy/dataCriacao/updatedBy/dataAtualizacao) e delete lógico (DeleteLogicEntity).
Resource REST:CiotResource.
5.1 Campos principais (CIOT)
Campo | Tipo | Obrigatoriedade | Regras / Validações |
|---|---|---|---|
| String | Gerado | Identificador MongoDB |
| String | Gerado (na emissão) | Exatamente 12 caracteres ( |
| Enum | Sistema | Vide seção 6 |
| Enum | Obrigatório |
|
| Enum | Obrigatório |
|
|
|