@@ -149,15 +149,35 @@ mirrors the Charter Area→Hazard mapping.
149149> activation, emit one item per ` monty:hazard_codes ` set, same geometry. Single-category
150150> activations (the common case) yield one Hazard per AOI.
151151
152+ ### Identifying multi-hazard
153+
154+ A CEMS activation carries a ** single** ` category ` + ` subCategory ` , and ** DEL products carry
155+ no hazard-type field** — so * multiple delineation products do ** not** signal multiple hazards*
156+ (several DELs in an AOI are ** monitoring iterations** of the same mapping). Multi-hazard is
157+ identified from two other signals:
158+
159+ 1 . ** ` category ` + ` subCategory ` ** — the primary hazard (e.g. ` Storm ` / ` Tropical cyclone ` ).
160+ 2 . ** GRA/GRM ` stats ` hazard-footprint classes** — thematic classes that name a * phenomenon*
161+ rather than an exposed asset reveal secondary hazards. Observed footprint classes:
162+ ` Flooded area ` , ` Flood trace ` , ` Landslide ` , ` Burnt area ` (e.g. a ` Landslide ` class inside a
163+ ` Storm ` activation ⇒ a secondary landslide hazard). ` Maximum of all extents ` and ` NA ` are
164+ aggregates, not hazards.
165+
166+ Emit one Hazard item per distinct hazard code so identified. The primary hazard takes its
167+ geometry from the DEL delineation (§ above); a secondary hazard surfaced only via a GRA
168+ footprint class takes its geometry from that class's extent where available, else the AOI
169+ extent, and its severity from the class figure. Do ** not** infer hazard multiplicity from the
170+ DEL count.
171+
152172## Product → Response
153173
154174Each product maps to a Monty Response item via ` monty:response_detail ` .
155175
156176| CEMS field (product) | Monty field | Notes |
157177| ----------------------| -------------| -------|
158- | ` type ` | ` monty:response_detail.type ` | ` REF ` →` eo-ref ` , ` FEP ` →` eo-fep ` , ` DEL ` →` eo-del ` , ` GRA ` →` eo-gra ` |
178+ | ` type ` | ` monty:response_detail.type ` | ` REF ` →` eo-ref ` , ` FEP ` →` eo-fep ` , ` DEL ` →` eo-del ` , ` GRA ` →` eo-gra ` . Monitoring/variant type codes (e.g. ** ` GRM ` ** grading-monitoring) map to their base product code ( ` eo-gra ` ) with ` monitoring_number ` set |
159179| ` code ` (activation) | ` monty:response_detail.source_id ` | e.g. ` EMSR847 ` (source-system anchor) |
160- | ` version.statusCode ` | ` monty:response_detail.status ` | ` F ` → ` finished ` / ` published ` ; ` N ` (not produced)→` withdrawn ` . Confirm full enum (see [ Open decisions ] ( #open-decisions ) ) |
180+ | ` version.statusCode ` | ` monty:response_detail.status ` | ` F ` (delivered)→ ` published ` ; ` I ` (in production)→ ` in-production ` ; ` W ` (scheduled, future ` expectedDelivery ` )→ ` planned ` ; ` N ` (not produced)→` withdrawn ` , or ` no-impact ` when ` version.reason ` indicates no damage/impact. ` feasible=false ` → ` withdrawn ` |
161181| ` monitoring ` / ` monitoringNumber ` | ` monty:response_detail.monitoring_number ` | Set ** only** when ` monitoring=true ` ; iteration links to the prior via ` rel: prev ` |
162182| ` extent ` (WKT) | ` geometry ` / ` bbox ` | Product footprint (AOI extent) |
163183| — | ` monty:response_detail.producer ` | ` Copernicus EMS ` (mapping provider) |
@@ -187,12 +207,20 @@ Only **GRA** products carry `stats`, shaped as
187207 "Built-up [No.]" : { "None" : { "affected" : 48253 } } }
188208```
189209
190- Per the [ Response ↔ Impact boundary rules] ( ../../response-impact-boundary.md ) , emit ** one
191- Impact item per thematic class** :
210+ Not every thematic class is an Impact. ** Split the classes by kind first:**
211+
212+ - ** Exposure / effect classes → Impact items** (one each): ` Estimated population ` , ` Built-up ` ,
213+ ` Transportation ` , ` Land use ` , ` Facilities ` , ` Blocked road / interruption ` , ` Temporary camp ` , …
214+ - ** Hazard-footprint classes → Hazard** (not Impact): ` Flooded area ` , ` Flood trace ` ,
215+ ` Landslide ` , ` Burnt area ` — these describe the phenomenon extent; they feed the Hazard
216+ geometry/severity (see [ Identifying multi-hazard] ( #identifying-multi-hazard ) ).
217+ - ** Aggregates → skip** : ` Maximum of all extents ` , ` NA ` .
192218
193- - ` monty:impact_detail ` : ` category ` /` type ` from the thematic class (population, buildings,
194- roads, land use, burnt area, …), ` value ` = ` affected ` (fallback ` total ` ), ` unit ` from the
195- key/` unit ` (` [No.] ` , ` [ha] ` , ` [km] ` ), ` estimate_type: "primary" ` .
219+ Per the [ Response ↔ Impact boundary rules] ( ../../response-impact-boundary.md ) , for each
220+ ** exposure** class emit ** one Impact item** :
221+
222+ - ` monty:impact_detail ` : ` category ` /` type ` from the thematic class, ` value ` = ` affected `
223+ (fallback ` total ` ), ` unit ` from the key/` unit ` (` [No.] ` , ` [ha] ` , ` [km] ` ), ` estimate_type: "primary" ` .
196224- Canonical edge: ** ` Impact → derived_from → Response ` ** (the GRA Response), ` roles: ["response"] ` .
197225- Both items share the Event's ` monty:corr_id ` .
198226- Guard the ` "NA" ` / missing ` total ` case (skip or emit without a numeric value per boundary rules).
@@ -219,19 +247,31 @@ Open: GDACS episode resolution, and whether to emit links before the target is i
219247
220248## Hazard codes
221249
222- CEMS ` category ` (refine with ` subCategory ` ) maps to Monty hazard codes. UNDRR-ISC 2025 is
223- required (exactly one per item); GLIDE and EM-DAT are recommended.
224-
225- | CEMS ` category ` | UNDRR-ISC 2025 | GLIDE | EM-DAT | Notes |
226- | -----------------| ----------------| -------| --------| -------|
227- | Flood | MH0600 | FL | nat-hyd-flo-flo | Refine to MH0603/MH0604 (flash/riverine) |
228- | Wildfire | MH1301 | WF | nat-cli-wil-for | |
229- | Storm | MH0400 | ST | nat-met-sto | Refine to MH0403/` TC ` /` nat-met-sto-tro ` when ` subCategory ` = tropical cyclone/hurricane/typhoon |
230- | Earthquake | GH0101 | EQ | nat-geo-ear-gro | |
231- | Mass movement | MH0901 | LS | nat-geo-mmd-lan | Landslide/mass movement |
232- | Industrial accident | TH03xx / TH06xx | — | tec-ind | Technological — pick chemical vs explosion from ` subCategory ` (manual review) |
250+ CEMS ` category ` (refined by ` subCategory ` ) maps to Monty hazard codes. UNDRR-ISC 2025 is
251+ required (exactly one per Hazard item); GLIDE and EM-DAT are recommended. The complete CEMS
252+ category vocabulary (from the full activation catalogue, all DRM phases; ** case-normalise** —
253+ ` Mass Movement ` /` Mass movement ` , ` Industrial Accident ` /` Industrial accident ` occur in both
254+ casings):
255+
256+ | CEMS ` category ` | UNDRR-ISC 2025 | GLIDE | EM-DAT | Notes / ` subCategory ` refinement |
257+ | -----------------| ----------------| -------| --------| ----------------------------------|
258+ | Flood | MH0600 | FL | nat-hyd-flo-flo | ` Riverine flood ` →MH0604, flash→MH0603, coastal/surge→MH0605 |
259+ | Wildfire | MH1301 | WF | nat-cli-wil-for | ` Forest fire ` ; land/other fire variants |
260+ | Storm | MH0400 | ST | nat-met-sto | ` Tropical cyclone, hurricane, typhoon ` →MH0403 / ` TC ` / ` nat-met-sto-tro ` |
261+ | Earthquake | GH0101 | EQ | nat-geo-ear-gro | ` Ground shaking ` ; tsunami subCat→GH0301/` TS ` |
262+ | Mass Movement | MH0901 | LS | nat-geo-mmd-lan | Landslide; avalanche→MH1201, rockfall/subsidence per ` subCategory ` |
263+ | Volcanic Activity | GH0201 | VO | nat-geo-vol | Eruption; ashfall/lahar per ` subCategory ` |
264+ | Industrial Accident | TH0300 / TH0600 | — | tec-ind | Technological — chemical (TH0300) vs explosion (TH0600) vs oil spill from ` subCategory ` ; manual review |
233265| Transport accident | — | — | tec-tra | Technological — no clean UNDRR-ISC; manual review |
234- | Other | — | OT | — | No code — manual review |
266+ | Humanitarian Crisis | — | CE | — | Complex/societal emergency — no UNDRR-ISC natural code; manual review (mostly Risk & Recovery, out of core RM scope) |
267+ | Environmental Degradation | — | — | — | Environmental hazard — no clean UNDRR-ISC; manual review |
268+ | Other | — | OT | — | Unclassified — manual review |
269+
270+ > ** Completeness** : this table covers the full observed vocabulary (RM currently exercises
271+ > Flood, Wildfire, Storm, Earthquake, Mass Movement, Industrial/Transport accident, Other;
272+ > Volcanic Activity, Humanitarian Crisis, Environmental Degradation appear in the broader
273+ > catalogue). Any ** unmapped or new** ` category ` MUST fall through to manual review rather
274+ > than be dropped. ` subCategory ` (detail endpoint only) is the refinement key.
235275
236276Apply ` hazard_profiles.get_canonical_hazard_codes() ` after mapping.
237277
@@ -249,20 +289,26 @@ See [`FINDINGS.md`](./FINDINGS.md) for the raw familiarisation notes (esa-montan
249289
250290## Open decisions
251291
252- 1 . ** ` statusCode ` enum** — only ` F ` (final) and ` N ` (not produced) observed; confirm the
253- full set historically and finalise the ` monty:response_detail.status ` mapping.
254- 2 . ** Hazard geometry source** — * resolved:* AOI → Hazard, geometry = DEL delineation when
255- present, else AOI ` extent ` . Remaining detail: which DEL (base vs latest monitoring) supplies
256- the polygon, and whether to update the Hazard geometry as monitoring DELs arrive.
257- 3 . ** Response geometry** — per-AOI vs per-product ` extent ` for Response items (both present;
292+ 1 . ** ` statusCode ` enum** — observed ` F ` (delivered), ` I ` (in production), ` W ` (scheduled),
293+ ` N ` (not produced), mapped to ` published ` /` in-production ` /` planned ` /` withdrawn `
294+ respectively. Confirm no further codes exist historically and pin the ` N ` →` withdrawn `
295+ vs ` no-impact ` rule (from ` version.reason ` ).
296+ 2 . ** Hazard geometry & monitoring** — AOI → Hazard, geometry = DEL delineation when present,
297+ else AOI ` extent ` . Remaining: which DEL supplies the polygon (base vs ** latest monitoring**
298+ — lean latest), and whether the Hazard geometry is ** updated in place** as monitoring DELs
299+ arrive or versioned.
300+ 3 . ** Multi-hazard extent** — a secondary hazard identified from a GRA footprint class
301+ (` Landslide ` in a ` Storm ` activation) has no dedicated polygon in the API; decide whether to
302+ reuse the AOI/DEL extent or leave geometry coarse.
303+ 4 . ** Response geometry** — per-AOI vs per-product ` extent ` for Response items (both present;
258304 products carry their own ` extent ` , generally the AOI extent).
259- 4 . ** Monitoring lineage** — ` rel: prev ` between iteration * n* and * n-1* keyed by
305+ 5 . ** Monitoring lineage** — ` rel: prev ` between iteration * n* and * n-1* keyed by
260306 ` monitoringNumber ` (and/or ` version.number ` ).
261- 5 . ** Source imagery** — emit linked acquisition items (from ` images[] ` , carrying
307+ 6 . ** Source imagery** — emit linked acquisition items (from ` images[] ` , carrying
262308 ` sat: ` /` eo: ` /` sar: ` ) via ` derived_from ` , or keep ` images[] ` as product metadata only.
263- 6 . ** Cross-source links** — resolve GDACS episode; emit ` related ` links unconditionally
309+ 7 . ** Cross-source links** — resolve GDACS episode; emit ` related ` links unconditionally
264310 (deterministic id) or only when the target is present in Montandon.
265- 7 . ** Impact granularity** — per-product GRA ` stats ` vs aggregated activation ` stats `
311+ 8 . ** Impact granularity** — per-product GRA ` stats ` vs aggregated activation ` stats `
266312 (avoid double counting).
267313
268314## Resources
0 commit comments