Mocks (Sandbox)
Não utilize dados pessoais reais (CPF, CNPJ etc.) em ambiente sandbox.
A social-security-api intercepta as chamadas à Dataprev em ambiente sandbox/dev e retorna respostas mockadas via dataprev_mocker.py. Cada etapa da jornada tem sua própria chave de simulação:
| Etapa | O que decide o cenário |
|---|---|
| Consulta de saldo/margem | CPF — match exato ou primeiro dígito |
| Averbação da reserva | Primeiro dígito do CPF |
Anuência (pending_confirmation) | Último dígito do número do benefício |
Para que a operação percorra a jornada inteira até o desembolso, o CPF e o número do benefício precisam cair, ao mesmo tempo, num cenário de sucesso de saldo, de averbação e de anuência. Combinação recomendada: CPF iniciado em 1 e benefício terminado em 0.
Consulta de saldo
A consulta de saldo/margem (DataprevMocker.get_balance_mocker) resolve o document_number em duas etapas:
- Tenta um match exato do CPF contra a massa de teste.
- Se não encontrar, usa o primeiro dígito do CPF como chave.
Se nenhuma das duas resolver, retorna o erro fixo:
{
"erros": [
{
"codigo": "QIE",
"mensagem": "CPF divergente da massa de teste informada na documentação."
}
]
}
com HTTP 412.
Cenários por primeiro dígito (fallback)
Qualquer CPF de teste cujo primeiro dígito seja um dos abaixo cai num destes cenários genéricos — útil quando você não precisa de um CPF fixo:
| 1º dígito | Cenário | margemDisponivel | Status |
|---|---|---|---|
1 | Margem completa, elegível, sem bloqueios | 431.3 | 200 |
2 | Erro Dataprev D1 — dados do benefício incompletos/inconsistentes/nulos | — | 412 |
3 | Margem de cartão/RCC reduzida (R$ 75,90) | 431.3 | 200 |
4 | Margem completa (idêntico ao dígito 1) | 431.3 | 200 |
8 | Margem de cartão/RCC zerada | 431.3 | 200 |
CPFs com primeiro dígito 0, 5, 6, 7 ou 9 (e que não tenham match exato) caem no erro QIE acima.
Além desses, o mocker reconhece 42 CPFs com match exato — a tabela completa está abaixo.
CPFs com match exato
Campos já mapeados para o schema público da QI: consigned_credit.balance vem de margemDisponivel, available_total_balance vem de valorDisponivelAverbacaoEmprestimo. Boa parte dos CPFs com retirement_invalidity_work_accident existe só pra cobrir uma faixa de valores de available_total_balance (de R$ 50 a R$ 900) — útil pra testar simulação de dívida contra um teto de margem específico.
| CPF | Benefício (código) | Elegível | Situação | Bloqueio | consigned_credit.balance | available_total_balance | Status |
|---|---|---|---|---|---|---|---|
18166261553 | retirement_by_contribution_time (42) — margem negativa | Sim | ATIVO | - | -7.84 | -7.84 | 200 |
30449750345 | pension_by_death_statute (22) | Não | INATIVO | Bloqueado por TBM | 1000 | 0 | 200 |
58992386400 | pension_by_death_statute (22) | Não | ATIVO | Bloqueado por TBM | 1000 | 0 | 200 |
15588881010 | retirement_capin_extra_emploee (37) | Sim | ATIVO | - | 1000 | 200 | 200 |
80436724154 | retirement_invalidity_work_accident (92) | Não | INATIVO | Bloqueado por TBM | 1000 | 5000 | 200 |
34166302540 | pension_by_death_federal_emploee (27) | Não | ATIVO | Bloqueado por TBM | 1000 | 5000 | 200 |
71020884851 | pension_by_death_diplomat (20) | Não | ATIVO | Bloqueado por TBM | 1000 | 5000 | 200 |
76241089684 | retirement_invalidity_work_accident (92) | Não | ATIVO | Bloqueado por TBM | 1000 | 5000 | 200 |
44559483922 | pension_by_death (21) | Não | ATIVO | Bloqueado por TBM | 1000 | 5000 | 200 |
14429281238 | pension_by_death_statute (22) | Sim | ATIVO | - | 1000 | 300 | 200 |
15843101037 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 2000 | 200 |
13686315092 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 2000 | 200 |
14937159097 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 50 | 200 |
15986213009 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 1000 | 200 |
17427272048 | retirement_by_age (41) | Sim | ATIVO | - | 1000 | 1600 | 200 |
16110575070 | retirement_by_age (41) | Sim | ATIVO | - | 1000 | 2000 | 200 |
14996024054 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 100 | 200 |
17702273003 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 150 | 200 |
12228342009 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 200 | 200 |
11709160071 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 250 | 200 |
12452312002 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 300 | 200 |
10650137019 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 350 | 200 |
17287554097 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 400 | 200 |
19815793039 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 450 | 200 |
11985375079 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 500 | 200 |
14732376029 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 750 | 200 |
10178596043 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 600 | 200 |
17859801060 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 650 | 200 |
11524380857 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 700 | 200 |
19447847056 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 800 | 200 |
10813389038 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 850 | 200 |
35776131499 | retirement_invalidity_work_accident (92) | Sim | ATIVO | - | 1000 | 900 | 200 |
17283313079 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 300 | 200 |
14552515004 | retirement_by_age (41) | Sim | ATIVO | - | 1000 | 300 | 200 |
14036419005 | retirement_invalidity_social_security (32) | Sim | ATIVO | - | 1000 | 300 | 200 |
13423241020 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 200 | 200 |
12382929090 | retirement_special (46) | Sim | ATIVO | - | 1000 | 200 | 200 |
73527133011 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 300 | 200 |
55111830081 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 300 | 200 |
83995332030 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 300 | 200 |
65954790019 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 300 | 200 |
16257311080 | retirement_by_contribution_time (42) | Sim | ATIVO | - | 1000 | 300 | 200 |
Todos os CPFs acima retornam bloqueadoParaEmprestimo: false, exceto os marcados com "Bloqueado por TBM" na coluna Bloqueio (que ainda assim respondem HTTP 200 com elegivelEmprestimo: false).
Exemplo de requisição (funciona com qualquer CPF da tabela):
POST /social_security/balance_request/synchronous
{
"document_number": "18166261553",
"benefit_number": "2052711150"
}
Resposta (HTTP 200) para o CPF de margem negativa, já mapeada para o schema público:
{
"assistance_type": "retirement_by_contribution_time",
"available_total_balance": -7.84,
"consigned_credit": {
"balance": -7.84
},
"payroll_card": {
"balance": 0,
"limit": 2083.2
},
"benefit_card": {
"balance": 0,
"limit": 2083.2
},
"block_type": "not_blocked",
"benefit_situation": "active"
}
Averbação
O envio da reserva à Dataprev (DataprevMocker.send_reserve_balance) é resolvido apenas pelo primeiro dígito do CPF — o número do benefício não influencia esta etapa:
| 1º dígito do CPF | Retorno mockado | Status |
|---|---|---|
1 | Sucesso BZ — "Averbação registrada" | 200 |
2 | Erro AN — "Conta corrente/DV do favorecido inválidos" | 412 |
3 | Depende do valor da operação: até R$ 1.000,00 sucesso BZ; acima disso, erro HW — "Margem consignável excedida" | 200 / 412 |
4 | Sucesso BZ — "Averbação registrada" | 200 |
Qualquer outro primeiro dígito retorna o erro QIE ("CPF divergente da massa de teste informada na documentação"), com HTTP 412.
Averbação bem-sucedida não conclui a reserva: em crédito novo e refinanciamento ela entra em anuência. Portabilidade não exige anuência e segue direto para reserved.
Anuência
Depois da averbação, crédito novo e refinanciamento ficam em pending_confirmation até a Dataprev informar a confirmação do beneficiário — veja Anuência (pending confirmation) para o fluxo e os webhooks.
Em sandbox, a resposta dessa consulta é determinada pelo último dígito do número do benefício informado na reserva:
| Último dígito do benefício | Situação Dataprev simulada | Desfecho da reserva |
|---|---|---|
0, 1, 6 | 0 — Ativo | ✅ Confirmada → reserved, webhook de averbação e desembolso |
5 | 5 — Averbação programada | ✅ Confirmada → reserved |
3 | 18 na 1ª página, 0 na 2ª | ✅ Confirmada → reserved (exercita a paginação) |
8 | 18 — Pendente de confirmação | ⏳ Permanece em pending_confirmation |
9 | 19 — Não confirmado pelo beneficiário | ❌ Cancelada — social_security_confirmation_denied_by_beneficiary |
7 | 20 — Confirmação expirada | ❌ Nova tentativa de reserva ou cancelamento — social_security_confirmation_expired |
2 | Resposta sem registros | ⏳ Permanece em pending_confirmation |
4 | Erro GR — "O período está inválido" | ⏳ Permanece em pending_confirmation |
2 e 4Nesses dois cenários a consulta nunca devolve uma situação conclusiva, então a reserva fica em pending_confirmation indefinidamente e os webhooks de averbação e de pagamento não são emitidos. Se o objetivo é testar a jornada completa, use um benefício terminado em 0, 1, 3, 5 ou 6.
Referências
dataprev_mocker.py— massa de teste completa- Consulta Offline de Saldo — schema de resposta completo