Checklist de go-live¶
Para: Dev · Fin · Adm — Conferido em 2026-10-18.
Você só vai ao ar com a operação Real depois de cumprir esta lista na operação Teste. Cada item tem uma prova: saída de teste, print do painel, log ou dashboard, e não uma promessa. Item sem prova conta como não feito.
O que é¶
Um checklist único para as três frentes: o conector (Dev), o dinheiro (Fin) e o painel (Adm). Ele junta o que antes estava separado em lista geral, lista por operador e itens de painel.
Copie a lista para o seu tracker, preencha a prova de cada item e anexe o resultado ao registro de go-live descrito em Dia do corte e rollback.
Quando usar¶
Antes do pedido de operação Real (passo 10 da linha do tempo): as seções 1 a 9 se provam na operação Teste. A seção 10 se prova no painel e a seção 11 no dia do corte.
Como funciona¶
1. Conformidade¶
- [ ] Suíte de conformidade verde contra a operação Teste, rodada com a URL de webhook real do seu conector (Suíte de conformidade). Prova: saída com todos os casos aprovados e a data.
- [ ] Seu cliente reproduz os vetores de assinatura byte a byte (as três chamadas, os dois webhooks válidos e a recusa do negativo) no seu CI. Prova: teste no seu repositório, como os de Exemplos.
- [ ]
GET /v1/pingcom a chave de Teste devolveenvironment: "sandbox"e ooperation_idesperado. Prova: saída do comando.
2. Chamadas¶
- [ ] Nonce por CSPRNG, 32 caracteres hexadecimais minúsculos, novo a cada requisição, inclusive em nova tentativa.
- [ ] Timestamp em segundos. Host com NTP e alerta de desvio acima de 5 s contra o
server_timedeGET /v1/ping. Prova: regra de alerta versionada. - [ ] Timeout de cliente de 10 s.
- [ ] Todo
POSTlevaIdempotency-Key. Em depósito e saque,Idempotency-Key=external_id, gravado no seu banco antes da chamada (outbox). Prova: teste que mata o processo entre a gravação e a chamada; o worker retoma com a mesma chave e cria um único objeto. - [ ] Regra de ouro:
4xxnão repete;5xx,429e erro de rede repetem com a mesma chave;codedesconhecido é tratado pela classe HTTP (Idempotência e repetição). Prova: caso de teste comPOST /sandbox/outage{"down": true}:503, depois retomada com a mesma chave sem duplicar. - [ ] Valor convertido para a menor unidade sem float. Prova: teste de unidade com
50,50.5,0.01,50.001(recusa) e1e3(recusa). - [ ]
Dracma-Trace-Idregistrado em todo log de chamada ao Dracma.
3. Webhooks¶
- [ ] Verificação da assinatura sobre o corpo cru, janela de 300 s,
Dracma-Timestampigual aot=, aceita qualquerv1com qualquer segredo ativo (lista para a rotação), comparação em tempo constante. - [ ]
Dracma-Event-Idigual aoiddo corpo; senão400. - [ ] Deduplicação por
Dracma-Event-Idcom índice único e retenção de pelo menos 7 dias; duplicata devolve200sem efeito. Prova:POST /sandbox/webhooks/redeliverde um evento já processado:200, saldo inalterado. - [ ] Fetch-back obrigatório antes de mover dinheiro: o crédito sai do
GET /deposits/{id}, nunca do corpo do webhook. Prova: umdeposit.paidforjado, com assinatura válida, para um depósitopendingna API não credita. - [ ] No fetch-back, confere
external_id(é seu),amount,currencyeplayer_refcom o que gravou. Divergência: não credita, marca para revisão e alerta. - [ ] Crédito e débito idempotentes por
external_id: um depósito credita uma vez, mesmo com dois eventos para o mesmo objeto. - [ ] Ordem não garantida:
versionmenor ou igual ao já aplicado é ignorada, com200. - [ ] Leitor tolerante: tipo de evento,
status,methodou campo desconhecido devolve200, grava, não move dinheiro e é conferido depois. - [ ] Responde em até 10 s; trabalho pesado vai para fila local.
- [ ] A rota do webhook não usa autenticação de usuário. O Dracma não publica lista de IPs de saída, então não filtre essa rota por IP de origem; a defesa é a assinatura mais o fetch-back (Seu endpoint).
4. Depósitos¶
- [ ] Só
paidcredita, pelo valor registrado na criação (Ciclo do depósito). - [ ]
under_review,pending,createde qualquer estado desconhecido não creditam. Prova: receitas dePAYER_MISMATCHe de valor divergente no Teste (Receitas). - [ ]
refundedechargebackdepois depaid: política definida e escrita. Recomendação: não mover automaticamente; abra uma exceção (needs_decision) com alerta e deixe uma pessoa decidir (Política de exceções). - [ ] Pagamento depois de expirar ou cancelar (
paid_amountem objeto terminal): não credita; vai para exceção. - [ ]
player.external_refopaco e imutável; documento consistente entre depósito e saque. - [ ] Exigências por operação lidas de
GET /v1/currencies(method_details[].deposit_requirements) no boot e periodicamente. Prova: depósito sem o campo exigido volta400comreason: required_by_operation, tratado como recusa sem repetição. - [ ] Fora de produção, e-mails de jogador só de domínio reservado (
.test,.invalid,.example). - [ ] Mostra ao jogador o
instructions.pix.expires_atdevolvido.
5. Saques¶
- [ ] Reserva do saldo do jogador antes do
POST /withdrawals, na mesma transação que grava oexternal_id. - [ ] A reserva só é devolvida em
rejected,failedoucancelled, confirmados por fetch-back, ou em4xxconclusivo na criação. Nunca em timeout ou5xxsem resposta conclusiva. - [ ]
paidfinaliza a reserva e guardapsp_reference. - [ ]
player.ipcom o IP do jogador em todo saque (sem ele o saque nunca é automático). Prova: no Teste, um saque dentro do limite da regra, complayer.ip, viraapproved. - [ ] Chave PIX normalizada (tipos
cpf,cnpj,email,phone,random; telefone em+55…). Prova: teste de unidade. - [ ]
returneddepois depaid: política definida; recomendação de não recreditar automaticamente. - [ ]
409 idempotency_key_reusedno envio vira exceção, com a reserva mantida. - [ ]
review_requested: truequando a sua pré-checagem desconfiar (só torna a decisão mais restritiva). - [ ]
decision.reasonsaparece para o seu time de suporte e risco; nenhum motivo de bloqueio vai ao jogador (mensagem genérica). - [ ] Prova: no Teste, um saque acima do limite vai para
under_reviewcomAUTO_MULTIPLIER_EXCEEDED, erejectefaildevolvem a reserva exatamente uma vez.
6. Dinheiro: provas¶
- [ ] Uma reserva por saque. Repetir o
POSTcom a mesma chave não cria segunda reserva nem segundo saque. Prova: o teste da seção 2 e uma consulta ao seu livro com uma linha de reserva porexternal_id. - [ ] Uma devolução por saque. Receitas
rejectefailno Teste: a reserva volta uma vez; repetir o evento não devolve de novo. Prova: livro do jogador antes e depois. - [ ] Um crédito por depósito. Receita de
redeliver: continua um crédito. - [ ] O seu livro bate com o do Dracma. Um dia de Teste reconciliado nos dois lados, sem divergência (Reconciliar com o seu livro). Prova: relatório do dia, digest e assinatura conferidos, e o seu extrato por
external_id. - [ ] Limites conservadores configurados na operação Real. Leia a regra ativa em
GET /v1/rulesou na tela "Regras e listas"; proponha a mudança pelo painel ou porPOST /v1/rules/change-requests(escoporules:propose). Endurecer vale na hora; afrouxar pede aprovação de outra pessoa e 24 h. Este guia não publica valores padrão. Prova: print da regra ativa e do pedido aprovado. - [ ] Caixa inicial conferido em
GET /v1/balances. O caixa de saques só cresce com depósitos pagos e devoluções. Prova: leitura deGET /v1/balancesdepois do primeiro depósito pago.
Não disponível
O Dracma não oferece aporte de caixa para saques. Sem depósito pago, o caixa livre é zero e o saque é recusado com 422 insufficient_operation_balance. Planeje o primeiro saque real depois do primeiro depósito real.
7. Recuperação e reconciliação¶
- [ ] Job de
GET /events?after=<último evento>a cada 5 minutos, com cursor persistido, passando pelo mesmo dedup e fetch-back do webhook. Prova: teste com o receptor desligado durante um pagamento; o job credita uma vez em até 5 minutos (GET /events). - [ ] Reconciliação diária por moeda (
GET /reconciliation) com digest e assinatura conferidos. - [ ] Alerta de divergência: todo
paiddo Dracma tem crédito ou débito seu, e vice-versa. Qualquer diferença abre incidente. Prova: um dia de Teste comparado, zero divergência. - [ ] Alertas para: webhook com assinatura inválida,
401ou403na sua saída, fila de exceções parada acima de 4 h, job de/eventsatrasado, desvio de relógio. - [ ] A fila de exceções do seu produto tem permissão própria, confirmação forte e motivo. Prova: print e teste de permissão.
8. Segredos e rede¶
- [ ] Chave, segredo de webhook e demais segredos no cofre, entregues ao host pela ferramenta de deploy, arquivo
0400do usuário do conector. Prova:statdo arquivo e busca porkey_live_no repositório e na imagem, sem resultado (Segredos e vazamento). - [ ] O Dracma é chamado só do servidor; nenhum app ou navegador de jogador fala com ele.
- [ ] Logs não registram segredo,
Dracma-Signatureinteiro, documento completo nem chave PIX em claro (Dados pessoais). - [ ] Opcional: saída para o host do Dracma restrita ao usuário do conector. Altamente recomendado em Real: a lista de IPs de origem da operação está cadastrada com os IPs públicos de saída fixos do conector (opcional, mas sem ela qualquer origem com a chave chama; veja Rede, allowlist e mTLS), e a URL do webhook está cadastrada (sem ela você não recebe avisos de pagamento).
- [ ] Rotação de chave e de segredo de webhook ensaiada no Teste sem downtime, com o verificador aceitando dois segredos ao mesmo tempo.
- [ ] Procedimento de emergência escrito: quem revoga a chave, quem pede a reposição, como a chave nova chega ao conector e quanto tempo isso leva (24 h de espera + aprovação).
9. Ambientes¶
- [ ] Homologação aponta para o host de Teste com
key_test_; produção aponta para o host de Real comkey_live_. Prova: chamar o host de Real com a chave de Teste devolve401 unknown_key. - [ ] Fixtures, seeds e testes usam só domínios reservados e documentos de teste; nenhum dado real de jogador fora de produção.
- [ ] Os testes automáticos não chamam
/v1/sandbox/*contra a operação Real (essas rotas respondem404).
10. Painel e equipe¶
- [ ] Pelo menos duas pessoas com acesso, cada uma com dois fatores e um fator forte. Convites pendentes não contam: a segunda pessoa precisa ter aceitado o convite. Prova: lista "Quem tem acesso" sem a pessoa em "Aguardando aceite" (Equipe e papéis).
- [ ] Operação Real aprovada e chave
key_live_revelada (janela de 24 h). Prova:GET /v1/pingcom a chave nova devolveenvironment: "production"(De Teste para Real). - [ ] Conexão de gateway ativa na operação Real. Prova: print da tela "Gateways" (Gateways).
- [ ] Webhook de produção cadastrado em
httpse primeiro segredo girado e instalado no receptor. Prova: evento entregue ao receptor de produção. - [ ] Alertas configurados, no mínimo caixa baixo e webhook falhando (Alertas e e-mails). Prova: print da tela e um disparo de teste.
- [ ] Contatos de alerta de e-mail informados ao Dracma, porque o painel não os edita.
- [ ] Suspensão do saque automático ensaiada em operação Teste, com a segunda pessoa confirmando. Prova: registro na lista de emergências.
Exemplos¶
Linha de tracker preenchida:
| Item | Responsável | Prova | Data |
|---|---|---|---|
Dedup por Dracma-Event-Id |
Dev | saída do redeliver: 200 sem crédito novo |
2026-10-12 |
| Limites conservadores | Fin | print da regra ativa e do pedido aprovado | 2026-10-14 |
| Gateway ativo | Adm | print de "Gateways" | 2026-10-15 |
Erros e casos de borda¶
- Item que não se aplica: escreva por que não se aplica. Em branco conta como não feito.
- Prova antiga: refaça a prova se você mudou o conector, a regra ou a chave depois dela.
- Seção 10 sem pessoas suficientes: com uma só pessoa, os pedidos do painel não fecham. Convide a segunda antes de pedir a operação Real.