Carteira e Pagamentos
Este guia cobre o sistema de carteira de clientes, metodos de pagamento, funcionalidade de recarga automatica e processamento de pagamentos. Compreender estes sistemas e essencial para operadores na solucao de problemas de cobranca e para clientes no gerenciamento de suas preferencias de pagamento.
Visao Geral
O sistema de pagamento consiste em tres componentes principais:
- Carteira do Cliente - Uma conta de saldo para pagamentos de viagens
- Metodos de Pagamento - Cartoes de credito/debito armazenados vinculados ao Stripe
- Recarga Automatica - Reabastecimento automatico de carteira quando o saldo esta baixo
Viagens sao pagas pelo saldo da carteira. Se o saldo for insuficiente, o sistema pode cobrar automaticamente o metodo de pagamento padrao do cliente.
Carteira do Cliente
Como a Carteira Funciona
Cada cliente tem um saldo de carteira que:
- Armazena saldo em reais
- E usado para pagar viagens
- Pode ser recarregado manual ou automaticamente
- Recebe creditos de codigos promocionais, indicacoes e resgate de pontos de fidelidade
Fluxo de Saldo da Carteira:
Creditos ENTRANDO:
- Recarga manual (cliente adiciona saldo)
- Recarga automatica (automatica quando baixo)
- Resgate de codigo promocional
- Bonus de indicacao
- Resgate de pontos de fidelidade
- Creditos de atendimento ao cliente
Debitos SAINDO:
- Cobrancas de viagem
- Compras de assinatura
- Compras de pacotes
Exibicao do Saldo da Carteira
Clientes veem seu saldo de carteira:
- Na tela inicial do app movel
- Antes de iniciar uma viagem
- Em recibos de viagem
- Nas configuracoes da conta
Formato: Sempre exibido em reais com 2 casas decimais (ex: "R$ 25,00")
Requisitos de Saldo Minimo
Para iniciar uma viagem, clientes devem ter:
- Saldo positivo na carteira, OU
- Metodo de pagamento valido para recarga automatica, OU
- Assinatura/pacote ativo cobrindo a viagem
Importante
Se a carteira de um cliente estiver vazia e a recarga automatica estiver desativada, ele nao pode iniciar uma viagem.
Recarga Manual
Fluxo de Recarga do Cliente
- Cliente abre secao de Carteira/Pagamento
- Seleciona ou insere valor de recarga
- Escolhe metodo de pagamento
- Confirma pagamento
- Saldo da carteira e atualizado imediatamente
Valores de Recarga
Operadores podem configurar valores predefinidos:
| Configuracao | Descricao | Exemplo |
|---|---|---|
| Valores predefinidos | Opcoes de selecao rapida | R$ 10, R$ 25, R$ 50, R$ 100 |
| Valor personalizado | Qualquer valor permitido | R$ 15,00 (min R$ 5, max R$ 500) |
| Recarga minima | Menor valor permitido | R$ 5,00 |
| Recarga maxima | Maior valor permitido | R$ 500,00 |
Processamento de Recarga
Recargas sao processadas via Stripe:
- Criar PaymentIntent com valor
- Confirmar com metodo de pagamento do cliente
- Em caso de sucesso: Aumentar saldo da carteira
- Criar registro de transacao de carteira
- Enviar confirmacao (e-mail/push)
Recarga Automatica
Como a Recarga Automatica Funciona
A recarga automatica cobra automaticamente o cliente quando seu saldo de carteira cai abaixo de um limite:
Se wallet_balance ≤ limite:
Cobrar metodo de pagamento padrao com valor de recarga
Adicionar saldo a carteira
Quando e acionada:
- Antes do inicio da viagem (se saldo insuficiente)
- Apos fim da viagem (se saldo ficou negativo)
- Durante a viagem (para cobranca em tempo real)
Requisitos de Configuracao
A recarga automatica requer AMBOS:
- Opt-in do cliente - Cliente ativa recarga automatica em suas configuracoes
- Subconta ativada - Operador ativa recarga automatica para o local
| Nivel | Configuracao | Quem controla |
|---|---|---|
| Cliente | auto_topup_enabled | Cliente no app |
| Subconta | auto_topup_enabled | Operador no dashboard |
| Subconta | auto_topup_amount_cents | Operador no dashboard |
| Subconta | auto_topup_threshold_cents | Operador no dashboard |
Opcoes de Configuracao
Configuracoes da Subconta:
| Configuracao | Descricao | Padrao | Exemplo |
|---|---|---|---|
auto_topup_enabled | Ativar para este local | false | true |
auto_topup_amount_cents | Valor a cobrar | 1500 | 2000 (R$ 20) |
auto_topup_threshold_cents | Limite de acionamento | 500 | 1000 (R$ 10) |
Configuracao de Exemplo:
- Limite: R$ 5,00 (500 centavos)
- Valor de recarga: R$ 15,00 (1500 centavos)
Quando a carteira cai para R$ 5 ou menos, o sistema cobra automaticamente R$ 15.
Fluxo de Recarga Automatica
1. Verificar se cliente permite recarga automatica (customer.auto_topup_enabled)
2. Verificar se subconta permite recarga automatica (subaccount.auto_topup_enabled)
3. Obter limite e valor das configuracoes da subconta
4. Se wallet_balance ≤ limite:
a. Adquirir bloqueio (evitar cobrancas duplicadas)
b. Obter metodo de pagamento padrao do cliente
c. Criar PaymentIntent Stripe
d. Confirmar pagamento (off_session)
e. Aumentar saldo da carteira
f. Registrar transacao
g. Liberar bloqueio
Protecao contra Concorrencia
O sistema evita cobrancas duplicadas atraves de bloqueio de banco de dados:
| Campo | Descricao |
|---|---|
auto_topup_lock_id | ID unico do bloqueio |
auto_topup_lock_expires_at | Tempo de expiracao do bloqueio |
Fluxo de Bloqueio:
- Tentar adquirir bloqueio (TTL de 2 minutos)
- Se bloqueio adquirido, prosseguir com cobranca
- Se bloqueio existe (outro processo cobrando), aguardar e verificar aumento de saldo
- Liberar bloqueio apos conclusao
Tratamento de Erros
| Erro | Causa | Resolucao |
|---|---|---|
| Cartao recusado | Saldo insuficiente, cartao expirado | Notificar cliente para atualizar pagamento |
| Autenticacao necessaria | Desafio 3DS necessario | Solicitar autenticacao do cliente |
| Sem metodo de pagamento | Nenhum cartao registrado | Solicitar que cliente adicione cartao |
| Conflito de bloqueio | Outra cobranca em andamento | Aguardar conclusao da outra cobranca |
Metodos de Pagamento
Armazenando Metodos de Pagamento
Metodos de pagamento sao armazenados via Stripe:
- Cliente insere detalhes do cartao
- Cartao e tokenizado pelo Stripe.js (compativel com PCI)
- PaymentMethod e anexado ao cliente Stripe
- Referencia e armazenada no banco de dados local
Tabela de Metodos de Pagamento
| Campo | Descricao |
|---|---|
stripe_payment_method_id | Identificador PM do Stripe |
last_four | Ultimos 4 digitos do cartao |
brand | Bandeira do cartao (Visa, Mastercard, etc.) |
exp_month | Mes de expiracao |
exp_year | Ano de expiracao |
is_default | Padrao para cobrancas |
Metodo de Pagamento Padrao
Um metodo de pagamento e marcado como padrao:
- Usado para recarga automatica
- Usado para recarga manual (a menos que outro seja selecionado)
- Usado para cobrancas de assinatura
Definindo padrao:
- Cliente seleciona "Definir como padrao" no app
- Sistema atualiza flag
is_default - Sincroniza com
invoice_settings.default_payment_methoddo Stripe
Gerenciando Metodos de Pagamento
Adicionar cartao:
- Cliente toca em "Adicionar metodo de pagamento"
- Stripe Elements captura detalhes do cartao
- Cartao e validado e tokenizado
- PaymentMethod e criado e armazenado
Remover cartao:
- Cliente seleciona cartao a remover
- Sistema verifica se nao e o unico cartao (se recarga automatica ativada)
- PaymentMethod e desanexado do cliente Stripe
- Registro local e deletado
Atualizar cartao: Cartoes nao podem ser atualizados - cliente deve adicionar novo cartao e remover o antigo.
Transacoes de Carteira
Tipos de Transacao
| Tipo | Descricao | Sinal |
|---|---|---|
credit | Saldo adicionado a carteira | Positivo |
debit | Saldo removido da carteira | Negativo |
topup | Recarga manual | Positivo |
auto_topup | Recarga automatica | Positivo |
ride | Cobranca de viagem | Negativo |
refund | Reembolso de cobranca | Positivo |
promo | Resgate de codigo promocional | Positivo |
referral | Bonus de indicacao | Positivo |
loyalty | Resgate de pontos de fidelidade | Positivo |
adjustment | Ajuste manual | Ambos |
Registro de Transacao
| Campo | Descricao |
|---|---|
customer_id | Referencia ao cliente |
amount | Valor em reais |
type | Tipo de transacao |
description | Descricao legivel |
reference_type | Tipo de origem (viagem, promo, etc.) |
reference_id | ID da origem |
balance_after | Saldo da carteira apos transacao |
stripe_payment_intent_id | PI do Stripe (para pagamentos) |
created_at | Timestamp |
Visualizando Historico de Transacoes
Clientes podem ver seu historico de transacoes:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HISTORICO DA CARTEIRA
Hoje
─────
Viagem concluida -R$ 7,35
Saldo: R$ 17,65
Ontem
─────────
Recarga automatica +R$ 15,00
Saldo: R$ 25,00
Viagem concluida -R$ 8,50
Saldo: R$ 10,00
23 Dez.
─────────
Codigo promocional NATAL10 +R$ 10,00
Saldo: R$ 18,50
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Fluxo de Pagamento de Viagem
Verificacao de Saldo no Inicio da Viagem
Quando um cliente inicia uma viagem:
- Verificar saldo da carteira - Esta acima de R$ 0?
- Verificar elegibilidade de recarga automatica - Esta ativada e tem metodo de pagamento?
- Verificar cobertura - Assinatura/pacote cobre a viagem?
Se nenhum dos acima for satisfeito, a viagem nao pode iniciar.
Pagamento no Fim da Viagem
Quando uma viagem termina:
1. Calcular cobranca final da viagem
2. Verificar saldo atual da carteira
3. Se saldo >= cobranca:
- Debitar da carteira
- Registrar transacao
4. Se saldo < cobranca E recarga automatica ativada:
- Processar recarga automatica primeiro
- Depois debitar cobranca da viagem
5. Se saldo < cobranca E sem recarga automatica:
- Debitar saldo disponivel
- Registrar valor pendente
- Agendar tentativa de pagamento
Sistema de Tentativa de Pagamento
Quando um cliente tem valor pendente:
- Agendar tentativa - Adicionar a fila de tentativas em segundo plano
- Tentar cobrar - Tentar coletar ao longo do tempo
- Notificacao - Alertar cliente sobre pagamento falhado
- Restricao de conta - Bloquear novas viagens ate saldo pago
Cronograma de Tentativas:
| Tentativa | Atraso | Acao |
|---|---|---|
| 1 | Imediato | Primeira tentativa de cobranca |
| 2 | 1 hora | Tentar novamente com notificacao |
| 3 | 24 horas | Tentar novamente com aviso |
| 4 | 72 horas | Ultima tentativa |
| 5+ | Manual | Requer intervencao do operador |
Dashboard do Operador
Visualizando Carteira do Cliente
Na visualizacao de detalhes do cliente:
| Campo | Descricao |
|---|---|
| Saldo da Carteira | Saldo atual em reais |
| Recarga Automatica | Status Ativada/Desativada |
| Metodos de Pagamento | Lista de cartoes armazenados |
| Historico de Transacoes | Atividade recente da carteira |
Ajustes Manuais de Carteira
Operadores podem ajustar o saldo da carteira:
Adicionar saldo:
- Gestos de atendimento ao cliente
- Reembolsos por problemas de servico
- Creditos promocionais
Remover saldo:
- Correcoes de fraude
- Correcoes de erros
Todos os ajustes requerem:
- Valor
- Motivo/descricao
- Autenticacao do operador
Exportacao de Transacoes
Exportar transacoes de carteira para:
- Reconciliacao contabil
- Disputas de clientes
- Fins de auditoria
Integracao Stripe
Modo de Teste vs. Ao Vivo
O sistema suporta ambos os modos Stripe:
| Modo | Tipo de Chave | Caso de Uso |
|---|---|---|
| Ao Vivo | sk_live_* | Transacoes de producao |
| Teste | sk_test_* | Testes internos |
Selecao de Modo de Teste:
- E-mails
@levyelectric.comusam modo de teste - Todos os outros clientes usam modo ao vivo
Objetos Stripe Usados
| Objeto | Proposito |
|---|---|
| Customer | Vincula cliente local ao Stripe |
| PaymentMethod | Detalhes de cartao armazenados |
| PaymentIntent | Pagamento unico |
| SetupIntent | Configuracao de cartao sem cobranca |
Webhooks
Webhooks do Stripe atualizam registros locais:
| Evento | Acao |
|---|---|
payment_intent.succeeded | Confirmar credito de carteira |
payment_intent.failed | Registrar erro, notificar cliente |
payment_method.attached | Armazenar metodo de pagamento localmente |
payment_method.detached | Remover metodo de pagamento localmente |
Consideracoes de Seguranca
Conformidade PCI
- Numeros de cartao nunca tocam nossos servidores
- Toda captura de cartao via Stripe.js/Elements
- Apenas referencias tokenizadas sao armazenadas
Privacidade de Dados
- Saldo de carteira criptografado em repouso
- Acesso ao historico de transacoes controlado
- Acesso a metodos de pagamento restrito
Prevencao de Fraude
- Limites de taxa para recargas
- Deteccao de atividade incomum
- Limites de revisao manual
Referencia Tecnica
Tabelas de Banco de Dados
customers (Campos de Carteira)
| Coluna | Tipo | Descricao |
|---|---|---|
wallet_balance | Decimal | Saldo atual em reais |
stripe_customer_id | Text | ID de cliente Stripe |
auto_topup_enabled | Boolean | Preferencia de recarga automatica do cliente |
auto_topup_lock_id | UUID | ID de bloqueio de concorrencia |
auto_topup_lock_expires_at | Timestamp | Expiracao do bloqueio |
payment_methods
| Coluna | Tipo | Descricao |
|---|---|---|
customer_uuid | UUID | Referencia ao cliente |
stripe_payment_method_id | Text | ID PM do Stripe |
last_four | Text | Ultimos 4 digitos do cartao |
brand | Text | Bandeira do cartao |
exp_month | Integer | Mes de expiracao |
exp_year | Integer | Ano de expiracao |
is_default | Boolean | Metodo de pagamento padrao |
wallet_transactions
| Coluna | Tipo | Descricao |
|---|---|---|
customer_id | UUID | Referencia ao cliente |
amount | Decimal | Valor em reais |
type | Text | Tipo de transacao |
description | Text | Descricao |
reference_type | Text | Tipo de origem |
reference_id | UUID | ID da origem |
balance_after | Decimal | Saldo apos transacao |
stripe_payment_intent_id | Text | ID PI do Stripe |
subaccounts (Campos de Recarga Automatica)
| Coluna | Tipo | Descricao |
|---|---|---|
auto_topup_enabled | Boolean | Ativar para local |
auto_topup_amount_cents | Integer | Valor a cobrar |
auto_topup_threshold_cents | Integer | Limite de acionamento |
Funcoes Principais
| Funcao | Localizacao | Proposito |
|---|---|---|
processAutoTopup | src/lib/auto-topup.ts | Executar cobranca de recarga automatica |
canProcessAutoTopup | src/lib/auto-topup.ts | Verificar se recarga automatica e possivel |
incrementWalletCents | Funcao RPC | Atualizar carteira atomicamente |
acquireAutoTopupLock | Funcao RPC | Obter bloqueio de concorrencia |
releaseAutoTopupLock | Funcao RPC | Liberar bloqueio de concorrencia |
Endpoints de API
| Metodo | Endpoint | Acao |
|---|---|---|
| GET | /api/mobile/payment | Obter carteira e metodos de pagamento |
| POST | /api/mobile/payment/topup | Recarga manual |
| POST | /api/mobile/payment/methods | Adicionar metodo de pagamento |
| DELETE | /api/mobile/payment/methods/:id | Remover metodo de pagamento |
| PUT | /api/mobile/payment/methods/:id/default | Definir padrao |
Solucao de Problemas
Recarga Automatica Nao Funciona
- Verificar configuracao do cliente -
auto_topup_enabledesta true? - Verificar configuracao da subconta - Recarga automatica ativada para local?
- Verificar metodo de pagamento - Existe cartao padrao?
- Verificar cliente Stripe -
stripe_customer_ide valido? - Revisar status de bloqueio - Existe bloqueio obsoleto bloqueando?
Pagamento Falhou
- Verificar erro Stripe - Cartao recusado? Expirado? 3DS necessario?
- Verificar metodo de pagamento - Ainda e valido no Stripe?
- Verificar status da conta - Conta Stripe esta ativa?
- Verificar idempotencia - Mesma cobranca foi tentada duas vezes?
Saldo de Carteira Incorreto
- Revisar historico de transacoes - Quais transacoes ocorreram?
- Verificar cobrancas pendentes - Existem pagamentos em andamento?
- Verificar cobrancas de viagem - Viagens foram cobradas corretamente?
- Verificar duplicatas - Existem transacoes duplicadas?
Nao Consegue Iniciar Viagem
- Verificar saldo da carteira - Esta R$ 0 ou negativo?
- Verificar recarga automatica - Esta ativada e funcional?
- Verificar metodo de pagamento - Existe cartao valido?
- Verificar saldo pendente - Existem cobrancas nao pagas?
Precisa de ajuda?
Para suporte de carteira e pagamentos, contate support@levyelectric.com.