Go-live da Nero: checklist com prova¶
Para: Dev, Adm — Conferido em 2026-10-18.
A Nero só recebe a chave key_live_ depois de cumprir esta lista na operação nero-br-hml (operação Teste). Cada item tem uma prova: algo que se mostra (saída de teste, log, métrica, imagem do painel), não uma promessa. Item sem prova conta como não feito.
O que é¶
Este checklist complementa o Checklist de go-live, que vale para qualquer operador, com o que é específico da bet. Os números N1 a N34 são os da Nero e se mantêm estáveis, inclusive nos itens retirados. Copie para o tracker da Nero, preencha a coluna "Prova" e anexe ao registro de go-live.
Quando usar¶
Na semana anterior ao pedido da operação Real, e de novo no dia do corte (seção 5).
Como funciona¶
1. Credencial e rede¶
| # | Item | Prova |
|---|---|---|
| N1 | Credencial do Dracma legível só pelo usuário Linux do nero_payments (0400), entregue pelo ops da Nero |
stat -c '%a %U' <arquivo> mostra 400 e o usuário do nero_payments; busca por key_live_ no repositório e na imagem sem resultado |
| N2 | Egress para o Dracma só do usuário do nero_payments |
Regra nftables versionada e teste: curl ao host do Dracma a partir de outro usuário falha |
| N3 | Lista de IPs de saída (NAT, DR) registrada na operação | Imagem do painel com a lista e GET /v1/ping com 200 a partir de cada IP. A lista fica registrada mas hoje não é aplicada às chamadas; o teste prova a conectividade, não um bloqueio |
| N4 | O Dracma não publica IPs de saída do webhook; se vierem por contrato, o Caddy os aplica só na rota do webhook | Sem lista, registre a data em que o suporte confirmou isso. Com lista, trecho do Caddyfile versionado e curl à rota a partir de IP fora da lista recusado no Caddy |
| N5 | NTP ativo e alerta de desvio maior que 5 s via GET /v1/ping |
chronyc tracking e regra de alerta versionada |
| N6 | Retirado: o Dracma não emite certificado de cliente hoje | Não há prova a anexar (Rede, allowlist e mTLS) |
| N7 | Rotação de chave e de segredo de webhook ensaiadas no sandbox sem parar | Log do ensaio: dois segredos ativos, webhooks ok durante a troca, chave antiga revogada |
2. Depósito¶
| # | Item | Prova |
|---|---|---|
| N8 | external_id = dep_<uuidv7> igual ao deposit_id e à Idempotency-Key, gravado no outbox antes do POST |
Teste: matar o processo entre o commit do intent e a chamada; o worker retoma com a mesma chave e cria 1 depósito |
| N9 | Valor convertido para a menor unidade sem float | Teste de unidade com 50, 50.5, 0.01, 50.001 (recusa) e 1e3 (recusa) |
| N10 | Exigências de GET /v1/currencies respeitadas: player.name e player.email do cadastro quando exigidos; em hml só .test, .invalid ou .example |
Teste: jogador sem e-mail recebe "complete o cadastro" sem chamada ao Dracma; depósito com e-mail .test cria 201 |
| N11 | O front mostra o expires_at devolvido pelo Dracma |
Imagem da tela e teste do mapeamento |
| N12 | Crédito só em paid lido por fetch-back, idempotente por external_id |
Receita 1: 1 crédito; reentrega do mesmo evento: continua 1 |
| N13 | Webhook forjado (assinado com o segredo de sandbox) para depósito pending não credita |
Teste com a verificação de assinatura mais o fetch-back: 200, 0 créditos |
| N14 | under_review não credita; returned aparece como failed |
Receitas 2 (PAYER_MISMATCH) e 3 (AMOUNT_MISMATCH) |
| N15 | paid_amount num depósito terminal (pago depois de expirar ou cancelar) abre needs_decision e não credita (D8) |
Teste de unidade do aplicador com um objeto expired e paid_amount |
3. Saque¶
| # | Item | Prova |
|---|---|---|
| N16 | Reserva antes do POST /withdrawals, na mesma transação do intent wdr_<uuidv7> |
Teste: falha de rede no POST; a reserva continua, o worker repete com a mesma chave, 1 saque |
| N17 | Reserva devolvida só em rejected, failed ou cancelled confirmados, ou em 4xx |
Receita 8 (reject e fail): devolução exatamente 1 vez; 503 da queda simulada não devolve |
| N18 | player.ip do jogador em todo saque |
Log do corpo enviado (sem dado pessoal) com o campo presente; saque dentro do limite sai approved |
| N19 | Chave PIX normalizada e pix_type legado mapeado |
Teste de unidade (evp para random, telefone em +55...) |
| N20 | Mensagens ao jogador genéricas em bloqueio (sem revelar lista nem motivo) | Imagem das mensagens para player_blocked e destination_blocked |
| N21 | returned e recalled abrem needs_decision, sem recrédito automático (D7, D18) |
Receita 8 (return): caso na fila, carteira intacta |
| N22 | 409 idempotency_key_reused no envio abre needs_decision, reserva mantida (D12) |
Teste de unidade do tratamento de resposta |
4. Recuperação, reconciliação e operação¶
| # | Item | Prova |
|---|---|---|
| N23 | Job de GET /events a cada 5 minutos, cursor persistido, mesmo aplicador do webhook |
Teste: receptor desligado durante um pay; o job credita 1 vez em até 5 minutos |
| N24 | Reconciliação diária com digest e assinatura conferidos | Relatório de um dia de sandbox comparado nos dois lados, zero divergência, header guardado |
| N25 | Fila needs_decision no backoffice com as permissões payments.decisions.*, step-up e motivo (D11) |
Imagem da tela e teste de permissão (papel sem concessão não decide) |
| N26 | Alertas de Webhook, eventos e reconciliação ativos | Regras versionadas e disparo de teste de cada uma |
| N27 | Logs sem segredo, sem Dracma-Signature inteiro, sem CPF completo nem chave PIX em claro; Dracma-Trace-Id em toda chamada |
Amostra de log revisada e busca pelos valores proibidos sem resultado |
| N28 | Suíte de conformidade verde contra nero-br-hml |
Saída do go test -v com todos os casos do conjunto base em PASS, com a data |
5. Dia do corte¶
| # | Item | Prova |
|---|---|---|
| N29 | Front em prd sem Dracma configurado responde 503 payment_provider_not_configured e o resto da bet funciona (D5) |
Teste em hml com a credencial removida |
| N30 | Rotas legadas de gateway removidas (404) |
curl em cada rota da lista de Estados no front |
| N31 | Primeira transação real de valor mínimo (depósito e saque), acompanhada pelos dois lados, do POST à linha da reconciliação |
Registro com os external_id, os trace_id e a linha do relatório do dia |
| N32 | Caixa inicial conferido em GET /v1/balances e alerta de caixa baixo ativo |
Imagem e regra de alerta |
| N33 | Decisões do dono registradas: D1 (saques antigos), D6, D7, D8, D12 e D18 | Link para o registro de decisão |
| N34 | Registro de go-live assinado pelos responsáveis da Nero e do Dracma | Documento assinado |
Dinheiro real
O item N31 move dinheiro real. Use o valor mínimo da operação, com um jogador interno, e acompanhe o dinheiro nos dois livros antes de liberar o tráfego.
Exemplos¶
A prova de cada item de depósito e saque são as Receitas por caminho. O roteiro do primeiro dia está em Primeiros passos no sandbox.
Erros e casos de borda¶
- Um item sem prova volta para a coluna "a fazer", mesmo que o código esteja certo.
- Prova antiga (de antes de uma mudança de regras, de PSP ou de segredo) não vale: refaça.
- Se o Dracma mudar o contrato (campo novo, estado novo), repita os itens N12, N14, N21 e N28.