{
  "info": {
    "_postman_id": "c7a4d3b2-5e6f-4a71-9b8c-0d1e2f3a4b5c",
    "name": "DIAS — Simulador de webhooks do CardSign",
    "description": "Envia ao receptor do Programa DIAS cada tipo de evento do contrato (`docs/ponte-dias-contrato.md`), assinado como o CardSign assina.\n\n1. Defina `webhook_segredo` (o `whsec_…` do destino) — no ambiente ou nas variáveis desta coleção.\n2. Ajuste `dias_webhook_url` (padrão: o receptor de treinamento), `envelope_id`, `external_id`, `empresa_id`, `grupo_id` e `signatario_id` para dados que existam no DIAS.\n3. Envie. O script da coleção gera `CardSign-Event-Id`, resolve o corpo e calcula `CardSign-Signature: t=<unix>,v1=<HMAC-SHA256(segredo, t.corpo)>` com o CryptoJS do Postman.\n\nAs duas últimas requisições conferem a defesa do receptor: assinatura errada (deve recusar) e o mesmo Event-Id de novo (deve aceitar sem processar duas vezes).",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Assina como o CardSign: CardSign-Signature: t=<unix>,v1=<hex HMAC-SHA256(segredo, t + \".\" + corpo)>.",
          "const segredo = pm.variables.get(\"webhook_segredo\");",
          "if (!segredo) throw new Error(\"Defina webhook_segredo (o whsec_… do destino cadastrado no CardSign).\");",
          "const repetir = pm.request.headers.get(\"X-Simulador-Repetir\") === \"1\";",
          "pm.request.headers.remove(\"X-Simulador-Repetir\");",
          "const eventoId = repetir && pm.collectionVariables.get(\"evento_id\")",
          "  ? pm.collectionVariables.get(\"evento_id\")",
          "  : pm.variables.replaceIn(\"{{$guid}}\");",
          "pm.collectionVariables.set(\"evento_id\", eventoId);",
          "pm.collectionVariables.set(\"criado_em\", new Date().toISOString());",
          "// o corpo assinado tem de ser exatamente o que vai na rede: resolve as variáveis antes de assinar",
          "const corpo = pm.variables.replaceIn(pm.request.body.raw);",
          "pm.request.body.update({ mode: \"raw\", raw: corpo, options: { raw: { language: \"json\" } } });",
          "const t = Math.floor(Date.now() / 1000);",
          "const v1 = CryptoJS.HmacSHA256(t + \".\" + corpo, segredo).toString(CryptoJS.enc.Hex);",
          "pm.request.headers.upsert({ key: \"CardSign-Event-Id\", value: eventoId });",
          "pm.request.headers.upsert({ key: \"CardSign-Signature\", value: \"t=\" + t + \",v1=\" + v1 });",
          "pm.request.headers.upsert({ key: \"User-Agent\", value: \"CardSign-Webhooks/1\" });"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "dias_webhook_url",
      "value": "https://treinamento.gopixeltecnologia.com/api/webhooks/cardsign",
      "type": "string"
    },
    {
      "key": "webhook_segredo",
      "value": "",
      "type": "string"
    },
    {
      "key": "grupo_id",
      "value": "9a2e7c41-5d3b-4e8f-b1a6-7c0d2f9e8b13",
      "type": "string"
    },
    {
      "key": "empresa_id",
      "value": "3f6c1d2a-8b4e-4f1a-9c7d-2e5b8a1f4c90",
      "type": "string"
    },
    {
      "key": "envelope_id",
      "value": "7b1e4c2d-9f3a-4d6e-8a5b-1c2d3e4f5a6b",
      "type": "string"
    },
    {
      "key": "external_id",
      "value": "dias:pop:4821",
      "type": "string"
    },
    {
      "key": "signatario_id",
      "value": "4d9e6f2a-1b3c-4d5e-8f9a-0b1c2d3e4f5a",
      "type": "string"
    },
    {
      "key": "evento_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "criado_em",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Eventos do contrato",
      "description": "Um POST por tipo de evento, na ordem do contrato.",
      "item": [
        {
          "name": "envelope.enviado — Documento enviado",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "envelope.enviado"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"envelope.enviado\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"andamento\", \"empresa_id\": \"{{empresa_id}}\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "O envelope saiu do rascunho e os convites foram disparados."
          },
          "response": []
        },
        {
          "name": "signatario.visualizou — Pessoa abriu o link",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "signatario.visualizou"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"signatario.visualizou\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"andamento\", \"empresa_id\": \"{{empresa_id}}\" },\n  \"signatario\": { \"id\": \"{{signatario_id}}\", \"nome\": \"Mariana Costa Ribeiro\", \"funcao\": \"assinar\", \"status\": \"na_vez\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Uma pessoa abriu o link de assinatura. Traz `signatario`."
          },
          "response": []
        },
        {
          "name": "signatario.assinou — Pessoa assinou",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "signatario.assinou"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"signatario.assinou\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"andamento\", \"empresa_id\": \"{{empresa_id}}\" },\n  \"signatario\": { \"id\": \"{{signatario_id}}\", \"nome\": \"Mariana Costa Ribeiro\", \"funcao\": \"assinar\", \"status\": \"assinou\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Uma pessoa assinou. Traz `signatario`."
          },
          "response": []
        },
        {
          "name": "signatario.aprovou — Pessoa aprovou",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "signatario.aprovou"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"signatario.aprovou\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"andamento\", \"empresa_id\": \"{{empresa_id}}\" },\n  \"signatario\": { \"id\": \"{{signatario_id}}\", \"nome\": \"Mariana Costa Ribeiro\", \"funcao\": \"aprovar\", \"status\": \"assinou\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Uma pessoa com a função `aprovar` aprovou. Traz `signatario`."
          },
          "response": []
        },
        {
          "name": "signatario.testemunhou — Testemunha assinou",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "signatario.testemunhou"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"signatario.testemunhou\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"andamento\", \"empresa_id\": \"{{empresa_id}}\" },\n  \"signatario\": { \"id\": \"{{signatario_id}}\", \"nome\": \"Mariana Costa Ribeiro\", \"funcao\": \"testemunha\", \"status\": \"assinou\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Uma testemunha assinou. Traz `signatario`."
          },
          "response": []
        },
        {
          "name": "signatario.recusou — Pessoa recusou",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "signatario.recusou"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"signatario.recusou\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"recusado\", \"empresa_id\": \"{{empresa_id}}\" },\n  \"signatario\": { \"id\": \"{{signatario_id}}\", \"nome\": \"Mariana Costa Ribeiro\", \"funcao\": \"assinar\", \"status\": \"recusou\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Uma pessoa recusou; o motivo está em `GET /envelopes/{id}` (`signatarios[].motivo_recusa`). Traz `signatario`."
          },
          "response": []
        },
        {
          "name": "convite.falhou — Convite não saiu",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "convite.falhou"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"convite.falhou\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"andamento\", \"empresa_id\": \"{{empresa_id}}\" },\n  \"signatario\": { \"id\": \"{{signatario_id}}\", \"nome\": \"Mariana Costa Ribeiro\", \"funcao\": \"assinar\", \"status\": \"na_vez\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "O convite (e-mail, WhatsApp ou SMS) de uma pessoa falhou de vez. Traz `signatario`."
          },
          "response": []
        },
        {
          "name": "envelope.concluido — Documento concluído",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "envelope.concluido"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"envelope.concluido\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"concluido\", \"empresa_id\": \"{{empresa_id}}\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Todos assinaram. Só sai **depois** que o PDF final selado existe — pode baixar com `GET /envelopes/{id}/pdf`."
          },
          "response": []
        },
        {
          "name": "envelope.cancelado — Documento cancelado",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "envelope.cancelado"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"envelope.cancelado\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"cancelado\", \"empresa_id\": \"{{empresa_id}}\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "O envelope foi cancelado (pelo painel ou pela API)."
          },
          "response": []
        },
        {
          "name": "envelope.expirado — Prazo vencido",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "envelope.expirado"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"envelope.expirado\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"expirado\", \"empresa_id\": \"{{empresa_id}}\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "O prazo passou sem todas as assinaturas."
          },
          "response": []
        },
        {
          "name": "envelope.pausado — Documento pausado",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "envelope.pausado"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"envelope.pausado\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"pausado\", \"empresa_id\": \"{{empresa_id}}\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "O envelope foi pausado."
          },
          "response": []
        },
        {
          "name": "envelope.retomado — Documento retomado",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "envelope.retomado"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"envelope.retomado\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"andamento\", \"empresa_id\": \"{{empresa_id}}\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "O envelope pausado voltou para `andamento`."
          },
          "response": []
        },
        {
          "name": "envelope.exportar — Marcado para a sua integração",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "envelope.exportar"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"envelope.exportar\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"andamento\", \"empresa_id\": \"{{empresa_id}}\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Alguém marcou no painel \"Enviar a\" a sua integração. Vai só para o destino da chave marcada. Busque\n`GET /envelopes/{id}`: com `status` `concluido`, baixe o PDF (`/pdf`) e as provas e guarde na pasta que você\nligou a `pasta.id`; antes disso, espere o `envelope.concluido` (confira `exportar.marcado`).\n"
          },
          "response": []
        },
        {
          "name": "ping — Teste (ping)",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "ping"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"ping\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Enviado por `POST /webhooks/{id}/testar`. Não traz `envelope`."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Defesas do receptor",
      "description": "O receptor deve recusar assinatura errada e ignorar Event-Id repetido.",
      "item": [
        {
          "name": "Assinatura inválida (deve recusar)",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.request.headers.upsert({ key: \"CardSign-Signature\", value: \"t=\" + Math.floor(Date.now() / 1000) + \",v1=\" + \"0\".repeat(64) });"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Recusou (4xx)\", () => pm.expect(pm.response.code).to.be.within(400, 499));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "envelope.concluido"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"envelope.concluido\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"concluido\", \"empresa_id\": \"{{empresa_id}}\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Troca o `v1` por zeros depois de assinar. O receptor deve responder 4xx."
          },
          "response": []
        },
        {
          "name": "Mesmo Event-Id de novo (idempotente)",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"DIAS aceitou (2xx)\", () => pm.expect(pm.response.code).to.be.within(200, 299));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              },
              {
                "key": "CardSign-Event",
                "value": "envelope.concluido"
              },
              {
                "key": "X-Simulador-Repetir",
                "value": "1"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"{{evento_id}}\",\n  \"tipo\": \"envelope.concluido\",\n  \"criado_em\": \"{{criado_em}}\",\n  \"grupo_id\": \"{{grupo_id}}\",\n  \"envelope\": { \"id\": \"{{envelope_id}}\", \"external_id\": \"{{external_id}}\", \"status\": \"concluido\", \"empresa_id\": \"{{empresa_id}}\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{dias_webhook_url}}",
              "host": [
                "{{dias_webhook_url}}"
              ]
            },
            "description": "Reenvia com o `CardSign-Event-Id` da última requisição. O receptor deve responder 2xx sem processar de novo."
          },
          "response": []
        }
      ]
    }
  ]
}
