Pular para o conteúdo principal

Mapeamento de Banco de Dados — drivers e users

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/auth.py, app/api/public/trips.py)


1. Visão Geral da Relação Motorista vs. Conta de Usuário Mobile

O sistema separa a entidade operacional do motorista de carga (Driver) da conta física de acesso ao aplicativo (User):

  • Driver: Criado automaticamente via integração API ERP ou cadastro de Terminal/Transportador. Contém dados de CNH e validação de frota.
  • User: Criado pelo motorista no aplicativo mobile durante o onboarding. Armazena o hash de senha, o identificador de dispositivo confiável (validated_device) e relaciona-se 1:N com a tabela user_fcm_tokens.

2. Atributos Físicos da Tabela drivers

ColunaTipo SQLConstraintsDescrição / Regra
idBigIntegerPRIMARY KEY, autoincrement=TrueIdentificador físico único do motorista
tax_idVARCHAR(14)NOT NULL, UNIQUE, INDEXCPF do motorista (apenas números). Chave primária de vínculo
driver_license_numberVARCHAR(20)NULLABLENúmero da Carteira Nacional de Habilitação (CNH)
driver_license_categoryVARCHAR(10)NULLABLECategoria da CNH (ex: "E", "D")
driver_license_expirationDATENULLABLEData de validade da CNH
validated_byBigIntegerFOREIGN KEY (companies.id), NULLABLEEmpresa que realizou o primeiro cadastro/validação do motorista
is_activeBOOLEANNOT NULL, Default true, INDEXFlag de desativação lógica
created_atTIMESTAMPTZNOT NULL, Default now()Timestamp de cadastro
updated_atTIMESTAMPTZNOT NULL, Default now()Timestamp de alteração

3. Atributos Físicos da Tabela users (Mobile Accounts)

ColunaTipo SQLConstraintsDescrição / Regra
idBigIntegerPRIMARY KEY, autoincrement=TrueID do usuário mobile
tax_idVARCHAR(14)NOT NULL, UNIQUECPF do usuário (coincide com drivers.tax_id)
nameVARCHAR(100)NULLABLENome completo do motorista
phoneVARCHAR(20)NULLABLETelefone celular cadastrado com DDI
emailVARCHAR(100)NULLABLE, UNIQUEE-mail opcional do motorista
password_hashVARCHAR(255)NULLABLEHash bcrypt da senha de 6+ caracteres
validated_deviceVARCHAR(100)NULLABLEIdentificador único (fingerprint) do celular confiável
driver_idBigIntegerFOREIGN KEY (drivers.id), NULLABLERelacionamento físico com o perfil operacional Driver
is_activeBOOLEANNOT NULL, Default trueFlag de ativação

4. Tabela de FCM Tokens Multi-Dispositivo (user_fcm_tokens)

Permite que um mesmo motorista receba notificações Push em múltiplos aparelhos caso autenticado simultaneamente:

ColunaTipo SQLConstraintsDescrição
idBigIntegerPRIMARY KEY, autoincrement=TrueID do registro de token
user_idBigIntegerFOREIGN KEY (users.id, CASCADE), NOT NULLID do usuário mobile proprietário
fcm_tokenVARCHAR(255)NOT NULL, UNIQUE, INDEXToken alfanumérico emitido pelo Google Firebase FCM
device_osVARCHAR(10)NULLABLE'android' ou 'ios'
last_updatedTIMESTAMPTZDefault now()Data da última atualização/ping do token

5. Regras de Negócio de Motoristas (RN-DRV-XXX)

RN-DRV-001: CPF Único Global

Não podem existir dois registros em drivers ou users com o mesmo tax_id. O CPF é a chave primária de identidade do motorista no ecossistema Gatein.

RN-DRV-002: Auto-Upsert de Motorista por API Pública

Ao criar agendamentos (POST /public/appointments) ou viagens (POST /public/trips), se o CPF do motorista não for localizado na tabela drivers, o servidor insere automaticamente o motorista com validated_by = company.id, eliminando a necessidade de pré-cadastro manual.