# Kreative TMS - Arquitetura Inicial

## Dominios

- `tms.kreativesistemas.com.br`: TMS operacional, cadastros, entregas, coletas, financeiro e integracoes.
- `torre.kreativesistemas.com.br`: torre de controle, mapa, SLA, alertas e roteirizacao.
- `api.kreativesistemas.com.br`: API para app, integracoes externas e webhooks.

## Banco inicial

Banco criado:

- `tms_kreative`

Este banco e a base central do SaaS. Ele controla tenants, usuarios, modulos, configuracoes e identidade.

## Modelo multi-tenant

O login tera o campo `dominio`. O dominio identifica o cliente/tenant e habilita os modulos contratados.

Exemplo:

- Dominio: `fassilog`
- Banco tenant: `tms_fassilog`
- Banco legado opcional: `ksoftlogcom_fassilog`

Cada cliente/tenant deve ter seu proprio banco operacional. O banco central `tms_kreative` nao deve armazenar documentos operacionais de todos os clientes misturados.

## Modulos

- `tms_operacional`
- `torre_controle`
- `roteirizacao`
- `financeiro`
- `integracoes`
- `app_motorista`
- `api_externa`

A roteirizacao pertence visualmente a area da torre de controle.

## Estrutura principal

- `tenants`: clientes/domínios do SaaS.
- `modules`: modulos disponiveis na plataforma.
- `tenant_modules`: modulos habilitados para cada tenant.
- `clientes`: clientes finais/embarcadores/destinatarios.
- `motoristas`: motoristas proprios ou terceiros.
- `veiculos`: frota propria/terceiros.
- `romaneios`: agrupadores de entregas/coletas.
- `entregas`: notas/CTes/tarefas de entrega.
- `coletas`: tarefas de coleta.
- `ocorrencias`: eventos operacionais.
- `comprovantes`: fotos, canhotos, assinaturas e documentos.
- `localizacoes`: rastros e posicoes.
- `rotas`: rotas planejadas.
- `rota_paradas`: paradas da rota.
- `integracoes`: configuracoes por integracao.
- `integracao_logs`: logs de envio/retorno/falha.
- `fechamentos`: fechamentos financeiros/operacionais.
- `fechamento_itens`: itens do fechamento.

## Padrao de nomes

Usar `snake_case` em tabelas e campos.

Exemplos de migracao do legado:

- `Cod` -> `id` ou `legacy_cod`
- `CNPJCliente` -> `cnpj_cliente`
- `DataEmissao` -> `data_emissao`
- `NotaFiscal` -> `nota_fiscal`
- `NRomaneio` -> `numero_romaneio`
- `CodMotorista` -> `motorista_id`
- `NomeCliente` -> `nome_cliente`

## Campo legado

Tabelas operacionais podem manter campos:

- `legacy_origem`
- `legacy_tabela`
- `legacy_cod`

Assim conseguimos rastrear a origem sem prender o novo sistema ao padrao antigo.
