Explore Medical Device Field Report Intelligence
How to use this explorer
Move between stages with the arrows or the numbered stage list. Each stage shows the input it receives on the left and the output it produces on the right, with the lines that changed marked. The configuration that makes the change sits below the comparison, and the final stage shows the complete pipeline.
The 5 stages in order
- Collect synthetic fixturesRead the maintenance CSV, error events JSON, and technician notes through one broker and tag each message with its source.
- Tag each input messageSet a batch id and site label as message metadata; the message body passes through unchanged.
- Invoke custom analysis codeRun the checked-in analyzer, which reloads the fixtures and returns review candidates as JSON.
- Shape the outputAdd the pipeline version and processing time to the analyzer result.
- Fan out review candidatesWrite a local review copy and post the same JSON to the fleet endpoint. Delivery has not been exercised.
Interactive pipeline
MEDICAL DEVICE REFERENCE
Synthetic fixtures run through expanso-edge
Stage 1 of 5
Collect synthetic fixtures
Read the maintenance CSV, error events JSON, and technician notes through one broker and tag each message with its source.
5HighlightsAuthored emphasis only—not a computed diff.
Copy & download
Input
• maintenance-logs.csv (3 synthetic rows)• error-events.json (3 synthetic events)• technician-notes.txt (free text)Output
{"data": {"description": "Synthetic inspection record; repeated status S1 events were attached to a fleet review.","device_id": "PUMP-TEST-02","site_zone": "LAB-B","technician_alias": "TECH-02","timestamp": "2026-02-10T09:32:00Z"},Authored highlight: "device_id": "PUMP-TEST-02",Authored highlight: "source": "maintenance_log",Authored highlight: "timestamp": "2026-02-10T09:32:00Z"}{"data": [{"adapter_status": 2,"device_id": "VENT-TEST-01","event_code": "SENSOR-STATUS-S2","message": "Synthetic sensor-status event for architecture testing.","timestamp": "2026-02-10T07:58:22Z"},{"adapter_status": 1,"device_id": "PUMP-TEST-02","event_code": "FLOW-STATUS-S1","message": "Synthetic flow-status event for architecture testing.","timestamp": "2026-02-10T09:12:45Z"},{"adapter_status": 1,"device_id": "MON-TEST-03","event_code": "CONNECTOR-STATUS-S1","message": "Synthetic connector-status event for architecture testing.","timestamp": "2026-02-10T11:05:33Z"}],Authored highlight: "source": "error_events"}{"data": "Synthetic fixture notes — not customer, patient, or service data.\n\nTECH-01: VENT-TEST-01 prod...",Authored highlight: "source": "technician_notes"}Stage configuration
01-collect-synthetic-fixtures.yamlinput:
broker:
inputs:
# Source 1: Structured maintenance logs (CSV)
- csv:
paths:
[
'../../../examples/integrations/medical-device-intelligence/maintenance-logs.csv',
]
parse_header_row: true
batch_count: 1 # one row per message
processors:
- mapping: |
root.source = "maintenance_log"
root.device_id = this.device_id
root.timestamp = this.timestamp
root.data = this
# Source 2: Device error events (JSON)
- file:
paths:
[
'../../../examples/integrations/medical-device-intelligence/error-events.json',
]
codec: all-bytes
processors:
- mapping: |
root.source = "error_events"
root.data = this
# Source 3: Freeform technician notes (text)
- file:
paths:
[
'../../../examples/integrations/medical-device-intelligence/technician-notes.txt',
]
codec: all-bytes
processors:
- mapping: |
root.source = "technician_notes"
root.data = content().string()