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): SystemHope & Vtex
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.
Troca de vendedor SystemHope — jornada completa (cancela, captura e reatribui) sem execução
change-seller-systemhope-troca-completa
· orderId:
· esperadas: 0
SystemHope → Shopify (integrador)
Vtex
Detalhes — descrição, previsto × recebido, timeline
A troca INTEIRA sem tela: cria o pedido na loja 1000 pela descida da SystemHope (cartao, delivery, um SKU), cancela como LOJA (o que abre a janela — motivo do grupo CLIENTE nao abriria), e captura pela irma 1001. O que o cenario afirma e o que so existe em execucao: `systemhope-move-location` (o FulfillmentOrder foi movido para a Location da loja que assumiu) e `systemhope-get-order` (a segunda perna buscou o pedido reatribuido, de onde o pedido da 1001 nasce pelo import). O cancelamento tambem afirma AUSENCIA de `systemhope-cancel`: pedido oferecido as irmas segue vivo na Shopify, e cancelar la seria irreversivel. Se o passo 2 disser que o pedido nao foi resolvido, o import nao concluiu — confira Sync.ImportItem (SupplierId 8, EntityTypeId 4), nao o cenario.
Previsto × recebido
sem execução — só o previsto
OUT ▲ OUTBOUND — ações (Simulation → HAASS)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
AÇÃO
?
comando cancel-with-reason
? |
1 | — |
| · |
AÇÃO
?
comando change-seller-capture
? |
1 | — |
IN ▼ IN — Obrigatórias (decidem pass/fail)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
OBRIGATÓRIA
SystemHope — pedido NAO cancelado na Shopify (foi oferecido as irmas)
endpoint=systemhope-cancel |
0..0 | — |
| · |
OBRIGATÓRIA
SystemHope — FulfillmentOrder movido para a Location da loja que assumiu
endpoint=systemhope-move-location |
1+ | — |
| · |
OBRIGATÓRIA
SystemHope — segunda perna: o pedido reatribuido foi buscado
endpoint=systemhope-get-order |
1+ | — |
Troca de vendedor SystemHope — Pix nao abre janela sem execução
change-seller-systemhope-inelegivel-pix
· orderId:
· esperadas: 0
SystemHope → Shopify (integrador)
Vtex
Detalhes — descrição, previsto × recebido, timeline
O mesmo pedido, pago em Pix. A `SellerChangeEligibilityPolicy` nega Pix, boleto, Pagar na Loja e Pagaleve — o que os quatro tem em comum e nao permitir reatribuir a cobranca a outra loja. O cancelamento ACONTECE (HTTP 200); o que nao acontece e a oferta, e o desfecho vem no CORPO (`sellerChangeWindow: RefusedByPolicy`), nao no status. E por isso que o passo declara `expectWindow`: sem ele este cenario ficaria verde tambem quando a janela abrisse, que e exatamente o defeito que ele existe para pegar. Sem janela nao ha captura, entao o passo 3 nao existe e a prova e a ausencia de `systemhope-move-location`.
Previsto × recebido
sem execução — só o previsto
OUT ▲ OUTBOUND — ações (Simulation → HAASS)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
AÇÃO
?
comando cancel-with-reason
? |
1 | — |
IN ▼ IN — Obrigatórias (decidem pass/fail)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
OBRIGATÓRIA
SystemHope — nada reatribuido (a janela nao abriu)
endpoint=systemhope-move-location |
0..0 | — |
Troca de vendedor SystemHope — parceiro recusa a reatribuicao sem execução
change-seller-systemhope-parceiro-recusa
· orderId:
· esperadas: 0
SystemHope → Shopify (integrador)
Vtex
Detalhes — descrição, previsto × recebido, timeline
A captura responde OK ao operador e a reatribuicao falha DEPOIS, no parceiro: o `systemhope-move-location` deste pedido devolve 422. E o desenho que torna a recusa compensavel — no instante da chamada existe um pedido so, entao devolver o pedido para AguardandoNovoSeller e reabrir a candidatura nao esbarra em referencia externa duplicada. Duas afirmacoes: o move-location acontece UMA vez (4xx e terminal na esteira de saida — `OutboundDispatcher` classifica 400-499 como Terminal —, entao 2 aqui significa retry indevido) e o `systemhope-get-order` NAO acontece (buscar o pedido reatribuido depois de uma recusa criaria o pedido da loja nova para uma troca que nao houve). O reparo — janela reaberta pelo ator, pedido de volta a vitrine — nao passa pelo parceiro e por isso nao aparece no call-log: confira em ChangeSellerOrder (ReassignFailedAt preenchido) ou na tela.
Previsto × recebido
sem execução — só o previsto
OUT ▲ OUTBOUND — ações (Simulation → HAASS)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
AÇÃO
?
comando cancel-with-reason
? |
1 | — |
| · |
AÇÃO
?
comando change-seller-capture
? |
1 | — |
IN ▼ IN — Obrigatórias (decidem pass/fail)
| Chamada | Previsto | Veio | |
|---|---|---|---|
| · |
OBRIGATÓRIA
SystemHope — pedido NAO cancelado na Shopify (foi oferecido as irmas)
endpoint=systemhope-cancel |
0..0 | — |
| · |
OBRIGATÓRIA
SystemHope — FulfillmentOrder movido para a Location da loja que assumiu
endpoint=systemhope-move-location |
1..1 | — |
| · |
OBRIGATÓRIA
SystemHope — pedido reatribuido NAO buscado (a reatribuicao falhou)
endpoint=systemhope-get-order |
0..0 | — |
JSON