Eventos e Ciclo de Vida de Check-in
Pilar: 04 — Banco de Dados e Eventos / Eventos
Status: 🟢 Implementado
Última Revisão Técnica: 2026-08-03
Módulos Conectados:gatein-server(app/api/mobile/checkin.py,app/api/web/checkin.py,app/api/sockets/handlers/checkin.py)
1. Visão Geral dos Eventos de Check-in
O ciclo de vida de um check-in no Gatein envolve a coordenação de eventos assíncronos entre a API REST, o servidor Socket.IO (namespace /checkin), o hardware físico do terminal, o banco de dados PostgreSQL e o serviço de notificações Push (Google FCM).
2. Eventos de Domínio do Módulo de Check-in
2.1 Evento: checkin.requested (Solicitação de Check-in)
- Origem: Chamada
POST /mobile/checkin/{terminal_id}pelo aplicativo mobile. - Ação: Valida a presença do terminal no dicionário WebSocket
active_terminals. Inicia o handshake em backgroundrun_async_checkin(). - Notificação: Se o terminal estiver offline (não conectado ao Socket.IO), retorna erro síncrono HTTP 503.
2.2 Evento: checkin.handshake_failed (Falha / Timeout)
- Origem: Servidor Socket.IO atinge timeout de 15 segundos no evento
request_checkinou o hardware do terminal reporta exceção. - Ação: Transação de check-in cancelada.
- Notificação: Dispara Push FCM para o motorista:
- Título:
"Tempo Limite Excedido"ou"Falha no Check-in" - Payload
data:{"type": "CHECKIN_FAILED"}
- Título:
2.3 Evento: checkin.approved (Check-in Aprovado)
- Origem: Resposta positiva do hardware no handshake Socket.IO ou aprovação manual pelo operador no Web App.
- Efeitos colaterais:
- Transiciona
Appointment.statusdeACTIVEparaCHECKED-IN. - Insere um registro na tabela
ticketscontendo o snapshot dos dados de liberação emcontent. - Registra auditoria em
appointments_logscomevent = 'ticket_created'.
- Transiciona
- Notificação: Dispara Push FCM com
type: "CHECKED-IN"ou"CHECKIN_APPROVED"contendo os IDs Sqids do agendamento e do ticket.
2.4 Evento: checkin.cancelled (Cancelamento de Check-in)
- Origem: Chamada
POST /mobile/checkin/cancel/{appointment_id}ou ação do operador no Web App. - Efeitos colaterais:
- Reverte o status do agendamento de
CHECKED-IN/ON_GOINGde volta paraACTIVE. - Registra auditoria em
appointments_logscomevent = 'checkin_cancelled'e o motivo.
- Reverte o status do agendamento de
- Notificação: Dispara Push FCM informando o motorista com
type: "CHECKIN_CANCELLED".
3. Matriz de Eventos de Log (AppointmentEvent)
Evento de Log (AppointmentEvent) | Origem da Invocação | Conteúdo do Campo json |
|---|---|---|
NOTIFICATION_SENT | Jobs do APScheduler / Handlers | {"push_type": "REMINDER_1DAY"} / {"push_type": "CHECKED-IN"} |
CHECKIN_CANCELLED | Endpoint /mobile/checkin/cancel | {"reason": "Motivo do cancelamento"} |
TICKET_CREATED | Sucesso no handshake do check-in | {"ticket_id": "sqid", "layout_ref": "v1_ticket_gate"} |
VIEWED | Mobile App via log-events | {"source_screen": "CheckinProcessingScreen"} |