Reembolsos Automaticos
O sistema de reembolso automatico detecta viagens que provavelmente falharam ou apresentaram mau funcionamento e reembolsa automaticamente os clientes em suas carteiras. Isso ajuda a manter a satisfacao do cliente quando veiculos apresentam problemas, nao destravam corretamente ou ocorrem outros problemas que resultam em viagens muito curtas e mal-sucedidas.
Como Funciona
Fluxo de Reembolso Automatico
Quando uma viagem termina, o sistema avalia se ela se qualifica para reembolso automatico:
Viagem Termina
Cliente finaliza sua viagem atraves do aplicativo movel
Metricas Calculadas
Sistema calcula metricas da viagem (duracao, distancia, custo)
Elegibilidade Avaliada
Sistema verifica se a viagem atende aos limites de reembolso
Job Enfileirado
Se elegivel, um job de reembolso e enfileirado em ride_auto_refund_jobs
Periodo de Atraso
Cron job aguarda o atraso configurado (recalc_gap_minutes)
Reavaliacao
Sistema reavalia com os dados de telemetria mais recentes
Reembolso Emitido
Se ainda elegivel, carteira e creditada e cliente notificado
Por Que o Atraso?
O sistema aguarda um numero configuravel de minutos antes de processar o reembolso. Este atraso permite:
- Dados de telemetria atrasados atualizarem as metricas da viagem
- Sincronizacao de dados IoT completar com distancia/duracao final
- Processamento backend finalizar calculos da viagem
Isso evita reembolsos prematuros baseados em dados incompletos.
Destino do Reembolso
Reembolsos automaticos sempre vao para a carteira do cliente, nao de volta ao cartao. Isso garante reembolsos instantaneos sem taxas de transacao e incentiva o uso continuo do servico.
Criterios de Elegibilidade
Uma viagem se qualifica para reembolso automatico se TODOS os seguintes forem verdadeiros:
| Criterio | Valor Padrao | Descricao |
|---|---|---|
| Recurso ativado | true | Reembolsos automaticos estao ativados nas configuracoes |
| Duracao dentro do limite | ≤ 3 minutos | Duracao da viagem e menor ou igual ao maximo |
| Distancia dentro do limite | ≤ 200 metros | Distancia total percorrida esta dentro do limite |
| Tem cliente | Obrigatorio | Viagem esta associada a um cliente valido |
| Sem job duplicado | Obrigatorio | Nenhum job pendente/processando existe para esta viagem |
| Saldo reembolsavel | Obrigatorio | Viagem tem um valor que pode ser reembolsado |
O Que e Verificado
A avaliacao de elegibilidade usa os seguintes dados da viagem:
- Duracao em segundos
- Distancia em metros
- Custo total
- Valor cobrado
- Status do pagamento
Configuracao
Acesso as Configuracoes
Configure reembolsos automaticos no painel de administracao:
- Navegue ate Configuracoes
- Clique na aba Viagens
- Encontre a secao Reembolsos Automaticos
Opcoes de Configuracao
| Configuracao | Tipo | Padrao | Descricao |
|---|---|---|---|
enabled | boolean | true | Interruptor principal para reembolsos automaticos |
max_ride_duration_minutes | number | 3 | Duracao maxima da viagem para qualificacao |
max_total_distance_m | number | 200 | Distancia maxima em metros para qualificacao |
recalc_gap_minutes | number | 1 | Minutos de espera antes do processamento |
Valores Recomendados por Caso de Uso
Conservador (Menos Reembolsos)
Use estas configuracoes se quiser minimizar reembolsos automaticos e preferir revisao manual:
| Configuracao | Valor |
|---|---|
| enabled | true |
| max_ride_duration_minutes | 2 |
| max_total_distance_m | 100 |
| recalc_gap_minutes | 2 |
Padrao (Equilibrado)
As configuracoes padrao equilibram satisfacao do cliente com supervisao operacional:
| Configuracao | Valor |
|---|---|
| enabled | true |
| max_ride_duration_minutes | 3 |
| max_total_distance_m | 200 |
| recalc_gap_minutes | 1 |
Generoso (Mais Reembolsos)
Use estas configuracoes para maxima satisfacao do cliente:
| Configuracao | Valor |
|---|---|
| enabled | true |
| max_ride_duration_minutes | 5 |
| max_total_distance_m | 300 |
| recalc_gap_minutes | 1 |
Encontrando o Equilibrio Certo
Comece com as configuracoes padrao e ajuste com base nas suas taxas de reembolso e feedback dos clientes. Monitore o painel de reembolsos automaticos para identificar padroes.
Status dos Jobs
Jobs de reembolso automatico passam por estes status:
| Status | Descricao |
|---|---|
pending | Aguardando processamento |
processing | Sendo processado atualmente (bloqueado) |
succeeded | Reembolso aplicado com sucesso |
failed | Processamento falhou (pode ser repetido manualmente) |
cancelled | Job cancelado (viagem nao mais elegivel) |
Detalhes do Cron Job
O cron de reembolso automatico executa a cada 5 minutos via Vercel Cron.
Comportamento de Processamento
Cada execucao do cron:
- Processa ate 25 jobs por execucao
- Processa apenas jobs onde
scheduled_for ≤ NOW() - Usa bloqueio otimista para evitar processamento duplicado
- Limpa jobs expirados com mais de 7 dias
Formato de Resposta
O endpoint cron retorna estatisticas de processamento:
{
"success": true,
"timestamp": "2025-01-19T12:00:00Z",
"duration_ms": 1234,
"processed": 15,
"succeeded": 12,
"cancelled": 2,
"failed": 1,
"total_refunded_usd": 24.50
}
Painel de Administracao
Acesse o painel de reembolsos automaticos em Painel > Reembolsos > Automaticos.
Recursos do Painel
Cartoes de Estatisticas
- Jobs Pendentes - Numero de jobs aguardando processamento
- Sucesso (24h) - Reembolsos bem-sucedidos nas ultimas 24 horas
- Total Reembolsado (24h) - Valor em dinheiro reembolsado
- Taxa de Sucesso - Porcentagem de jobs bem-sucedidos
Tabela de Jobs Pendentes
- Link da viagem
- Link do cliente
- Metricas da viagem (duracao, distancia)
- Valor do reembolso
- Horario agendado de processamento
- Acao de cancelar
Alerta de Jobs com Falha
- Exibido de forma destacada quando jobs precisam de atencao
- Acoes de repetir e cancelar
Tabela de Reembolsos Recentes
- Reembolsos processados nas ultimas 24 horas
- Valor, cliente, detalhes da viagem
- ID do job para solucao de problemas
Acoes Disponiveis
| Acao | Descricao |
|---|---|
| Atualizar | Recarregar todos os dados do painel |
| Cancelar Job | Cancelar job pendente (nao sera reembolsado) |
| Repetir Job | Repetir job com falha |
Detalhes do Processo de Reembolso
O Que Acontece Durante o Reembolso
- Bloqueio do Job Adquirido - Status definido como
processing - Configuracoes Validadas - Verificar se reembolso automatico ainda esta ativado
- Viagem Recuperada - Obter metricas mais recentes da viagem
- Elegibilidade Reavaliada - Confirmar que ainda esta dentro dos limites
- Valor Reembolsavel Calculado - Valor realmente pago menos ja reembolsado
- Carteira Creditada - Saldo da carteira do cliente aumentado
- Transacao de Carteira Criada - Trilha de auditoria registrada
- Viagem Atualizada - Marcada como reembolsada se totalmente reembolsada
- Notificacao Enviada - Notificacao push para o cliente
- Job Concluido - Status definido como
succeeded
Notificacao do Cliente
Quando um reembolso automatico e emitido, clientes recebem:
Notificacao Push:
- Titulo: "Reembolso de Viagem Emitido"
- Texto: "Uma viagem recente foi automaticamente reembolsada para sua carteira."
Transacao de Carteira:
- Tipo: Credito
- Descricao: "Reembolso automatico de viagem"
- Referencia: UUID da viagem
Motivos de Cancelamento
Jobs podem ser cancelados por varios motivos:
| Motivo | Descricao |
|---|---|
automatic_refund_disabled | Recurso foi desativado apos criacao do job |
duration_exceeds_limit | Duracao da viagem agora excede o limite |
distance_exceeds_limit | Distancia da viagem agora excede o limite |
eligibility_failed | Verificacao geral de elegibilidade falhou |
no_refundable_balance | Viagem ja foi totalmente reembolsada |
missing_customer_uuid | Cliente nao encontrado |
Reembolsos Manuais
Alem dos reembolsos automaticos, operadores podem emitir reembolsos manuais atraves do painel.
Tipos de Reembolso
| Tipo | Descricao |
|---|---|
| Reembolso para Carteira | Credita imediatamente o saldo da carteira do cliente |
| Reembolso para Cartao | Processa reembolso via Stripe de volta ao metodo de pagamento original |
Modos de Reembolso
| Modo | Descricao |
|---|---|
| Total | Reembolsa o valor reembolsavel restante completo |
| Parcial | Reembolsa um valor especifico (apenas reembolsos para cartao) |
Reembolsos Parciais
Reembolsos para carteira devem ser sempre reembolsos totais. Reembolsos parciais so sao suportados para reembolsos para cartao.
Processando um Reembolso Manual
Navegar ate a Viagem
Va para Painel > Viagens e clique na viagem
Clicar em Reembolsar
Clique no botao Reembolsar na pagina de detalhes da viagem
Escolher Destino
Selecione Carteira ou Cartao como destino do reembolso
Selecionar Modo
Para reembolsos de cartao, escolha total ou parcial
Inserir Motivo
Opcionalmente insira um motivo para o reembolso
Confirmar
Revisar e confirmar o reembolso
Requisitos de Permissao
Reembolsos requerem a permissao ride:refund. As seguintes funcoes podem processar reembolsos:
- super_admin
- global_admin
- admin
- general_manager
- franchisee_manager
- fleet_manager
- customer_support
Nota: Analistas e Tecnicos de Servico nao podem processar reembolsos.
Monitoramento
Visualizar Jobs Pendentes
SELECT
id,
ride_uuid,
customer_uuid,
status,
scheduled_for,
attempts,
created_at
FROM ride_auto_refund_jobs
WHERE status = 'pending'
ORDER BY scheduled_for ASC;
Visualizar Reembolsos Automaticos Recentes
SELECT
r.id,
r.ride_uuid,
r.customer_uuid,
r.amount,
r.processed_at,
r.metadata->>'job_id' as job_id
FROM ride_refunds r
WHERE r.metadata->>'automatic_refund' = 'true'
AND r.processed_at > NOW() - INTERVAL '24 hours'
ORDER BY r.processed_at DESC;
Verificar Jobs com Falha
SELECT
id,
ride_uuid,
customer_uuid,
attempts,
last_error,
created_at
FROM ride_auto_refund_jobs
WHERE status = 'failed'
ORDER BY updated_at DESC
LIMIT 20;
Solucao de Problemas
Jobs Nao Estao Sendo Criados
Verificacao 1: Reembolso automatico esta ativado?
- Navegue ate Configuracoes > Viagens > Reembolsos Automaticos
- Verifique se o interruptor esta ligado
Verificacao 2: Metricas da viagem estao dentro dos limites?
- Verifique duracao da viagem (deve ser
≤ max_ride_duration_minutes) - Verifique distancia da viagem (deve ser
≤ max_total_distance_m)
Verificacao 3: Viagem tem um cliente?
- Verifique se a viagem esta associada a um cliente valido
Jobs Travados em Pendente
Verificacao 1: O cron esta executando?
- Verifique se Vercel Cron esta configurado
- Verifique os logs de execucao do cron no painel Vercel
Verificacao 2: Jobs estao agendados para o futuro?
- Jobs so sao processados quando
scheduled_for ≤ NOW()
Verificacao 3: Verifique logs de funcao Vercel para erros
Jobs Falhando
Erros Comuns e Solucoes:
| Erro | Causa | Solucao |
|---|---|---|
customer_not_found | Cliente foi deletado | Cancelar job |
ride_not_found | Viagem foi deletada | Cancelar job |
no_refundable_balance | Ja reembolsado | Job cancela automaticamente |
wallet_update_failed | Problema no banco de dados | Repetir job |
Otimizacao de Performance
Frotas de Alto Volume
Para frotas com muitas viagens, considere:
- Aumentar frequencia do cron - Executar a cada 2-3 minutos em vez de 5
- Aumentar tamanho do lote - Processar 50-100 jobs por execucao
- Monitorar acumulo de fila - Configurar alertas para contagem de jobs pendentes
Otimizacao de Banco de Dados
Garanta que estes indices existam para performance otima:
-- Busca de jobs pendentes
CREATE INDEX CONCURRENTLY IF NOT EXISTS
idx_ride_auto_refund_jobs_pending_scheduled
ON ride_auto_refund_jobs (scheduled_for)
WHERE status = 'pending';
-- Busca de carteira de cliente
CREATE INDEX CONCURRENTLY IF NOT EXISTS
idx_customers_wallet
ON customers (id, wallet_balance);
Alertas Recomendados
Configure alertas para:
- Alta taxa de falha - Alertar se jobs com falha > 10% dos processados
- Acumulo de fila - Alertar se jobs pendentes > 100
- Atraso de processamento - Alertar se jobs estao > 30 minutos atrasados
- Falhas de execucao - Alertar se endpoint cron retorna 500
Proximos Passos
- Configuracao Stripe - Configurar integracao Stripe
- Metodos de Pagamento - Gerenciar cartoes de clientes
- Cobrancas de Danos - Cobrar clientes por danos
Reembolsos Automaticos Ativos
Com reembolsos automaticos configurados, seus clientes receberao reembolsos instantaneos para viagens com falha, melhorando a satisfacao e reduzindo tickets de suporte. Monitore o painel regularmente para garantir que o sistema esta funcionando corretamente.