HL7 ADT vers FHIR : mappage de Patient et Encounter à partir de A01, A04, A08 et A03
Un playbook pour projeter HL7 v2 ADT A01, A04, A08 et A03 sur FHIR Patient et Encounter — PID-3 par rapport à identifier.system, numéros de visite PV1-19 et jeux de données de test synthétiques.
Ala Ben Aicha

Réponse directe
ADT A01, A04 et A08 projettent le PID sur Patient et PV1 sur Encounter. A03 termine la visite. Le PID-3 est Patient.identifier ; PV1-19 est le numéro de visite. Fixez les autorités d’attribution avant toute écriture.
Cartographie des messages et des ressources
Utilisez une version identifiée de la publication HL7 version 2 vers FHIR IG 1.0.0 (STU 1) (généré le 7 octobre 2025, package hl7.fhir.uv.v2mappings#1.0.0 sur FHIR R4). Le STU1 cartes de messages inclure ADT_A01 → Bundle. A04, A08 et A03 sont toujours des événements déclencheurs du Chapitre 3 Patient Administration ; ils réutilisent la même chose PID → Patient et PV1 → Encounter les segments sont mappés même lorsqu'un message dédié ConceptMap ne se trouve pas dans cette STU.
| Déclencheur (MSH-9) | événement v2 | Effet FHIR | Statut et classe |
|---|---|---|---|
| ADT^A01 | Notification d'admission / de visite | Insérez Patient à partir du PID ; upsert Encounter à partir de PV1 ; Encounter.subject → que Patient |
Encounter.class de PV1-2 (table 0004 → ActCode : I→IMP, O→AMB, E→EMER). Statut in-progress quand PV1-45 est vide |
| ADT^A04 | Inscrire un patient | Même paire Patient + Encounter | Généralement ambulatoire (PV1-2 = O → AMB). Pas une assignation au lit |
| ADT^A08 | Mettre à jour les informations du patient | Correctif Patient ; mettre à jour Encounter uniquement lorsque PV1 est présent et que la visite est déjà connue | Pas une nouvelle visite. Ne créez pas un deuxième Encounter.identifier |
| ADT^A03 | Sortie / visite de fin | Encounter.status → finished; Encounter.period.end du PV1-45 |
Ne supprimez pas Patient. Ne réutilisez pas le numéro de visite sur le prochain A01 |
Correspondances des segments dans le guide d’implémentation :
| champ v2 | Chemin FHIR | Correspondance de types |
|---|---|---|
| Liste des identifiants PID-3 Patient | Patient.identifier |
CX → Identifiant |
| PID-5 Patient Nom | Patient.name |
XPN → HumanName |
| PID-7 Date/heure de naissance | Patient.birthDate |
TS → date |
| Classe PV1-2 Patient | Encounter.class |
CWE → Codage (ActCode) |
| PV1-19 Numéro de visite | Encounter.identifier |
CX → Identifiant, type VN (http://terminology.hl7.org/CodeSystem/v2-0203) |
| PV1-44 Admettre date/heure | Encounter.period.start |
|
| PV1-45 Date et heure de sortie | Encounter.period.end |
MSH devient toujours MessageHeader / Provenance. EVN-2 est l'heure de l'événement, pas une deuxième date de naissance. NK1 est RelatedPerson ou Patient.contact, pas un autre Patient. Cette page ne mappe pas les fusions A40 — il s'agit d'un problème MPI, abordé dans le article de l'index principal des patients.
Le modèle de moteur hybride (conserver la v2 comme système nerveux de l'hôpital, projeter FHIR pour les nouveaux consommateurs) est le Manuel de migration v2 vers FHIR. Cette page est le contrat de mappage ADT à l'intérieur de ce moteur.
Pièges d'identification
Le PID-3 est un CX répétitif. Chaque répétition est ID^^^AssigningAuthority^IdentifierType. Besoins du FHIR identifier.system (l'autorité d’attribution en tant qu'URI que vous possédez réellement) et identifier.value. Une simple chaîne MRN sans système entrera en collision la première fois que deux hôpitaux partageront un serveur FHIR.
Ne mettez pas PV1-19 sur Patient.identifier. L'IG saisit le numéro de visite comme VN. Le PID-18 (numéro de compte Patient) n'est pas le numéro de visite ; la carte PID avertit même que certains expéditeurs insèrent un identifiant de visite dans le PID-18 — si c'est le cas, traitez-le comme une exception documentée, et non comme la valeur par défaut.
Les identifiants nationaux (AVS, numéro NHS, KVNR, IHI) appartiennent au PID-3 avec leur numéro publié. system URI. Les MRN locaux restent locaux. L'article MPI contient les règles de correspondance ; le travail du mappeur ADT est de préserver le CX, pour ne pas inventer un dossier de référence.
| Piège | Symptôme | Corriger |
|---|---|---|
| PID-3 sans attribution d'autorité | Ressources Patient en double sur le premier A08 | Exiger CX.4 (ou ID d'espace de noms CX.4.2) avant l'insertion ; rejeter ou mettre en quarantaine |
| PV1-19 copié sur Patient | Deux patients partagent un numéro de visite après le transfert | Visitez → Encounter.identifier uniquement |
| A08 créant Encounter | Le recensement double grâce aux correctifs démographiques | Faites correspondre Encounter par PV1-19 + Patient ; insérer uniquement sur A01/A04 |
| A03 suppression de Patient | Orphelins Observation en aval | Patient reste ; Encounter.status = terminé |
| MSH-3 / MSH-4 comme identifiant.système | Les systèmes entrent en collision lorsqu'un fournisseur réutilise le nom d'un établissement | Épingler un URI par application émettrice × autorité d'attribution |
Jeux de données de test
Exemples anonymisés uniquement. Ces valeurs correspondent à des spécifications et non à une personne.
MSH|^~\&|HIS|HOSP-A|FHIR-BRIDGE|HOSP-A|20260917103000||ADT^A01^ADT_A01|MSG0001|P|2.5
EVN|A01|20260917103000
PID|1||HOSP-MRN-0001^^^HOSP-A^MR||EXAMPLE^JANE^Q||19770412|F|||1 TEST STREET^^TESTVILLE^TN^10000
PV1|1|I|WARD-A^101^A||||ATTEND^SMITH^A|||SUR||||A0|||||VN-2026-00042^^^HOSP-A^VN|||||||||||||||||||||||||20260917103000
Patient projeté (tronqué) :
{
"resourceType": "Patient",
"identifier": [
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "MR"
}
]
},
"system": "https://hosp-a.example.org/mrn",
"value": "HOSP-MRN-0001"
}
],
"name": [{ "family": "EXAMPLE", "given": ["JANE", "Q"] }],
"birthDate": "1977-04-12",
"gender": "female"
}
Encounter projeté (tronqué) :
{
"resourceType": "Encounter",
"status": "in-progress",
"class": {
"system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
"code": "IMP"
},
"identifier": [
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "VN"
}
]
},
"system": "https://hosp-a.example.org/visit",
"value": "VN-2026-00042"
}
],
"subject": { "reference": "Patient?identifier=https://hosp-a.example.org/mrn|HOSP-MRN-0001" },
"period": { "start": "2026-09-17T10:30:00+01:00" }
}
Luminaire minimum défini avant le basculement :
- A01 puis A08 (correction du nom) — un Patient, un Encounter, nom mis à jour.
- A01 puis A03 — Encounter.period.end défini, statut terminé, Patient toujours consultable.
- Registre des patients ambulatoires A04 — classe AMB, pas de lit
Encounter.locationsauf si PV1-3 est valorisé. - Deux A01 avec le même PID-3 et un PV1-19 différent — deux ressources Encounter et une ressource Patient.
- A08 avec PV1-19 manquants — mises à jour Patient ; pas de nouveau Encounter.
Ne copiez jamais un PID en production dans un ticket, un dépôt git ou ce site.
Modes de défaillance et restauration
| Échec | Détection | Restauration |
|---|---|---|
| Dupliquer Patient | Deux ressources partagent la valeur PID-3 avec des systèmes différents, ou le même système après un bug du mappeur | Arrêtez le composant d’écriture; fusionner uniquement avec une règle MPI convenue ; rejouer A08 depuis l’historique des messages v2 |
| Dupliquer Encounter | Deux Rencontres en cours pour un PV1-19 | Traitez PV1-19 + autorité d'attribution comme la clé naturelle ; fermer l'extra comme entré en erreur |
| Fin A03 | Le recensement est toujours en cours après la sortie | Idempotent A03 : définir le statut et la période.end ; ne nécessite pas l'original A01 dans le même processus |
| A08 appliqué comme A01 | Visites supplémentaires sur le bruit démographique | Filtrer MSH-9.2 avant l'insertion ; A08 est un PATCH |
| Bouclez avec un abonnement FHIR qui réémet de l'ADT | Hausse brutale du volume de messages | Un chemin d'écriture faisant autorité ; provenance des ressources projetées ; supprimer l'écho par MSH-3 |
Conservez la v2 comme source de vérité jusqu'à ce que la paire FHIR Patient/Encounter ait un propriétaire nommé, une stratégie ACK et une rediffusion de la banque de messages du moteur. Le manuel de migration couvre l'ombre, la double écriture et le basculement en tant qu'architecture. Ce mappeur doit toujours être capable de désactiver l'enregistreur FHIR sans toucher au flux HIS ADT.
Service associé
Si vous avez besoin du mapping implémenté sur un moteur (NextGen Connect / Mirth, ou une façade FHIR devant un flux v2), c'est à dire Intégration HL7 FHIR. Pour une étude ciblée du mapping ADT vers Patient et Encounter, utilisez formulaire de contact projet.
Cette page n'est pas un certificat de conformité au v2-to-FHIR IG, ni un produit MPI, ni un conseil clinique sur l'admission ou la sortie.