Back to simulation mapWater movement guide →
Initial implementation guide

Starting a flood
mitigation POC

Demonstrate how existing data and sensors can help assess risk, monitor conditions and support action at one pilot location.

Proposed pilot locationDataran MerdekaConfirm the area boundary, relevant assets and sensor coverage with DBKL.

POC means proof of concept. Start with a small scope that can be tested and evaluated. Prioritise existing sensors and records; identify additional requirements after reviewing data gaps.

One location, three key outcomes

Use Dataran Merdeka as the proposed starting point. Subject to technical confirmation, the study should cover the catchment, drainage, receiving river and assets that influence conditions at the location.

Flood risk map

Combine historical incidents, rainfall, water levels and site information to identify exposed areas and explain the basis of the risk assessment.

GIS asset inventory

Map sensors, drains, rivers, pumps where relevant, and affected roads, with identified locations, conditions and data owners.

Monitoring dashboard

Bring readings, trends, update times, incidents and review status into one view for management and operations teams.

Role of the existing simulation: provide a visual reference for explaining water movement and testing scenarios. Replace simulation assumptions with verified data, then calibrate and evaluate the model before using it for operational decisions.
POC limits: internal monitoring and assessment at the pilot location. Automatic pump control, public alerts and validated flood forecasts require separate scope, testing and approval.

From site confirmation to POC evaluation

  1. Agree the scope

    Confirm the hotspot, area boundary, problem to be tested, intended users and success measures. Identify the coordination team and the owner of each dataset.

    Output: a POC scope brief and a record of agreed decisions.

  2. Review sensors and data

    Review the sensor register, coordinates, measurement types, historical records, operational status and access methods. Test sample data for suitable time and location coverage.

    Output: a data register, selected sensor list and gaps to address.

  3. Verify site conditions

    Jointly check sensor locations, water routes, drainage, reference levels and critical assets. Match existing records against conditions in the field.

    Output: a pilot base map and verified asset inventory.

  4. Integrate and configure

    Connect data through read-only access or approved file imports. Standardise formats, units, timestamps and IDs; prepare the map, dashboard and data quality labels.

    Output: a POC view using selected data with traceable sources.

  5. Test against actual records

    Replay historical events, compare the displays and model with field records, and test missing, delayed or out-of-range readings. Observe live conditions if sensor access is available.

    Output: a test report, identified discrepancies and corrections.

  6. Evaluate and agree next steps

    Review the acceptance criteria with DBKL. Record benefits, limitations, operating costs and data gaps before deciding whether to accept, improve or expand the POC.

    Output: an evaluation report and recommendations for the next phase.

How data supports action

Existing sensorsAvailable water-level, rainfall or other relevant readings
Historical recordsIncidents, complaints, rainfall, water levels and field actions
GIS & asset dataLocations, drainage, topography and water-flow connections
Approved access → quality checks → data integrationMatch IDs and locations; standardise timestamps, units and reference levels; record sources and changes.
Historical flood risk mapIncident patterns & exposed areas
GIS inventoryAssets & spatial relationships
DashboardReadings, trends & incident status
Operational follow-up: the operations team reviews the information, verifies field conditions, records actions and updates the status. Feedback informs improvements to the data and assessment.
Live data

Use when the connection is approved and stable. Show the latest reading time and connection status.

Historical data

Use for risk mapping and event replay. State the event date and record period.

Simulation data

Use for scenario testing. Clearly label assumptions and distinguish them from actual observations.

If live access is not yet available: start with approved file exports. Flag delayed or interrupted data; never present the last available reading as a current reading.

Data and access to prepare

Use this list for the initial review. Confirm each dataset’s availability, owner, accuracy and permitted use before integration.

Proposed minimum requirements for the POC area and areas influencing its water flow.
RequirementKey informationFormat / accessSource coordination
Location scopePilot boundary, incident points, relevant catchments, receiving river and affected roads.GIS map or plan with coordinates; GeoJSON, SHP or KML where available.DBKL and relevant geospatial data owners.
Sensor registerID, coordinates, measurement type, unit, reporting interval, owner, operational status, maintenance and calibration records.CSV / Excel; technical documentation and station list.DBKL, sensor owners and relevant system providers.
Readings & connectionsSensor ID, value, timestamp, time zone, unit, quality flag, reference level and station-specific thresholds where available.Read-only API / CSV or JSON export. Start with 7–30 days of sample data where available.Data owners and the source system’s technical team.
Incident recordsDate, start / recession times, location, recorded depth or extent, photographs, impacts and actions. Match rainfall and water levels for the same period.CSV / Excel / GIS; supporting reports. Aim for 3–5 years where available.DBKL; JPS and MetMalaysia for related records, subject to confirmed access.
Assets & topographyDrains, rivers, ponds, pumps where relevant, dimensions, capacity, flow direction, ground / bed levels, condition and discharge locations.GIS, technical plans, elevation models or survey records with coordinate systems and datums.DBKL, JPS and relevant asset / plan owners.
Operating proceduresIncident status definitions, approved thresholds, field verification methods, follow-up actions and closure evidence.Operating procedures, sample reports and existing status formats.DBKL operations teams and relevant agencies.

Supporting requirements

  • Coordination: a working group comprising DBKL, data owners, technical teams and the implementation team; an issue-reporting channel and regular reviews.
  • POC environment: an agreed application environment, network access, storage, backups and role-based user access.
  • Data sharing: approved read-only access, permitted fields, retention periods and audit records. Remove unnecessary complainant information.
  • Technical verification: align units, time zones, coordinate systems and water-level datums. Do not directly compare readings using different reference levels.
Key dependency: existing sensors may not cover the required catchment or events. Monitoring can proceed where geometry, level or comparison data are insufficient, but the limitations of model and risk-map accuracy must be stated.

Coordinating the parties involved

Proposed responsibilities to agree at the start of the POC.
PartyMain roleRequired output
DBKLConfirm the location, scope, operational use, data access and acceptance evaluation.Agreed scope, selected data and operational feedback.
Data owners & technical teamsProvide samples, metadata, access and explanations of data quality and limitations. Involve JPS / MetMalaysia according to the required datasets.Usable datasets, documentation and update methods.
Implementation teamOrganise data, develop integrations, prepare maps and the dashboard, and conduct joint testing.A working POC, test logs, user guidance and an evaluation report.
Operations & field teamsVerify assets and incidents, trial workflows and record differences between the displays and site conditions.Field evidence, action records and improvement recommendations.
Relevant coordinating agenciesSupport cross-agency coordination, including JWP where required under the agreed governance arrangements.Resolution of data-sharing issues and follow-up decisions.

Proposed 4–6-week implementation

A planning estimate after the scope, access and initial data samples are confirmed. Actual duration depends on data quality, integration conditions and joint review times.

Week 1

Scope & readiness

Confirm the location, data register, success measures and site checks.

Weeks 2–3

Data & development

Clean data and build integrations, the GIS inventory, initial risk map and dashboard.

Weeks 4–5

Testing & refinement

Replay events, review live data where available and verify operational workflows.

Week 6 / close-out

Joint evaluation

Assess acceptance, hand over documentation and agree follow-up requirements.

Scheduling: activities may overlap to target four weeks if the data are ready for use. Agree testing through week six or an extension based on findings. Historical events can be used if no significant rainfall occurs during the POC.

How POC success is assessed

Finalise numerical targets, tolerances and test periods after reviewing sample data. Acceptance must be supported by evidence that can be reviewed jointly.

AspectProposed acceptance criteriaReview evidence
Data integrityAll sources within scope have identified IDs, locations, units, timestamps and owners. Gaps and questionable readings are flagged.Data register, sample source matches and a quality report.
UpdatesReadings are displayed at the agreed intervals. Delays, connection interruptions and recovery can be identified.Source / display timestamp logs and disconnection test records.
Maps & assetsHotspots, assets and sensors within scope are matched to verified locations. The basis and limitations of risk categories are explained.Review maps, GIS inventory and field verification.
Model & eventsReplay at least one event with sufficient records. If the model is calibrated, use another event for independent evaluation where available; report errors and limitations.Comparisons of available timing, levels / impacts and agreed tolerances. Model validation remains limited where data are insufficient.
Operational usefulnessUsers can identify locations, read trends, distinguish actual data from simulation and record follow-up actions for a sample incident.User test scenarios and operations team feedback.
Handover & decisionsDocumentation, limitations, open issues and operating requirements are handed over. Jointly record the decision to accept, improve or expand the POC.Evaluation report, quick guide and follow-up action list.

What to start now

  1. Confirm the location and working group

    Agree on Dataran Merdeka or an alternative location based on data suitability, water-flow connections and operational use.

  2. Prepare the initial data package

    Collect the sensor list, sample readings, asset maps and matching incident records. Include owners, formats and access methods.

  3. Hold a technical session and site review

    Identify sources that can be connected, data gaps, sensor coverage, reference levels and field verification methods.

  4. Finalise the POC implementation brief

    Record the scope, outputs, schedule, roles, agreed costs, access methods and acceptance criteria before integration development starts.

Ready to start whenthe location and scope are agreed, data owners are identified, access or initial data samples are available, and the working group and success measures are confirmed.

Sample data and JSON for integration

A reference to help data owners and technical teams prepare information in a consistent format. Each category includes sample values, a JSON structure and a downloadable file.

All data below are fictional. Asset names, coordinates, dimensions, readings, thresholds and forecasts are not actual DBKL, JPS or MetMalaysia data. This structure is a proposed POC exchange format, not an official agency API contract.
11 categories in one file

Linked asset IDs are included for cross-referencing.

Download all JSON
Sample values only. Select a category to open its explanation and complete JSON.
CategorySample dataKey fields
RiverRIV-DEMO-001 · width 18 mID, alignment, flow direction, cross-sections, datum and sensor / downstream connections.
Drain / drainageDRN-DEMO-001 · 1.2 m × 1.0 mID, alignment, dimensions, invert levels, material, downstream connection and blockage inspections.
Water-level sensorWL-DEMO-001 · elevation 26.4 m; gauge height 2.4 mSensor ID, monitored asset, coordinates, unit, datum, gauge zero, timestamp and quality.
Rain gaugeRG-DEMO-001 · 4 mm in 5 minutesID, coordinates, resolution, reporting interval, interval rainfall, intensity and accumulated totals.
Weather & forecastsWX-DEMO-001 · 27.5 °C; humidity 88%Coverage location, temperature, humidity, wind and observation time; forecast issue and validity times.
Pump housePMP-DEMO-001 · 2 pumps; current flow 0.30 m³/sPump house and pump unit IDs, intake / discharge locations, capacity, status, flow and power supply.
Retention pondPND-DEMO-001 · capacity 6,000 m³Boundary, capacity, bed level, datum, stage–storage curve, inlets and outlets.
CulvertCUL-DEMO-001 · single box openingAlignment, shape, opening dimensions, barrel count, length, inlet / outlet levels and connections.
CatchmentCAT-DEMO-001 · 49,200 m²Boundary, area, impervious surfaces, slope, reference rain gauge and outlet.
Exposed roadRD-DEMO-001 · two lanesRoad ID, alignment, low-point elevation, datum, drainage connections and route importance.
Flood incidentINC-DEMO-001 · depth 0.18 m; duration 50 minutesIncident ID, location, start / recession times, depth, affected area, assets, actions and evidence.

How to read and prepare the JSON

  • Inventory and readings: assets stores asset information and geometry; observations stores readings over time. Match them using asset_id. Forecasts use forecasts; incidents use incidents.
  • Location: geometry uses GeoJSON with WGS84 and [longitude, latitude] order. Use points for sensors / pumps, lines for rivers / drains and polygons for ponds / catchments. Reference: GeoJSON, RFC 7946.
  • Time: use timestamps with a time zone, such as 2026-09-11T14:00:00+08:00. observed_at is the reading time; received_at is the receipt time. Forecasts have their own issue times and validity periods.
  • Units and datums: rainfall in mm, intensity in mm/h, flow in m³/s and volume in m³. Water levels require an identified datum; distinguish water-surface elevation, gauge height and water depth above the road surface.
  • Quality: use null for unknown values. Never replace missing readings with zero. Retain source_id, source_record_id and quality_flag; set delay thresholds according to actual reporting intervals.
  • Repeated records: use permanent asset IDs and unique observation IDs. Prevent duplicates using the source_id and source_record_id pair; retain changes as versions / audit logs when a source corrects a record.
  • Model readiness: these examples do not constitute a validated hydraulic model. Survey plans, additional cross-sections, boundary data, pump curves and comparison records are still required according to the analysis scope.
Example asset connections: catchment → drain → culvert → pond → pump house → river. The catchment references the rain gauge; the water-level sensor references the river. All connections represent a fictional network to explain the data structure.
RiverView JSON

Cross-sections and boundary conditions are required for modelling. This single example cross-section is insufficient for an actual hydraulic model.

Download river (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "RIV-DEMO-001",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              101.6955,
              3.1518
            ],
            [
              101.6956,
              3.1508
            ],
            [
              101.6957,
              3.1498
            ]
          ]
        },
        "properties": {
          "asset_id": "RIV-DEMO-001",
          "asset_type": "river",
          "name": "Example river segment",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "flow_direction": "coordinate_order_upstream_to_downstream",
          "length_m": 223,
          "typical_width_m": 18.0,
          "roughness_manning_n": 0.035,
          "vertical_datum_id": "DEMO-LOCAL-DATUM",
          "cross_sections": [
            {
              "section_id": "XS-DEMO-001",
              "chainage_m": 111,
              "profile": [
                {
                  "offset_m": 0,
                  "elevation_m": 28.8
                },
                {
                  "offset_m": 3,
                  "elevation_m": 24.0
                },
                {
                  "offset_m": 15,
                  "elevation_m": 24.0
                },
                {
                  "offset_m": 18,
                  "elevation_m": 28.8
                }
              ]
            }
          ],
          "water_level_sensor_ids": [
            "WL-DEMO-001"
          ],
          "downstream_boundary": {
            "type": "external_outlet",
            "boundary_id": "BOUNDARY-DEMO-OUTLET",
            "water_level_series_id": null,
            "status": "requires_verified_boundary_data"
          }
        }
      }
    ]
  },
  "observations": [],
  "forecasts": [],
  "incidents": []
}
Drain / drainageView JSON

The blockage percentage is an inspection estimate, not a sensor reading. Example connection: drain → culvert → pond.

Download drain / drainage (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "DRN-DEMO-001",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              101.6928,
              3.1502
            ],
            [
              101.6936,
              3.1502
            ]
          ]
        },
        "properties": {
          "asset_id": "DRN-DEMO-001",
          "asset_type": "drain",
          "name": "Example drain A",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "upstream_catchment_id": "CAT-DEMO-001",
          "downstream_asset_id": "CUL-DEMO-001",
          "flow_direction": "coordinate_order_upstream_to_downstream",
          "length_m": 89,
          "section_shape": "rectangular",
          "width_m": 1.2,
          "internal_depth_m": 1.0,
          "material": "concrete",
          "roughness_manning_n": 0.015,
          "vertical_datum_id": "DEMO-LOCAL-DATUM",
          "upstream_invert_elevation_m": 25.6,
          "downstream_invert_elevation_m": 25.2
        }
      }
    ]
  },
  "observations": [
    {
      "observation_id": "OBS-DEMO-DRN-001",
      "asset_id": "DRN-DEMO-001",
      "source_record_id": "OBS-DEMO-DRN-001",
      "source_id": "SOURCE-DEMO",
      "observed_at": "2026-09-11T14:00:00+08:00",
      "received_at": "2026-09-11T14:00:05+08:00",
      "data_mode": "synthetic_example",
      "quality_flag": "example_unverified",
      "measurements": {
        "blockage_estimate": {
          "value": 20,
          "unit": "percent",
          "method": "visual_estimate"
        },
        "sediment_depth": {
          "value": 0.1,
          "unit": "m"
        }
      },
      "observation_type": "field_inspection",
      "condition": "requires_cleaning"
    }
  ],
  "forecasts": [],
  "incidents": []
}
Water-level sensorView JSON

The 26.4 m elevation uses a fictional local datum. Gauge height is 26.4 − 24.0 = 2.4 m; it is not flood depth above the road. The thresholds are fictional and unapproved.

Download water-level sensor (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "WL-DEMO-001",
        "geometry": {
          "type": "Point",
          "coordinates": [
            101.6956,
            3.1508
          ]
        },
        "properties": {
          "asset_id": "WL-DEMO-001",
          "asset_type": "water_level_sensor",
          "name": "Example water-level sensor",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "monitored_asset_id": "RIV-DEMO-001",
          "sensor_type": "radar",
          "measurement": "water_surface_elevation",
          "unit": "m",
          "vertical_datum_id": "DEMO-LOCAL-DATUM",
          "reporting_interval_seconds": 300,
          "last_calibrated_at": null,
          "calibration_status": "not_verified",
          "gauge_zero_elevation_m": 24.0,
          "thresholds": {
            "metric": "water_surface_elevation",
            "unit": "m",
            "vertical_datum_id": "DEMO-LOCAL-DATUM",
            "alert": 27.0,
            "warning": 28.0,
            "danger": 28.5,
            "approval_status": "illustrative_not_approved"
          }
        }
      }
    ]
  },
  "observations": [
    {
      "observation_id": "OBS-DEMO-WL-001",
      "asset_id": "WL-DEMO-001",
      "source_record_id": "OBS-DEMO-WL-001",
      "source_id": "SOURCE-DEMO",
      "observed_at": "2026-09-11T14:00:00+08:00",
      "received_at": "2026-09-11T14:00:05+08:00",
      "data_mode": "synthetic_example",
      "quality_flag": "example_unverified",
      "measurements": {
        "water_surface_elevation": {
          "value": 26.4,
          "unit": "m",
          "vertical_datum_id": "DEMO-LOCAL-DATUM"
        },
        "gauge_height": {
          "value": 2.4,
          "unit": "m",
          "gauge_zero_elevation_m": 24.0,
          "vertical_datum_id": "DEMO-LOCAL-DATUM"
        },
        "battery_voltage": {
          "value": 12.4,
          "unit": "V"
        }
      },
      "observation_type": "sensor_reading",
      "monitored_asset_id": "RIV-DEMO-001"
    }
  ],
  "forecasts": [],
  "incidents": []
}
Rain gaugeView JSON

4 mm in 5 minutes equals an average intensity of 48 mm/h for that interval; it does not mean 48 mm fell over an hour. Each total has its own period.

Download rain gauge (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "RG-DEMO-001",
        "geometry": {
          "type": "Point",
          "coordinates": [
            101.6932,
            3.1512
          ]
        },
        "properties": {
          "asset_id": "RG-DEMO-001",
          "asset_type": "rain_gauge",
          "name": "Example rain gauge",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "sensor_type": "tipping_bucket",
          "resolution_mm": 0.2,
          "reporting_interval_seconds": 300,
          "last_calibrated_at": null,
          "calibration_status": "not_verified"
        }
      }
    ]
  },
  "observations": [
    {
      "observation_id": "OBS-DEMO-RG-001",
      "asset_id": "RG-DEMO-001",
      "source_record_id": "OBS-DEMO-RG-001",
      "source_id": "SOURCE-DEMO",
      "observed_at": "2026-09-11T14:00:00+08:00",
      "received_at": "2026-09-11T14:00:05+08:00",
      "data_mode": "synthetic_example",
      "quality_flag": "example_unverified",
      "measurements": {
        "rainfall_interval": {
          "value": 4.0,
          "unit": "mm",
          "period_start": "2026-09-11T13:55:00+08:00",
          "period_end": "2026-09-11T14:00:00+08:00"
        },
        "rainfall_intensity": {
          "value": 48.0,
          "unit": "mm/h",
          "averaging_period_seconds": 300,
          "method": "interval_mm_times_3600_divided_by_seconds"
        },
        "rainfall_last_hour": {
          "value": 23.4,
          "unit": "mm",
          "period_start": "2026-09-11T13:00:00+08:00",
          "period_end": "2026-09-11T14:00:00+08:00"
        },
        "rainfall_since_midnight": {
          "value": 31.2,
          "unit": "mm",
          "period_start": "2026-09-11T00:00:00+08:00",
          "period_end": "2026-09-11T14:00:00+08:00"
        }
      },
      "observation_type": "sensor_reading",
      "interval_boundary": "start_exclusive_end_inclusive"
    }
  ],
  "forecasts": [],
  "incidents": []
}
Weather & forecastsView JSON

Observations and forecasts are listed separately. The example 70% rain probability is not a rainfall amount. This is not an official MetMalaysia API response.

Download weather & forecasts (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "WX-DEMO-001",
        "geometry": {
          "type": "Point",
          "coordinates": [
            101.6932,
            3.1512
          ]
        },
        "properties": {
          "asset_id": "WX-DEMO-001",
          "asset_type": "weather_station",
          "name": "Example weather station",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "reporting_interval_seconds": 600
        }
      }
    ]
  },
  "observations": [
    {
      "observation_id": "OBS-DEMO-WX-001",
      "asset_id": "WX-DEMO-001",
      "source_record_id": "OBS-DEMO-WX-001",
      "source_id": "SOURCE-DEMO",
      "observed_at": "2026-09-11T14:00:00+08:00",
      "received_at": "2026-09-11T14:00:05+08:00",
      "data_mode": "synthetic_example",
      "quality_flag": "example_unverified",
      "measurements": {
        "air_temperature": {
          "value": 27.5,
          "unit": "degC"
        },
        "relative_humidity": {
          "value": 88,
          "unit": "percent"
        },
        "wind_speed": {
          "value": 2.8,
          "unit": "m/s"
        },
        "wind_direction_from": {
          "value": 240,
          "unit": "degree_true_north"
        },
        "air_pressure": {
          "value": 1008.2,
          "unit": "hPa"
        }
      },
      "observation_type": "weather_observation",
      "condition_code": "rain"
    }
  ],
  "forecasts": [
    {
      "forecast_id": "FC-DEMO-001",
      "site_id": "POC-DEMO-DM",
      "coverage_asset_id": "CAT-DEMO-001",
      "source_id": "SOURCE-DEMO",
      "data_mode": "synthetic_example",
      "issued_at": "2026-09-11T13:00:00+08:00",
      "valid_from": "2026-09-11T14:00:00+08:00",
      "valid_to": "2026-09-11T17:00:00+08:00",
      "condition_code": "rain",
      "rain_probability_percent": 70,
      "official_warning": null,
      "quality_flag": "example_unverified"
    }
  ],
  "incidents": []
}
Pump houseView JSON

Installed capacity of 0.70 m³/s differs from the current flow of 0.30 m³/s. One pump is running and one is on standby. This telemetry example is not a pump control command.

Download pump house (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "PMP-DEMO-001",
        "geometry": {
          "type": "Point",
          "coordinates": [
            101.6942,
            3.1503
          ]
        },
        "properties": {
          "asset_id": "PMP-DEMO-001",
          "asset_type": "pump_house",
          "name": "Example pump house",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "intake_asset_id": "PND-DEMO-001",
          "discharge_asset_id": "RIV-DEMO-001",
          "discharge_location": {
            "type": "Point",
            "coordinates": [
              101.6956,
              3.1508
            ]
          },
          "power_supply": "grid_with_backup_generator",
          "rated_total_capacity_m3_s": 0.7,
          "pumps": [
            {
              "pump_id": "PUMP-DEMO-A",
              "rated_flow_m3_s": 0.35,
              "rated_head_m": 5.0
            },
            {
              "pump_id": "PUMP-DEMO-B",
              "rated_flow_m3_s": 0.35,
              "rated_head_m": 5.0
            }
          ],
          "control_access": "read_only_for_poc"
        }
      }
    ]
  },
  "observations": [
    {
      "observation_id": "OBS-DEMO-PMP-001",
      "asset_id": "PMP-DEMO-001",
      "source_record_id": "OBS-DEMO-PMP-001",
      "source_id": "SOURCE-DEMO",
      "observed_at": "2026-09-11T14:00:00+08:00",
      "received_at": "2026-09-11T14:00:05+08:00",
      "data_mode": "synthetic_example",
      "quality_flag": "example_unverified",
      "measurements": {
        "intake_water_surface_elevation": {
          "value": 24.2,
          "unit": "m",
          "vertical_datum_id": "DEMO-LOCAL-DATUM"
        },
        "receiving_water_surface_elevation": {
          "value": 26.4,
          "unit": "m",
          "vertical_datum_id": "DEMO-LOCAL-DATUM"
        },
        "total_discharge_flow": {
          "value": 0.3,
          "unit": "m3/s"
        },
        "total_dynamic_head": {
          "value": 4.5,
          "unit": "m"
        }
      },
      "observation_type": "pump_telemetry",
      "operating_mode": "automatic",
      "power_status": "available",
      "alarm_codes": [],
      "pump_statuses": [
        {
          "pump_id": "PUMP-DEMO-A",
          "status": "running",
          "discharge_flow_m3_s": 0.3
        },
        {
          "pump_id": "PUMP-DEMO-B",
          "status": "standby",
          "discharge_flow_m3_s": 0.0
        }
      ]
    }
  ],
  "forecasts": [],
  "incidents": []
}
Retention pondView JSON

Example storage of 2,400 m³ leaves 3,600 m³ available. The polygon is schematic; replace the area and capacity curve with actual survey data.

Download retention pond (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "PND-DEMO-001",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                101.694,
                3.15
              ],
              [
                101.6944,
                3.15
              ],
              [
                101.6944,
                3.1504
              ],
              [
                101.694,
                3.1504
              ],
              [
                101.694,
                3.15
              ]
            ]
          ]
        },
        "properties": {
          "asset_id": "PND-DEMO-001",
          "asset_type": "retention_pond",
          "name": "Example retention pond",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "surface_area_at_full_supply_m2": 2000,
          "storage_capacity_m3": 6000,
          "geometry_note": "Footprint schematic; example hydraulic area is not computed from this polygon.",
          "vertical_datum_id": "DEMO-LOCAL-DATUM",
          "bottom_elevation_m": 23.0,
          "full_supply_elevation_m": 26.0,
          "inlet_asset_ids": [
            "CUL-DEMO-001"
          ],
          "outlet_asset_ids": [
            "PMP-DEMO-001"
          ],
          "stage_storage_curve": [
            {
              "water_surface_elevation_m": 23.0,
              "storage_m3": 0
            },
            {
              "water_surface_elevation_m": 24.2,
              "storage_m3": 2400
            },
            {
              "water_surface_elevation_m": 26.0,
              "storage_m3": 6000
            }
          ],
          "spillway": {
            "crest_elevation_m": 26.0,
            "width_m": 2.0,
            "destination_asset_id": "RIV-DEMO-001",
            "status": "illustrative_unverified"
          }
        }
      }
    ]
  },
  "observations": [
    {
      "observation_id": "OBS-DEMO-PND-001",
      "asset_id": "PND-DEMO-001",
      "source_record_id": "OBS-DEMO-PND-001",
      "source_id": "SOURCE-DEMO",
      "observed_at": "2026-09-11T14:00:00+08:00",
      "received_at": "2026-09-11T14:00:05+08:00",
      "data_mode": "synthetic_example",
      "quality_flag": "example_unverified",
      "measurements": {
        "water_surface_elevation": {
          "value": 24.2,
          "unit": "m",
          "vertical_datum_id": "DEMO-LOCAL-DATUM"
        },
        "stored_volume": {
          "value": 2400,
          "unit": "m3",
          "method": "example_stage_storage_curve"
        },
        "available_storage": {
          "value": 3600,
          "unit": "m3",
          "method": "capacity_minus_stored_volume"
        }
      },
      "observation_type": "derived_asset_state"
    }
  ],
  "forecasts": [],
  "incidents": []
}
CulvertView JSON

The culvert connects drainage to the pond in this fictional network. Actual capacity cannot be determined from width alone.

Download culvert (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "CUL-DEMO-001",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              101.6936,
              3.1502
            ],
            [
              101.694,
              3.1502
            ]
          ]
        },
        "properties": {
          "asset_id": "CUL-DEMO-001",
          "asset_type": "culvert",
          "name": "Example culvert",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "upstream_asset_id": "DRN-DEMO-001",
          "downstream_asset_id": "PND-DEMO-001",
          "flow_direction": "coordinate_order_upstream_to_downstream",
          "section_shape": "box",
          "barrel_count": 1,
          "internal_width_m": 1.2,
          "internal_height_m": 1.0,
          "length_m": 44,
          "roughness_manning_n": 0.015,
          "vertical_datum_id": "DEMO-LOCAL-DATUM",
          "inlet_invert_elevation_m": 25.2,
          "outlet_invert_elevation_m": 25.1,
          "flap_gate_present": false
        }
      }
    ]
  },
  "observations": [],
  "forecasts": [],
  "incidents": []
}
CatchmentView JSON

The runoff coefficient and water travel time are uncalibrated example assumptions. Actual catchment mapping must be based on topography and drainage.

Download catchment (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "CAT-DEMO-001",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                101.6918,
                3.1498
              ],
              [
                101.6938,
                3.1498
              ],
              [
                101.6938,
                3.1518
              ],
              [
                101.6918,
                3.1518
              ],
              [
                101.6918,
                3.1498
              ]
            ]
          ]
        },
        "properties": {
          "asset_id": "CAT-DEMO-001",
          "asset_type": "catchment",
          "name": "Example catchment",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "area_m2": 49200,
          "area_basis": "rounded_schematic_polygon_area",
          "impervious_area_percent": 78,
          "mean_slope_percent": 1.2,
          "rainfall_gauge_id": "RG-DEMO-001",
          "outlet_asset_id": "DRN-DEMO-001",
          "runoff_model_parameters": {
            "method": "illustrative_runoff_coefficient",
            "runoff_coefficient": 0.75,
            "travel_time_minutes": 10,
            "calibration_status": "not_calibrated"
          }
        }
      }
    ]
  },
  "observations": [],
  "forecasts": [],
  "incidents": []
}
Exposed roadView JSON

Road elevation allows water depth to be interpreted when the levels use the same reference. Route status must be verified by the operations team.

Download exposed road (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "RD-DEMO-001",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              101.6928,
              3.15
            ],
            [
              101.6936,
              3.15
            ]
          ]
        },
        "properties": {
          "asset_id": "RD-DEMO-001",
          "asset_type": "road_segment",
          "name": "Example road segment",
          "site_id": "POC-DEMO-DM",
          "data_mode": "synthetic_example",
          "data_owner": null,
          "verification_status": "unverified_example",
          "source_id": "SOURCE-DEMO",
          "updated_at": "2026-09-11T14:00:00+08:00",
          "length_m": 89,
          "lane_count": 2,
          "critical_access": false,
          "drainage_asset_ids": [
            "DRN-DEMO-001"
          ],
          "vertical_datum_id": "DEMO-LOCAL-DATUM",
          "low_point_elevation_m": 26.2,
          "survey_status": "not_surveyed"
        }
      }
    ]
  },
  "observations": [],
  "forecasts": [],
  "incidents": []
}
Flood incidentView JSON

The example incident is dated 1 September; the other sample sensor readings dated 11 September are not matched to it. Records from the actual event period are needed for historical testing.

Download flood incident (.json)
{
  "schema_version": "proposed-poc-1.0",
  "data_mode": "synthetic_example",
  "disclaimer": "All asset names, locations, dimensions, thresholds, readings and forecasts are fictional examples of the format. They are not actual DBKL/JPS/MetMalaysia inventory records, sensor readings or forecasts. This is not an official agency API contract.",
  "site": {
    "site_id": "POC-DEMO-DM",
    "name": "Dataran Merdeka — example POC context",
    "status": "proposed_pilot_not_confirmed"
  },
  "metadata": {
    "source_id": "SOURCE-DEMO",
    "source_name": "Synthetic dataset for the POC guide",
    "coordinate_reference": "WGS84",
    "coordinate_order": [
      "longitude",
      "latitude"
    ],
    "timezone": "Asia/Kuala_Lumpur",
    "vertical_datum": {
      "id": "DEMO-LOCAL-DATUM",
      "name": "Fictional local datum; not an official reference level",
      "verified": false
    },
    "null_policy": "null means unknown or unavailable; never replace missing readings with zero",
    "cross_references": "Related asset IDs may be in other examples; use the combined file for all IDs."
  },
  "assets": {
    "type": "FeatureCollection",
    "features": []
  },
  "observations": [],
  "forecasts": [],
  "incidents": [
    {
      "incident_id": "INC-DEMO-001",
      "site_id": "POC-DEMO-DM",
      "source_id": "SOURCE-DEMO",
      "source_record_id": "INC-DEMO-001",
      "data_mode": "synthetic_example",
      "incident_type": "surface_flooding",
      "geometry": {
        "type": "Point",
        "coordinates": [
          101.693,
          3.15
        ]
      },
      "reported_at": "2026-09-01T15:35:00+08:00",
      "started_at": "2026-09-01T15:20:00+08:00",
      "receded_at": "2026-09-01T16:10:00+08:00",
      "max_depth": {
        "value": 0.18,
        "unit": "m",
        "reference": "local_road_surface"
      },
      "affected_area": {
        "value": 300,
        "unit": "m2",
        "method": "field_estimate"
      },
      "affected_asset_ids": [
        "RD-DEMO-001",
        "DRN-DEMO-001"
      ],
      "verification_status": "example_unverified",
      "status": "closed_example",
      "rainfall_observation_ids": [],
      "water_level_observation_ids": [],
      "matching_event_data_status": "required_for_historical_replay",
      "actions": [
        {
          "action_id": "ACTION-DEMO-001",
          "action_type": "drain_inspection",
          "recorded_at": "2026-09-01T15:50:00+08:00",
          "status": "completed_example",
          "note": "Example drainage inspection note."
        }
      ],
      "evidence_files": []
    }
  ]
}