{
  "tool_id": "art-460-ipe-integrity-verifier",
  "note": "golden_hash filled by golden-parity.test.mjs --update; output_payload filled by fill-fixture-payloads.mjs. Vector 1: hash/rows/total all reconcile -> confirmed. Vector 2: hash mismatch -> exception. Vector 3: control total outside tolerance -> exception.",
  "vectors": [
    {
      "name": "confirmed_clean",
      "description": "Source and report hashes match, row counts match, control totals match exactly within a 0.01 tolerance.",
      "policy_parameters": {
        "source_extract_hash": "sha256:aaa111",
        "report_hash": "sha256:aaa111",
        "source_row_count": 1000,
        "report_row_count": 1000,
        "source_control_total": 500000,
        "report_control_total": 500000,
        "tolerance": 0.01
      },
      "output_payload": {
        "source_extract_hash": "sha256:aaa111",
        "report_hash": "sha256:aaa111",
        "hash_match": true,
        "source_row_count": 1000,
        "report_row_count": 1000,
        "row_count_match": true,
        "source_control_total": 500000,
        "report_control_total": 500000,
        "control_total_delta": 0,
        "tolerance": 0.01,
        "total_within_tolerance": true,
        "discrepancies": [],
        "integrity_status": "confirmed"
      },
      "golden_hash": "12bddc96b3f010027ebdda58bd2c9622f2814ad8db19e774fde3801fa4ba750f"
    },
    {
      "name": "hash_mismatch_exception",
      "description": "Report hash does not match the source extract hash even though row count and control total reconcile -- the report is not provably the entity's own output.",
      "policy_parameters": {
        "source_extract_hash": "sha256:aaa111",
        "report_hash": "sha256:bbb222",
        "source_row_count": 1000,
        "report_row_count": 1000,
        "source_control_total": 500000,
        "report_control_total": 500000,
        "tolerance": 0.01
      },
      "output_payload": {
        "source_extract_hash": "sha256:aaa111",
        "report_hash": "sha256:bbb222",
        "hash_match": false,
        "source_row_count": 1000,
        "report_row_count": 1000,
        "row_count_match": true,
        "source_control_total": 500000,
        "report_control_total": 500000,
        "control_total_delta": 0,
        "tolerance": 0.01,
        "total_within_tolerance": true,
        "discrepancies": [
          "HASH_MISMATCH"
        ],
        "integrity_status": "exception"
      },
      "golden_hash": "b792841ee07493dbae0911f00de7aec5d677ee437b426da784bce043a2f1f7c4"
    },
    {
      "name": "control_total_out_of_tolerance",
      "description": "Hash and row count reconcile but the report's control total is 250 off from the source, exceeding the 100 tolerance -- flagged as an exception.",
      "policy_parameters": {
        "source_extract_hash": "sha256:aaa111",
        "report_hash": "sha256:aaa111",
        "source_row_count": 1000,
        "report_row_count": 1000,
        "source_control_total": 500000,
        "report_control_total": 500250,
        "tolerance": 100
      },
      "output_payload": {
        "source_extract_hash": "sha256:aaa111",
        "report_hash": "sha256:aaa111",
        "hash_match": true,
        "source_row_count": 1000,
        "report_row_count": 1000,
        "row_count_match": true,
        "source_control_total": 500000,
        "report_control_total": 500250,
        "control_total_delta": 250,
        "tolerance": 100,
        "total_within_tolerance": false,
        "discrepancies": [
          "CONTROL_TOTAL_OUT_OF_TOLERANCE"
        ],
        "integrity_status": "exception"
      },
      "golden_hash": "db3f08d5986e353706bd6244ed7cab87fdc53560dc968d9838eb804b9b36f78d"
    }
  ]
}
