Troubleshooting healthcare interfaces

Every symptom a clinical interface shows, mapped to its cause and the page with the fix.

A clinical message passes through layers - the network, MLLP framing, routing, parsing, your service, its destinations - and a failure comes from one of them. This page maps what you observe to where it comes from.

Start here

Before guessing at a cause, search the audit log for the patient identifier or the MSH-10 control ID in question. Every message and its acknowledgment are recorded together as one exchange, so the search answers "did it arrive and was it acknowledged" first.

Inbound - a system sending to you

SymptomLayerWhere the fix is
The sender cannot connect at allThe network - port 11553 (11554 for TLS) is not published or a firewall blocks the sender's addressConnectivity and ports
The feed is silent - no messages arrive, no errors eitherThe sender or the channel - connection open and close events appear in the server log per connection, so their absence means the sender never connectsLogging
The sender receives ARRouting - no channel's rules match the message and there is no default channelRouting
The sender receives AEYour service raised an exception, or validation rejected the message - the full error is in the server log and the audit logAcknowledgments
The sender receives AE but sees no error detailsThe channel's Return errors toggle is off, which is the production default - the details are on your side, in the logsAcknowledgments
The message was accepted (AA) but nothing happened downstreamYour service or its destinations - the audit log's flow view shows every event of that one message, across every system it touchedAudit log views
The same message was processed twiceDeduplication - the window is shorter than the sender's retransmission policy, is disabled, or the sender assigns a new MSH-10 on each retryDeduplication
The message fails to parseThe sender's formatting - tolerance repairs handle most non-compliant senders, and Log messages shows the payload before and after preprocessingTolerance
Names or diacritics arrive garbledEncoding - the sender's character set differs from what the channel decodes with, MSH-18 detection resolves most of itEncoding
The connection closes with no ACK at allFraming - the message exceeds the configured maximum size, so the connection is closedProtocol
A batch (FHS/BHS) is rejected or parsed wrongThe channel parses batches as single messages - batch channels need Parse on input offBatch messages
The sender insists a message was sent but you cannot find itThe audit log - it records every exchange, searchable by the MSH-10 control ID or a patient identifierAudit log views

Outbound - you sending to other systems

SymptomLayerWhere the fix is
KeyError on self.mllp[name]The connection's name, or the connection is inactiveSending
An exception naming a timeoutThe remote side answers slower than the connection's Receive timeout - 250 ms by defaultSending
is_accepted is False with AEThe remote side failed to process the message - error_text contains what it reportedAcknowledgments
should_retry is TrueThe remote side asked for a retry (AR or CR) - resubmitting the message as-is can workResubmitting messages
A destination never acknowledgesThe audit log's Outstanding filter lists the exchanges whose acknowledgment has not arrived, oldest firstAudit log views
One destination of several missed a messageA hop resend sends the stored payload to that one destination again, without touching the othersResubmitting messages

After an outage

An interface that was down and is back up raises its own questions - what queued in the meantime, what to reprocess and what protects the catch-up from double-processing. Downtime and recovery covers that whole path.

Knowing before anyone calls

Alert rules over the audit log tell you that an interface is down, slow or failing - including the feed that simply went silent - before the people downstream notice. Each alert notification links straight to the events that triggered it, and an alert can also be diagnosed by an LLM with the evidence attached and secrets masked.

Where the details are

PlaceWhat it holds
The audit logEvery message with its acknowledgment, searchable by control ID and patient identifier, with the flow of each message across systems
logs/server.logConnection events, routing decisions, framing warnings and service tracebacks
Log messages on a channel or connectionThe full payloads, before and after tolerance preprocessing - development only, HL7 messages contain PHI

Learn more


Schedule a meaningful demo

Book a demo with an expert who will help you build meaningful systems that match your ambitions

"We evaluated 12 integration platforms and Zato was the only one to score 100%."

Philip Zuñiga, Assistant Professor, University of the Philippines