{
  "study_id": "extra-payment-25-increments",
  "methodology_version": "1.0",
  "engine_version": "1.0.0",
  "dataset_rows_checked": 12000,
  "baseline_profiles_checked": 600,
  "csv_columns_checked": 29,
  "field_checks_performed": 348000,
  "fields_checked": [
    "scenario_id",
    "baseline_profile_id",
    "methodology_version",
    "engine_version",
    "starting_balance",
    "apr",
    "baseline_payment_rate_pct",
    "baseline_monthly_payment",
    "extra_monthly_payment",
    "increased_monthly_payment",
    "extra_as_pct_starting_balance",
    "payment_increase_pct",
    "month1_interest",
    "baseline_payment_minus_month1_interest",
    "baseline_status",
    "baseline_payoff_months",
    "baseline_interest",
    "baseline_total_paid",
    "extra_status",
    "extra_payoff_months",
    "extra_interest",
    "extra_total_paid",
    "comparison_class",
    "months_saved",
    "interest_saved",
    "payoff_time_reduction_pct",
    "interest_reduction_pct",
    "marginal_months_saved_from_previous_25",
    "marginal_interest_saved_from_previous_25"
  ],
  "decimal_oracle": "Python Decimal with ROUND_HALF_UP at the cent after each monthly interest calculation and at six decimal places for percentage fields",
  "dataset_sha256": "236aa8d24c0949b7f00e6a31929b67a7be7ee53809b3eaa76906110ae199b9bb",
  "integrity_checks": {
    "header_matches_expected_29_columns": true,
    "expected_row_count": 12000,
    "actual_row_count": 12000,
    "expected_baseline_profile_count": 600,
    "actual_baseline_profile_count": 600,
    "unique_scenario_id_count": 12000,
    "unique_input_combination_count": 12000,
    "expected_input_combination_count": 12000
  },
  "discrepancy_count": 0,
  "status": "passed",
  "sample_discrepancies": []
}
