Skip to content
FertiliCore

HL7 v2.5.1

HL7 v2 — keep the hospital record and the IVF record in step

FertiliCore ships an HL7 v2.5.1 connector that receives ADT and ORU messages over MLLP and sends its own results back out when a lab result is finalised. Every message is parsed, mapped and logged, and patient identity is reconciled against a crosswalk so re-sent messages update rather than duplicate.

  • ADT and ORU inbound over MLLP or HTTP
  • Outbound ORU fires on result finalisation
  • Peer-IP allow-listing and optional TLS
  • Ships disabled with no endpoint configured

The problem HL7 v2 solves

A fertility centre almost never runs in isolation. It sits inside a hospital group, or alongside one, and the patient's demographics and routine bloods are owned by a system the clinic does not control. Without an interface, someone re-keys a name, a national identifier and a set of hormone values from one screen into another, several times a day. That is slow, and transcription is where patient identity errors and misfiled results are born.

  • Registrations and demographic changes arrive automatically
  • Hormone and serology results arrive as structured values
  • Results finalised in the clinic go back to the hospital record

What the connector actually does

HL7 v2 is the pipe-delimited messaging standard that runs between almost every hospital information system, laboratory system and EHR, carried over MLLP on TCP. FertiliCore parses and builds v2.5.1 messages with a typed model and a round-trip tested parser. Inbound ADT messages become patient demographics, inbound ORU messages become laboratory results, and both paths converge on the same mapping pipeline whether the message arrives on the MLLP socket or is posted over HTTP by an interface engine.

Outbound results are event-driven, not polled

When a result is finalised in FertiliCore, the clinical application publishes an event. The HL7 connector consumes it, builds an ORU^R01 and places it on a reliable outbound queue. A worker drains that queue, sends the message MLLP-framed, reads the acknowledgement and retries on failure with a bounded attempt count. Nothing polls a table on a timer, and nothing is lost if the hospital's receiver is briefly unavailable — the message waits in the queue and stays visible to an operator.

The shared backbone behind every connector

All five FertiliCore connectors sit on one backbone. Every inbound and outbound message is recorded with its direction, message type, external reference, raw payload, status and correlation identifier, so an interface problem can be diagnosed from the message itself rather than from a log file. An external-to-internal identifier crosswalk maps the hospital's MRN to the internal patient file, which is what prevents a repeated ADT from creating a second patient. The outbound queue guarantees at-least-once delivery with retry, claim-locking so multiple workers never double-send, and an operator screen for watching and retrying failures. All of it is tenant-scoped.

  • Message log with payload, status, error and correlation id
  • Identifier crosswalk so re-sends update rather than duplicate
  • Outbound queue with retry and operator-visible failures
  • Connector credentials stored encrypted, never returned in plaintext

It never writes clinical tables directly

The HL7 service does not hold a connection to the clinical database. It calls the clinical application's own ingestion API over authenticated service-to-service HTTP, which means an externally sourced patient or result passes through exactly the same validation, permission and audit path as one typed in by a clinician. If the ingestion API rejects a message, the connector records a failure with the reason rather than writing a half-formed record. It also means the connector can be deployed, restarted or turned off without any effect on the clinical data model.

Scope, stated plainly

Integration projects fail on the assumption, not the protocol. Here is what this connector does and does not do today.

Supported today

  • HL7 v2.5.1 parsing and building via a round-trip tested typed model
  • Inbound MLLP listener returning AA/AE acknowledgements
  • Inbound ADT to patient demographics and ORU to laboratory results
  • Outbound ORU triggered by result finalisation, delivered over MLLP
  • Peer-IP allow-listing, with unlisted peers refused before a frame is read
  • Optional TLS on both the listener and the outbound client
  • Configurable character encoding, including ISO-8859-9 for Turkish text
  • Full message log, identifier crosswalk and retryable outbound queue

Not yet covered

  • Only the lab-result-to-ORU event is wired outbound today; other clinical events, such as an outbound ADT on a demographics change, use the same seam but are not bound yet
  • The connector ships disabled with an empty endpoint, so it binds no socket and sends nothing until your team configures it
  • No certification, conformance testing or connectathon participation is claimed
  • Order workflow beyond parsing ORM^O01 is mapped per site rather than assumed

Common questions

How is the inbound listener secured?

Two controls, both opt-in. You can restrict the listener to an allow-list of peer IP addresses, and an unlisted peer's connection is refused before any frame is read. You can also wrap the listener and the outbound client in TLS using a certificate you supply. Both default to off, so an unconfigured listener behaves predictably, and the connector as a whole ships disabled with no endpoint set.

What happens if the hospital's interface engine is down?

Outbound messages are queued rather than sent directly. A worker drains the queue and retries a failing delivery with a bounded attempt count; once automatic retries are spent the row becomes terminal and is flagged. An operator screen lists queued deliveries by status with the payload, attempt count and last error, and a failed row can be retried by hand once the cause is fixed. Disabling the connector pauses delivery without discarding anything already queued.

Are messages logged and auditable?

Yes. Every inbound and outbound message is written to a message log with direction, message type, external reference, the raw payload, status and a correlation identifier. An operator can filter by connector, direction and status and inspect the payload and the error on any failure. Because the connector ingests through the clinical application's own API, the resulting record also carries the standard clinical audit trail.

Will it work with our HIS vendor?

The connector implements the standard rather than a vendor-specific dialect: v2.5.1 messages over MLLP, with HL7 acknowledgements. Most hospital interface engines can either open an MLLP connection to it or POST a raw HL7 message to its HTTP ingest endpoint. Sending and receiving facility and application identifiers, encoding and acknowledgement behaviour are configurable, which is normally where site-specific differences live. We would want to see a sample message set from your engine before committing to a go-live date.

Where do credentials live?

In encrypted settings, not in configuration files or environment variables. Secrets are written through the administration API, stored encrypted at rest, and never returned in plaintext — the interface shows them only as set or unset, with overwrite-only editing. Nothing is seeded, so every endpoint and credential is empty until your team fills it in.

Other connectors

See FertiliCore against your own workflow

A working walkthrough with one of our clinical engineers — patient file to live-birth outcome, plus the integration and deployment questions your IT team will ask. No obligation, and no sales script.