Interface engine selection

    HL7 interface engine selection: how do you compare engines before you commit?

    Interface engines fall into three groups: open-source engines you host, commercially licensed engines, and cloud-managed HL7 v2 and FHIR services. Their feature lists look alike. The differences show up when you replay your own messages, fail a node, reprocess a day of traffic and try to take your configuration with you.

    Which criteria separate interface engine types?

    Quick answer

    An HL7 interface engine selection should be decided by a proof of concept on your own messages, not a feature list: test transforms your team can maintain, failover, reprocessing from the message store, error handling, version control and exit. Agnotic Technologies runs these tests across self-hosted, licensed and cloud-managed engines without ranking products.

    CriterionSelf-hosted engineCloud-managed service
    Transform languageWhich language are channels written in, and can your team maintain it?How are custom mappings written and tested? Azure's $convert-data, for example, uses Liquid templates
    Licence and version termsRead the licence for the exact version you will run, including support and upgradesService terms and pricing model; no engine licence
    High availabilityClustering or active-passive failover is yours to build and testThe provider runs the service; test what happens when your adapter or network link fails
    MLLP connectivityThe engine listens on MLLP inside your networkAn adapter or VPN brings MLLP traffic to the service, such as Google's open-source MLLP adapter
    Message store and replayCheck retention, search and replay of stored messages to a new destinationCheck how long messages are kept and whether you can replay them
    Monitoring and alertsQueue depth, errored messages and stalled channels routed to your on-callProvider metrics plus your own alerts on message flow
    FHIR supportIs FHIR a built-in channel type, a plug-in or custom code?Often a native FHIR store with conversion from HL7 v2
    Configuration as codeCan channels be exported to files, kept in version control and deployed through CI?Keep infrastructure and mapping templates in your repository
    Audit trailWho changed which channel, and who viewed which message?The provider's audit logs plus your own
    ExitExport configurations and the message archive; estimate the rewrite of custom scriptsExport stored messages and templates; plan for provider-specific features

    What they are

    What is Self-hosted engine

    A self-hosted engine runs on servers or containers you operate, from an open-source project or under a commercial licence. You build channels in the engine's tools and scripting language, and you own clustering, upgrades, backups and monitoring.

    What is Cloud-managed service

    A cloud-managed service is a provider-run store and API for HL7 v2 messages, FHIR resources or both, with conversion tools. The provider runs the servers; you bring MLLP traffic to it, configure stores and mappings, and build routing around it.

    Key differences

    What are the three kinds of engine?

    Open-source engines you host give you the code and the operations. Commercially licensed engines add vendor support and a release schedule. Cloud-managed services move storage and scaling to a provider. Licensing terms change over time: NextGen Healthcare now describes Mirth Connect as a licensed integration engine that your organization maintains and operates. Our Mirth Connect assessment checklist covers that change.

    Which transform language can your team maintain?

    This question decides more selections than any feature. Every engine has its own way of writing transforms: a scripting language in the channel, a graphical mapper, or templates. Ask who will change an interface at two in the morning in a year's time, and pick the language that person already knows or can learn quickly. Then make the proof of concept use it for a real transform.

    What do cloud-managed services change?

    They change where messages live and who runs the servers. Google Cloud's Healthcare API keeps HL7 v2 messages in an HL7v2 store inside a dataset, and Google documents an open-source MLLP adapter that you run to carry messages over TCP/IP to it. Microsoft's FHIR service offers a $convert-data operation that converts data from several formats into FHIR R4 using Liquid templates. Routing, filtering and partner-specific logic are still yours to build.

    Why keep interface configuration in version control?

    Because interfaces change often and break quietly. When channels or mappings live as files in a repository, every change has a reviewer, a history and a way back, and the same configuration deploys to test and production. An engine whose configuration can only be edited in a console makes that harder; check how exports work in the proof of concept.

    Which audit records does an engine need?

    An engine stores messages full of ePHI. The HIPAA Security Rule requires mechanisms that record and examine activity in information systems containing ePHI (45 CFR 164.312(b)). For an engine that means logging who viewed or replayed a message, who changed a channel and when, and keeping those logs where your security team can search them.

    When to use each

    When to use Self-hosted engine (open-source or licensed)

    • Most traffic is HL7 v2 over MLLP inside the hospital network.
    • You need fine control over routing, transforms and retry behavior.
    • Your team can run a stateful service with on-call and patching.
    • You already have channels on an engine and want to keep them.

    When to use Cloud-managed HL7 v2 and FHIR service

    • You are building a FHIR-first data platform and need HL7 v2 feeds converted into it.
    • You want less infrastructure to run and accept provider service limits.
    • Your systems already run on that cloud, under its BAA.
    • Routing needs are simple enough to build around the service.

    What should an interface engine proof of concept test?

    1. Replay a week of your own traffic. Use real ADT, ORM and ORU samples, de-identified or inside a BAA-covered environment, including the odd messages from your oldest systems.

    2. Peak-hour throughput. Push your busiest hour at a higher rate and watch queue depth and latency.

    3. Node failover. Stop a node mid-stream and confirm nothing is lost or filed twice.

    4. Reprocessing. Replay a day of stored messages to a new destination and check the results match.

    5. Malformed messages. Send broken segments and wrong encodings, and check the ACK or NAK each sender receives.

    6. Duplicates. Resend messages and confirm the downstream system does not file them twice.

    7. Alert routing. Break a connection and time how long it takes the right person to be told.

    8. A real transform in the engine's language, written by your team, reviewed and deployed through version control.

    9. Audit log. Check that message views, replays and channel changes are recorded and searchable.

    10. Exit. Export the configurations and the message archive, and estimate what it would take to load them elsewhere.

    Frequently Asked Questions

    No. Most engines tick the same boxes. Choose on what you observe when you run your own messages through the candidates: transform effort, failure handling, replay, monitoring and exit.