Schedule a demo

MLLP channel configuration reference

Every field available when creating or editing an MLLP channel in the web admin dashboard under Channels > HL7 > MLLP.

All fields on this page can also be configured via enmasse YAML. See the enmasse reference for the YAML schema.

For use-case-driven explanations of each group, see the Receiving HL7v2 over MLLP page.


Main tab

FieldTypeDefaultDescription
Nametext-Unique name for this channel. Used in logs, dashboard listings, and as the basis for the REST channel name if the REST bridge is enabled.
ActiveboolonWhether the channel accepts connections. Inactive channels remain configured but do not listen for messages.
Serviceselect-The Zato service invoked for each incoming message. The service receives the parsed HL7Message object (or raw ER7 string if parsing is off) as self.request.input.
HL7 versionselectHL7 v2.xThe HL7 version used for parsing and validation.
Parse on inputboolonWhen on, the raw ER7 bytes are parsed into a typed HL7Message object before the service is invoked. When off, the service receives the raw string. Turn off for batch messages or when your service handles parsing itself.
ValidateboolonWhen on, the parser validates the message structure against the HL7 schema - required segments, cardinality rules, and choice groups. Invalid messages are rejected with an AE acknowledgment.
Return errorsbooloffWhen on, AE acknowledgments include the actual exception text in the ERR segment. When off, a generic error message is returned. Keep off in production to avoid leaking internal details.
Log messagesbooloffWhen on, the full raw ER7 payload and ACK response are written to the server log. See Logging for details.

Routing tab

Controls which messages this channel handles when multiple channels share the same MLLP listener. Only filled fields are checked - empty fields act as wildcards. Matching is case-insensitive.

See Routing for examples.

FieldTypeDefaultMSH positionDescription
Sending applicationtext-MSH-3Match the sending application identifier, e.g. WELLNESS_APP, LAB_SYS.
Sending facilitytext-MSH-4Match the sending facility, e.g. MAIN_FAC, EAST_CLINIC.
Receiving applicationtext-MSH-5Match the receiving application, e.g. SCHEDULING, HIS.
Receiving facilitytext-MSH-6Match the receiving facility.
Message typetext-MSH-9.1Match the message type code, e.g. ADT, ORM, ORU.
Trigger eventtext-MSH-9.2Match the trigger event code, e.g. A04, O01, R01.
Processing IDtext-MSH-11Match the processing ID: P (production), T (training), D (debugging).
Version IDtext-MSH-12Match the HL7 version in the message, e.g. 2.5, 2.9.
Defaultbooloff-When on, this channel catches any message that does not match another channel's filters. Only one default channel is allowed per MLLP listener. If no channel matches and there is no default, Zato responds with an AR acknowledgment.

Protocol tab

Wire-level settings for the MLLP framing and TCP connection.

See Framing for details on tolerant framing and oversized message handling.

FieldTypeDefaultDescription
Start sequencehex0bHex bytes marking the start of an MLLP frame. The standard value is 0b (ASCII VT, 0x0B). If the sender omits the start byte but the payload begins with MSH, Zato auto-detects the frame start.
End sequencehex1c 0dHex bytes marking the end of an MLLP frame. The standard value is 1c 0d (ASCII FS + CR, 0x1C 0x0D).
Max message sizenumber2Maximum allowed message size. Messages exceeding this limit are rejected and the connection is closed. Increase for messages with embedded binary data (e.g. PDF or images in OBX segments).
Max message size unitselectMBUnit for the max message size: kB or MB.
Read buffer sizenumber32768TCP read buffer size in bytes. Larger buffers reduce the number of system calls for big messages but use more memory per connection.
Receive timeoutnumber250Socket read timeout in milliseconds. Controls how long Zato waits for data on each read call before checking for idle connections.

Tolerance tab

Preprocessing toggles that fix common issues in non-standard HL7 messages before parsing and routing. All toggles are on by default unless noted otherwise.

See Tolerance for the processing order and troubleshooting tips.

Wire-level preprocessing

These toggles operate on raw bytes before the message is parsed.

FieldTypeDefaultDescription
Normalize line endingsboolonConverts LF (\n) and CRLF (\r\n) to CR (\r), which is the HL7-standard segment separator. Required for messages from Windows-based systems that use CRLF.
Force standard delimitersboolonRewrites MSH-2 to ^~\& and translates all field, component, subcomponent, and repetition delimiters in the message body to standard characters. Handles senders that use non-standard delimiter sets.
Repair truncated MSHboolonPads the MSH segment if it has fewer than 12 fields. Some legacy systems send minimal MSH headers missing optional trailing fields like processing ID or version.
Split concatenated messagesboolonSplits multiple messages received in a single MLLP frame into separate messages, each starting with MSH. Each is routed and processed independently.
Use MSH-18 encodingboolonReads the character encoding from MSH-18 instead of using the default. See the Encoding tab for the MSH-18 to codec mapping table.

Parser-level tolerance

These toggles control content-level fixups applied by the Rust ER7 parser during parse_hl7.

FieldTypeDefaultDescription
Fill empty OBX-2 value typeboolonWhen OBX-2 is empty but OBX-5 contains data, fills OBX-2 with ST. Common with lab systems that omit the value type for string results.
Replace invalid OBX-2 value typeboolonReplaces unrecognized OBX-2 data types (e.g. TX typos, nonstandard codes) with ST so the observation value can still be accessed.
Strip orphan escape charactersboolonRemoves stray backslash (\) characters that do not form a valid HL7 escape sequence. Prevents parse errors from malformed escape codes.
Clear OBX-8 literal nullboolonClears OBX-8 (Abnormal Flags) when it contains the literal string null instead of a valid flag value. Seen in some EHR exports.
Strip multi-quote sequencesboolonStrips sequences of two or more consecutive double-quote characters ("", """", etc.) that some systems emit as empty-field placeholders.
Pad short encoding charactersboolonPads MSH-2 with standard encoding characters when the sender provides fewer than the required four. Allows parsing of messages from minimal senders.
Fix off-by-one field indexbooloffRemoves a spurious empty first field from non-MSH segments. Some legacy systems prepend a leading field separator that shifts all field indices by one.

Dedup tab

Message deduplication based on MSH-10 (Message Control ID).

See Deduplication for how duplicates are handled.

FieldTypeDefaultDescription
Dedup TTLnumber14How long to remember message control IDs. If a message with the same MSH-10 arrives within this window, Zato returns an AA acknowledgment without invoking the service. Set to 0 or leave empty to disable deduplication.
Dedup TTL unitselectDaysUnit for the TTL: Minutes, Hours, or Days. The 14-day default provides a wide safety margin for most clinical retransmission policies.

Encoding

Character encoding settings.

See Encoding for the full MSH-18 codec mapping table.

FieldTypeDefaultDescription
Default character encodingselectUTF-8Encoding used to decode incoming message bytes when MSH-18 is empty, unrecognized, or the MSH-18 toggle is off. Available values: UTF-8, ISO-8859-1, Windows-1252, US-ASCII. ACK responses are always encoded with this value.

Logging

FieldTypeDefaultDescription
Logging levelselectINFOMinimum severity for log entries: DEBUG, INFO, WARNING, or ERROR.
Log messagesbooloffWhen on, logs the full raw ER7 payload and ACK response for every message. Enable only during development - HL7 messages contain PHI.

REST bridge

Expose the MLLP channel over HTTP for systems that cannot speak MLLP.

See REST bridge for usage examples.

FieldTypeDefaultDescription
Use RESTbooloffWhen on, creates a companion HTTP channel named hl7.rest.<channel-name> that accepts POST requests with an ER7 body. The same service handles both MLLP and REST messages.
REST onlybooloffWhen on, the TCP listener is not started. Messages arrive only over the REST endpoint. Use when the sending system speaks HTTP but not MLLP.
URL pathtext-The HTTP path for the REST endpoint, e.g. /hl7/adt.
Securityselect-Security definition for the REST endpoint: Basic Auth, API key, or other configured security.


Schedule a meaningful demo

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

"For me, Zato Source is the only technology partner to help with operational improvements."

- John Adams
Program Manager of Channel Enablement at Keysight