Configuração de Geofence e Cerca Virtual (Web App)
Pilar: 02 — Funcionalidades Core / Web App
Status: 🟢 Implementado
Última Revisão Técnica: 2026-08-03
Módulos Conectados:gatein-web(src/screens/admin/CompanyConfig),gatein-server(app/api/web/config.py,app/models.py),gatein-app(Serviço de Geofence em segundo plano)
1. Visão Geral e Conectividade com o App Mobile
O módulo de Configuração de Geofence (Cerca Virtual) permite que Administradores de Terminais definam o perímetro geográfico operacional do seu pátio de triagem e gates de entrada através de um editor visual de mapas no Web App.
Essa cerca virtual é sincronizada com o aplicativo mobile dos motoristas. Quando o veículo do motorista cruza o perímetro geográfico definido no Web App, o aplicativo React Native dispara automaticamente o prompt proativo de Check-in Antecipado.
1.1 Diagrama de Sequência e Validação Server-Side
sequenceDiagram
autonumber
actor A as Admin do Terminal (Web App)
participant W as Web App (Map Editor)
participant S as Gatein Server (FastAPI)
participant DB as PostgreSQL
actor M as Motorista (App Mobile)
A->>W: Desenha Geofence no mapa (Tipo: Circle / Radius: 500m)
W->>S: PUT /web/config/geofence (geofence JSON, use_remote_checkin: True)
S->>DB: Salva em company.geofence (JSONB)
S-->>W: HTTP 200 (Geofence atualizada)
M->>S: GET /mobile/activities (ou login)
S->>DB: Fetch geofence do Terminal
S-->>M: Retorna objeto geofence no payload
M->>M: Registra cerca no sistema nativo de Geofencing do celular
note over M, S: Motorista aproxima-se do pátio e cruza a cerca virtual
M->>S: POST /mobile/checkin/{terminal_id} (envia lat/lng do GPS)
S->>S: Validação de Segurança: calcula distância Haversine ou Ray-Casting
alt Coordenada fora do perímetro salvo
S-->>M: HTTP 400 ("Posição GPS fora da Geofence do Terminal")
else Coordenada Válida dentro do perímetro
S->>S: Continua o processamento do Check-in
end
2. Estrutura dos Dados e Schemas Explícitos
2.1 Modelo de Dados no Banco (company.geofence JSONB)
A configuração da cerca é gravada na coluna geofence (JSONB) da tabela companies / terminals:
Formato Círculo (circle):
{
"type": "circle",
"center": {
"lat": -23.55052,
"lng": -46.633308
},
"radius": 500
}
Formato Polígono (polygon):
{
"type": "polygon",
"coordinates": [
{ "lat": -23.5501, "lng": -46.6331 },
{ "lat": -23.5509, "lng": -46.6331 },
{ "lat": -23.5509, "lng": -46.6339 },
{ "lat": -23.5501, "lng": -46.6339 }
]
}
2.2 Schema de Requisição do Web App (GeofenceUpdateRequest)
{
"use_remote_checkin": true,
"geofence": {
"type": "circle",
"center": { "lat": -23.55052, "lng": -46.633308 },
"radius": 500
},
"address": {
"street": "Avenida Cais do Porto",
"number": "1000",
"city": "Santos",
"state": "SP",
"lat": -23.55052,
"lng": -46.633308
}
}
3. Regras de Negócio Explícitas (RN-GEO-XXX)
RN-GEO-001: Validação de Autoridade Server-Side (Client Não é Fonte de Verdade)
Embora o aplicativo mobile detecte a entrada na cerca via GPS do dispositivo, a validação definitiva é efetuada obrigatoriamente no servidor FastAPI durante o processamento do check-in:
- Para cercas do tipo
circle: O servidor calcula a distância Haversine entre(lat, lng)do motorista ecenter. Sedistancia > radius, a requisição é bloqueada. - Para cercas do tipo
polygon: O servidor executa o algoritmo de Ray-Casting (Point-in-Polygon). Se o ponto estiver fora, bloqueia com HTTP 400 (OUT_OF_GEOFENCE_BOUNDS).
RN-GEO-002: Limites Mínimo e Máximo de Raio
Para evitar falsos disparos ou cercas gigantescas desproporcionais:
- Raio mínimo aceito para tipo
circle: 50 metros. - Raio máximo aceito para tipo
circle: 5.000 metros (5 km). Submissões fora deste intervalo retornam erro de validação de schema.
RN-GEO-003: Mínimo de 3 Pontos para Polígonos
Geofences do tipo polygon devem conter um array coordinates com no mínimo 3 vértices válidos formando uma área fechada. Polígonos com 1 ou 2 pontos são rejeitados com HTTP 400 (INVALID_POLYGON_STRUCTURE).
RN-GEO-004: Flag de Controle Remote Check-in (use_remote_checkin)
Se o terminal alterar a flag use_remote_checkin para False, o aplicativo mobile desabilita o disparo de check-in antecipado por geofence. O motorista só poderá realizar o check-in presencialmente no totem/gate.
4. Detalhamento de Endpoints
4.1 GET /web/config/geofence
Retorna a geofence configurada, endereço estruturado e status de check-in remoto do terminal.
4.2 PUT /web/config/geofence
Atualiza a geometria da geofence, coordenadas centrais e parâmetros de check-in remoto.
5. Regras de Segurança e Tabela de Erros
| Código HTTP | Código Interno | Causa Raiz | Ação no Web App |
|---|---|---|---|
400 Bad Request | OUT_OF_GEOFENCE_BOUNDS | Coordenada do motorista fora do perímetro salvo | Exibir aviso no mapa sobre o raio de cobertura |
400 Bad Request | INVALID_RADIUS_LIMITS | Raio menor que 50m ou maior que 5000m | Ajustar o slider de raio no editor de mapa |
400 Bad Request | INVALID_POLYGON_STRUCTURE | Polígono desenhado possui menos de 3 vértices | Orientar o usuário a fechar a figura geométrica |