Skip to content

Cadastro de Entregadores

Visão Geral

O módulo drivers (W14) introduz um schema independente de usuário para entregadores próprios da operação. Um entregador autentica-se com shortCode + PIN e obtém um JWT de curta duração (role: 'driver') para usar a PWA de entrega.


Schema: Driver

backend/src/drivers/schemas/driver.schema.ts

CampoTipoDescrição
tenantObjectIdTenant pai
shortCodestringCódigo curto de login (ex: DRV01) — único por tenant
pinHashstringPIN hasheado (bcrypt)
namestringNome do entregador
phonestring?Telefone
emailstring?E-mail
vehicle.typeenummotorcycle | bicycle | car | van | on_foot
vehicle.platestring?Placa do veículo
vehicle.modelstring?Modelo
vehicle.colorstring?Cor
documents.cpfstring?CPF
documents.cnhstring?Habilitação
documents.cnhExpiryDate?Validade da CNH
statusenumavailable | on_route | offline (default offline)
assignedBranchIdsObjectId[]Filiais autorizadas para auto-atribuição
lastKnownLocation.lngnumber?Longitude mais recente
lastKnownLocation.latnumber?Latitude mais recente
lastKnownLocation.updatedAtDate?Timestamp da posição
activebooleanCadastro ativo (default true)

Índices:

  • { shortCode: 1, tenant: 1 } — unique
  • { tenant: 1, status: 1 } — lookup rápido de disponíveis
  • { 'lastKnownLocation.lat': 1, 'lastKnownLocation.lng': 1 } — geo queries

API Routes

Admin (requer orders.manage.status)

Prefixo: POST /t/:slug/admin/drivers

MétodoRotaDescrição
GET/Listar todos os entregadores do tenant
GET/available?branchId=Entregadores disponíveis (opcionalmente por filial)
GET/:idDetalhe do entregador
POST/Criar entregador
PUT/:idAtualizar
DELETE/:idDesativar (soft delete)
POST/:id/assign/:orderIdAtribuição manual de entregador a um pedido
POST/auto-assign/:orderId?strategy=nearestAuto-atribuição (nearest | round-robin)

PWA do Entregador

Prefixo: /t/:slug/driver

MétodoRotaAuthDescrição
POST/loginPúblicoshortCode + PIN → JWT 24h (role:driver)
GET/orders/pendingDriver JWTPedidos pendentes para este entregador
PATCH/locationDriver JWTAtualizar posição GPS
PATCH/statusDriver JWTAtualizar status (available/on_route/offline)

Rate limit: /login → 10 req/60s (Throttle).


Autenticação do Entregador

O entregador faz login com:

json
POST /t/:slug/driver/login
{ "shortCode": "DRV01", "pin": "1234" }

Resposta:

json
{
  "access_token": "<jwt 24h>",
  "driver": { "name": "...", "status": "available", ... }
}

O payload do JWT inclui { sub: driverId, role: "driver", tenantId }. Endpoints /t/:slug/driver/* validam com JwtAuthGuard + TenantGuard.


Serviço de Atribuição

backend/src/drivers/driver-assignment.service.ts

MétodoParâmetrosComportamento
manualAssign(tenantId, orderId, driverId)Valida status do driver; lança se on_route sem pedidos pendentes
autoAssign(tenantId, orderId, strategy)nearest | round-robinnearest — seleciona driver disponível com menor distância haversine até a filial do pedido; round-robin — distribui em fila circular

Após atribuição, o pedido recebe assignedDriverId e o status do driver muda para on_route.


Prova de Entrega (POD)

Ao entregar o pedido, a PWA chama PATCH /orders/:id/status com status delivered. O backend registra deliveredAt e reverte o driver.status para available.


Permissões

PermissãoO que protege
orders.view.allGET admin drivers
orders.manage.statusPOST/PUT/DELETE + assign

Relacionados

Lançado sob a licença MIT.