{
 "issue_day": "2026-11-02",
 "issued_at_myt": "2026-11-02T11:24:37.281691+08:00",
 "horizon_days": 3,
 "model": "longrecord_model (pack MY)",
 "tau": 0.72888,
 "tau_watch": 0.6909,
 "nwp": "Open-Meteo best_match hourly",
 "glofas": "GloFAS v4 reanalysis + forecast (Open-Meteo flood API)",
 "backfill": false,
 "states": {
  "Perlis": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.4731,
     "level": 0,
     "call": "clear",
     "rain_mm": 7.1,
     "rain3_mm": 19.2,
     "sat": 1.065,
     "glofas_ratio": 0.163,
     "point_rain_max_mm": 18.1
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.2822,
     "level": 0,
     "call": "clear",
     "rain_mm": 9.4,
     "rain3_mm": 20.6,
     "sat": 1.073,
     "glofas_ratio": 0.14,
     "point_rain_max_mm": 16.9
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.164,
     "level": 0,
     "call": "clear",
     "rain_mm": 8.0,
     "rain3_mm": 24.5,
     "sat": 1.1,
     "glofas_ratio": 0.172,
     "point_rain_max_mm": 15.8
    }
   },
   "today": {
    "p": 0.7363,
    "level": 0,
    "rain_mm_so_far": 4.1,
    "sat": 1.11
   }
  },
  "Kedah": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.4609,
     "level": 0,
     "call": "clear",
     "rain_mm": 9.3,
     "rain3_mm": 26.1,
     "sat": 1.119,
     "glofas_ratio": 0.268,
     "point_rain_max_mm": 20.9
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.3477,
     "level": 0,
     "call": "clear",
     "rain_mm": 10.2,
     "rain3_mm": 27.1,
     "sat": 1.128,
     "glofas_ratio": 0.243,
     "point_rain_max_mm": 17.5
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.3112,
     "level": 0,
     "call": "clear",
     "rain_mm": 12.1,
     "rain3_mm": 31.6,
     "sat": 1.14,
     "glofas_ratio": 0.266,
     "point_rain_max_mm": 23.7
    }
   },
   "today": {
    "p": 0.7481,
    "level": 0,
    "rain_mm_so_far": 7.6,
    "sat": 1.127
   }
  },
  "Pulau Pinang": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.1058,
     "level": 0,
     "call": "clear",
     "rain_mm": 8.4,
     "rain3_mm": 25.6,
     "sat": 1.275,
     "glofas_ratio": 0.318,
     "point_rain_max_mm": 17.4,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 17.4,
      "model": "best_match",
      "point": [
       5.4,
       100.5
      ],
      "by_model": {
       "best_match": 17.4,
       "ecmwf_ifs025": 14.3,
       "icon_seamless": 8.0
      },
      "n_points": 9
     }
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.0945,
     "level": 0,
     "call": "clear",
     "rain_mm": 11.2,
     "rain3_mm": 27.9,
     "sat": 1.277,
     "glofas_ratio": 0.388,
     "point_rain_max_mm": 17.7,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 22.5,
      "model": "ecmwf_ifs025",
      "point": [
       5.2,
       100.5
      ],
      "by_model": {
       "best_match": 21.4,
       "ecmwf_ifs025": 22.5,
       "icon_seamless": 8.1
      },
      "n_points": 9
     }
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.1379,
     "level": 0,
     "call": "clear",
     "rain_mm": 12.5,
     "rain3_mm": 32.1,
     "sat": 1.328,
     "glofas_ratio": 0.502,
     "point_rain_max_mm": 19.7,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 24.9,
      "model": "icon_seamless",
      "point": [
       5.3,
       100.5
      ],
      "by_model": {
       "best_match": 16.6,
       "ecmwf_ifs025": 16.5,
       "icon_seamless": 24.9
      },
      "n_points": 9
     }
    }
   },
   "today": {
    "p": 0.1164,
    "level": 0,
    "rain_mm_so_far": 8.3,
    "sat": 1.257,
    "level_rule": 0,
    "urban_rule": {
     "level": 0,
     "max_mm": 19.7,
     "model": "best_match",
     "point": [
      5.5,
      100.5
     ],
     "by_model": {
      "best_match": 19.7,
      "ecmwf_ifs025": 15.0,
      "icon_seamless": 7.4
     },
     "n_points": 9,
     "basis": "NWP local-day total (analysed hours + forecast) at the wettest point"
    },
    "level_final": 0
   }
  },
  "Perak": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.6411,
     "level": 0,
     "call": "clear",
     "rain_mm": 8.3,
     "rain3_mm": 23.2,
     "sat": 1.105,
     "glofas_ratio": 0.411,
     "point_rain_max_mm": 18.3
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.4671,
     "level": 0,
     "call": "clear",
     "rain_mm": 11.9,
     "rain3_mm": 27.3,
     "sat": 1.108,
     "glofas_ratio": 0.363,
     "point_rain_max_mm": 24.8
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.3669,
     "level": 0,
     "call": "clear",
     "rain_mm": 11.3,
     "rain3_mm": 31.5,
     "sat": 1.142,
     "glofas_ratio": 0.324,
     "point_rain_max_mm": 24.6
    }
   },
   "today": {
    "p": 0.8526,
    "level": 0,
    "rain_mm_so_far": 7.1,
    "sat": 1.117
   }
  },
  "Selangor": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.0798,
     "level": 0,
     "call": "clear",
     "rain_mm": 9.5,
     "rain3_mm": 25.0,
     "sat": 1.265,
     "glofas_ratio": 0.304,
     "point_rain_max_mm": 16.6,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 30.2,
      "model": "best_match",
      "point": [
       3.5,
       101.7
      ],
      "by_model": {
       "best_match": 30.2,
       "ecmwf_ifs025": 19.8,
       "icon_seamless": 29.3
      },
      "n_points": 64
     }
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.0911,
     "level": 0,
     "call": "clear",
     "rain_mm": 15.3,
     "rain3_mm": 35.1,
     "sat": 1.299,
     "glofas_ratio": 0.368,
     "point_rain_max_mm": 24.5,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 31.4,
      "model": "best_match",
      "point": [
       3.3,
       101.7
      ],
      "by_model": {
       "best_match": 31.4,
       "ecmwf_ifs025": 26.4,
       "icon_seamless": 21.7
      },
      "n_points": 64
     }
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.1186,
     "level": 0,
     "call": "clear",
     "rain_mm": 11.7,
     "rain3_mm": 36.5,
     "sat": 1.42,
     "glofas_ratio": 0.435,
     "point_rain_max_mm": 19.1,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 46.8,
      "model": "icon_seamless",
      "point": [
       3.6,
       101.4
      ],
      "by_model": {
       "best_match": 21.8,
       "ecmwf_ifs025": 18.0,
       "icon_seamless": 46.8
      },
      "n_points": 64
     }
    }
   },
   "today": {
    "p": 0.1528,
    "level": 0,
    "rain_mm_so_far": 10.2,
    "sat": 1.196,
    "level_rule": 0,
    "urban_rule": {
     "level": 0,
     "max_mm": 42.4,
     "model": "icon_seamless",
     "point": [
      3.2,
      101.8
     ],
     "by_model": {
      "best_match": 24.5,
      "ecmwf_ifs025": 18.9,
      "icon_seamless": 42.4
     },
     "n_points": 64,
     "basis": "NWP local-day total (analysed hours + forecast) at the wettest point"
    },
    "level_final": 0
   }
  },
  "Kuala Lumpur": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.0421,
     "level": 0,
     "call": "clear",
     "rain_mm": 13.0,
     "rain3_mm": 25.2,
     "sat": 1.231,
     "glofas_ratio": 0.196,
     "point_rain_max_mm": 15.5,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 22.0,
      "model": "best_match",
      "point": [
       3.18,
       101.74
      ],
      "by_model": {
       "best_match": 22.0,
       "ecmwf_ifs025": 15.0,
       "icon_seamless": 20.9
      },
      "n_points": 13
     }
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.0885,
     "level": 0,
     "call": "clear",
     "rain_mm": 22.6,
     "rain3_mm": 45.2,
     "sat": 1.353,
     "glofas_ratio": 0.33,
     "point_rain_max_mm": 27.6,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 26.4,
      "model": "ecmwf_ifs025",
      "point": [
       3.14,
       101.68
      ],
      "by_model": {
       "best_match": 25.4,
       "ecmwf_ifs025": 26.4,
       "icon_seamless": 21.7
      },
      "n_points": 13
     }
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.093,
     "level": 0,
     "call": "clear",
     "rain_mm": 12.4,
     "rain3_mm": 48.1,
     "sat": 1.5,
     "glofas_ratio": 0.29,
     "point_rain_max_mm": 15.6,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 33.0,
      "model": "icon_seamless",
      "point": [
       3.14,
       101.68
      ],
      "by_model": {
       "best_match": 18.1,
       "ecmwf_ifs025": 15.0,
       "icon_seamless": 33.0
      },
      "n_points": 13
     }
    }
   },
   "today": {
    "p": 0.0642,
    "level": 0,
    "rain_mm_so_far": 9.6,
    "sat": 1.159,
    "level_rule": 0,
    "urban_rule": {
     "level": 0,
     "max_mm": 39.1,
     "model": "icon_seamless",
     "point": [
      3.22,
      101.66
     ],
     "by_model": {
      "best_match": 12.1,
      "ecmwf_ifs025": 16.3,
      "icon_seamless": 39.1
     },
     "n_points": 13,
     "basis": "NWP local-day total (analysed hours + forecast) at the wettest point"
    },
    "level_final": 0
   }
  },
  "Putrajaya": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.0373,
     "level": 0,
     "call": "clear",
     "rain_mm": 11.3,
     "rain3_mm": 27.9,
     "sat": 1.316,
     "glofas_ratio": 0.154,
     "point_rain_max_mm": 13.4,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 18.6,
      "model": "icon_seamless",
      "point": [
       2.94,
       101.68
      ],
      "by_model": {
       "best_match": 13.5,
       "ecmwf_ifs025": 14.1,
       "icon_seamless": 18.6
      },
      "n_points": 10
     }
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.0486,
     "level": 0,
     "call": "clear",
     "rain_mm": 24.9,
     "rain3_mm": 51.1,
     "sat": 1.373,
     "glofas_ratio": 0.247,
     "point_rain_max_mm": 26.3,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 25.1,
      "model": "best_match",
      "point": [
       2.9,
       101.7
      ],
      "by_model": {
       "best_match": 25.1,
       "ecmwf_ifs025": 18.9,
       "icon_seamless": 9.0
      },
      "n_points": 10
     }
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.085,
     "level": 0,
     "call": "clear",
     "rain_mm": 10.7,
     "rain3_mm": 46.9,
     "sat": 1.5,
     "glofas_ratio": 0.278,
     "point_rain_max_mm": 13.9,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 15.0,
      "model": "ecmwf_ifs025",
      "point": [
       2.9,
       101.66
      ],
      "by_model": {
       "best_match": 12.7,
       "ecmwf_ifs025": 15.0,
       "icon_seamless": 12.9
      },
      "n_points": 10
     }
    }
   },
   "today": {
    "p": 0.0475,
    "level": 0,
    "rain_mm_so_far": 14.8,
    "sat": 1.147,
    "level_rule": 0,
    "urban_rule": {
     "level": 0,
     "max_mm": 18.4,
     "model": "best_match",
     "point": [
      2.9,
      101.7
     ],
     "by_model": {
      "best_match": 18.4,
      "ecmwf_ifs025": 13.2,
      "icon_seamless": 9.3
     },
     "n_points": 10,
     "basis": "NWP local-day total (analysed hours + forecast) at the wettest point"
    },
    "level_final": 0
   }
  },
  "Negeri Sembilan": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.1761,
     "level": 0,
     "call": "clear",
     "rain_mm": 10.7,
     "rain3_mm": 22.6,
     "sat": 1.075,
     "glofas_ratio": 0.069,
     "point_rain_max_mm": 16.7
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.1239,
     "level": 0,
     "call": "clear",
     "rain_mm": 13.2,
     "rain3_mm": 33.2,
     "sat": 1.115,
     "glofas_ratio": 0.087,
     "point_rain_max_mm": 24.0
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.1766,
     "level": 0,
     "call": "clear",
     "rain_mm": 12.8,
     "rain3_mm": 36.7,
     "sat": 1.161,
     "glofas_ratio": 0.128,
     "point_rain_max_mm": 21.0
    }
   },
   "today": {
    "p": 0.2113,
    "level": 0,
    "rain_mm_so_far": 9.3,
    "sat": 1.046
   }
  },
  "Melaka": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.0527,
     "level": 0,
     "call": "clear",
     "rain_mm": 8.3,
     "rain3_mm": 19.3,
     "sat": 1.216,
     "glofas_ratio": 0.15,
     "point_rain_max_mm": 13.0,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 16.4,
      "model": "best_match",
      "point": [
       2.2,
       102.4
      ],
      "by_model": {
       "best_match": 16.4,
       "ecmwf_ifs025": 15.8,
       "icon_seamless": 5.9
      },
      "n_points": 13
     }
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.0471,
     "level": 0,
     "call": "clear",
     "rain_mm": 13.3,
     "rain3_mm": 31.4,
     "sat": 1.253,
     "glofas_ratio": 0.201,
     "point_rain_max_mm": 19.3,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 18.4,
      "model": "best_match",
      "point": [
       2.4,
       102.5
      ],
      "by_model": {
       "best_match": 18.4,
       "ecmwf_ifs025": 16.0,
       "icon_seamless": 4.4
      },
      "n_points": 13
     }
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.0563,
     "level": 0,
     "call": "clear",
     "rain_mm": 14.1,
     "rain3_mm": 35.7,
     "sat": 1.355,
     "glofas_ratio": 0.218,
     "point_rain_max_mm": 21.3,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 22.0,
      "model": "best_match",
      "point": [
       2.3,
       102.1
      ],
      "by_model": {
       "best_match": 22.0,
       "ecmwf_ifs025": 21.0,
       "icon_seamless": 2.7
      },
      "n_points": 13
     }
    }
   },
   "today": {
    "p": 0.0854,
    "level": 0,
    "rain_mm_so_far": 9.8,
    "sat": 1.131,
    "level_rule": 0,
    "urban_rule": {
     "level": 0,
     "max_mm": 22.6,
     "model": "best_match",
     "point": [
      2.2,
      102.4
     ],
     "by_model": {
      "best_match": 22.6,
      "ecmwf_ifs025": 19.2,
      "icon_seamless": 1.1
     },
     "n_points": 13,
     "basis": "NWP local-day total (analysed hours + forecast) at the wettest point"
    },
    "level_final": 0
   }
  },
  "Johor": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.4113,
     "level": 0,
     "call": "clear",
     "rain_mm": 5.6,
     "rain3_mm": 13.2,
     "sat": 1.039,
     "glofas_ratio": 0.326,
     "point_rain_max_mm": 11.3
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.3257,
     "level": 0,
     "call": "clear",
     "rain_mm": 10.4,
     "rain3_mm": 21.2,
     "sat": 1.047,
     "glofas_ratio": 0.33,
     "point_rain_max_mm": 26.6
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.3214,
     "level": 0,
     "call": "clear",
     "rain_mm": 13.4,
     "rain3_mm": 29.4,
     "sat": 1.089,
     "glofas_ratio": 0.327,
     "point_rain_max_mm": 22.7
    }
   },
   "today": {
    "p": 0.4015,
    "level": 0,
    "rain_mm_so_far": 5.2,
    "sat": 1.05
   }
  },
  "Pahang": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.3346,
     "level": 0,
     "call": "clear",
     "rain_mm": 7.1,
     "rain3_mm": 19.3,
     "sat": 1.048,
     "glofas_ratio": 0.269,
     "point_rain_max_mm": 14.0
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.2553,
     "level": 0,
     "call": "clear",
     "rain_mm": 10.7,
     "rain3_mm": 24.7,
     "sat": 1.048,
     "glofas_ratio": 0.245,
     "point_rain_max_mm": 21.4
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.2305,
     "level": 0,
     "call": "clear",
     "rain_mm": 12.5,
     "rain3_mm": 30.4,
     "sat": 1.068,
     "glofas_ratio": 0.224,
     "point_rain_max_mm": 20.3
    }
   },
   "today": {
    "p": 0.4193,
    "level": 0,
    "rain_mm_so_far": 6.9,
    "sat": 1.048
   }
  },
  "Terengganu": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.5286,
     "level": 0,
     "call": "clear",
     "rain_mm": 7.0,
     "rain3_mm": 22.9,
     "sat": 1.072,
     "glofas_ratio": 0.305,
     "point_rain_max_mm": 13.4
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.4031,
     "level": 0,
     "call": "clear",
     "rain_mm": 7.7,
     "rain3_mm": 21.6,
     "sat": 1.062,
     "glofas_ratio": 0.268,
     "point_rain_max_mm": 14.6
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.3392,
     "level": 0,
     "call": "clear",
     "rain_mm": 10.6,
     "rain3_mm": 25.3,
     "sat": 1.059,
     "glofas_ratio": 0.246,
     "point_rain_max_mm": 14.3
    }
   },
   "today": {
    "p": 0.6775,
    "level": 0,
    "rain_mm_so_far": 6.8,
    "sat": 1.092
   }
  },
  "Kelantan": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.5992,
     "level": 0,
     "call": "clear",
     "rain_mm": 7.5,
     "rain3_mm": 24.4,
     "sat": 1.071,
     "glofas_ratio": 0.248,
     "point_rain_max_mm": 15.1
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.3656,
     "level": 0,
     "call": "clear",
     "rain_mm": 8.7,
     "rain3_mm": 22.9,
     "sat": 1.064,
     "glofas_ratio": 0.193,
     "point_rain_max_mm": 20.3
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.2617,
     "level": 0,
     "call": "clear",
     "rain_mm": 8.4,
     "rain3_mm": 24.7,
     "sat": 1.066,
     "glofas_ratio": 0.16,
     "point_rain_max_mm": 21.7
    }
   },
   "today": {
    "p": 0.8339,
    "level": 0,
    "rain_mm_so_far": 6.7,
    "sat": 1.088
   }
  },
  "Sabah": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.4733,
     "level": 0,
     "call": "clear",
     "rain_mm": 4.0,
     "rain3_mm": 14.3,
     "sat": 1.066,
     "glofas_ratio": 0.485,
     "point_rain_max_mm": 7.8
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.4721,
     "level": 0,
     "call": "clear",
     "rain_mm": 2.6,
     "rain3_mm": 12.0,
     "sat": 1.047,
     "glofas_ratio": 0.481,
     "point_rain_max_mm": 6.2
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.4702,
     "level": 0,
     "call": "clear",
     "rain_mm": 4.5,
     "rain3_mm": 11.2,
     "sat": 1.033,
     "glofas_ratio": 0.467,
     "point_rain_max_mm": 7.2
    }
   },
   "today": {
    "p": 0.6333,
    "level": 0,
    "rain_mm_so_far": 5.3,
    "sat": 1.09
   }
  },
  "Sarawak": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.5734,
     "level": 0,
     "call": "clear",
     "rain_mm": 3.8,
     "rain3_mm": 21.9,
     "sat": 1.119,
     "glofas_ratio": 0.244,
     "point_rain_max_mm": 10.6
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.555,
     "level": 0,
     "call": "clear",
     "rain_mm": 5.4,
     "rain3_mm": 16.7,
     "sat": 1.075,
     "glofas_ratio": 0.249,
     "point_rain_max_mm": 11.0
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.5293,
     "level": 0,
     "call": "clear",
     "rain_mm": 7.7,
     "rain3_mm": 16.9,
     "sat": 1.055,
     "glofas_ratio": 0.254,
     "point_rain_max_mm": 17.8
    }
   },
   "today": {
    "p": 0.724,
    "level": 0,
    "rain_mm_so_far": 7.5,
    "sat": 1.164
   }
  },
  "Labuan": {
   "obs_end": "2026-11-01",
   "days": {
    "2026-11-03": {
     "lead": 1,
     "p": 0.0492,
     "level": 0,
     "call": "clear",
     "rain_mm": 3.4,
     "rain3_mm": 15.2,
     "sat": 1.287,
     "glofas_ratio": 0.0,
     "point_rain_max_mm": 3.4,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 8.7,
      "model": "ecmwf_ifs025",
      "point": [
       5.28,
       115.2
      ],
      "by_model": {
       "best_match": 3.4,
       "ecmwf_ifs025": 8.7,
       "icon_seamless": 5.0
      },
      "n_points": 19
     }
    },
    "2026-11-04": {
     "lead": 2,
     "p": 0.0302,
     "level": 0,
     "call": "clear",
     "rain_mm": 1.4,
     "rain3_mm": 10.6,
     "sat": 1.205,
     "glofas_ratio": 0.0,
     "point_rain_max_mm": 1.4,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 3.1,
      "model": "icon_seamless",
      "point": [
       5.28,
       115.2
      ],
      "by_model": {
       "best_match": 2.2,
       "ecmwf_ifs025": 3.1,
       "icon_seamless": 3.1
      },
      "n_points": 19
     }
    },
    "2026-11-05": {
     "lead": 3,
     "p": 0.0314,
     "level": 0,
     "call": "clear",
     "rain_mm": 6.9,
     "rain3_mm": 11.7,
     "sat": 1.119,
     "glofas_ratio": 0.0,
     "point_rain_max_mm": 6.9,
     "level_logistic": 0,
     "urban_rule": {
      "level": 0,
      "max_mm": 10.2,
      "model": "icon_seamless",
      "point": [
       5.28,
       115.2
      ],
      "by_model": {
       "best_match": 6.7,
       "ecmwf_ifs025": 8.4,
       "icon_seamless": 10.2
      },
      "n_points": 19
     }
    }
   },
   "today": {
    "p": 0.0474,
    "level": 0,
    "rain_mm_so_far": 5.8,
    "sat": 1.362,
    "level_rule": 0,
    "urban_rule": {
     "level": 0,
     "max_mm": 6.6,
     "model": "ecmwf_ifs025",
     "point": [
      5.28,
      115.2
     ],
     "by_model": {
      "best_match": 5.0,
      "ecmwf_ifs025": 6.6,
      "icon_seamless": 4.3
     },
     "n_points": 19,
     "basis": "NWP local-day total (analysed hours + forecast) at the wettest point"
    },
    "level_final": 0
   }
  }
 },
 "pack": "MY",
 "tz": "MYT",
 "urban_rule": {
  "watch_mm": 100.0,
  "warning_mm": 150.0,
  "models": [
   "best_match",
   "ecmwf_ifs025",
   "icon_seamless"
  ],
  "version": "3.3.3-U3",
  "source": "Open-Meteo forecast, best_match+ecmwf_ifs025+icon_seamless",
  "regions": [
   "Kuala Lumpur",
   "Labuan",
   "Melaka",
   "Pulau Pinang",
   "Putrajaya",
   "Selangor"
  ]
 },
 "local_signal": {
  "rule": "persistence: agency trigger on the last closed day with truth (issue day − 1, else − 2) → local_watch = 1 for D+1…D+3 (3.3.4, fixed a priori)",
  "status": "no truth for 2026-11-01 or 2026-10-31 — local signal not issued"
 }
}