Pular para o conteúdo principal

Mocks (Sandbox)

Aviso Importante!

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:

EtapaO que decide o cenário
Consulta de saldo/margemCPF — match exato ou primeiro dígito
Averbação da reservaPrimeiro dígito do CPF
Anuência (pending_confirmation)Último dígito do número do benefício
Jornada completa em sandbox

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:

  1. Tenta um match exato do CPF contra a massa de teste.
  2. 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ígitoCenáriomargemDisponivelStatus
1Margem completa, elegível, sem bloqueios431.3200
2Erro Dataprev D1 — dados do benefício incompletos/inconsistentes/nulos412
3Margem de cartão/RCC reduzida (R$ 75,90)431.3200
4Margem completa (idêntico ao dígito 1)431.3200
8Margem de cartão/RCC zerada431.3200

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.

CPFBenefício (código)ElegívelSituaçãoBloqueioconsigned_credit.balanceavailable_total_balanceStatus
18166261553retirement_by_contribution_time (42) — margem negativaSimATIVO--7.84-7.84200
30449750345pension_by_death_statute (22)NãoINATIVOBloqueado por TBM10000200
58992386400pension_by_death_statute (22)NãoATIVOBloqueado por TBM10000200
15588881010retirement_capin_extra_emploee (37)SimATIVO-1000200200
80436724154retirement_invalidity_work_accident (92)NãoINATIVOBloqueado por TBM10005000200
34166302540pension_by_death_federal_emploee (27)NãoATIVOBloqueado por TBM10005000200
71020884851pension_by_death_diplomat (20)NãoATIVOBloqueado por TBM10005000200
76241089684retirement_invalidity_work_accident (92)NãoATIVOBloqueado por TBM10005000200
44559483922pension_by_death (21)NãoATIVOBloqueado por TBM10005000200
14429281238pension_by_death_statute (22)SimATIVO-1000300200
15843101037retirement_by_contribution_time (42)SimATIVO-10002000200
13686315092retirement_by_contribution_time (42)SimATIVO-10002000200
14937159097retirement_by_contribution_time (42)SimATIVO-100050200
15986213009retirement_by_contribution_time (42)SimATIVO-10001000200
17427272048retirement_by_age (41)SimATIVO-10001600200
16110575070retirement_by_age (41)SimATIVO-10002000200
14996024054retirement_invalidity_work_accident (92)SimATIVO-1000100200
17702273003retirement_invalidity_work_accident (92)SimATIVO-1000150200
12228342009retirement_invalidity_work_accident (92)SimATIVO-1000200200
11709160071retirement_invalidity_work_accident (92)SimATIVO-1000250200
12452312002retirement_invalidity_work_accident (92)SimATIVO-1000300200
10650137019retirement_invalidity_work_accident (92)SimATIVO-1000350200
17287554097retirement_invalidity_work_accident (92)SimATIVO-1000400200
19815793039retirement_invalidity_work_accident (92)SimATIVO-1000450200
11985375079retirement_invalidity_work_accident (92)SimATIVO-1000500200
14732376029retirement_invalidity_work_accident (92)SimATIVO-1000750200
10178596043retirement_invalidity_work_accident (92)SimATIVO-1000600200
17859801060retirement_invalidity_work_accident (92)SimATIVO-1000650200
11524380857retirement_invalidity_work_accident (92)SimATIVO-1000700200
19447847056retirement_invalidity_work_accident (92)SimATIVO-1000800200
10813389038retirement_invalidity_work_accident (92)SimATIVO-1000850200
35776131499retirement_invalidity_work_accident (92)SimATIVO-1000900200
17283313079retirement_by_contribution_time (42)SimATIVO-1000300200
14552515004retirement_by_age (41)SimATIVO-1000300200
14036419005retirement_invalidity_social_security (32)SimATIVO-1000300200
13423241020retirement_by_contribution_time (42)SimATIVO-1000200200
12382929090retirement_special (46)SimATIVO-1000200200
73527133011retirement_by_contribution_time (42)SimATIVO-1000300200
55111830081retirement_by_contribution_time (42)SimATIVO-1000300200
83995332030retirement_by_contribution_time (42)SimATIVO-1000300200
65954790019retirement_by_contribution_time (42)SimATIVO-1000300200
16257311080retirement_by_contribution_time (42)SimATIVO-1000300200

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):

ENDPOINT
/social_security/balance_request/synchronous
MÉTODO
POST
ENDPOINT
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 CPFRetorno mockadoStatus
1Sucesso BZ — "Averbação registrada"200
2Erro AN — "Conta corrente/DV do favorecido inválidos"412
3Depende do valor da operação: até R$ 1.000,00 sucesso BZ; acima disso, erro HW — "Margem consignável excedida"200 / 412
4Sucesso 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.

observação

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ícioSituação Dataprev simuladaDesfecho da reserva
0, 1, 60 — Ativo✅ Confirmada → reserved, webhook de averbação e desembolso
55 — Averbação programada✅ Confirmada → reserved
318 na 1ª página, 0 na 2ª✅ Confirmada → reserved (exercita a paginação)
818 — Pendente de confirmação⏳ Permanece em pending_confirmation
919 — Não confirmado pelo beneficiário❌ Cancelada — social_security_confirmation_denied_by_beneficiary
720 — Confirmação expirada❌ Nova tentativa de reserva ou cancelamento — social_security_confirmation_expired
2Resposta sem registros⏳ Permanece em pending_confirmation
4Erro GR — "O período está inválido"⏳ Permanece em pending_confirmation
Benefícios terminados em 2 e 4

Nesses 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