Damage incident

One incident end to end: the evidence, the unit it attaches to, the duplicate that was rejected and the one that was merged, the disposition and who signed it, the exact ledger rows it produced, and the compensating pair that fixed the first decision without editing anything

DMG-2026-0729-014 ← register idempotency rfid:damage:E28068940000402 18F3C:ev-99412
MIN-VAS-022 · Ceramic vase, large · one unit · hairline fracture along the neck, base intact, found during the MCC opening walk-through on bin shelf-A3. Reported by an RFD40 handheld scan, and independently by a store associate 3.2 hours later. Those two reports are the same physical vase, and this page is where that is proved.
CONFIRMED severity: minor context: store source: rfid disposition: markdown 30% 1 duplicate merged 1 revision attribution: store
Value at risk
AED 180
1 unit at landed cost, frozen 29-07 11:02 against cost layer L-2026-07 (module 05). Retail AED 420.
Recovered
AED 126
Markdown at 30% off retail, less the cost basis. Net recovery 70% of value at risk.
Reported29-07 07:52
Evidence29-07 08:14 · 4 files
Confirmed29-07 11:02 · ledger posted
Triaged29-07 13:40 · revised 14:18
Resolvedpending
branches: ↳ escalate   ↳ write-off (Finance)   ↳ void (reopens 0 drift cases)

Evidence

4 photos, 7.5 MB, plus one stock reference. Every photo's EXIF capture time is compared to the incident window: a photo taken before the damage was reported is either the reference shot or a problem, and either way the page says which.

EXIF verified 4 of 4 GPS inside MCC geofence
01 · HERO hairline · neck 08:11 RFD40-0425.197N
02 · CLOSE-UP fracture line 21mm stress mark 08:12 iPhone 154.2 MP
03 · CONTEXT shelf-A3 · tilt 4 deg 08:13 iPhone 15MCC
04 · BASE base intact 08:14 iPhone 15OK
STOCK · REFERENCE catalogue shotcompare →
4 markers on 3 photos. Annotations are stored as fractional coordinates against the photo, not as burned-in pixels, so the original file is never altered and the markers survive a re-crop. The base shot carries a green marker because evidence of what is not damaged is what makes a minor grade defensible against a total-loss claim. damage_01.jpg 2.1MB · damage_02.jpg 1.9MB · context_shelf.jpg 2.4MB · base_check.jpg 1.1MB

What was damaged

Three levels of precision. This incident has all three, which is the best case and not the common one: 31 of 96 incidents MTD carry an EPC.

SKU
MIN-VAS-022 · Ceramic vase, large
SKU code at report
MIN-VAS-022 frozen display copy, ruling L5
Unit EPC
E280 6894 0000 4021 8F3C
Unit state at report
on_display since 12-07 · 17 days on floor
Unit state now
damaged hop written 29-07 11:02, same transaction as the quantity row
Carton of origin
MC-4318 · received 04-07 · 12 units, 11 still traceable
GRN receipt
INF-2287
Purchase order
PO-2026-102 · Atelier Ceramics · incoterm EXW
Location
MCC · bin shelf-A3
Quantity
1 unit
Category
surface_crack family material · supplier attributable: no under EXW
The incoterm decides the money, not the damage. PO-2026-102 is EXW, so risk passed at the supplier's door and a crack found 25 days after receipt on a store shelf is ours. Had it been DAP and found at receipt, the same crack would have grounded a supplier claim. Attribution is a rule read from the PO, never a judgement typed by whoever noticed.

How it was discovered

Who, where, and which scan. The two reports that became this one incident are both shown, because the merge does not erase the second reporter.

primary · winnerDMG-2026-0729-014
Reported by
Device RFD40-04 · operator badge 3318, Fatima Al Zaabi
Reported at
29-07-2026 07:52:41 GST
Which scan
SCAN-0729-0184 · display-zone sweep, 214 tags read, 1 flagged
Source system
rfid X-RFID-Source: prod
Zone at read
MCC / DISPLAY / shelf-A3
merged · frozenDMG-2026-0729-009
Reported by
Fatima Al Zaabi · store associate, MCC
Reported at
29-07-2026 11:07:12 GST · 3.2h later
Which route
ops2 damage form · ops_damage:4421
Outcome
auto-merged on exact EPC match, 3.2h inside the 48h window
Its evidence
2 photos re-parented to this incident by a new row, originals untouched
This is the double count that ops2 cannot prevent today. app.py:13539 is a bare INSERT with no idempotency key, and no index on damage_inventory is UNIQUE. Both reports would have become rows, both would have fired the inventory webhook, and MIN-VAS-022 would have lost two units to a single broken vase.

The 48-hour matching window

Every candidate placed at its real offset from this incident. The rule is a shared match key plus 48 hours, with precedence unit, then carton, then SKU and location and context. Only an exact unit match may auto-merge.

1 merged · 2 rejected · 1 outside window
The 48h window, 24h either side of the incident DMG-2026-0729-014 · this incident · 29-07 07:52 DMG-2026-0729-009 · unit match · +3.2h · auto-merged DMG-2026-0728-037 · sku+location match · -31.8h is outside, shown for context DMG-2026-0728-030 · sku+location match · -41.0h · rejected, distinct units DMG-2026-0729-021 · sku+location match · +12.4h · rejected, different bin DMG-2026-0727-011 · 52.1h out · not proposed -24h -12h 0 +12h +24h outside outside
CandidateBasisOffsetScoreReasoningDecision
DMG-…0729-009unit+3.2h1.000 Identical EPC E280 6894 0000 4021 8F3C. There is exactly one physical object with that serial, so this is not a judgement call. auto-merged
DMG-…0729-021sku+loc+12.4h0.410 Same SKU, same store, different bin (shelf-B1), no EPC on the other report. MCC holds 4 of this SKU and two really can break in a day. rejected · Ahmad 13:02
DMG-…0728-030sku+loc-41.0h0.380 Inside the window by 7 hours and already resolved to a markdown on a different EPC. The gap column makes the marginality visible instead of hiding it behind a boolean. rejected · Ahmad 13:04
DMG-…0727-011sku+loc-52.1h0.310 Outside 48h, so never proposed. A human may still link it manually, which records as a manual link and never as a match, because the two mean different things to the reconciler. not proposed
A merge freezes the loser, it does not rewrite it. DMG-2026-0729-009 keeps its row, its reporter and its timestamps, gains merged_into_id and state merged, and its two photos are re-parented by a new evidence row pointing at the same object key. Nothing is deleted and nothing is edited. Ruling L4, applied to incidents instead of SKUs.

Disposition decision

Grade is minor, so two of five exits are refused by the API rather than hidden by the UI. A control you can press and be refused teaches nothing; a control that is visibly unavailable with its reason teaches the rule.

Recovery score 68 of 100. Superficial damage on a high-margin item (58% at retail) inside a store that turns display stock every 21 days. The engine recommends markdown at 30%, net recovery AED 126. It recommends; the human decides; and the decision is an event either way.

If this became a write-off

The chain shown against a live tier-2 request on a sibling incident, so the shape is visible rather than described.

WO-2026-0729-006 tier 2basis: value expires in 4d
Origin
DMG-2026-0728-021
SKU · qty
LLW-BAG-047 · 1
Value
AED 2,890 layer L-2026-07
Rolling 30d
AED 2,890 same requester, same SKU
Requested by
Khaled A. · ops_manager
Justification
Perfume spill inside the lining, odour transfer confirmed by two staff. Not cleanable, not saleable, not donatable.
Signatures · 1 of 2
AY Ahmad Yousuffinance · signature 1 of 2digest 9f3c…41a8 · 2FA verified approved 09:14
? Awaiting second signatureops_manager or adminKhaled A. is the requester and is therefore ineligible pending 5h
The signer attests to a digest, not to a screen. evidence_digest is a hash over quantity, value, SKU, location and the evidence ids. If any of those change after a signature, the digest no longer matches and the signature is void. An approval cannot later be claimed to have covered different facts.

Claims

insuranceCLM-2026-0729-001 under review
Policy
MIN-CARGO-2026-04
Deductible
AED 250
Claimed
AED 180
Expected payout
AED 0 · below deductible
SLA
14 business days · 12 remaining
Filed Docs Review Assessed Settled
Held at draft in i3 and not sent to the insurer. AED 180 against an AED 250 deductible pays nothing and spends adjuster goodwill. It is retained so that if the shelf-A3 cluster crosses AED 1,000 a consolidated claim can cite all four incidents at once.
supplierno claim
PO-2026-102 is EXW and the quality window closed. Module 06 owns supplier_claims; this module only asks. A refused ask is recorded here so that the supplier exposure table on the register shows three damaged SKUs against Atelier Ceramics with no claim, which is a supplier-selection signal even when it is not a recoverable one.
Supplier record →

Ledger rows this incident produced

append-only · every correction is a new row · nothing here was ever updated
EntryOccurredSKULocationFromTo DeltaBalance afterSource typeIdempotency keyApproval
LE-884201129-07 11:02:14MIN-VAS-022MCC DISPLAY_GOOD--13 damage_confirmi3:dmg:DMG-2026-0729-014:hold-
LE-884201229-07 11:02:14MIN-VAS-022MCC -QUARANTINE+11 damage_confirmi3:dmg:DMG-2026-0729-014:hold-
LE-884238829-07 13:40:02MIN-VAS-022MCC QUARANTINE--10 damage_disposei3:dmg:DMG-…-014:disp:v1-
LE-884238929-07 13:40:02MIN-VAS-022MCC -WRITTEN_OFF+11 damage_disposei3:dmg:DMG-…-014:disp:v1WO-…-004
LE-884250129-07 14:18:37MIN-VAS-022MCC WRITTEN_OFF--10 damage_revisei3:dmg:DMG-…-014:rev:v1:outWO-…-004R
LE-884250229-07 14:18:37MIN-VAS-022MCC -QUARANTINE+11 damage_revisei3:dmg:DMG-…-014:rev:v1:in-
LE-884250329-07 14:18:37MIN-VAS-022MCC QUARANTINE--10 damage_disposei3:dmg:DMG-…-014:disp:v2-
LE-884250429-07 14:18:37MIN-VAS-022MCC -DISPLAY_DAMAGED+11 damage_disposei3:dmg:DMG-…-014:disp:v2-
UL-44120729-07 11:02:14E280…8F3CMCC on_displaydamagedunit- unit_damagei3:unit:DMG-…-014:hold-
UL-44146629-07 14:18:37E280…8F3CMCC written_offon_displayunit- unit_revisei3:unit:DMG-…-014:rev:v1-
CL-22091429-07 13:40:02MIN-VAS-022MCC cost_ledgerdamage_loss-180.00AED 0 writeoff_valuei3:cost:DMG-…-014:disp:v1WO-…-004
CL-22103829-07 14:18:37MIN-VAS-022MCC damage_losscost_ledger+180.00AED 180 writeoff_reversei3:cost:DMG-…-014:rev:v1WO-…-004R
12 rows · 8 quantity, 2 unit, 2 value · zero updates, zero deletes. The quantity ledger never carries a zero-quantity value movement (ruling L14): AED 180 moved in cost_ledger, which is module 05's journal, and the two journals reconcile nightly. Audit slice →
The revision, in full
At 13:40 the incident was dispositioned write off on a first-pass total-loss grade, a tier-0 auto-rule signed it, and rows LE-8842388 and LE-8842389 posted. At 14:18 a second inspection re-graded it to minor - the base was intact and the crack was 21mm, not a through-break - and the disposition changed to markdown.

Nothing was edited to make that true. The revision posted a compensating pair that exactly reverses the write-off (LE-8842501 and LE-8842502), then a fresh pair for the new disposition (LE-8842503 and LE-8842504). The write-off request was reversed by a new request WO-2026-0729-004R, not by flipping a status on the old one. The unit hop reversed the same way.
Original
QUARANTINE → WRITTEN_OFF
-1 / +1 · AED -180
Compensating
WRITTEN_OFF → QUARANTINE
-1 / +1 · AED +180
New
QUARANTINE → DISPLAY_DAMAGED
-1 / +1 · AED 0 · recovery 126
net effect on WRITTEN_OFF at (MIN-VAS-022, MCC) = +1 -1 = 0
net effect on DISPLAY_DAMAGED = +1   net effect on QUARANTINE = +1 -1 +1 -1 = 0
net effect on DISPLAY_GOOD = -1   on_hand unchanged, sellable -1, floor_sellable +1
hash chain: continuous, 12 links, verified 21:00
Under ops2 today the same correction would be UPDATE damage_inventory SET status = ?, the prior status would be gone, no ledger row would exist in either direction, and the vase would still be sitting in DEFECTIVE in the inventory backbone because the write-off path fires no webhook at all.

Timeline

Every row of damage_events. Actor kind is recorded alongside actor, so a decision made by a device or a rule is never mistaken for one made by a person.

Reported29-07 07:52:41
Device RFD40-04 · actor_kind device · display-zone sweep flagged EPC …8F3C as damaged. State null → reported.
Evidence added29-07 08:14:02
4 photos, 7.5 MB. EXIF times 08:11 to 08:14, all inside the window. GPS inside the MCC geofence. exif_verified = true on all four.
Assessed29-07 10:41:19
Fatima Al Zaabi · severity null → total_loss on first inspection. Category surface_crack.
Duplicate auto-merged29-07 11:07:14
Matcher · actor_kind rule · DMG-2026-0729-009 matched on basis unit, score 1.000, offset +3.2h. Loser frozen, 2 photos re-parented. No ledger effect: the loser had not yet confirmed.
Confirmed29-07 11:02:14
Ahmad Yousuf · authority rule physical > claim. Value frozen at AED 180 against layer L-2026-07. Ledger LE-8842011, LE-8842012, unit hop UL-441207, one transaction.
Candidates rejected29-07 13:02 and 13:04
Two sku+location candidates rejected with reasons. Both retained: a rejection is the evidence that somebody looked.
Disposition set · write off29-07 13:40:02
Tier 0, auto-rule wo-auto-totalloss-u1 signed as approver. Request WO-2026-0729-004 posted. This decision was wrong and the page keeps it.
Re-graded29-07 14:12:55
Ahmad Yousuf · severity total_loss → minor. Second inspection: base intact, crack 21mm, not a through-break. Note attached.
Write-off reversed29-07 14:18:37
New request WO-2026-0729-004R with reversed_by_request_id set both ways. Compensating pair LE-8842501, LE-8842502. Cost reversal CL-221038.
Disposition revised · markdown 30%29-07 14:18:37
New pair LE-8842503, LE-8842504. Unit hop back to on_display. New price AED 294. POS signage flag set.
Insurance claim drafted29-07 14:31:08
Held at draft, below_deductible = true. Will be filed only if the shelf-A3 cluster crosses AED 1,000.

Related

The shelf-A3 cluster
DMG-…0729-014this one · AED 180
DMG-…0728-037scuff · AED 1,520
DMG-…0728-030scuff · AED 1,520
DMG-…0727-009chip · AED 320
4 in 41hAED 3,540
Four damages on one bin in under two days against a baseline of 0.4 per bin per week. Photo 03 shows a 4-degree tilt on the shelf. That is not four accidents, it is one shelf.
Open as incident → MCC bin map →

This SKU's history

DMG-2026-0312-044markdown
DMG-2025-1108-023written off
DMG-2025-0914-055RTS credit
3 prior damages on MIN-VAS-022, all display-context, none in transit. A ceramic vase that only ever breaks on a shelf is a merchandising problem, not a packaging one, and the root-cause code says so: bin_instability, owning module 04.
SKU detail →

Actors

RDRFD40-04
device · reported
FZFatima Al Zaabi
store associate MCC · evidence, assessment
AYAhmad Yousuf
ops manager · confirm, re-grade, revise
RUwo-auto-totalloss-u1
rule · tier-0 signature, later reversed
A rule that signs is named as the approver and its approvals are sampled monthly. An anonymous automatic decision is the same problem as an anonymous human one.
The hero, lifecycle strip and photo grid keep their exact heights. Photos load last and independently, because the Tigris CDN can be slow while the incident record is instant.

No incident selected.

Pick a damage incident from the register to see its evidence, its duplicates, its decisions and the ledger rows it produced.

Back to the register

No timeline events match.

The actor filter is set to actor_kind: human and the last 4 events on this incident were written by a rule and a device.

Could not load DMG-2026-0729-014.

The photo CDN timed out on 3 of 5 thumbnails and the incident record itself loaded fine. Everything below the evidence card is accurate; the disposition controls are disabled, because a decision taken without seeing the evidence is exactly what the evidence requirement exists to prevent.

Error id dmg-d-91f4 · 29-07-2026 14:44:02 GST · record ok, evidence degraded, no write attempted
Back to register

You can read this incident but not decide it.

Your grant on app i3 is viewer. Evidence, timeline, ledger rows and the compensating pair are all visible, because the whole point of an audit surface is that it is readable. Confirm, grade, disposition, merge and sign are absent.

apps.i3 = {role: viewer, features: []} · needs role ≥ manager plus feature damage_disposition
Request accessWho can do what

Read-only for 25 minutes.

Nightly hash-chain verify. This incident's 12 ledger rows are being re-hashed and cannot accept a thirteenth until 21:25. Evidence upload still works, because a photo is not a ledger row.

21:00 to 21:25 GST · job chain-verify-0729 · links 8842011 to 8842504 in scope

GATE 7 is in shadow, day 3 of 7.

Everything on this page is real and posted except the write-off chain, which runs in shadow: requests collect real signatures and the posting step is held. That is why WO-2026-0729-004 shows an approval and a reversal but the WRITTEN_OFF balance never moved outside shadow. The recovery figure is marked provisional.

GATE-7 · day 3/7 · 0 WRITTEN_OFF rows without an approval id · unlocks 02-08
Gate report

Connected to

Damage register → Incident register → Write-off approvals → Compensating entries → MIN-VAS-022 → MCC → Carton MC-4318 → GRN INF-2287 → PO-2026-102 → Atelier Ceramics → Return to supplier → Repairs → Returns → Unit events → RFID gates → Drift → Audit log → Reports →