Pular para o conteúdo principal

Mapeamento de Banco de Dados — appointments

Pilar: 04 — Banco de Dados / Tabelas
Status: 🟢 Implementado
Última Revisão Técnica: 2026-08-03
Módulos Conectados: gatein-server (app/models.py, app/api/mobile/activities.py, app/api/web/appointments.py)


1. Visão Geral da Modelagem de Agendamentos (appointments)

A tabela appointments gerencia a entidade operacional de Agendamento de Carga ou Descarga em um Terminal (terminal_id). É o modelo mais consumido no aplicativo mobile e no painel operacional de pátio.


2. Atributos Físicos da Tabela appointments

ColunaTipo SQLConstraintsDescrição / Regra de Negócio
idBigIntegerPRIMARY KEY, autoincrement=TrueID interno do agendamento
terminal_idBigIntegerFOREIGN KEY (terminals.id), NOT NULL, INDEXTerminal onde ocorrerá o atendimento
refVARCHAR(100)NULLABLE, INDEXCódigo de referência externo (ex: ORD-2026-9948)
layout_refVARCHAR(50)NULLABLEIdentificador do layout JSON de exibição do card
user_tax_idVARCHAR(14)NULLABLE, INDEXCPF do motorista escalado
statusVARCHAR(20)NOT NULL, Default 'ACTIVE', INDEXEstado atual (PLANNED, ACTIVE, CHECKED-IN, IN_PROGRESS, PAUSED, COMPLETED, CANCELLED, DELETED)
summaryVARCHAR(150)NULLABLEResumo descritivo da carga ou produto
license_plateVARCHAR(10)NULLABLE, INDEXPlaca do veículo cadastrado
window_startTIMESTAMPTZNULLABLEHorário previsto de início da janela de atendimento
window_endTIMESTAMPTZNULLABLEHorário previsto de término da janela de atendimento
start_toleranceINTEGERNOT NULL, Default 0Tolerância antecipada permitida em minutos
end_toleranceINTEGERNOT NULL, Default 0Tolerância de atraso permitida em minutos
custom_dataJSONBNULLABLEDados dinâmicos adicionais utilizados no preenchimento de campos de layout
last_ping_atTIMESTAMPTZNULLABLEData do último ping/presença do motorista
deactivated_atTIMESTAMPTZNULLABLEData em que o agendamento foi desativado/concluído
is_activeBOOLEANNOT NULL, Default true, INDEXFlag de desativação lógica
created_atTIMESTAMPTZNOT NULL, Default now()Timestamp de criação
updated_atTIMESTAMPTZNOT NULL, Default now()Timestamp de atualização

3. Constraints e Índices de Performance

  • unique_appointment_ref_per_company: UniqueConstraint('terminal_id', 'ref') garantindo que o Terminal não crie dois agendamentos com a mesma referência de Ordem de Carga.
  • idx_appointment_terminal_ref: Índice composto (terminal_id, ref) para acelerar a busca via API pública.
  • idx_appointments_user_tax_id_status: Índice composto otimizado para a busca por motorista na rota GET /mobile/activities.

4. Tabela de Logs e Auditoria (appointments_logs)

Todas as mutações de agendamento (criação, edição, check-in, envio de push, alteração de status) gravam registros na tabela appointments_logs:

ColunaTipo SQLConstraintsDescrição
idBigIntegerPRIMARY KEY, autoincrement=TrueID do log
company_idBigIntegerFOREIGN KEY (companies.id), NOT NULLID da empresa Terminal
appointment_idBigIntegerFOREIGN KEY (appointments.id), NOT NULLID do agendamento afetado
eventEnum (AppointmentEvent)NOT NULLEvento (created, updated, checkin_cancelled, notification_sent, viewed, clicked)
messageTEXTNULLABLEDescrição legível da ação
jsonJSONBNULLABLESnapshot do payload ou metadados de auditoria
created_atTIMESTAMPTZNOT NULL, Default now()Timestamp do log

5. Regras de Negócio (RN-APT-DB-XXX)

RN-APT-DB-001: Invalidação de Check-in em Mudança de Status

Se o status de um agendamento for alterado para CANCELLED via API do Terminal, qualquer check-in em andamento na tabela checkins vinculado a esse appointment_id é automaticamente marcado como CANCELLED e cancelado no APScheduler.