Total Ingested
Last Ingested
Lookup
Result
Lookup response
No lookup yet.
Version History
--
No previous versions.
Version -- Details
--
Paste ORU to Ingest
Saves and indexes immediately
API Key
Adds X-API-Key to all requests. Store locally and optionally set server-side.
Change Password
Recommended after first login.
Admin Reset Password
Reset any user and require change on next login.
Mirth Channel Config
Destination host and port for MLLP send
Ingestion Field Mapping
Segment / field / component used to parse accession, MRN, date, modality
Accession
Patient MRN
Study Date
Modality
Result Status (Addendum Handling)
If an Addendum exists and a Final arrives later, the Addendum is preserved.
Facility (Resend & Export grouping)
MSH-4 is the sending facility (e.g. hl7_bsa-hospital). Change the mapping, then backfill to re-derive stored messages.
Read Time & Radiologist (Analytics)
Read time
Radiologist
OBR-36.1 holds the read timestamp (e.g. 20240927163500); OBR-32.2 holds the reading radiologist's surname. Names are stored and shown in capitals. Save, then re-run the backfill on the Analytics tab to re-derive stored messages.
Resend & Export
Select stored reports by study date and sending facility
Study date range
Facilities
Loading facilities...
No selection = every facility. Facility comes from MSH-4 (sending facility).
Matching Reports
No preview yet
Preparing resend...
| Accession | Facility | MRN | Study Date | Modality | Status |
|---|
Exams Read
Volume by read time (OBR-36), not study date or ingest time
Read date range
Quick ranges
Group by
Exams Read
Radiologists
Busiest Hour
Read Data Coverage
Exams read per month
No data yet
| Period | Exams Read |
|---|
By Radiologist
Active days is the number of distinct days with at least one read
| Radiologist | Exams Read | Share | Active Days | Per Active Day | First Read | Last Read |
|---|
Historical Backfill
Derives read time and radiologist from stored HL7 for messages ingested before these fields existed
Checking backfill status…
Runs once automatically on first start after upgrading. Re-run after changing the read-time or radiologist field mapping.
Activity Monitor
Recent ingests, queries, and sends
| Action | Accession | MRN | Modality | When |
|---|
Validation Rules
Configure HL7 validation rules
Define required/format/regex validations per HL7 segment/field/component.
Data Completeness Report
Overview of missing data across messages
Total Messages
Missing MRN
Missing Date
Completeness
API Overview
Auth, ingestion, validation, metrics, and config
Auth
POST /auth/login {username, password, remember_me?}
POST /auth/change-password {current_password, new_password}
POST /auth/reset-password {username, new_password, force_change?}
GET /auth/me
GET /auth/api-key
POST /auth/api-key {api_key|null}
Send `X-Auth-Token` (from login) and optional `X-API-Key`.
Ingest & Retrieve
POST /ingest {raw_hl7, accession?, patient_id?, study_date?, modality?}
POST /ingest/batch [...]
GET /oru/{accession}
GET /Observation?identifier={accession}
POST /send/{accession}
GET /stats
GET /activity
Ingestion validates HL7 structure, checks duplicates, and runs rules.
Config & Mapping
GET /config
POST /config {host, port, timezone}
GET /ingestion-config
POST /ingestion-config {accession_segment, accession_field, ...}
Timezone sets display TZ for dashboard times.
Validation & Versions
GET /validation/rules
POST /validation/rules {rule_name, rule_type, target_segment, target_field, ...}
DELETE /validation/rules/{id}
GET /validation/report/{accession}
GET /validation/completeness
GET /oru/{accession}/versions
GET /oru/{accession}/diff/{v1}/{v2}
Rule types: required_accession (primary/alt), required_field, format, custom_regex.
Reports (Bulk Resend & Export)
GET /facilities?start_date=&end_date=
GET /reports?start_date=02/24/2026&end_date=08/04/2026&facility=hl7_bsa-hospital&facility=hl7_bsa-ucc&limit=100&offset=0
GET /reports/export?format=csv|ndjson|zip&start_date=&end_date=&facility=
POST /reports/resend {start_date, end_date, facilities[], modalities[], result_statuses[], accessions[], delay_ms?, reuse_connection?, limit?}
GET /reports/resend?limit=10
GET /reports/resend/{job_id}
POST /reports/resend/{job_id}/cancel
POST /reports/backfill-facility
Dates accept YYYY-MM-DD or MM/DD/YYYY; `facility` repeats or comma-separates, and `__none__` selects messages with no facility. Resend runs as a background job — poll it for progress.
Analytics (exams read)
GET /analytics/summary?start_date=&end_date=&facility=&modality=&radiologist=
GET /analytics/reads?group_by=hour|day|week|month|quarter|year|hour_of_day|day_of_week
|radiologist|modality|facility|result_status
GET /analytics/radiologists?limit=500
GET /analytics/export?view=series|radiologists&group_by=month (CSV)
GET /analytics/backfill
POST /analytics/backfill?restart=true
POST /analytics/backfill/cancel
Buckets on the read time (OBR-36.1), stored as the sender's local wall clock — not study date and not ingest time. Radiologist comes from OBR-32.2 and is stored uppercase, so filters and grouping are case-insensitive. Addenda are excluded from read counts unless include_addenda=true.
Metrics
GET /metrics/ingestion-rate?hours=24 GET /metrics/modality-distribution GET /metrics/send-success-rate?days=7
Used by dashboard charts; extend with Prometheus or alerts as needed.