Solucao de Problemas Levy Cover
Esta pagina cobre os modos de falha mais comuns do Levy Cover e como diagnostica-los. A maioria dos problemas cai em um de quatro baldes: configuracao, falha da seguradora, lacunas de webhook ou desvio contabil.
Cartao opt-in nunca aparece no desbloqueio
Sintoma: Ciclista desbloqueia um veiculo, nenhum cartao Levy Cover aparece, a viagem prossegue sem uma oferta.
Causas mais provaveis (em ordem):
- Toggle de subconta desligado. Verifique
/dashboard/insurance/settings. Confirme que o Levy Cover esta ativado para a subconta. - Jurisdicao nao coberta. O local de desbloqueio resolve para uma regiao marcada como
available: falsena matriz. Veja Matriz de Jurisdicao. Verifique/api/admin/insurance/jurisdiction-matrixpara o estado atual da matriz. - Credenciais da seguradora ausentes.
CoverGeniusClientlancaCarrierNotConfiguredError. Em producao isso esconde o cartao completamente. Confirme queCOVER_GENIUS_API_KEYeCOVER_GENIUS_PARTNER_IDestao definidos no ambiente implantado. - Seguradora nao retornou niveis. A seguradora pode recusar oferecer cobertura em perfis de risco especificos (por ex. um ciclista novo sem historico em uma zona de alto risco). Verifique a resposta de cotacao em logs.
- Cotacao expirou. O orcamento de 2 segundos no desbloqueio expirou. A viagem prossegue sem a oferta, que e o comportamento de falha aberta pretendido.
- Preferencia do ciclista definida como "sempre recusar". Se o ciclista alternou a preferencia persistente para desligada, o cartao fica oculto ate que ele a reabilite.
Consultas diagnosticas:
SELECT * FROM insurance_offerings WHERE subaccount_id = '<id>'- confirmar linhas habilitadas.SELECT * FROM ride_insurance_policies WHERE ride_id = '<ride id>'- confirmar se uma cotacao/vinculo realmente aconteceu.- Logs: pesquisar eventos
quote.requestedequote.failedem torno do timestamp de desbloqueio.
Vinculacao retornou 200 mas sem apolice no DB
Sintoma: Logs mostram uma chamada POST /bookings bem-sucedida, mas ride_insurance_policies nao tem linha.
Causas provaveis:
- URL de webhook nao registrada. Algumas integracoes da seguradora confirmam a vinculacao via webhook
booking.confirmedde entrada. Se esse webhook nunca chegar, a Levy registra a solicitacao como em voo indefinidamente. - Assinatura de webhook falhou. O evento chegou mas
signature_verified = false. Verifiqueinsurance_webhook_log. - A vinculacao foi bem-sucedida na seguradora mas o payload de resposta estava malformado. Raro; geralmente um problema apenas de sandbox.
Correcao: Execute o cron de reconciliacao da seguradora manualmente:
curl -X POST https://fleets.levyelectric.com/api/cron/insurance-carrier-reconciliation
O cron verifica apolices vinculadas contra a seguradora e repara carimbos de seguro de viagem ausentes. Se a seguradora reportar a apolice como valida, a linha e criada com bound_at retroativo ao tempo de vinculacao original.
Premio nao no recibo da viagem
Sintoma: O ciclista optou, a apolice foi vinculada, mas o recibo nao mostra o item de linha Levy Cover.
Causas:
applyRideInsuranceToPricingnao foi chamado. Verifique sesrc/lib/rides/process-ride-completion.tse o caminho que a conclusao tomou. Os caminhos mobile-end, admin-force-end, internal-ride-end e auto-end todos aplicam este helper - se um novo caminho de fim de viagem foi adicionado, ele tambem deve aplicar o helper.- A vinculacao aconteceu mas a seguradora invalidou a apolice antes do fim da viagem. Verifique
ride_insurance_policies.voided_at. Se definido, o premio foi corretamente excluido do recibo. - Cobranca Stripe Connect falhou. O premio e parte do total da viagem; se o total falhou ao cobrar, nenhum item de linha e gerado. Tentativa padrao de pagamento se aplica.
Diagnostico: SELECT id, total_cost, insurance_premium_amount FROM rides WHERE id = '<ride>'. Se insurance_premium_amount esta populado mas total_cost nao o inclui, o pipeline de conclusao nao aplicou o helper.
Fotos de sinistro falham ao carregar
Sintoma: Ciclista tenta carregar uma foto na tela de sinistro, o upload da erro.
Causas:
- Bucket de armazenamento
insurance-claimsausente. Confirme que o bucket existe com politicas de upload + leitura do ciclista e politica de gerenciamento de papel de servico. A migracao20270601120100_09_*o cria. - URL assinada expirou. URLs assinadas para upload de foto tem um TTL curto. Se o ciclista sentou na tela por muito tempo, a URL expira. O aplicativo deve buscar novamente automaticamente; se nao, reinicie o fluxo de sinistro.
- Tamanho ou tipo de arquivo rejeitado. A politica do bucket restringe a tipos MIME de imagem ate 25 MB por arquivo.
Sinistro travado em submitted por dias
Sintoma: Um sinistro e apresentado, o operador o ve na lista, mas ele nunca se move para under_review ou alem.
Causas:
- Webhook perdido. A seguradora moveu o sinistro mas o webhook nunca alcancou a Levy. Verifique
insurance_webhook_logpara quaisquer entregas falhadas em torno do tempo de mudanca de status esperada. - Atraso do avaliador do lado da seguradora. A Cover Genius tipicamente revisa dentro de 48-72 horas. Slice pode levar mais tempo em algumas jurisdicoes.
- Informacoes necessarias ausentes. Algumas seguradoras enviam um webhook
claim.requires_infoque solicita dados adicionais. Verifique o detalhe do sinistro para uma nota "seguradora solicitando".
Acao: Operadores podem escalar para o suporte Levy, que pode perseguir a seguradora atraves do canal do parceiro. Operadores nao podem apresentar apelacoes ou consultas de status diretamente com a seguradora.
Falhas de assinatura de webhook
Sintoma: insurance_webhook_log mostra signature_verified = false.
Causas:
- Incompatibilidade de
COVER_GENIUS_WEBHOOK_SECRET. Mais comum. Busque novamente o segredo atual do portal Cover Genius e atualize a variavel de ambiente. - A URL de webhook do ambiente errado esta registrada. Eventos sandbox chegando no endpoint de producao, ou vice-versa. Registre novamente a URL correta no portal da seguradora.
- Replay ou entrega fora de ordem. O tratamento de chave duplicada em
UNIQUE (carrier, event_id)retorna{ duplicate: true }. Falhas genuinas de assinatura sao diferentes do tratamento de duplicatas - verifique o camposignature_verifiedda linha.
Falha da seguradora
Sintoma: Chamadas de cotacao expiram, chamadas de vinculacao retornam 5xx, o cartao opt-in para de aparecer.
Comportamento:
- Cotacoes expiram -> falha aberta, viagem prossegue sem oferta,
insurance_offered = false. - Apolices vinculadas existentes permanecem validas. A seguradora ainda as honra quando sinistros sao eventualmente apresentados.
- Sinistros pendentes ficam em seu status atual ate que a seguradora se recupere e os processe.
Acao:
- Confirme a falha na pagina de status da Cover Genius ou via canal do parceiro.
- Comunique aos operadores afetados se a falha exceder 1 hora.
- Nao vincule apolices manualmente durante a falha. Nao ha caminho para fazer isso com seguranca - se a seguradora nao recebeu de fato a vinculacao, a viagem nao esta segurada.
Premio cobrado mas o ciclista afirma que nao optou
Sintoma: Ticket de suporte do ciclista diz "Eu nao optei pelo seguro mas fui cobrado."
Diagnostico:
- Verifique
ride_insurance_policiespara a viagem. Se uma linha existe com um timestampbound_at, um evento de opt-in foi registrado. - Verifique o campo
policy_wording_versionpara o texto que o ciclista viu. - Verifique a preferencia persistente do ciclista - "Lembrar minha escolha" definido como aceitar significa que viagens futuras vinculam automaticamente.
Resolucao:
- Se o ciclista genuinamente nao optou (um bug de UI ou uma preferencia de inclusao automatica desatualizada), siga o caminho de reembolso de premio. Veja Reembolsos de Premio via Viagem.
- Se o ciclista optou mas esqueceu - o texto era claro e o carimbo de vinculacao esta intacto - explique o item de linha do recibo e o toggle de preferencia. Sem reembolso.
Testes estao falhando
A suite de testes completa esta em src/lib/insurance/__tests__/. Existem 8 arquivos e 36 testes. Para executa-los:
npx vitest run src/lib/insurance/__tests__/ src/lib/rides/__tests__/durable-completion-jobs.test.ts
Falhas comuns:
- Vars de ambiente definidas durante execucoes de teste. Se o ambiente de teste tem
COVER_GENIUS_API_KEYdefinido, o registro pode escolher o cliente real em vez do mock. UsesetCarrierRegistryForTestspara fixar. - Desvio de migracao. Se um desenvolvedor edita os arquivos de migracao localmente, os fixtures de teste podem se desviar do esquema. Redefina o DB local e execute novamente.
Em seguida
Verifique FAQ para respostas mais curtas a perguntas comuns, ou Configuracao de Credenciais da Seguradora para questoes relacionadas a variaveis de ambiente.
Precisa de ajuda?
Se nada do acima resolver o problema, contate support@levyelectric.com com o ID da viagem e quaisquer timestamps relevantes de log.