# 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.

Auteur: Ala Ben Aicha

Page de référence: https://alabenaicha.me/fr/insights/hl7-adt-to-fhir-patient-encounter

Mise à jour: 2026-10-05

## 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)](https://hl7.org/fhir/uv/v2mappings/) (généré le 7 octobre 2025, package `hl7.fhir.uv.v2mappings#1.0.0` sur FHIR R4). Le STU1 [cartes de messages](https://hl7.org/fhir/uv/v2mappings/message_maps.html) inclure [ADT\_A01 → Bundle](https://hl7.org/fhir/uv/v2mappings/ConceptMap-message-adt-a01-to-bundle.html). 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](https://hl7.org/fhir/uv/v2mappings/ConceptMap-segment-pid-to-patient.html) et [PV1 → Encounter](https://hl7.org/fhir/uv/v2mappings/ConceptMap-segment-pv1-to-encounter.html) 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](https://alabenaicha.me/fr/insights/master-patient-index-identity-management).

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](https://alabenaicha.me/fr/insights/hl7v2-to-fhir-migration-strategy). 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é) :

```json
{
  "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é) :

```json
{
  "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 :

1. A01 puis A08 (correction du nom) — un Patient, un Encounter, nom mis à jour.
2. A01 puis A03 — Encounter.period.end défini, statut terminé, Patient toujours consultable.
3. Registre des patients ambulatoires A04 — classe AMB, pas de lit `Encounter.location` sauf si PV1-3 est valorisé.
4. Deux A01 avec le même PID-3 et un PV1-19 différent — deux ressources Encounter et une ressource Patient.
5. 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](https://alabenaicha.me/fr/insights/hl7v2-to-fhir-migration-strategy) 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](https://alabenaicha.me/fr/services/hl7-fhir-integration). Pour une étude ciblée du mapping ADT vers Patient et Encounter, utilisez [formulaire de contact projet](https://alabenaicha.me/fr/contact?intent=project).

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.
