Cenários
Cenários nomeados: provisionam as respostas passivas, disparam o webhook order-notice com um
traceId e aferem o fan-out (chamadas esperadas × recebidas) correlacionado por esse trace.
Rodar é feito pela Api (POST /_sim/scenarios/{id}/run); o resultado é lido do arquivo.
Legenda:
OUT ▲ Simulation → HAASS (ação)
IN ▼ HAASS → Simulation (recebida)
·
OBRIGATÓRIA decide pass/fail
CATÁLOGO verificação (soft-delete)
NÃO ESPERADA fora do previsto
Grupo
Conector (por categoria — multi, AND)
Filtro (AND): PagarMe
Canal de venda
ERP
Bonus
Integrador
Meio de pagamento
Outros
Vtex = canal-fonte de todo cenário. Integrador = conecta o
HAASS ao meio final (CrmBonus → iFood; SystemHope → Shopify). Clientes sem integrador
integram direto com o provider. Ver
specs/Integration/023.
Estorno Pagar.me — devolução total (100%) sem execução
pagarme-refund-total
· orderId: 00-{{run}}-01
· esperadas: 0
org: StatusFlow cluster1-completude
› StatusFlow BU cluster1-bu (2300)
› StatusFlow Store all-on (2401)
ERPs: 2
· canais da loja: SITE, IFOOD
PagarMe
Vtex
Detalhes — descrição, previsto × recebido, timeline
Pedido de R$200 com split 90/10 e nada estornado. Devolução total: o DELETE tem de sair com amount 20000 e split 18000 (loja) + 2000 (comissão). É o caminho feliz — se a comissão não entrar aqui, o defeito dos 90% voltou.
Previsto × recebido
sem execução — só o previsto
OUT ▲ OUTBOUND — ações (Simulation → HAASS)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
AÇÃO
POST
notice ready-for-handling
/api/v1.0/vtex/order-notice |
1 | — |
| · |
AÇÃO
POST
faturar (invoice)
/api/v1.0/Invoice/CreateManualInvoice |
1 | — |
| · |
AÇÃO
PUT
despachar
/api/v1.0/Ordering/Dispatched |
1 | — |
| · |
AÇÃO
PUT
entregar
/api/v1.0/Ordering/Delivered |
1 | — |
| · |
AÇÃO
?
comando refund-request
? |
1 | — |
| · |
AÇÃO
?
comando refund-confirm
? |
1 | — |
IN ▼ IN — Obrigatórias (decidem pass/fail)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
OBRIGATÓRIA
Pagar.me — DELETE /charges/{id} (estorno com split)
endpoint=pagarme-charge-refund |
1..1 | — |
| · |
OBRIGATÓRIA
Pagar.me — busca da order pelo code (handler rodou)
endpoint=pagarme-orders-search |
1+ | — |
| · |
OBRIGATÓRIA
Pagar.me — payables da charge (cálculo leu a capacidade)
endpoint=pagarme-charge-payables |
1+ | — |
Estorno Pagar.me — devolução parcial (1 de 2 itens) sem execução
pagarme-refund-parcial
· orderId: 00-{{run}}-01
· esperadas: 0
org: StatusFlow cluster1-completude
› StatusFlow BU cluster1-bu (2300)
› StatusFlow Store all-on (2401)
ERPs: 2
· canais da loja: SITE, IFOOD
PagarMe
Vtex
Detalhes — descrição, previsto × recebido, timeline
Pedido de R$200 (2 × R$100), nada estornado. Devolve R$100: DELETE com amount 10000 e split 9000 + 1000 — a comissão é devolvida proporcionalmente, não só no total.
Previsto × recebido
sem execução — só o previsto
OUT ▲ OUTBOUND — ações (Simulation → HAASS)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
AÇÃO
POST
notice ready-for-handling
/api/v1.0/vtex/order-notice |
1 | — |
| · |
AÇÃO
POST
faturar (invoice)
/api/v1.0/Invoice/CreateManualInvoice |
1 | — |
| · |
AÇÃO
PUT
despachar
/api/v1.0/Ordering/Dispatched |
1 | — |
| · |
AÇÃO
PUT
entregar
/api/v1.0/Ordering/Delivered |
1 | — |
| · |
AÇÃO
?
comando refund-request
? |
1 | — |
| · |
AÇÃO
?
comando refund-confirm
? |
1 | — |
IN ▼ IN — Obrigatórias (decidem pass/fail)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
OBRIGATÓRIA
Pagar.me — DELETE /charges/{id} (estorno com split)
endpoint=pagarme-charge-refund |
1..1 | — |
| · |
OBRIGATÓRIA
Pagar.me — busca da order pelo code (handler rodou)
endpoint=pagarme-orders-search |
1+ | — |
| · |
OBRIGATÓRIA
Pagar.me — payables da charge (cálculo leu a capacidade)
endpoint=pagarme-charge-payables |
1+ | — |
Estorno Pagar.me — segundo SKU devolvido (residual) sem execução
pagarme-refund-residual
· orderId: 00-{{run}}-01
· esperadas: 0
org: StatusFlow cluster1-completude
› StatusFlow BU cluster1-bu (2300)
› StatusFlow Store all-on (2401)
ERPs: 2
· canais da loja: SITE, IFOOD
PagarMe
Vtex
Detalhes — descrição, previsto × recebido, timeline
O DEFEITO do estorno que não acontecia. Os payables já refletem o primeiro estorno de R$100, então a primeira aprovação é no-op legítimo (nada a estornar). A segunda devolução de R$100 tem de sair: DELETE com amount 10000 (9000 + 1000). Antes do fix o alvo era o valor de UM Refund, o cálculo achava que os R$100 já cobriam tudo e o segundo estorno era descartado como 'já estornado no gateway' — devolução registrada no HAASS e valor capturado na Pagar.me.
Previsto × recebido
sem execução — só o previsto
OUT ▲ OUTBOUND — ações (Simulation → HAASS)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
AÇÃO
POST
notice ready-for-handling
/api/v1.0/vtex/order-notice |
1 | — |
| · |
AÇÃO
POST
faturar (invoice)
/api/v1.0/Invoice/CreateManualInvoice |
1 | — |
| · |
AÇÃO
PUT
despachar
/api/v1.0/Ordering/Dispatched |
1 | — |
| · |
AÇÃO
PUT
entregar
/api/v1.0/Ordering/Delivered |
1 | — |
| · |
AÇÃO
?
comando refund-request
? |
1 | — |
| · |
AÇÃO
?
comando refund-confirm
? |
1 | — |
| · |
AÇÃO
?
comando refund-request
? |
1 | — |
| · |
AÇÃO
?
comando refund-confirm
? |
1 | — |
IN ▼ IN — Obrigatórias (decidem pass/fail)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
OBRIGATÓRIA
Pagar.me — DELETE /charges/{id} (estorno com split)
endpoint=pagarme-charge-refund |
1..1 | — |
| · |
OBRIGATÓRIA
Pagar.me — busca da order pelo code (handler rodou)
endpoint=pagarme-orders-search |
1+ | — |
| · |
OBRIGATÓRIA
Pagar.me — payables da charge (cálculo leu a capacidade)
endpoint=pagarme-charge-payables |
1+ | — |
Estorno Pagar.me — comissão não classificada (falha explícita) sem execução
pagarme-refund-sem-comissao
· orderId: 00-{{run}}-01
· esperadas: 0
org: StatusFlow cluster1-completude
› StatusFlow BU cluster1-bu (2300)
› StatusFlow Store all-on (2401)
ERPs: 2
· canais da loja: SITE, IFOOD
PagarMe
Vtex
Detalhes — descrição, previsto × recebido, timeline
O DEFEITO dos 90%. O split da charge tem loja + comissão, mas os payables trazem só a loja — nem a heurística nem a inferência classificam o recipient de comissão. Antes do fix saía DELETE com os 90% da loja e os 10% ficavam capturados, em silêncio. Agora o builder falha: ZERO DELETE, e o pedido vai para EstornoFalhou pelo fault consumer (a transição não é observável aqui — o assert é a ausência do estorno com as leituras presentes).
Previsto × recebido
sem execução — só o previsto
OUT ▲ OUTBOUND — ações (Simulation → HAASS)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
AÇÃO
POST
notice ready-for-handling
/api/v1.0/vtex/order-notice |
1 | — |
| · |
AÇÃO
POST
faturar (invoice)
/api/v1.0/Invoice/CreateManualInvoice |
1 | — |
| · |
AÇÃO
PUT
despachar
/api/v1.0/Ordering/Dispatched |
1 | — |
| · |
AÇÃO
PUT
entregar
/api/v1.0/Ordering/Delivered |
1 | — |
| · |
AÇÃO
?
comando refund-request
? |
1 | — |
| · |
AÇÃO
?
comando refund-confirm
? |
1 | — |
IN ▼ IN — Obrigatórias (decidem pass/fail)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
OBRIGATÓRIA
Pagar.me — NENHUM estorno (DELETE /charges/{id} 0×)
endpoint=pagarme-charge-refund |
0..0 | — |
| · |
OBRIGATÓRIA
Pagar.me — busca da order pelo code (handler rodou)
endpoint=pagarme-orders-search |
1+ | — |
| · |
OBRIGATÓRIA
Pagar.me — payables da charge (cálculo leu a capacidade)
endpoint=pagarme-charge-payables |
1+ | — |
Estorno Pagar.me — já estornado no gateway (no-op) sem execução
pagarme-refund-idempotente
· orderId: 00-{{run}}-01
· esperadas: 0
org: StatusFlow cluster1-completude
› StatusFlow BU cluster1-bu (2300)
› StatusFlow Store all-on (2401)
ERPs: 2
· canais da loja: SITE, IFOOD
PagarMe
Vtex
Detalhes — descrição, previsto × recebido, timeline
Payables mostram o pedido inteiro já estornado (capacidade zero nos dois recipients). O cálculo devolve distribuição vazia e o handler faz early-return: ZERO DELETE. É a idempotência por capacidade — protege o reprocesso do consumer (retry 5×) de estornar duas vezes. Aqui o 0× é o resultado CORRETO, e é o que distingue este cenário do 'sem comissão': lá o dinheiro estava lá e não sabíamos de quem cobrar.
Previsto × recebido
sem execução — só o previsto
OUT ▲ OUTBOUND — ações (Simulation → HAASS)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
AÇÃO
POST
notice ready-for-handling
/api/v1.0/vtex/order-notice |
1 | — |
| · |
AÇÃO
POST
faturar (invoice)
/api/v1.0/Invoice/CreateManualInvoice |
1 | — |
| · |
AÇÃO
PUT
despachar
/api/v1.0/Ordering/Dispatched |
1 | — |
| · |
AÇÃO
PUT
entregar
/api/v1.0/Ordering/Delivered |
1 | — |
| · |
AÇÃO
?
comando refund-request
? |
1 | — |
| · |
AÇÃO
?
comando refund-confirm
? |
1 | — |
IN ▼ IN — Obrigatórias (decidem pass/fail)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
OBRIGATÓRIA
Pagar.me — NENHUM estorno (DELETE /charges/{id} 0×)
endpoint=pagarme-charge-refund |
0..0 | — |
| · |
OBRIGATÓRIA
Pagar.me — busca da order pelo code (handler rodou)
endpoint=pagarme-orders-search |
1+ | — |
| · |
OBRIGATÓRIA
Pagar.me — payables da charge (cálculo leu a capacidade)
endpoint=pagarme-charge-payables |
1+ | — |
Estorno Pagar.me — marcado como manual pelo operador sem execução
pagarme-refund-manual
· orderId: 00-{{run}}-01
· esperadas: 0
org: StatusFlow cluster1-completude
› StatusFlow BU cluster1-bu (2300)
› StatusFlow Store all-on (2401)
ERPs: 2
· canais da loja: SITE, IFOOD
PagarMe
Vtex
Detalhes — descrição, previsto × recebido, timeline
Operador marca AlreadyRefundedInAcquirer (já estornou no painel da adquirente). O fluxo tem de pular o gateway INTEIRO — nem DELETE nem as leituras de order/payables — e gravar RefundSource = Manual. Exige que o operador do harness tenha perfil AdminMaster; sem isso o ConfirmRefundRequest devolve 401 e o passo fica vermelho.
Previsto × recebido
sem execução — só o previsto
OUT ▲ OUTBOUND — ações (Simulation → HAASS)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
AÇÃO
POST
notice ready-for-handling
/api/v1.0/vtex/order-notice |
1 | — |
| · |
AÇÃO
POST
faturar (invoice)
/api/v1.0/Invoice/CreateManualInvoice |
1 | — |
| · |
AÇÃO
PUT
despachar
/api/v1.0/Ordering/Dispatched |
1 | — |
| · |
AÇÃO
PUT
entregar
/api/v1.0/Ordering/Delivered |
1 | — |
| · |
AÇÃO
?
comando refund-request
? |
1 | — |
| · |
AÇÃO
?
comando refund-confirm
? |
1 | — |
IN ▼ IN — Obrigatórias (decidem pass/fail)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
OBRIGATÓRIA
Pagar.me — NENHUM estorno (DELETE /charges/{id} 0×)
endpoint=pagarme-charge-refund |
0..0 | — |
| · |
OBRIGATÓRIA
Pagar.me — order NÃO consultada (manual pula o gateway)
endpoint=pagarme-orders-search |
0..0 | — |
| · |
OBRIGATÓRIA
Pagar.me — payables NÃO consultados (manual pula o gateway)
endpoint=pagarme-charge-payables |
0..0 | — |
JSON