{
  "recorded_at": "2026-10-14T20:06:32.519004+08:00",
  "environment": {
    "python": "3.9.6",
    "system": "Darwin",
    "macos": "27.0.1",
    "machine": "arm64"
  },
  "input_kind": "synthetic teaching assumptions, not observed rainfall",
  "assumptions": [
    "Uniform liquid rainfall over a horizontal contributing area.",
    "The contributing area already includes the receiving area.",
    "No initial stored water or water contribution outside this area.",
    "Retained fraction is a supplied final-volume assumption, not an estimated runoff coefficient.",
    "Constant receiving area; depth is a model mean, not a point water level."
  ],
  "scenarios": [
    {
      "case": "same_area_all_retained",
      "rain_mm": "10",
      "contributing_m2": "100",
      "retained_fraction": "1",
      "receiving_m2": "100",
      "input_litres": "1000",
      "retained_litres": "1000",
      "model_mean_depth_mm": "10"
    },
    {
      "case": "same_area_30_percent_retained",
      "rain_mm": "10",
      "contributing_m2": "100",
      "retained_fraction": "0.3",
      "receiving_m2": "100",
      "input_litres": "1000",
      "retained_litres": "300.0",
      "model_mean_depth_mm": "3.0"
    },
    {
      "case": "all_water_concentrated_into_20_m2",
      "rain_mm": "10",
      "contributing_m2": "100",
      "retained_fraction": "1",
      "receiving_m2": "20",
      "input_litres": "1000",
      "retained_litres": "1000",
      "model_mean_depth_mm": "50"
    }
  ],
  "checks": {
    "one_mm_one_m2": {
      "rain_mm": "1",
      "contributing_m2": "1",
      "retained_fraction": "1",
      "receiving_m2": "1",
      "input_litres": "1",
      "retained_litres": "1",
      "model_mean_depth_mm": "1"
    },
    "zero_rain": {
      "rain_mm": "0",
      "contributing_m2": "100",
      "retained_fraction": "1",
      "receiving_m2": "100",
      "input_litres": "0",
      "retained_litres": "0",
      "model_mean_depth_mm": "0"
    },
    "zero_retention": {
      "rain_mm": "10",
      "contributing_m2": "100",
      "retained_fraction": "0",
      "receiving_m2": "100",
      "input_litres": "1000",
      "retained_litres": "0",
      "model_mean_depth_mm": "0"
    },
    "rejected_inputs": [
      {
        "case": "negative_rain",
        "inputs": [
          "-1",
          "100",
          "1",
          "100"
        ],
        "error": "Rain must be nonnegative; both areas must be positive."
      },
      {
        "case": "zero_contributing_area",
        "inputs": [
          "10",
          "0",
          "1",
          "100"
        ],
        "error": "Rain must be nonnegative; both areas must be positive."
      },
      {
        "case": "zero_receiving_area",
        "inputs": [
          "10",
          "100",
          "1",
          "0"
        ],
        "error": "Rain must be nonnegative; both areas must be positive."
      },
      {
        "case": "negative_fraction",
        "inputs": [
          "10",
          "100",
          "-0.1",
          "100"
        ],
        "error": "Retained fraction must be between zero and one."
      },
      {
        "case": "fraction_above_one",
        "inputs": [
          "10",
          "100",
          "1.2",
          "100"
        ],
        "error": "Retained fraction must be between zero and one."
      },
      {
        "case": "receiving_area_not_included",
        "inputs": [
          "10",
          "100",
          "1",
          "120"
        ],
        "error": "This model includes the receiving area in the contributing area."
      },
      {
        "case": "nonfinite_rain",
        "inputs": [
          "NaN",
          "100",
          "1",
          "100"
        ],
        "error": "All inputs must be finite."
      }
    ]
  },
  "hourly_teaching_profiles": [
    {
      "case": "uniform_24_hours",
      "clock_hour_amounts_mm": [
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25",
        "1.25"
      ],
      "total_24h_mm": "30.00",
      "mean_24h_mm_per_h": "1.25",
      "largest_clock_hour_amount_mm": "1.25"
    },
    {
      "case": "all_in_one_clock_hour",
      "clock_hour_amounts_mm": [
        "30",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0"
      ],
      "total_24h_mm": "30",
      "mean_24h_mm_per_h": "1.25",
      "largest_clock_hour_amount_mm": "30"
    },
    {
      "case": "first_six_clock_hours",
      "clock_hour_amounts_mm": [
        "5",
        "5",
        "5",
        "5",
        "5",
        "5",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0",
        "0"
      ],
      "total_24h_mm": "30",
      "mean_24h_mm_per_h": "1.25",
      "largest_clock_hour_amount_mm": "5"
    }
  ],
  "scope": "Arithmetic and input checks only. No physical rain gauge, real precipitation series, terrain, infiltration, drainage routing, overflow, flood forecast or site water-level validation."
}
