# Processo de Emissao de CIOT

## Objetivo

Este documento registra o fluxo atual de emissao de CIOT no sistema.

O processo foi centralizado em `gt_operacao`. O modulo `gt_doctotransporte` nao emite mais CIOT.

## Regra atual

- o CIOT pertence a `gt_operacao`;
- a emissao acontece na aba `Acerto > CIOT` da operacao;
- todos os CT-es ativos vinculados a operacao sao associados automaticamente ao CIOT;
- nao existe mais selecao de um CT-e especifico para emitir o CIOT;
- os valores usados no payload saem da aba `Acerto` da operacao;
- a integradora usada na emissao vem da configuracao da filial da operacao.

## Onde emitir

Na rotina `gt_operacao`:

1. salvar a operacao;
2. garantir que exista ao menos um CT-e vinculado;
3. acessar a aba `Acerto`;
4. acessar a subaba `CIOT`;
5. clicar em `Emitir CIOT`.

Pelo menu superior da operacao:

1. abrir a operacao;
2. usar `Acoes > Gerar CIOT`;
3. o sistema abre a aba `Acerto > CIOT`.

## O que o sistema usa para emitir

### 1. Filial da operacao

Deve ter:

- CNPJ valido;
- RNTRC;
- integradora de CIOT configurada.

### 2. Operacao

Deve ter:

- filial informada;
- veiculo principal informado;
- motorista informado;
- remetente informado;
- destinatario informado;
- ao menos um CT-e vinculado;
- ao menos uma NF-e vinculada.

### 3. Veiculo principal

Deve ter:

- proprietario vinculado;
- RNTRC/ANTT;
- Renavam;
- chassi.

### 4. Proprietario do veiculo

Deve ter:

- CPF ou CNPJ;
- endereco;
- CEP.

### 5. Motorista

Deve ter:

- CPF valido;
- CNH;
- nome da mae;
- data de nascimento.

### 6. NFs e NCM

O sistema exige:

- ao menos uma NF-e vinculada a operacao;
- NCM no produto predominante da operacao ou em item de NF-e vinculada.

### 7. Valores do Acerto

O CIOT usa os dados calculados na aba `Acerto`, principalmente:

- valor a pagar;
- valor premiacao;
- base de impostos;
- adiantamento;
- INSS;
- SEST;
- SENAT;
- IRRF;
- total de impostos;
- saldo a pagar.

Sem valores validos no `Acerto`, a emissao e bloqueada.

## Integracao por filial

A configuracao fica no cadastro da filial, em tela filha de integradoras de CIOT.

Cada filial pode ter:

- nenhuma integradora ativa;
- uma integradora ativa;
- varias integradoras ativas.

Na emissao:

1. se nao houver integradora ativa, o sistema bloqueia;
2. se houver uma, usa automaticamente;
3. se houver mais de uma, pergunta qual deve ser usada.

## O que o sistema grava

O processo atual grava:

- registro do CIOT por operacao;
- historico de eventos da integracao;
- vinculo entre o CIOT da operacao e todos os CT-es da operacao;
- payload enviado;
- retorno tecnico recebido;
- integradora usada;
- codigo de identificacao da operacao;
- documento de viagem;
- status de emissao, retificacao ou cancelamento.

## Comportamento do processo

### Quando nao existe CIOT ativo

O sistema:

1. valida os dados;
2. sincroniza proprietario, motorista e veiculo na integradora;
3. monta o payload usando a operacao;
4. emite o CIOT;
5. grava o retorno local.

### Quando ja existe CIOT ativo

O sistema tenta retificar o CIOT existente, mantendo a mesma integradora da emissao original.

### Depois da emissao

Na aba `Acerto > CIOT` o usuario pode:

- consultar retorno;
- cancelar CIOT;
- baixar PDF do CIOT.

## Tabelas principais

- `gt_operacao`
- `gt_operacao_nf`
- `gt_operacao_docto`
- `gt_operacao_ciot`
- `gt_operacao_ciot_evento`
- `gt_operacao_ciot_docto`
- `gt_notafiscal`
- `gt_notafiscal_itens`
- `sis_filial`
- `sis_filial_ciot_integrador`
- `dim_participante`
- `dim_motorista`
- `dim_veiculostelemetria`

## Arquivos principais

- `include/services/ciot_filial_integrador_service.php`
- `include/services/efrete_pef_service.php`
- `include/services/ciot_operacao_service.php`
- `gt_operacao/emitir_ciot.php`
- `gt_operacao/listar_integradores_ciot.php`
- `gt_operacao/cancelar_ciot.php`
- `gt_operacao/consultar_ultimo_retorno_ciot.php`
- `gt_operacao/baixar_ciot_pdf.php`
- `gt_operacao/cad.php`
- `include/cad.php`
- `sis_filial/cad.php`
- `sis_filial/ciot_integrador_salvar.php`
- `sis_filial/ciot_integrador_deletar.php`

## Observacao sobre o gt_doctotransporte

O `gt_doctotransporte` continua participando do processo apenas como documento vinculado a operacao.

Ele nao possui mais:

- emissao de CIOT;
- cancelamento de CIOT;
- consulta de retorno de CIOT;
- PDF de CIOT;
- selecao de integradora para CIOT.

O ponto correto de uso e exclusivamente `gt_operacao`.
