Pular para o conteúdo principal

Mocks (Sandbox)

Aviso Importante!

Não utilize dados pessoais reais (CPF, CNPJ etc.) em ambiente sandbox.

Em sandbox, duas coisas diferentes são simuladas: as chamadas à Dataprev (consulta, averbação e anuência), que a social-security-api intercepta e responde com massa de teste própria, e os retornos do CTC - CIP na portabilidade, que você dispara por rotas de mock. 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
Portabilidade — retornos do CTC - CIPA rota de mock que você chama, por cenário
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 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/nulos—412
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 é 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.

Portabilidade — retornos do CTC - CIP​

Em sandbox a QI Tech não se conecta ao CTC - CIP: a solicitação de portabilidade não é enviada ao rail interbancário e, por consequência, nenhuma resposta do banco credor original chega sozinha. A proposta permanece no status em que ficou até que você simule o retorno com as rotas abaixo.

Só existem em sandbox

As rotas /mock/** respondem apenas em sandbox. Em produção elas retornam GDF000025, e o fluxo real é conduzido pelo CTC - CIP e pelo banco credor original.

Se a chamada retornar erro de endpoint não permitido para a sua ClientIntegration, as rotas de mock ainda não foram liberadas para a sua chave — solicite a liberação ao time de integração da QI Tech.

#O que simulaEndpointevent_typeStatus exigido na proposta
1Solicitação do saldo devedor/v2/credit_transfer/proposal/{proposal_key} (PATCH)—pending_submission
2Aprovação pelo CTC/mock/credit_transfer/ctcproposal_creation_acceptedpending_response
3Rejeição pelo CTC/mock/credit_transfer/ctcproposal_creation_refusedpending_response
4Envio do saldo devedor pelo banco de origem/mock/credit_transfer/ctcproposal_approvalpending_acceptance
5Retenção pelo banco de origem/mock/credit_transfer/ctcproposal_retentionpending_acceptance
6Devolução do pagamento/mock/credit_transfer/strpayment_rejectedsettlement_sent, pending_settlement_confirmation ou paid
7Confirmação de pagamento pelo CTC/mock/credit_transfer/ctcsettlement_confirmationsettlement_sent
8Confirmação de pagamento pelo banco de origem/mock/credit_transfer/ctcpayment_confirmationpending_settlement_confirmation
9Averbação da portabilidade/mock/credit_transfer/collateral—pending_settlement_confirmation ou paid
10Averbação do refinanciamento/mock/credit_transfer/collateral—refin aceito, portabilidade averbada
11Falha na averbação do refinanciamento/mock/credit_transfer/collateral—refin aceito, portabilidade averbada
12Falha no desembolso do refinanciamento/mock/credit_transfer/disbursementdisbursement_failedrefin desembolsado

Os cenários 1 a 9 valem para a portabilidade pura. Os cenários 10 a 12 só se aplicam quando há refinanciamento do troco.

1. Solicitação do saldo devedor​

Este passo não é um mock: é a chamada real de envio da proposta ao CTC - CIP.

Se o seu requester estiver configurado com envio manual, a proposta nasce em pending_submission depois da assinatura e só solicita o saldo devedor após esta chamada. Com envio automático, ela já nasce em pending_response e você pode ir direto para o cenário 2.

ENDPOINT
/v2/credit_transfer/proposal/PROPOSAL-KEY
MÉTODO
PATCH
request.json
{
"status": "pending_response"
}

2. Aprovação pelo CTC​

Simula o aceite da solicitação pelo CTC - CIP. A proposta vai para pending_acceptance e você recebe o webhook com o portability_number, a inclusion_date e a due_balance_expected_return_date.

ENDPOINT
/mock/credit_transfer/ctc
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"event_type": "proposal_creation_accepted"
}

3. Rejeição pelo CTC​

Simula a recusa da solicitação pelo CTC - CIP. A proposta vai para rejected e o webhook traz o erro ECTC0023 ("Contrato com portabilidade em andamento").

ENDPOINT
/mock/credit_transfer/ctc
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"event_type": "proposal_creation_refused"
}

4. Envio do saldo devedor pelo banco de origem​

Simula a resposta do banco credor original com o saldo devedor. O cenário 2 tem de ter sido enviado antes. A proposta vai para accepted e o webhook traz o final_due_balance, os dados do contrato de origem e a tarifa. A partir daí, para seguir com a operação, chame o aceite da proposta.

Todos os campos além de proposal_key e event_type são opcionais — sem eles, o mock devolve os valores usados na criação da proposta.

ENDPOINT
/mock/credit_transfer/ctc
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"event_type": "proposal_approval",
"due_balance": 9000,
"installment_face_value": 300,
"installment_number": 40,
"opened_installment_number": 35,
"overdue_installment_number": 5
}
due_balance number Saldo devedor devolvido. Padrão: o valor informado na criação da proposta. installment_face_value number Valor da parcela do contrato de origem. Padrão: o valor usado na criação da proposta. installment_number number Quantidade total de parcelas do contrato de origem. Padrão: o valor usado na criação da proposta. opened_installment_number number Parcelas em aberto. Padrão: igual ao installment_number. overdue_installment_number number Parcelas em atraso. Padrão: 0.

5. Retenção pelo banco de origem​

Simula a retenção do crédito pelo banco credor original. O cenário 2 tem de ter sido enviado antes. A proposta vai para retained, com o motivo issuer_retention.

ENDPOINT
/mock/credit_transfer/ctc
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"event_type": "proposal_retention"
}

6. Devolução do pagamento pelo banco de origem​

Simula a devolução, via STR, do pagamento do saldo devedor. Só pode ser enviado depois de a proposta ser aceita e a operação de portabilidade desembolsada.

ENDPOINT
/mock/credit_transfer/str
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"event_type": "payment_rejected"
}

7. Confirmação de pagamento pelo CTC​

Simula a confirmação da liquidação pelo CTC - CIP. A proposta deve ter sido aceita e a operação de portabilidade desembolsada.

ENDPOINT
/mock/credit_transfer/ctc
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"event_type": "settlement_confirmation"
}

8. Confirmação de pagamento pelo banco de origem​

Simula a confirmação da quitação do contrato original. Deve ser chamado após o cenário 7.

ENDPOINT
/mock/credit_transfer/ctc
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"event_type": "payment_confirmation"
}

9. Averbação da garantia da portabilidade​

Simula a constituição da garantia da operação de portabilidade, após o cenário 7 ou 8.

ENDPOINT
/mock/credit_transfer/collateral
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"credit_operation_type": "portability",
"collateral_constituted": true
}

10. Averbação da garantia do refinanciamento​

Simula a constituição da garantia do refinanciamento do troco. A proposta deve estar em paid ou pending_settlement_confirmation, com a garantia da portabilidade já averbada e o refinanciamento aceito.

ENDPOINT
/mock/credit_transfer/collateral
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"credit_operation_type": "refinancing",
"collateral_constituted": true
}

11. Falha na averbação da garantia do refinanciamento​

Mesmas pré-condições do cenário 10. O webhook traz a garantia não constituída, em pending_requester_action, com os erros de averbação da Dataprev.

ENDPOINT
/mock/credit_transfer/collateral
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"credit_operation_type": "refinancing",
"collateral_constituted": false
}

12. Falha no desembolso do refinanciamento​

Simula a devolução do desembolso do troco. A operação de refinanciamento tem de ter sido desembolsada.

ENDPOINT
/mock/credit_transfer/disbursement
MÉTODO
POST
request.json
{
"proposal_key": "CHAVE DA PROPOSTA",
"event_type": "disbursement_failed"
}

Referências​