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

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)
- Inventory: issuer, version, volume, identifiers, clinical dependence.
- Mapping rules on several real de-identified messages (correction A08, late ORU, HPRIM and v2 for the same exam).
- Shadow phase in reading: reconcile missing items, duplicates, late corrections.
- A single writing path; loop prevention; replay policy.
- 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.