A vendor walks a health system through a FHIR API demo. Every resource comes back clean. Patient, Observation, Coverage, all correctly shaped JSON. Then someone on the evaluation team asks for a chained search across Encounter and Practitioner. The system returns a 501. Not implemented. The FHIR layer was real enough to pass a screenshot, and that was about it.
This is the trap. A FHIR facade in front of an HL7v2 engine can look identical to a native build in a sales call. The differences only show up once someone pushes past the happy path, which is exactly where prior authorization, DTR, and CDex workflows live.
A FHIR facade takes an existing HL7v2 interface engine and bolts a translation layer on top. Inbound FHIR requests get converted to whatever the legacy engine already understands. Outbound HL7v2 messages get reshaped into FHIR resources on the way out. The system speaks FHIR at the edge. Underneath, it still thinks in segments, fields, and Z-segments nobody has documented since 2011.
That’s not automatically a bad thing. A well-built facade with a real mapping layer, proper terminology binding, and persistent storage that supports versioning can satisfy a surprising amount of the FHIR spec. The problem isn’t facades in general. The problem is facades built fast, to check a box, with the mapping logic hardcoded to whatever fields happened to be populated in the vendor’s test environment.
These tend to fail in a consistent pattern: they work for the demo patient, and they fall apart on the messy real-world record with missing segments, local code sets, and out-of-order ADT messages.
A lab environment isn’t required to catch most of these. A laptop, an API client, and thirty minutes with the vendor’s sandbox will surface them.
Resource mapping looks like the simplest layer and causes some of the ugliest downstream problems, mostly because errors here pass every automated schema validator. A field can be perfectly valid FHIR and still be wrong.
Watch for these patterns during mapping review:
None of these show up in a CapabilityStatement. All of them show up the first time a real transaction runs against a real payer or exchange partner.
When a red flag shows up, don’t stop at noticing it. Run these five tests and document the results before writing the assessment.
| Capability | Native FHIR-modeled system | HL7v2 wrapped in a FHIR facade |
|---|---|---|
| Terminology binding | Codes mapped to LOINC, SNOMED, RxNorm at the source | Local codes often passed through unchanged |
| Versioning and history | vread and _history work as specified | Frequently unsupported, since HL7v2 has no native versioning concept |
| Search capability | Chained search, _include, _revinclude fully functional | Often returns 501 or silently ignores the parameter |
| Round-trip writes | Updates persist consistently across all access points | Writes may not propagate back into the legacy engine |
| Subscriptions | Real event-driven notifications | Often polling dressed up as a subscription |
| Da Vinci profile conformance | Passes Inferno’s profile-specific test suites | Frequently fails on required extensions or bindings |
| Mapping documentation | Field-level mapping exists and is maintained | Often missing, undocumented, or outdated |
None of this matters much if the FHIR endpoint is a nice-to-have sitting next to the real integration. It matters enormously once a payer or provider organization is required to move actual prior authorization decisions through Da Vinci PAS and DTR. A facade that returns clean-looking JSON in a demo but drops coding systems in production will generate PAS bundles that payers reject, not because the workflow logic is wrong, but because the underlying data was never structured well enough to survive the trip.
This played out at a mid-size hospital system that had already signed off on a vendor based on a smooth demo. Six weeks into building the DTR questionnaire response workflow, the integration team discovered that diagnosis codes from three different service lines were arriving as free text in an extension, because the legacy ADT feed never carried structured coding for those departments. The fix wasn’t a FHIR problem. It was a data governance problem the facade had been quietly hiding.
A short list of questions, asked in order, tends to separate real implementations from wrappers faster than any RFP language:
A vendor with a native or well-built facade answers these directly, usually with a screen share. A vendor without one changes the subject to roadmap timelines.
Not every facade needs to be ripped out. Some can be remediated with proper terminology mapping and a real subscription mechanism, especially if the underlying HL7v2 feeds are otherwise clean. The decision point is whether the vendor can produce the mapping documentation and pass Inferno testing after remediation, not before budget has been spent assuming it already does.
Build the assessment around the five tests above, document exactly where the facade fails, and give the client a remediation cost estimate against a replacement cost estimate. That comparison, backed by an actual Inferno report instead of a vendor’s claim, is what turns a vague interoperability concern into a decision the client’s CFO can act on.








A FHIR facade is a translation layer placed in front of a legacy HL7v2 interface engine. It accepts FHIR requests and returns FHIR-shaped JSON, but underneath, the source system still stores and moves data as HL7v2 segments and fields. The facade converts on the way out and on the way in, without changing how the underlying system models the data.
Run the vendor's CapabilityStatement against actual test calls: request _revinclude, chained searches, and $everything, then check whether the results match what the CapabilityStatement claims. Ask for the HL7v2-to-FHIR mapping documentation. If the vendor can't produce a field-level mapping table or the system fails basic conformance testing in Inferno, it's likely a wrapper.
The rule doesn't specify implementation architecture, only conformance to the required FHIR profiles, including Da Vinci PAS, DTR, and CRD. A facade can technically satisfy this if it fully supports the profile's required elements, extensions, and terminology bindings. In practice, most facades fail profile-level conformance because the source data was never structured to support it.
Inferno is ONC's open-source FHIR test kit, used to validate whether a system meets specific certification and Da Vinci profile requirements. It matters because a system can look correct in a sales demo and still fail Inferno's structured test suite, since Inferno checks conformance details that manual demos skip: terminology bindings, search parameter behavior, and required extensions.
Prior authorization workflows depend on structured, coded data moving reliably in both directions. If the facade can't preserve coding systems, versioning, or round-trip updates, PAS and DTR transactions will produce incomplete or rejected requests. The failure usually surfaces after go-live, when payers reject bundles that looked fine in testing but broke on data the demo never covered.
ISO 27001:2022 Certified
Aigilx health specializes in developing Interoperability solutions to create a healthcare ecosystem and aids in the delivery of efficient, patient-centric and population-focused healthcare.