One HL7 v2 message in. Parsed for real by the browser, then decoded, checked, acknowledged or mapped.
Paste the message off the interface log — ADT, ORU, ORM, an ACK. A real parser runs here, free: it reads the five delimiters out of MSH-1 and MSH-2 instead of assuming pipes and carets, splits every repetition, component and subcomponent, decodes the escape sequences, validates the timestamps against the actual calendar, resolves the structure your trigger event really maps to, and checks the segments against it. Then pick a lane.
The admit example ships a saved model run for all four lanes, so you can see the whole thing — the decode, the conformance check, the ACK and the FHIR mapping — without signing in and without spending a credit.
HL7 Desk reads an interface message as a message. It is not clinical software and gives no clinical, diagnostic or treatment advice.
Decode the message
What this message actually says.
Questions
Does my message leave the browser?
Not until you run a lane. Parsing, validating, reading out every field, checking the segment grammar and redacting the patient identifiers all happen in this browser tab with no account and no network call. Only the four AI lanes send anything, and if you press Redact first, what is sent is the redacted message — the prescan facts that go with it are computed from that same redacted text, never from the original.
How does the redaction work, and what does it keep?
Every field HL7 Desk classes as a patient identifier is rewritten in your browser. Pseudonyms are stable, so two fields that shared a value still share one — a next of kin who shared the patient's surname still does, and a merge message still shows two distinct identities. Assigning authorities and identifier types are kept, dates of birth are generalised to the year, postal codes are truncated to three characters, and states and countries stay. That is deliberate: the redacted message must still pass and fail exactly the conformance checks the real one did, or the review would be of a message you never had.
Why does it say my A08 is checked against ADT_A01?
Because that is what HL7 says. Many ADT trigger events share one message structure: A04, A08 and A13 all use ADT_A01, and A28 and A31 use ADT_A05. Deriving the structure as the message code plus the trigger event produces names like ADT_A08 that do not exist, and then checks the message against a grammar nobody publishes. HL7 Desk resolves the real structure and reports it separately from whatever MSH-9.3 claims, so a disagreement between the two is visible rather than silently resolved.
What are the four lanes?
Decode explains what the message says, segment by segment and field by field. Conformance checks it against HL7 v2 and the profile you pick and hands back a corrected message. ACK builds the acknowledgment the receiving system should return, with the right code from HL7 table 0008, the right ERR segments with codes from table 0357, and the sender and receiver applications the right way round. FHIR maps the same message to FHIR R4 resources with a field-level mapping table and a Bundle. All four run over the same paste, and each result offers the next lane as a button.
How is the AI pass kept honest?
The browser parses the message first and sends its facts into the run: the resolved structure, the required segments, every field read out, and every flag it raised. The model must return one reconciliation entry per flag, so a defect it ignored is displayed as unaccounted for rather than quietly dropped. Every HL7 location the model cites is checked against the parsed message, and one that does not exist is shown, marked, rather than trusted.
Is this clinical software, or clinical advice?
No. HL7 Desk reads an interface message as a message. It never interprets a diagnosis, a result value or an allergy clinically, never comments on the care described, and its prompt forbids that framing. It is a tool for the people who build and debug health interfaces, and every finding is a prompt to verify with the interface owner, not a decision already made.
What does a run cost, and what if my balance is low?
A worst-case amount is reserved before you run and only what the run actually uses is charged. The estimate is checked against your balance before the button enables: signed out, it says signing in comes first; under the model's minimum, it names the exact shortfall; and a reply cut short by a low balance says so rather than presenting itself as complete.