You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(cems): resolve open decisions (no ETL blockers remain)
Broaden the statusCode/type scan (~20 activations, full code range) — enum stays
F/I/W/N and REF/FEP/DEL/GRA(/GRM), nothing new. Convert the open-decisions list
into a resolved-decisions table with concrete choices:
- Hazard geometry = latest delivered DEL (statusCode F, max monitoringNumber),
updated in place; secondary hazards use AOI extent.
- Response geometry = product extent; source imagery = linked acquisition items
via derived_from (layer separation).
- Cross-source related links emitted unconditionally from the deterministic id;
GDACS episode defaults to -1.
- N -> no-impact when version.reason says so, else withdrawn.
Only non-blocking residuals left (statusCode spec cross-check; optional GDACS
episode lookup). Also fix an anchor (ampersand heading -> "and").
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
| DEL product `extent` → else AOI `extent` (WKT) |`geometry`|**Prefer the Delineation polygon** (actual hazard footprint); fall back to the AOI extent |
139
+
| DEL product `extent` → else AOI `extent` (WKT) |`geometry`|**Latest delivered DEL** (highest `monitoringNumber` with `statusCode=F`) — the current hazard footprint; fall back to the AOI extent. Updated in place as monitoring DELs arrive|
140
140
|`name`|`title`| AOI name (e.g. `Kingston`) |
141
141
| activation `category` (+ `subCategory`) |`monty:hazard_codes`|**One code set per item** — split multi-hazard as Charter does; see [Hazard codes](#hazard-codes)|
142
142
| activation `countries`|`monty:country_codes`| Inherited from the activation |
@@ -261,7 +261,7 @@ stats are absent (never in addition, to avoid double counting).
261
261
**The join:** every item across both axes shares `monty:corr_id` — query by it and order by
262
262
`datetime` / `monitoring_number` to reconstruct the timeline.
(deterministic id) or only when the target is present in Montandon.
376
-
377
-
*Resolved in [Tracking over time](#tracking-over-time): monitoring lineage (`rel: prev`
378
-
per iteration), revision handling (`version.number` supersede), and Impact granularity
379
-
(per-product GRA series, not the aggregated snapshot).*
362
+
## Decisions (resolved)
363
+
364
+
All mapping decisions are settled — none block ETL implementation.
365
+
366
+
| # | Decision | Resolution |
367
+
|---|----------|------------|
368
+
| 1 |**`statusCode` → `status`**| Enum `F`/`I`/`W`/`N` → `published`/`in-production`/`planned`/`withdrawn` (confirmed stable across ~20 activations spanning the full range). `N`→`no-impact` when `version.reason` states no damage/impact observed, else `withdrawn`. |
369
+
| 2 |**Product type codes**|`REF`/`FEP`/`DEL`/`GRA` → `eo-ref`/`eo-fep`/`eo-del`/`eo-gra`; monitoring/variant codes (`GRM`) → base code + `monitoring_number`. |
| 4 |**Multi-hazard**| Driven by `category`/`subCategory` + GRA footprint classes — **not** DEL count. A secondary hazard with no dedicated polygon uses the AOI extent (coarse) and takes severity from its footprint-class figure. |
372
+
| 5 |**Response geometry**| The product's own `extent` (precise footprint); AOI extent only as fallback. |
373
+
| 6 |**Source imagery**| Emit linked **acquisition items** from `images[]` (carrying `sat:`/`eo:`/`sar:`, `resolutionClass`, `acquisitionTime`) referenced via `derived_from` — per the best-practices layer-separation rule; imagery extensions never on the Response product. |
374
+
| 7 |**Monitoring & revisions**| Monitoring iterations = separate items chained by `rel: prev`; `version.number` corrections supersede in place — see [Tracking over time](#tracking-over-time). |
375
+
| 8 |**Impact granularity**| Per-product GRA `stats` series (each timestamped), one Impact per exposure class per iteration; aggregated activation `stats` is cross-check only. |
376
+
| 9 |**Cross-source links**| Emit `related`**unconditionally** from the deterministic target id; GDACS episode defaults to `-1`. |
377
+
| 10 |**Refresh**| Watermark on the `?closed=false` list; detail only when `(lastUpdate, n_products, n_aois)` advance — see [Refresh & polling strategy](#refresh-and-polling-strategy). |
378
+
379
+
**Residual verification (non-blocking):** cross-check the `statusCode` enum against the CEMS
380
+
product-lifecycle spec (only `F`/`I`/`W`/`N` observed); confirm whether a cheap GDACS
381
+
episode-resolution lookup is worth adding over the `-1` default.
0 commit comments