Safe Ride Check (Tempo de Reacao)
O Safe Ride Check e um teste curto de tempo de reacao que o ciclista faz antes do desbloqueio durante uma janela noturna configuravel. E projetado para encorajar decisoes seguras - nao e um teste de sobriedade ou DUI.
Enquadramento de privacidade - importante
Este e um "Safe Ride Check", nao um teste medico ou legal de incapacitacao. O texto in-app e:
"Este nao e um teste medico ou legal de incapacitacao. Nos o usamos para encorajar decisoes seguras. Se voce nao se sente seguro para pilotar, por favor escolha outro modo de transporte."
Nunca compartilhamos resultados com autoridades exceto por mandado.
O que o ciclista faz
- Tentativa de desbloqueio noturno (janela padrao: 22:00 a 04:00 local).
- A app lanca um mini-jogo de 5 rodadas de toque-no-ponto.
- Cada rodada registra um tempo de reacao em milissegundos, ou "miss" se o ciclista nao tocar dentro de 3 segundos.
- Apos 5 rodadas a app calcula a mediana e a contagem de misses.
- Passa: mediana < 450ms, menos de 2 misses.
- Falha: cooldown de desbloqueio de 30 minutos mais "Voce esta seguro para pilotar?" com CTA "Ligar para amigo".
Limites de passagem
| Configuracao | Padrao | O que faz |
|---|---|---|
reaction_median_threshold_ms | 450 | Mediana maxima |
reaction_max_misses | 1 | Misses maximos |
reaction_test_round_count | 5 | Numero de rodadas |
reaction_test_timeout_ms | 3000 | Timeout por rodada |
Todos editaveis em Configuracoes > Safe Ride Check.
Janela de gatilho
| Configuracao | Padrao | O que faz |
|---|---|---|
reaction_window_start_local | 22:00 | Inicio |
reaction_window_end_local | 04:00 | Fim (atravessa meia-noite) |
reaction_window_enabled | true | Desativa se falso |
O envolvimento de meia-noite e tratado em isWithinNightWindow() em src/lib/rider-score/reaction-test.ts e tem testes unitarios.
O que acontece em falha
Uma falha unica:
- Cooldown de 30 minutos.
- UI mostra tempo restante e "Tentar novamente".
- Sem penalidade na pontuacao.
- Sem entrada
score_audit_log.
Tres falhas em 24 horas abrem um bloqueio temporario passo 6.
O que acontece em passagem
- Ciclista desbloqueia normalmente.
- Linha
reaction_testscompassed=true. - Sem efeito em pontuacao ou preco.
Logica de cooldown
O kernel evaluateAttempts() tem testes unitarios.
reaction_tests row:
median_reaction_ms - mediana de todas as rodadas
miss_count - misses (timeout >= 3s)
passed - bool dos criterios
trigger - 'nighttime' | 'appeal' | 'random'
cooldown_until - agora + 30 min em falha
Ciclista com cooldown_until no futuro e bloqueado pelo portao (reason='reaction_cooldown').
Quando o teste dispara
- Gatilho noturno (padrao): cada tentativa na janela noturna.
- Gatilho de recurso (opcional): operador pode requerer Safe Ride Check antes de aprovar recurso de passo 6.
- Gatilho aleatorio (opcional): subset aleatorio de desbloqueios. Padrao 0%.
Privacidade e o que nao fazemos
- Nao logamos com quem o ciclista estava falando.
- Nao gravamos tela, camera ou microfone.
- Nao compartilhamos resultados com seguradoras de forma identificavel.
- Nao compartilhamos com autoridades exceto por mandado.
Controles do operador
- Configuracoes > Safe Ride Check para configurar.
- Trilha de Auditoria filtrada por
action='reaction_test_fail_lockout'. - Perfil do ciclista > Testes de reacao mostra ultimos 30 dias.
Nota ADA e acessibilidade
Testes podem desvantajar ciclistas com certas deficiencias. Se um ciclista auto-divulga uma restricao, o operador deve configurar uma isencao em nivel de conta em Perfil > Isencoes.
Superficie de API
| Endpoint | Proposito |
|---|---|
POST /api/mobile/rider/reaction-test | Submeter tentativas |
GET /api/mobile/rider/reaction-test | E necessario agora? |
Proximo
Veja Escada de Intervencao para como 3 falhas em 24h se tornam um bloqueio passo 6.