Pausa de Viagens
A pausa de viagem permite que clientes parem temporariamente sua viagem enquanto mantem o veiculo reservado. Este recurso e essencial para pausas durante a viagem e tambem e usado pelo sistema para intervencoes automaticas quando certas condicoes sao detectadas.
Visao Geral
O recurso de pausa serve a dois propositos principais:
- Pausa iniciada pelo cliente - Permite que clientes facam pausas sem encerrar sua viagem
- Pausa iniciada pelo sistema - Pausa automaticamente viagens quando condicoes justificam intervencao
Entender os diferentes tipos de pausas e seus comportamentos e crucial para operadores, pois tem diferentes implicacoes de seguranca e padroes de comando de veiculo.
Conceitos Principais
| Conceito | Descricao |
|---|---|
| Pausa manual | Iniciada pelo cliente atraves do app |
| Auto-pausa | Iniciada pelo sistema baseada em condicoes da viagem |
| Cobranca de taxa de pausa | Taxa reduzida durante periodos pausados |
| Imobilizacao do veiculo | Diferentes niveis baseados no motivo da pausa |
| Auto-retomada | Algumas pausas podem ser automaticamente limpas |
| Auto-encerramento | Pausas prolongadas podem acionar encerramento automatico da viagem |
Tipos de Pausas
Pausa Manual (Iniciada pelo Cliente)
Quando um cliente pausa sua viagem atraves do app:
| Aspecto | Comportamento |
|---|---|
| Gatilho | Cliente toca em "Pausar" no app |
| Bloqueio do Veiculo | Sim - veiculo e bloqueado |
| Acelerador | Desativado |
| Cobranca | Taxa de pausa se aplica |
| Retomada | Cliente toca em "Retomar" no app |
| Selo de Status | "Pausada (Bloqueada)" |
Usos Comuns:
- Paradas rapidas em lojas
- Pausas para cafe
- Esperando por amigos
- Viagens com multiplos destinos
Auto-Pausa: Movimento Ocioso
Quando o veiculo esta estacionario por um periodo prolongado:
| Aspecto | Comportamento |
|---|---|
| Gatilho | Nenhum movimento detectado por X minutos |
| Bloqueio do Veiculo | Sim - veiculo e bloqueado |
| Acelerador | Desativado |
| Cobranca | Taxa de pausa se aplica |
| Retomada | Cliente toca em "Retomar" no app |
| Selo de Status | "Pausada (Bloqueada)" |
| Codigo do Motivo | idle_movement |
Logica de Deteccao:
SE veiculo nao se moveu alem de stationary_radius_m
por duracao de stationary_minutes
E nenhum movimento recente detectado (velocidade < recent_motion_speed_kmh)
ENTAO acionar auto-pausa
Auto-Pausa: Sem Localizacao
Quando o veiculo para de reportar localizacao GPS:
| Aspecto | Comportamento |
|---|---|
| Gatilho | Nenhum dado GPS recebido por X minutos |
| Bloqueio do Veiculo | Sim - veiculo e bloqueado |
| Acelerador | Desativado |
| Cobranca | Taxa de pausa se aplica |
| Retomada | Automatica quando GPS restaurado, ou manual |
| Selo de Status | "Pausada (Bloqueada)" |
| Codigo do Motivo | no_location |
Causas Comuns:
- Estacionamento interno (GPS bloqueado)
- Zonas mortas de sinal
- Problemas com dispositivo IoT
- Problemas de bateria
Auto-Pausa: Fundos Insuficientes
Recurso Critico de Seguranca
Quando o saldo da carteira e insuficiente, o sistema usa uma abordagem diferente que prioriza a seguranca do piloto.
| Aspecto | Comportamento |
|---|---|
| Gatilho | Carteira cai abaixo do limite durante cobranca |
| Bloqueio do Veiculo | NAO - veiculo NAO e bloqueado |
| Acelerador | Desativado (energia do motor cortada) |
| Cobranca | Continua na taxa de pausa |
| Retomada | Automatica quando carteira recarregada |
| Selo de Status | "Pausada (Acelerador Desativado)" |
| Codigo do Motivo | insufficient_funds |
Por Que Nao Bloquear?
Esta e uma decisao critica de seguranca:
Ao pausar por fundos insuficientes, o piloto pode estar ativamente em movimento em velocidade. Bloquear as rodas enquanto em movimento poderia causar uma queda perigosa. Em vez disso, apenas desativamos o acelerador, o que permite que o piloto desacelere com seguranca ate parar antes do veiculo ficar inutilizavel.
A desativacao do acelerador:
- Corta energia para o motor
- Permite que rodas girem livremente (desaceleracao)
- Piloto pode deslizar ate um ponto de parada seguro
- Veiculo nao para abruptamente
Matriz de Seguranca
O sistema usa esta matriz de decisao para comportamentos de pausa:
| Motivo da Pausa | Bloquear Veiculo | Acelerador Desligado | Justificativa |
|---|---|---|---|
| Pausa manual | Sim | Sim | Veiculo estacionario, imobilizacao total segura |
| Movimento ocioso | Sim | Sim | Veiculo estacionario, imobilizacao total segura |
| Sem localizacao | Sim | Sim | Assumir estacionario (sem GPS = provavelmente interno) |
| Fundos insuficientes | Nao | Sim | Piloto pode estar em movimento - critico de seguranca |
Por Que Isso Importa
Cenario: Cliente esta pilotando a 25 km/h quando a carteira acaba.
Comportamento correto (apenas acelerador):
- Energia do motor corta
- Cliente desacelera ate parada natural
- Cliente desmonta com seguranca
- Cliente recarrega carteira ou encerra viagem
Comportamento incorreto (bloquear rodas):
- Rodas bloqueiam a 25 km/h
- Cliente cai
- Potencial lesao grave
- Grande responsabilidade
Upgrade de Pausa de Acelerador
Quando uma viagem esta com acelerador pausado (fundos insuficientes), o sistema monitora por uma oportunidade de fazer upgrade para bloqueio total.
Por Que Fazer Upgrade?
Pausa apenas de acelerador e uma medida de seguranca para veiculos em movimento. Uma vez que o veiculo fica estacionario, e seguro aplicar o bloqueio total para melhor seguranca.
Processo de Upgrade
O job cron de auto-pausa monitora viagens com acelerador pausado:
1. Verificar se viagem esta com acelerador pausado (auto_pause_reason = 'insufficient_funds')
2. Verificar se veiculo esta agora estacionario
3. Se estacionario por tempo suficiente:
a. Enviar comando LOCK para veiculo
b. Atualizar status da viagem para mostrar "Pausada (Bloqueada)"
c. Registrar o evento de upgrade
Criterios de Deteccao
Uma viagem com acelerador pausado e atualizada para bloqueio total quando:
- Veiculo nao se moveu alem do limite
stationary_radius_m - Nenhum movimento recente detectado (velocidade <
recent_motion_speed_kmh) - Veiculo esta respondendo a comandos
Seguranca + Protecao
Isso fornece tanto seguranca (sem queda de bloqueio subito) quanto protecao (veiculo bloqueado quando estacionado).
Cobranca de Pausa
Como Taxas de Pausa Funcionam
Durante periodos pausados, uma taxa reduzida se aplica:
Pilotagem Ativa: R$1,95 por minuto
Pausado: R$0,50 por minuto (exemplo)
Taxas de pausa sao configuradas nas regras de precos para cada modelo de veiculo.
Exemplo de Calculo de Cobranca
Viagem: 20 minutos total
- 15 minutos pilotando ativamente
- 5 minutos pausado
Taxa de Desbloqueio: R$5,00
Tempo Ativo: 15 x R$1,95 = R$29,25
Tempo de Pausa: 5 x R$0,50 = R$2,50
────────────────────────────────────────
Total: R$36,75
Cobranca Continua
Durante auto-pausa por fundos insuficientes:
- Cobranca continua na taxa de pausa
- Saldo da carteira pode ficar mais negativo
- Cliente recebe notificacao push
- Viagem continua ate carteira ser recarregada ou auto-encerrada
Configuracao de Auto-Pausa
Configure comportamento de auto-pausa em Configuracoes > Outros:
Configuracoes de Deteccao de Estacionario
{
"auto_pause_if_stationary": {
"enabled": true,
"stationary_minutes": 30,
"stationary_radius_m": 100,
"max_movement_within_radius_m": 0,
"recent_motion_window_seconds": 60,
"recent_motion_speed_kmh": 2
}
}
| Configuracao | Descricao | Padrao |
|---|---|---|
enabled | Habilitar/desabilitar auto-pausa por inatividade | false |
stationary_minutes | Minutos sem movimento antes de pausar | 30 |
stationary_radius_m | Limite de distancia para "estacionario" | 100 |
max_movement_within_radius_m | Movimento permitido dentro do raio | 0 |
recent_motion_window_seconds | Janela de tempo para deteccao de movimento | 60 |
recent_motion_speed_kmh | Limite de velocidade para "movendo" | 2 |
Configuracoes de Saldo Baixo
{
"payments": {
"stop_vehicle_on_low_balance": true,
"stop_vehicle_threshold_cents": 0
}
}
| Configuracao | Descricao | Padrao |
|---|---|---|
stop_vehicle_on_low_balance | Habilitar desligamento de acelerador em saldo baixo | false |
stop_vehicle_threshold_cents | Nivel de carteira acionando desligamento de acelerador | 0 |
Configurar limite em 0 significa que o veiculo para quando a carteira fica negativa.
Requisitos de Retomada
Verificacao de Saldo da Carteira na Retomada
Antes de permitir que uma viagem seja retomada, o sistema valida que o cliente tem fundos suficientes:
Saldo Necessario = per_minute_rate_cents x 1 minuto
Se o saldo da carteira estiver abaixo deste minimo:
- Retomada e bloqueada
- Cliente recebe erro com saldo necessario vs. atual
- Cliente deve recarregar carteira primeiro
- Recarga automatica pode acionar se habilitada
Exemplo:
Taxa por minuto: R$1,95
Minimo necessario: R$1,95
Carteira do cliente: R$1,25
Resultado: Retomada bloqueada - "Fundos insuficientes"
Necessario: R$1,95 | Atual: R$1,25
Auto-Encerramento Apos Pausa
Viagens podem ser automaticamente encerradas se pausadas por muito tempo:
Configuracao
{
"auto_end_if_not_moving": {
"enabled": true,
"not_moving_radius_m": 75,
"end_after_pause_minutes": 30
}
}
| Configuracao | Descricao | Padrao |
|---|---|---|
enabled | Habilitar/desabilitar auto-encerramento | false |
not_moving_radius_m | Raio para considerar "nao movendo" | 75 |
end_after_pause_minutes | Minutos de pausa antes de encerrar | 30 |
Comportamento de Auto-Encerramento
Quando condicoes sao atendidas:
- Sistema verifica se veiculo esta em zona de estacionamento valida
- Se valido, viagem e automaticamente encerrada
- Tarifa final e calculada e cobrada
- Cliente recebe notificacao push
- Veiculo fica disponivel para proximo aluguel
Se nao em zona valida:
- Viagem permanece pausada
- Sistema continua monitorando
- Intervencao manual pode ser necessaria
Endpoints da API
Pausar Viagem (Mobile)
POST /api/mobile/rides/{ride_id}/pause/
Autenticacao: JWT do cliente obrigatorio
Corpo da Requisicao:
{
"pause_location": {
"latitude": 37.7749,
"longitude": -122.4194
}
}
Resposta (200 OK):
{
"ok": true,
"ride_status": "paused",
"paused_at": "2024-01-15T14:30:00Z",
"lock": {
"attempted": true,
"success": true,
"protocol": "OKAI"
}
}
Retomar Viagem (Mobile)
POST /api/mobile/rides/{ride_id}/resume/
Autenticacao: JWT do cliente obrigatorio
Resposta (200 OK):
{
"ok": true,
"ride_status": "active",
"resumed_at": "2024-01-15T14:45:00Z",
"unlock": {
"attempted": true,
"success": true,
"protocol": "OKAI"
}
}
Resposta de Erro (Fundos Insuficientes):
{
"error": "Fundos insuficientes",
"required": 1.95,
"balance": 1.25
}
Pausa/Retomada Admin
Administradores tambem podem pausar e retomar viagens:
POST /api/rides/{ride_id}/pause/
POST /api/rides/{ride_id}/resume/
Autenticacao: Sessao admin obrigatoria
Permissao: ride:update
Integracao de Webhook
O sistema envia webhooks para APIs de parceiros quando pausas e retomadas ocorrem.
Webhook de Pausa
Quando uma viagem e pausada, o sistema enfileira um webhook ride.paused:
{
"event": "ride.paused",
"data": {
"ride_id": "uuid-12345",
"customer_id": "uuid-customer",
"vehicle_id": "uuid-vehicle",
"paused_at": "2024-01-15T14:30:00Z",
"pause_reason": "manual",
"subaccount_id": "uuid-subaccount"
}
}
| Campo | Descricao |
|---|---|
ride_id | UUID da viagem pausada |
customer_id | Cliente dono da viagem |
vehicle_id | Veiculo sendo pausado |
paused_at | Timestamp ISO da pausa |
pause_reason | manual, idle_movement, no_location ou insufficient_funds |
subaccount_id | Subconta para filtragem multi-tenant |
Webhook de Retomada
Quando uma viagem e retomada, o sistema enfileira um webhook ride.resumed:
{
"event": "ride.resumed",
"data": {
"ride_id": "uuid-12345",
"customer_id": "uuid-customer",
"vehicle_id": "uuid-vehicle",
"resumed_at": "2024-01-15T14:45:00Z",
"pause_duration_seconds": 900,
"subaccount_id": "uuid-subaccount"
}
}
| Campo | Descricao |
|---|---|
pause_duration_seconds | Por quanto tempo a viagem ficou pausada |
Comandos de Veiculo
Sequencia de Bloqueio (Pausa Padrao)
Quando uma viagem e pausada normalmente:
1. Enviar comando LOCK para veiculo
2. Aguardar confirmacao (ate 10 segundos)
3. Enviar comando THROTTLE_OFF
4. Aguardar confirmacao
5. Atualizar status da viagem para 'paused'
6. Enfileirar notificacao de webhook
Sequencia Apenas Acelerador (Saldo Baixo)
Ao pausar por fundos insuficientes:
1. Enviar APENAS comando THROTTLE_OFF
2. Aguardar confirmacao
3. Atualizar status da viagem para 'paused'
4. NAO enviar comando LOCK (seguranca)
5. Enfileirar notificacao de webhook
Sequencia de Retomada
Ao retomar uma viagem pausada:
1. Validar saldo da carteira (deve cobrir pelo menos 1 minuto de pilotagem)
2. Enviar comando UNLOCK para veiculo
3. Aguardar confirmacao
4. Enviar comando THROTTLE_ON
5. Aguardar confirmacao
6. Atualizar status da viagem para 'active'
7. Limpar campos de pausa (auto_paused_at, auto_pause_reason)
8. Enfileirar notificacao de webhook para API de parceiro
Falhas de Comando
Se comandos de veiculo falharem:
| Comando | Impacto da Falha | Mitigacao |
|---|---|---|
| LOCK falha | Veiculo pode permanecer desbloqueado | Registrado, acompanhamento manual |
| THROTTLE_OFF falha | Motor pode permanecer ligado | Retry automatico |
| UNLOCK falha | Cliente nao consegue retomar | Painel mostra aviso |
| THROTTLE_ON falha | Cliente nao consegue pilotar | Retry, depois ticket de suporte |
Experiencia do Cliente
Notificacoes de Pausa
Quando uma viagem e pausada, o cliente recebe:
Pausa Manual:
Viagem Pausada
Sua viagem esta pausada. A cobranca continua na taxa de pausa reduzida.
Toque em Retomar quando estiver pronto para continuar.
Auto-Pausa (Inatividade):
Viagem Auto-Pausada
Sua viagem foi pausada devido a inatividade. O veiculo esta bloqueado.
Toque em Retomar para continuar sua viagem.
Auto-Pausa (Saldo Baixo):
Saldo Baixo - Veiculo Parado
Seu saldo da carteira esta muito baixo. O motor foi desativado.
Recarregue sua carteira para continuar pilotando.
[Recarregar Agora]
Fluxo de Retomada
- Cliente abre o app
- Ve status "Pausada"
- Toca no botao "Retomar"
- App envia requisicao de retomada
- Veiculo desbloqueia e ativa acelerador
- Cobranca volta para taxa ativa
- Cliente continua pilotando
Gerenciamento no Painel
Visualizando Viagens Pausadas
Na pagina de lista de Viagens:
- Filtre por status "Pausada"
- Selo de status mostra tipo de pausa
- Coluna de duracao mostra tempo total incluindo pausa
Acoes Admin
Da pagina de Detalhes da Viagem:
Botao Retomar:
- Visivel quando viagem esta pausada
- Envia comandos unlock + throttle-on
- Atualiza viagem para status ativo
Botao Encerrar Viagem:
- Disponivel para viagens ativas e pausadas
- Encerra viagem na localizacao atual
- Calcula tarifa final
Solucao de Problemas
Veiculo Nao Bloqueia na Pausa
Possiveis Causas:
- Dispositivo IoT offline
- Sinal celular fraco
- Timeout de comando
- Problema de firmware do dispositivo
Resolucao:
- Verifique hora do ultimo sinal do veiculo
- Tente novamente o comando de pausa
- Use painel para enviar bloqueio manual
- Despache equipe de campo se necessario
Veiculo Nao Desbloqueia na Retomada
Possiveis Causas:
- Dispositivo IoT offline
- Comando nao chegou ao veiculo
- Mecanismo de bloqueio fisico travado
Resolucao:
- Tente novamente o comando de retomada
- Verifique status do dispositivo IoT
- Encerre a viagem se incapaz de retomar
- Emita reembolso se justificado
- Marque veiculo para manutencao
Cliente Travado em Estado Pausado
Se cliente nao consegue retomar:
- Verifique status da viagem no painel
- Tente acao de retomada admin
- Encerre a viagem se necessario
- Emita reembolso apropriado
- Investigue problema do veiculo/IoT
Auto-Pausa Acionando Muito Frequentemente
Ajuste configuracoes:
- Aumente
stationary_minutes - Aumente
stationary_radius_m - Ajuste limites de deteccao de movimento
- Considere desabilitar para locais especificos
Melhores Praticas
Para Operadores
- Monitore viagens pausadas - Verifique diariamente por pausas prolongadas
- Revise logs de auto-pausa - Procure padroes indicando problemas
- Configure limites cuidadosamente - Balance conveniencia vs. abuso
- Treine equipe de suporte - Saiba como lidar com problemas relacionados a pausa
Para Configuracao
- Comece conservador - Inicie com auto-pausa desabilitada
- Teste completamente - Verifique que comandos de veiculo funcionam antes de habilitar
- Considere seu mercado - Areas urbanas podem precisar de configuracoes diferentes
- Comunique aos clientes - Explique politicas de pausa no app
Para Seguranca
- Nunca bloqueie veiculos em movimento - Sempre use apenas acelerador para saldo baixo
- Teste confiabilidade de comandos - Garanta que veiculos respondem consistentemente
- Tenha overrides manuais - Painel deve sempre permitir intervencao
- Documente incidentes - Rastreie quaisquer problemas relacionados a seguranca