{
  "tool_id": "art-661-interest-accrual-recompute",
  "note": "Golden vectors: MATCHES (single core posting at period end), DIVERGES (single mismatched posting), INDETERMINATE (no core postings to diff against), tiered+daily-compounding MATCHES, and an out-of-declared-domain rejection.",
  "vectors": [
    {
      "name": "matches-fixed-rate-single-posting",
      "policy_parameters": {
        "daily_balances": [
          {
            "date": "2026-01-01",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-02",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-03",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-04",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-05",
            "principal_balance_cents": 100000
          }
        ],
        "core_reported_accruals": [
          {
            "date": "2026-01-05",
            "amount_cents": 70
          }
        ],
        "product_terms": {
          "day_count_convention": "actual/365",
          "compounding": "none",
          "rate_type": "fixed",
          "rate_value": 0.05
        }
      },
      "output_payload": {
        "valid_input": true,
        "domain_errors": [],
        "schedule": [
          {
            "date": "2026-01-01",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 14,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-02",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 28,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-03",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 42,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-04",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 56,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-05",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 70,
            "cumulative_core_reported_cents": 70
          }
        ],
        "total_recomputed_accrual_cents": 70,
        "core_reported_total_cents": 70,
        "verdict": "MATCHES",
        "first_divergence": null,
        "day_count_convention": "actual/365",
        "compounding": "none",
        "rate_type": "fixed",
        "note": "Verify-only recomputation of per-day interest accrual over the caller-declared day-count convention and compounding basis, diffed against the core's own posted accrual/interest-paid ledger entries. This is an independent recompute-and-receipt, not a claim to find defects in the core, and not an endorsement or substitution of any core platform."
      },
      "golden_hash": "bcfe6b3b1f9c2afbb824b8c1e81e9f6fbb095273d659c5cdb6fb228a12f6fefa"
    },
    {
      "name": "diverges-fixed-rate-single-posting",
      "policy_parameters": {
        "daily_balances": [
          {
            "date": "2026-01-01",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-02",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-03",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-04",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-05",
            "principal_balance_cents": 100000
          }
        ],
        "core_reported_accruals": [
          {
            "date": "2026-01-05",
            "amount_cents": 65
          }
        ],
        "product_terms": {
          "day_count_convention": "actual/365",
          "compounding": "none",
          "rate_type": "fixed",
          "rate_value": 0.05
        }
      },
      "output_payload": {
        "valid_input": true,
        "domain_errors": [],
        "schedule": [
          {
            "date": "2026-01-01",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 14,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-02",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 28,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-03",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 42,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-04",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 56,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-05",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 70,
            "cumulative_core_reported_cents": 65
          }
        ],
        "total_recomputed_accrual_cents": 70,
        "core_reported_total_cents": 65,
        "verdict": "DIVERGES",
        "first_divergence": {
          "date": "2026-01-05",
          "diff_cents": 5
        },
        "day_count_convention": "actual/365",
        "compounding": "none",
        "rate_type": "fixed",
        "note": "Verify-only recomputation of per-day interest accrual over the caller-declared day-count convention and compounding basis, diffed against the core's own posted accrual/interest-paid ledger entries. This is an independent recompute-and-receipt, not a claim to find defects in the core, and not an endorsement or substitution of any core platform."
      },
      "golden_hash": "e48d73581322fa734ff83d77079effb0d497b181294dc0cde2b4f201117665f6"
    },
    {
      "name": "indeterminate-no-core-postings",
      "policy_parameters": {
        "daily_balances": [
          {
            "date": "2026-01-01",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-02",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-03",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-04",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-05",
            "principal_balance_cents": 100000
          }
        ],
        "core_reported_accruals": [],
        "product_terms": {
          "day_count_convention": "actual/365",
          "compounding": "none",
          "rate_type": "fixed",
          "rate_value": 0.05
        }
      },
      "output_payload": {
        "valid_input": true,
        "domain_errors": [],
        "schedule": [
          {
            "date": "2026-01-01",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 14,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-02",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 28,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-03",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 42,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-04",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 56,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-01-05",
            "day_count_denominator": 365,
            "applicable_rate": 0.05,
            "principal_balance_cents": 100000,
            "daily_accrual_cents": 14,
            "cumulative_recomputed_cents": 70,
            "cumulative_core_reported_cents": null
          }
        ],
        "total_recomputed_accrual_cents": 70,
        "core_reported_total_cents": 0,
        "verdict": "INDETERMINATE",
        "first_divergence": null,
        "day_count_convention": "actual/365",
        "compounding": "none",
        "rate_type": "fixed",
        "note": "Verify-only recomputation of per-day interest accrual over the caller-declared day-count convention and compounding basis, diffed against the core's own posted accrual/interest-paid ledger entries. This is an independent recompute-and-receipt, not a claim to find defects in the core, and not an endorsement or substitution of any core platform."
      },
      "golden_hash": "7c65c43cc2d6db568281455b71e8d8da09984e86b77434853870e53d69af47ef"
    },
    {
      "name": "matches-tiered-daily-compounding",
      "policy_parameters": {
        "daily_balances": [
          {
            "date": "2026-02-01",
            "principal_balance_cents": 60000
          },
          {
            "date": "2026-02-02",
            "principal_balance_cents": 60000
          },
          {
            "date": "2026-02-03",
            "principal_balance_cents": 60000
          }
        ],
        "core_reported_accruals": [
          {
            "date": "2026-02-03",
            "amount_cents": 15
          }
        ],
        "product_terms": {
          "day_count_convention": "actual/360",
          "compounding": "daily",
          "rate_type": "tiered",
          "tiers": [
            {
              "tier_floor_cents": 0,
              "tier_ceiling_cents": 50000,
              "rate_value": 0.01
            },
            {
              "tier_floor_cents": 50000,
              "tier_ceiling_cents": null,
              "rate_value": 0.03
            }
          ]
        }
      },
      "output_payload": {
        "valid_input": true,
        "domain_errors": [],
        "schedule": [
          {
            "date": "2026-02-01",
            "day_count_denominator": 360,
            "applicable_rate": 0.03,
            "principal_balance_cents": 60000,
            "daily_accrual_cents": 5,
            "cumulative_recomputed_cents": 5,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-02-02",
            "day_count_denominator": 360,
            "applicable_rate": 0.03,
            "principal_balance_cents": 60000,
            "daily_accrual_cents": 5,
            "cumulative_recomputed_cents": 10,
            "cumulative_core_reported_cents": null
          },
          {
            "date": "2026-02-03",
            "day_count_denominator": 360,
            "applicable_rate": 0.03,
            "principal_balance_cents": 60000,
            "daily_accrual_cents": 5,
            "cumulative_recomputed_cents": 15,
            "cumulative_core_reported_cents": 15
          }
        ],
        "total_recomputed_accrual_cents": 15,
        "core_reported_total_cents": 15,
        "verdict": "MATCHES",
        "first_divergence": null,
        "day_count_convention": "actual/360",
        "compounding": "daily",
        "rate_type": "tiered",
        "note": "Verify-only recomputation of per-day interest accrual over the caller-declared day-count convention and compounding basis, diffed against the core's own posted accrual/interest-paid ledger entries. This is an independent recompute-and-receipt, not a claim to find defects in the core, and not an endorsement or substitution of any core platform."
      },
      "golden_hash": "6b6324c54f70ee1ae34dbda1b044bfbaf97864bd9f6ba14d5f8e9c9a5712c2d3"
    },
    {
      "name": "rejects-out-of-domain-day-count-convention",
      "policy_parameters": {
        "daily_balances": [
          {
            "date": "2026-01-01",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-02",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-03",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-04",
            "principal_balance_cents": 100000
          },
          {
            "date": "2026-01-05",
            "principal_balance_cents": 100000
          }
        ],
        "core_reported_accruals": [],
        "product_terms": {
          "day_count_convention": "bogus",
          "compounding": "none",
          "rate_type": "fixed",
          "rate_value": 0.05
        }
      },
      "output_payload": {
        "valid_input": false,
        "domain_errors": [
          "product_terms.day_count_convention must be one of 30/360, actual/360, actual/365, actual/actual"
        ],
        "schedule": [],
        "total_recomputed_accrual_cents": null,
        "core_reported_total_cents": null,
        "verdict": "INDETERMINATE",
        "first_divergence": null
      },
      "golden_hash": "ea48f1e951dd0e7afdc0baf64a35f250a8ce9d6b7482877db2b9a8a83c139e38"
    }
  ]
}
