Écrit par l’IASécurité
Liste de vérification pour la mise hors service des interfaces HL7 : fermer les flux du DPI sans laisser une porte ouverte
Une liste de vérification HL7 réversible : inventorier les interfaces depuis le réseau, les couper dans le bon ordre, sonder les deux côtés de la porte et conserver une preuve à chaque étape.

Rédigé par une IA. Cette analyse a été rédigée par une IA et publiée sans relecture ligne par ligne.
Dans l’actualité
Chaque migration de DPI se termine par un plan qui affirme que l’ancien système est retiré. Ce plan est trop optimiste au sujet des interfaces. Un DPI vit rarement seul : les laboratoires, les pharmacies, les systèmes d’imagerie et les registres de santé publique échangent des messages avec lui par des flux HL7 v2. Ce sont ces flux que personne ne veut posséder, parce que rien ne casse visiblement quand ils se taisent.
La violation chez Oracle Health a montré qu’un serveur hérité laissé à l’écart d’une migration peut servir de porte d’entrée. Aucune source que j’ai lue ne relie un flux HL7 à cette intrusion, donc cet article n’en fait pas la prétention. C’est une liste de vérification pour les écouteurs et les flux qu’une migration laisse derrière : comment les trouver, les couper dans un ordre qui garde un retour arrière, les sonder et conserver la preuve.
Une précision d’entrée de jeu. Je n’avais ni terminal ni moteur d’interfaces pour cet article. Les commandes ci-dessous n’ont pas été testées, et je le signale à chaque fois.
Avant de lire : La violation chez Oracle Health, ses chiffres et le calcul du rayon d’impact sont couverts dans l’article sur l’audit des serveurs de migration de DPI. Celui-ci part de là où il s’arrête : les écouteurs qu’une migration laisse derrière.
Table des matières
- Une interface retirée reste un port d’écoute
- Bâtir le registre à partir du réseau, pas du wiki
- Trouver les flux devenus silencieux
- Couper dans un ordre qui garde le retour arrière
- Bloquer au réseau et voir qui frappe encore
- La sonde : vérifier la porte des deux côtés
- Garder les survivants : TLS, TLS mutuel ou isolement
- Le piège de la lecture seule
- Ce que la HIPAA et le NIST exigent, et ce que je n’ai pas pu lire
- Ce que « mis hors service » devrait vouloir dire
- Un exemple travaillé, avec les cases laissées vides
- Là où je prends mes distances
- Le saviez-vous
- Sources
Une interface retirée reste un port d’écoute
Les messages HL7 v2 voyagent habituellement sur MLLP, un encapsulage de trames par-dessus TCP brut. La documentation du fournisseur que j’ai lue indique que ce transport n’a « aucune authentification ni chiffrement intégrés ». Le port par défaut est 2575, selon Connected.app, une référence informelle de ports et non une norme. Un écouteur actif sur ce port accepte une connexion de quiconque peut lui acheminer des paquets.
Une interface inutilisée ressemble à une fente postale dans la porte d’un immeuble que vous avez déjà vendu. Le nouveau propriétaire ne l’a jamais demandée, l’ancien a oublié de la condamner, et le courrier continue d’arriver.

Arrêter un flux n’équivaut pas à fermer le port. Un canal peut être désactivé dans le moteur pendant que son écouteur, sa règle de pare-feu, son enregistrement DNS et son compte de service restent en place. Chacun de ces éléments est une voie de retour distincte, et désactiver le canal ne règle qu’une seule d’entre elles.
Bâtir le registre à partir du réseau, pas du wiki
Le tableur des interfaces est la source la moins fiable que vous ayez. La configuration du moteur, les règles de pare-feu, les enregistrements DNS et les sockets réellement ouverts sur un hôte décrivent tous les mêmes flux, un peu différemment. Servez-vous de chacun pour recouper les autres. Sur l’hôte d’interface :
# écouteurs réellement liés sur l'hôte d'interface, avec le processus propriétaire
sudo ss -tlnp
# hôtes iptables : règles de pare-feu qui mentionnent encore le port HL7 par défaut
sudo iptables-save | grep -E 'dport 2575'
# hôtes nftables : la même vérification
sudo nft list ruleset | grep -E 'dport 2575'
Chaque ligne trouvée devient une entrée du registre. Les champs les plus importants sont ceux que les plans de migration oublient : le pair, l’identifiant qu’il utilise et l’endroit où se trouve physiquement sa configuration. L’exemple ci-dessous est fictif.
interface: lab-results-out-legacy # exemple fictif
direction: outbound
transport: mllp-tcp
listener: 10.20.30.15:2575 # adresse fictive
peers: [external-lab-vendor]
message_types: [ORU^R01]
credential: svc-lab-out
config_source: engine channel 214 # l'endroit où la configuration se trouve vraiment
owner: lab-informatique # une équipe, pas une personne
gate: running
Inventoriez les deux sens. Les flux sortants reçoivent le moins d’attention, parce que rien ne casse visiblement quand un flux sortant se tait. Attendez-vous à trouver quelques lignes nommées quelque chose comme TEMP_LAB_FEED_DO_NOT_DELETE, et personne dans l’immeuble ne se souviendra du fournisseur pour lequel elles ont été faites.
Si votre moteur est NextGen Mirth Connect, le registre se bâtit plus facilement. Chaque canal a exactement un connecteur source, toujours nommé « Source » avec l’identifiant de métadonnées 0, selon un extrait du guide d’utilisation de NextGen. Dans un fichier d’export de canal, c’est le premier endroit où regarder.
Trouver les flux devenus silencieux
Un flux sans message depuis des mois est soit mort, soit mal configuré, et le registre ne peut pas dire lequel. Certains flux sont silencieux par conception. Une transmission mensuelle à un registre en est l’exemple évident. Le silence est une piste, pas un verdict. Extrayez le journal des messages et comparez-le au registre :
-- schéma illustratif : interface_register et hl7_messages sont des noms fictifs pour vos propres tables
SELECT r.interface_id,
r.listener_port,
MAX(m.received_at) AS last_seen,
now() - MAX(m.received_at) AS silent_for
FROM interface_register r
LEFT JOIN hl7_messages m ON m.interface_id = r.interface_id
GROUP BY r.interface_id, r.listener_port
ORDER BY last_seen NULLS FIRST;
Un NULL dans last_seen signifie aucun message dans la rétention de vos journaux. Ce n’est pas la même chose qu’aucun message, jamais. Si vos journaux ne remontent qu’un an, un flux qui se déclenche tous les dix-huit mois a l’air mort alors qu’il est simplement patient. Vérifiez cela avant de couper quoi que ce soit. Les noms de tables sont des substituts de ce que votre moteur exporte, et je n’ai pas exécuté cette requête sur une vraie base de données.
Couper dans un ordre qui garde le retour arrière
Voici la séquence que je recommande. L’ordre est ma synthèse, pas une procédure publiée, même si la première étape vient des consignes de migration.
- Prouver que le remplacement fonctionne. La liste de vérification d’Infowerks, que j’ai lue à travers des extraits de recherche, demande de confirmer que les interfaces HIE, registre et externes fonctionnent sur la nouvelle plateforme avant l’arrêt, et d’obtenir une approbation écrite du promoteur, de la conformité et de la TI. Une étude de cas de Nirmitee décrit 52 interfaces HL7 v2 migrées vers FHIR R4 avec une exploitation en parallèle et zéro interruption. C’est le compte rendu d’un fournisseur sur son propre projet, mais il montre que l’exploitation en parallèle est une méthode courante.
- Bloquer au réseau et consigner les refus. La section suivante donne les règles. C’est l’étape la plus facile à annuler, et le journal des refus vous dit quel pair appelle encore.
- Désactiver les canaux et les tâches planifiées. Ne les supprimez pas. La configuration est ce que le retour arrière restaure.
- Révoquer ce que le canal utilisait. Comptes de service, clés d’API, certificats et tout secret stocké dans la configuration du canal. Après cette étape, le seul chemin de retour est l’émission de nouveaux identifiants.
- Archiver, puis retirer. Déplacez les données vers un endroit que rien sur le réseau ne peut atteindre, puis éteignez le serveur.

Chaque étape coûte peu à annuler jusqu’à la quatrième. Révoquer trop tôt, c’est briser un flux dont vous ignoriez l’existence. Bloquer trop tard, c’est laisser le flux tourner pendant que tout le monde en discute. Un extrait de la documentation NextGen indique que la CLI de Mirth refuse d’importer un canal dont l’identifiant ou le nom existe déjà, sauf si vous forcez l’import. Ce frein est utile : un retour arrière qui réimporte un canal échoue jusqu’à ce que quelqu’un décide d’écraser volontairement. Je n’ai pas testé ce comportement.
Un piège se trouve hors de cette séquence. Les sauvegardes du moteur conservent les canaux que vous avez désactivés. Restaurer une sauvegarde prise avant l’arrêt peut ressusciter un écouteur. Testez donc cette restauration avant de considérer le travail comme terminé.
Bloquer au réseau et voir qui frappe encore
La règle de pare-feu est l’étape la plus réversible et la plus instructive. Le journal des refus montre quel pair appelle encore, et tout ce qui apparaît là est un pair que votre approbation a manqué. Insérez d’abord la règle de rejet, puis une règle de journalisation au-dessus, pour que chaque refus soit consigné avant d’être bloqué. Ne lancez ces règles qu’une fois le remplacement vérifié, parce qu’elles arrêtent tous les pairs, y compris ceux que vous avez oubliés. Aucune de ces règles n’a été exécutée pour cet article.
# iptables : la règle DROP est insérée en premier, la règle LOG au-dessus enregistre chaque refus
sudo iptables -I INPUT -p tcp --dport 2575 -j DROP
sudo iptables -I INPUT -p tcp --dport 2575 -j LOG --log-prefix 'hl7-denied: ' --log-level 4
# retour arrière : supprimer les deux mêmes règles, avec les mêmes arguments
# sudo iptables -D INPUT -p tcp --dport 2575 -j LOG --log-prefix 'hl7-denied: ' --log-level 4
# sudo iptables -D INPUT -p tcp --dport 2575 -j DROP
# nftables : une seule règle peut journaliser et rejeter, si la table inet filter et la chaîne input existent déjà
sudo nft insert rule inet filter input 'tcp dport 2575 log prefix "hl7-denied: " drop'
# retour arrière nftables : lister les handles, puis supprimer par handle
# sudo nft -a list chain inet filter input
# sudo nft delete rule inet filter input handle <n>
# groupe de sécurité AWS : la coupure est une révocation. Les groupes de sécurité n'autorisent que le trafic, donc utilisez les journaux de flux VPC pour la trace des refus
aws ec2 revoke-security-group-ingress \n --group-id sg-0123456789abcdef0 \n --protocol tcp --port 2575 \n --cidr 10.20.30.0/24
Selon mes souvenirs de la documentation d’AWS, que je n’ai pas revérifiée pour cet article, un groupe de sécurité ne journalise pas le trafic qu’il rejette. Pour la trace des refus, activez les journaux de flux VPC et cherchez le trafic rejeté sur le port 2575. Je n’ai pas écrit d’équivalents pour Azure ou Google Cloud, parce que je n’en ai pas vérifié la syntaxe.
La sonde : vérifier la porte des deux côtés
Une connexion TCP prouve qu’un port accepte des connexions. Elle ne dit rien sur l’identité de celui qui se connecte. Lancez la vérification depuis chaque zone qui compte : le VLAN clinique, le bassin VPN et un hôte situé hors de tout le reste.
import socket
# connexion seulement : n'envoie aucune charge HL7, donc un canal actif ne traite jamais de message de test
def probe(host: str, port: int, timeout: float = 5.0) -> str:
try:
with socket.create_connection((host, port), timeout=timeout):
return f'{host}:{port} accepte les connexions TCP'
except OSError as err:
return f'{host}:{port} refusé ou filtré ({type(err).__name__})'
if __name__ == '__main__':
print(probe('hl7-listener.internal.example', 2575))
N’envoyez pas un message HL7 synthétique à un écouteur actif pour vérifier qu’il est vivant. Un message d’admission de test accepté par un canal actif devient un faux dossier patient en production. La simple connexion est la vérification sûre, et c’est celle que je scripterais.
Une vérification par simple connexion reste une activité. Elle apparaît habituellement dans le journal de connexions du moteur. Prévenez donc l’équipe de garde avant de la lancer, sinon la sonde devient votre prochain incident.
# l'écouteur négocie-t-il TLS? -brief affiche un résumé au lieu de la négociation complète
openssl s_client -connect hl7-listener.internal.example:2575 -brief </dev/null
Pour un flux que vous conservez, cette vérification indique si l’écouteur négocie TLS. Un écouteur en clair devrait échouer à la négociation, et cet échec est une réponse qui vaut la peine d’être consignée. Je m’attends à ce qu’il se manifeste comme une erreur de protocole, mais je n’ai pas vu ce résultat sur un vrai écouteur. Vérifiez donc sur vos propres hôtes avant qu’un runbook ne cite ce résultat.
Garder les survivants : TLS, TLS mutuel ou isolement
Certains flux doivent rester. Une connexion à un registre ou à un échange d’informations de santé peut être une exigence légale, non un choix. Pour ceux-là, les sources que j’ai trouvées pointent vers TLS 1.2 ou 1.3, le TLS mutuel, ou l’isolement de l’écouteur sur son propre segment. Ce sont des recommandations de fournisseurs, tirées de la documentation TLS et mTLS d’une bibliothèque et de l’option d’écouteur TLS d’un connecteur MuleSoft. Aucune n’est une norme.
| Option | Ce qu’elle ferme | Ce qu’elle laisse ouvert |
|---|---|---|
| Retirer l’écouteur | Tout, y compris la prochaine clé volée | Un retour arrière que vous devez tester |
| TLS sur l’écouteur | L’écoute du trafic sur le fil | Quiconque atteint le port peut encore se connecter |
| TLS mutuel | Les clients sans certificat | Un certificat client volé fonctionne comme un mot de passe volé |
| Segment isolé | L’accès depuis l’extérieur du segment | Un hôte compromis à l’intérieur du segment |
Le TLS mutuel ferme le port ouvert, mais il déplace le problème vers le certificat. Donnez à chaque pair son propre certificat, consignez son propriétaire et son échéance dans le registre, et révoquez-le à la retraite. Le cas Oracle rappelle que c’est l’identifiant qui se réutilise. Le port n’a jamais été toute l’histoire.
Une lacune de ma recherche : je n’ai pas pu confirmer si l’écouteur TCP de Mirth offre une option TLS. La page NextGen a renvoyé une erreur 403, et le seul extrait que j’ai vu ne montrait qu’un réglage de jeu de caractères. Vérifiez les réglages de l’écouteur sur votre propre instance avant de promettre TLS à un pair.
Le piège de la lecture seule
Infowerks demande de garder le système hérité en lecture seule pendant au moins 90 jours, plus longtemps si la conformité l’exige. C’est sensé pour les dossiers. Cela laisse aussi un serveur en marche, avec des identifiants, des chemins réseau et un système d’exploitation. Les guides génériques de mise hors service de DPI que j’ai parcourus avertissent que les systèmes hérités « s’affaiblissent graduellement » sans correctifs, et que laisser un accès hérité en place est « un risque connu ».

Lecture seule décrit les permissions de la base de données, pas l’exposition. Il vous reste deux vrais choix : garder le serveur accessible sous surveillance, ou archiver les données dans un entrepôt qu’aucune interface ne peut atteindre, puis éteindre le serveur. Je choisirais l’archive. Une archive ne sert toutefois qu’après qu’un dossier en a été restauré. Planifiez donc cette restauration comme un test. Les sources que j’ai lues n’abordent pas ce compromis, et la décision ici est la mienne.
Ce que la HIPAA et le NIST exigent, et ce que je n’ai pas pu lire
Les contrôles d’appareils et de supports de la règle de sécurité HIPAA, 45 CFR 164.310(d)(1), incluent la mise au rebut et la réutilisation des supports comme spécifications d’application requises. La norme sur les contrôles d’audit, 164.312(b), est une sauvegarde technique requise. J’ai tiré ces deux éléments d’un extrait de la matrice de conformité de Cornell LII. Les pages eCFR m’ont redirigé ailleurs, et une référence d’un développeur donne une lettre de sous-paragraphe que je n’ai pas pu confirmer. Obtenez le texte de l’eCFR avant de citer une lettre.
La SP 800-88 Rév. 1 du NIST a été retirée le 26 septembre 2025, et la Rév. 2 est finale. Le PDF de la Rév. 2 a été renvoyé en binaire, donc je ne l’ai pas lu. Son résumé relie le niveau d’assainissement à la sensibilité de l’information.
Les résumés secondaires de fournisseurs nomment trois niveaux. Clear est l’écrasement logique du stockage accessible à l’utilisateur. Purge emploie des techniques plus fortes, comme l’effacement par blocs, l’effacement cryptographique ou la démagnétisation. Destroy est la destruction physique, comme le broyage, la pulvérisation ou l’incinération. Ces résumés ne sont pas vérifiés auprès du NIST. Prenez donc les définitions dans le texte du NIST, et classez le registre d’assainissement avec l’entrée du registre des interfaces.
Ce que « mis hors service » devrait vouloir dire
Un serveur éteint n’est pas une interface mise hors service. Utilisez une liste de portes et conservez la preuve de chacune.
| Porte | Preuve à conserver |
|---|---|
| Remplacement vérifié | Résultats de tests sur la nouvelle plateforme pour chaque flux externe, signés par le promoteur, la conformité et la TI |
| Réseau fermé | Règles de rejet et de journalisation, plus le journal des refus pour la fenêtre d’observation fixée |
| Sonde depuis chaque zone | Résultats de sonde sauvegardés, depuis l’intérieur et l’extérieur de la liste d’accès |
| Canaux désactivés, non supprimés | Export du moteur de la configuration désactivée, avec un responsable du retour arrière nommé |
| Identifiants morts | Ancien secret testé et rejeté; certificats révoqués |
| Test de restauration de sauvegarde | Preuve qu’une sauvegarde restaurée garde le canal désactivé |
| Test de restauration d’archive | Un dossier échantillon restauré depuis l’archive et vérifié |
| Données assainies | Un registre d’assainissement qui correspond à la sensibilité des données selon la NIST SP 800-88 Rév. 2 |
Un exemple travaillé, avec les cases laissées vides
Je n’ai pas exécuté de mise hors service en laboratoire pour cet article, et je n’inventerai pas de chronologie. Voici le registre que je tiendrais pour l’interface fictive lab-results-out-legacy. La colonne des résultats est pour votre propre journal.
| Étape | Quand | Preuve à conserver | Résultat à remplir |
|---|---|---|---|
| Remplacement approuvé | <date> | Approbation du promoteur, de la conformité et de la TI | <réussi ou échoué> |
| Règles de rejet et de journalisation insérées | <date et heure> | Liste des règles sur l’hôte | <handles des règles> |
| Fenêtre d’observation | <début> à <fin> | Journal des refus pour la fenêtre | <pairs qui ont encore appelé> |
| Canal désactivé | <date> | Export du moteur du canal désactivé | <nom du fichier d'export> |
| Identifiants révoqués | <date> | Ancien secret testé depuis l’intérieur et l’extérieur | <rejeté : oui ou non> |
| Test de restauration de sauvegarde | <date> | Configuration restaurée vérifiée | <canal toujours désactivé?> |
| Exercice de retour arrière | <date>, sur une copie hors production | Règle retirée, flux repris depuis un pair de test, règle réinstallée | <délai de restauration> |
La fenêtre d’observation a besoin d’une durée, et je la fixerais à partir de la requête sur les flux silencieux. Elle doit durer au moins aussi longtemps que le plus long silence normal que vous avez trouvé, sinon une fenêtre plus courte manquera le flux patient. C’est ma règle empirique, pas une norme publiée. Faites l’exercice de retour arrière sur une copie. Un retour arrière seulement raisonné n’a pas été testé.
Là où je prends mes distances
Le HL7 est un coupable attrayant parce qu’il donne un récit bien net. Tant que quelqu’un n’a pas documenté le chemin de l’attaquant, cela reste une hypothèse. Les portes de mise hors service fonctionnent quelle que soit la porte utilisée, et je résisterais à tout bilan post-incident qui accuse l’interface avant que les journaux ne le disent.
La fenêtre de 90 jours est une valeur de planification du fournisseur. Ne la traitez comme un plancher que là où la conformité l’exige.
Un système hérité géré par le fournisseur signifie que le registre des interfaces vit dans le bureau de quelqu’un d’autre. Si vous êtes un hôpital, inscrivez la remise du registre dans le contrat : chaque canal, écouteur, pair et identifiant au moment de la migration, avec une date pour le dernier. Faites-en une condition d’approbation, et gardez-la ennuyeuse.
Exécutez chaque extrait sur un moteur hors production avant qu’un runbook ne le cite. Je les ai écrits sans terminal ni moteur, donc chaque commande reste un brouillon jusqu’à ce que quelqu’un l’ait vue fonctionner.
Une sonde propre n’est qu’un instantané. Relancez-la après la prochaine restauration de sauvegarde et le prochain changement de pare-feu, parce que ce sont les moments où les portes mortes se rouvrent.
Le saviez-vous
- Connected.app, une référence informelle de ports, indique 2575 comme le port HL7 MLLP habituel. Il ne cite aucun organisme de normalisation pour ce numéro.
- Dans NextGen Mirth Connect, le connecteur source unique de chaque canal porte toujours le nom « Source » avec l’identifiant de métadonnées 0, selon un extrait du guide d’utilisation de NextGen.
- Le NIST a retiré la SP 800-88 Rév. 1 le 26 septembre 2025. Les guides publiés avant cette date la citent encore comme texte en vigueur.
- L’étude de cas de Nirmitee décrit la migration de 52 interfaces HL7 v2 vers FHIR R4 avec exploitation en parallèle et zéro interruption, une affirmation du fournisseur sur son propre projet.
Sources
- BleepingComputer, « Oracle Health breach compromises patient data at US hospitals » (28 mars 2025), contexte sur la violation chez Oracle Health : https://www.bleepingcomputer.com/news/security/oracle-health-breach-compromises-patient-data-at-us-hospitals/
- Connected.app, référence du port 2575 (informelle) : https://www.connected.app/ports/2575
- hexdocs, documentation de la bibliothèque HL7v2.MLLP (fournisseur, pas une norme) : https://hexdocs.pm/hl7v2/HL7v2.MLLP.md
- hexdocs, documentation de la bibliothèque HL7v2.MLLP.TLS (fournisseur, pas une norme) : https://hexdocs.pm/hl7v2/HL7v2.MLLP.TLS.md
- MuleSoft, référence du connecteur HL7 MLLP, option d’écouteur TLS : https://docs.mulesoft.com/connectors/hl7-mllp-connector-reference
- Infowerks, liste de vérification de migration de données EHR (lue via des extraits de recherche) : https://www.infowerks.com/wp-content/uploads/2026/06/ehr-data-migration-checklist.pdf
- AccessCorp, principaux défis de mise hors service des EHR (lu via des extraits de recherche) : https://www.accesscorp.com/blog/top-8-it-challenges-when-decommissioning-ehrs-how-to-avoid/
- Nirmitee, migration HL7 v2 vers FHIR R4 de 52 interfaces (étude de cas du fournisseur) : https://nirmitee.io/case-study/hl7-v2-to-fhir-r4-migration-zero-downtime-52-interfaces/
- NextGen Mirth Connect, guide d’utilisation : connecteur source et comportement de l’import CLI (extraits de recherche) : https://docs.nextgen.com/en-US/mirthc2ae-connect-by-nextgen-healthcare-user-guide-3229478/source-connector-14921
- NIST CSRC, page de la SP 800-88 Rév. 1 (montre le retrait) : https://csrc.nist.gov/pubs/sp/800/88/r1/final
- NIST CSRC, page de la SP 800-88 Rév. 2 (finale; texte complet non lu) : https://csrc.nist.gov/pubs/sp/800/88/r2/final
- Carahsoft, résumé de la NIST 800-88 Rév. 2 (secondaire, non vérifié auprès du NIST) : https://www.carahsoft.com/resources/29686-nist-800-88-rev2-what-the-updated-media-sanitization-standard-means-for-your-organization
- Blancco, billet sur la NIST 800-88 Rév. 2 (secondaire, non vérifié auprès du NIST) : https://blancco.com/resources/blog-nist-800-88-rev-2-updated-standard/
- Cornell LII, 45 CFR partie 164, annexe A, matrice des normes de sécurité (extrait de recherche) : https://www.law.cornell.edu/cfr/text/45/part-164/subpart-C/appendix-A
Non consultés : l’avis client officiel d’Oracle; le texte de la norme HL7 v2; le PDF complet de la NIST SP 800-88 Rév. 2 (la récupération a renvoyé du binaire); les pages eCFR de 45 CFR 164.310 et 164.312 (redirigées); la page TCP Listener de NextGen (403); le bulletin du Bureau des droits civils du HHS (403). Les affirmations sur l’encadrement MLLP proviennent de sources secondaires et de pages de fournisseurs, non de la norme HL7 elle-même.


