Healthcare Integration-12 min read

HL7 v2 migration to FHIR in French-speaking hospitals

Inventory of interfaces for a French-speaking HIS: ADT/ORM/ORU, HPRIM Santé, INS overlay, and the HL7 v2-to-FHIR 1.0.0 STU 1 guide as a mapping contract — not a replacement for v2.

Ala Ben Aicha

HL7 v2 migration to FHIR in French-speaking hospitals

Direct answer

Don't cut v2. Inventory ADT, ORM/ORU and, in France, HPRIM. Project PID to Patient with INS (OID 1.2.250.1.213.1.4.8). The HL7 v2-to-FHIR 1.0.0 STU 1 guide is the starting contract, not a replacement.

Not the architectural playbook, the French-speaking inventory

The English page HL7 v2 to FHIR migration describes the hybrid architecture (integration engine, shadow, toggle). This is the inventory that a French-speaking hospital must ask before this architecture: which protocols really speak, which identifiers pass through the firewall, which national overlay sticks to the Patient projected. Detail A01/A04/A08/A03 (PID-3, PV1-19) is in ADT → Patient / Encounter — I'm not rewriting it.

Departure mapping contract: HL7 Version 2TB FHIR IG 1.0.0 STU 1 (generated October 7, 2025). Official URL: http://hl7.org/fhir/uv/v2mappings/ImplementationGuide/hl7.fhir.uv.v2mappings. Package: hl7.fhir.uv.v2mappings#1.0.0 on FHIR R4. It's a card cumulative standard, not a French national GI.

Three syntaxes that are not a single channel

In France, Interop'Santé still maintains HPRIM (XML / HPRIM Health) and PN13-IS, next to HL7 v2 and shutters CI-SIS. A laboratory SIL can issue an HL7 2.5.1 ORU, an HPRIM Santé 2.4 ORU, or both. Treating them as “v2” in a single Mirth channel means mixing up the code tables and identifiers.

Source Typical trigger FHIR target (IG STU 1 departure) French overlay
HL7 v2 ADT A01, A04, A08, A03 Patient + Encounter INS on Patient.identifier ; PPI in addition, not instead
HL7 v2 ORM/OML O01 / O21 ServiceRequest Prescriber = IDNatPS (urn:oid:1.2.250.1.71.4.2.1), not a noun in ST
HL7 v2 ORU R01 DiagnosticReport + Observation LOINC code if the component requires it; the local HPRIM code is not enough for the EHDS
HPRIM Health ORM, ORA, ORU Same resources, another parser HPRIM table 1 (context) and link type (L/C/R) ≠ MSH-9
PN13-IS Pharmacy / prescriptions MedicationRequest / exemption according to the component This is not a MedicationRequest EHDS MPD
CDA CI-SIS (HL7 v2 transport) MDM / document DocumentReference / Binary A CDA in an MLLP is not a Patient Summary EEHRxF

HPRIM Santé 2.5 documents ORM (requests), ORA (requests + admin), ORU (results). The version/binding type field is not MSH-12. If your inventory says "the entire lab is HL7", open an actual file.

Identifiers: IPP, INS, and what PID-3 doesn't say

PID-3 is a list. In France, at least three assignment authorities step on each other if you don't make one. identifier.system distinct:

Identifier Pinning system Where he lives today Trap to FHIR projection
PPI Institution OID/URI Local PID-3, HPRIM, DPI FHIR upsert on IPP alone creates cross-establishment duplicates
INS-NIR urn:oid:1.2.250.1.213.1.4.8 INSi teleservice, profile FR Core Patient INS Copy the NIR from a card without status VALI
INS-NIA urn:oid:1.2.250.1.213.1.4.9 Waiting identity Merge it with the NIR in the same slice
Stay number Local OID PV1-19 (see ADT article) Use it as Patient.identifier
RPPS / IDNatPS urn:oid:1.2.250.1.71.4.2.1 PV1, ORC, HPRIM An internal prescriber code

The Patient intended for use national or European must carry the FR Core compliant INS, not just the SIH IPP. INS is not invented in the mapper: INSi, then slice INS-NIR / INS-NIA. Public fixtures use TEST/DEMO OIDs (1.2.250.1.213.1.4.10 / .4.11), never a real NIR.

Example of de-identified (truncated MSH, not a production message):

MSH|^~\&|SIH|ETAB||DEST|20260917103000||ADT^A01|MSG-EXEMPLE|P|2.5
PID|||IPP-EXEMPLE^^^ETAB^PI||EXEMPLE^JEAN^^^^^D||19700101|M
PV1||I|||||||||||||||||SEJ-EXEMPLE|||||||||||||||||||||||||20260917103000

Map it: IPP-EXEMPLE + system establishment → Patient.identifier ; the stay → Encounter.identifier (PV1-19), not a second Patient. The INS does not appear not in this fragment: it is voluntary. Without INSi, you have no identity VALI.

Shadow, toggle, rollback (short recall)

  1. Inventory: issuer, version, volume, identifiers, clinical dependence.
  2. Mapping rules on several real de-identified messages (correction A08, late ORU, HPRIM and v2 for the same exam).
  3. Shadow phase in reading: reconcile missing items, duplicates, late corrections.
  4. A single writing path; loop prevention; replay policy.
  5. Rollback tested: cut the FHIR writer, restore v2/HPRIM routing, replay without duplicating orders.

The “4–8 week” durations of a spike are illustrative, not a quote. The English playbook details the engine architecture; here, the deliverable is source × identifier × target matrix signed by the interface owner.

What this page is not

This is not a rip-and-replace, not an ANS certification, not an official Interop'Santé HPRIM mapping, not a legal opinion, not a clinical advice. The STU 1 guide does not publish a dedicated ConceptMap for each French trigger. I do not “migrate” your HIS into an article.

If you need the engine and the maps (v2, HPRIM, FHIR, INS), it's HL7/FHIR integration. For a bounded spike, use the contact with project intention.

HL7 v2FHIRHPRIMINSPN13MigrationSIHInteroperability

Related reading and services

Let's Continue the Conversation

Have questions about this topic? I'd love to hear from you.