Intégration des systèmes de santé-11 minutes de lecture

Architecture du canal Mirth Connect : source, filtre, transformateur, destination

Comment structurer les canaux NextGen Connect (anciennement Mirth Connect) : source, filtre, transformateur, destination, cartes de configuration, files d'attente d'erreurs par rapport aux nouvelles tentatives et exportation Git du XML du canal.

Ala Ben Aicha

Architecture du canal Mirth Connect : source, filtre, transformateur, destination

Réponse directe

Un canal NextGen Connect (Mirth Connect) est source, filtre, transformateur, destination. Placez les URL d'environnement dans la carte de configuration, pas dans le XML du canal. Les messages en erreur ne sont pas automatiquement relancés. Exportez les canaux vers Git.

Cartographie des canaux

Mirth Connect est le nom du produit que la plupart des ingénieurs d'interface recherchent encore. Le nom du vendeur est NextGen Connect (Mirth Connect par NextGen Healthcare). Le 19 mars 2025, avec version 4.6, NextGen a déplacé les nouvelles versions vers une licence commerciale ; la source pour 4.6+ n'est pas sur GitHub. Source plus ancienne, notes de mise à niveau et FAQ restent. Cette page est une architecture de canaux, pas un avis sur la licence.

Un canal est un pipeline :

Source connector
    → source filter (accept / drop)
    → source transformer (normalize)
    → destination 1..n
         → destination filter
         → destination transformer
         → send + response
    → postprocessor
Étape Ce que ça fait Ce qu'il ne faut pas faire
Source Réception ou interrogation : écouteur TCP/MLLP, HTTP, fichier, base de données, JMS, lecteur de canal Encodez l’ensemble du mappage ; qui appartient aux transformateurs
Filtre source Booléen : traiter ce message (MSH-9, fonction d'envoi, structure de base) Muter msg; les filtres qui modifient les données masquent les échecs
Transformateur de source Normaliser : espaces de noms, dates, systèmes d'identification, FHIR JSON Appelez la production HTTP sans file d'attente de destination devant
Filtre de destination Acheminer les sous-ensembles (A01 vers l'enregistrement, A08 vers les données démographiques, ORU vers le canal du laboratoire) Dupliquer le filtre source sans raison
Transformateur de destination Créez la charge utile sortante pour que système Coder en dur les noms d'hôtes, les ports ou les secrets
Destination Livrer (MLLP, HTTP FHIR, fichier, Channel Writer) Être la seule copie de la configuration de l'environnement

Cartes (du Liste de cartes de variables NextGen):

Carte JS / raccourci Durée de vie
Connecteur connectorMap / $co Ce connecteur, ce message
Chaîne channelMap / $c Ce canal, ce message
Source sourceMap / $s Depuis le connecteur source
Global au canal globalChannelMap / $gc Ce canal, durée de vie du processus
Global globalMap / $g Processus serveur
Configuration configurationMap / $cfg Fichier sur le disque (configuration.properties sous appdata), pas la carte globale en mémoire

La configurationMap contient la configuration d’environnement : bases FHIR, hôtes MLLP, préfixes de chemin. NextGen le stocke sous forme de fichier plat et ne l'inclut pas dans les exportations de configuration du serveur, afin que le même canal XML puisse circuler entre les tests et la production. C'est là le point.

Hybrid v2 plus FHIR se trouve toujours sur ce pipeline – le Manuel de migration v2 vers FHIR. Les identifiants de commande/résultat appartiennent à flux de travail en radiologie et en laboratoire, pas dans une deuxième copie de ces cartes à l'intérieur de chaque transformateur.

Pièges d'identification

Piège Symptôme Corriger
Noms d'hôtes dans le transformateur JavaScript Le XML du canal diffère selon l'environnement ; Les différences Git sont du bruit $cfg('fhir.base') / $cfg('his.mllp.host') dans les propriétés du connecteur
Les clés de la carte de configuration entrent en collision avec globalChannelMap Mauvaise URL, car la priorité de recherche est atteinte $gc d'abord Ne réutilisez pas les noms de cartes de configuration dans d'autres cartes
Filtre source trop serré A08 ne met jamais à jour FHIR Patient Filtrer sur le message famille (ADT) à la source ; diviser A01/A08 à destination
Un canal pour ADT + ORM + ORU Transformateur partagé avec une forêt de if (msg['MSH']…) Un canal par contrat entrant, ou une source légère qui écrit aux spécialistes
Traiter le statut d'ERREUR comme "va réessayer" Perte silencieuse après un maximum de tentatives Voir les files d'attente ci-dessous
Exportation de canaux sans modèles de code L'importation manque les fonctions partagées Exportez les bibliothèques avec le canal ou les modèles de version dans le même dépôt Git

L'indexation des champs HL7 dans Rhino est basée sur 1 (msg['PID']['PID.3']['PID.3.1']). Les champs vides sont jetés si vous appelez .toString() sans garde - c'est un bug du transformateur, pas un "mauvais ADT".

Jeux de données de test

Désidentifié. Le canal XML est énorme ; garder les jeux de données de test comme messages + sortants attendus, pas sous forme de captures d'écran de l'administrateur.

ADT entrant (même exemple de Jane que l'article ADT) :

MSH|^~\&|HIS|HOSP-A|MIRTH|HOSP-A|20260917103000||ADT^A01^ADT_A01|MSG0001|P|2.5
PID|1||HOSP-MRN-0001^^^HOSP-A^MR||EXAMPLE^JANE^Q||19770412|F
PV1|1|I|||||||||||||||||VN-2026-00042^^^HOSP-A^VN|||||||||||||||||||||||||20260917103000

Carte de configuration (ne commettez jamais de vrais secrets ; il s’agit d’un exemple) :

his.mllp.host=his-test.example.org
his.mllp.port=2575
fhir.base=https://fhir-test.example.org/fhir
fhir.patient.mrn.system=https://hosp-a.example.org/mrn

Corps HTTP de destination (Patient tronqué) :

{
  "resourceType": "Patient",
  "identifier": [
    {
      "system": "https://hosp-a.example.org/mrn",
      "value": "HOSP-MRN-0001"
    }
  ],
  "name": [{ "family": "EXAMPLE", "given": ["JANE", "Q"] }],
  "birthDate": "1977-04-12"
}

Tests minimaux :

  1. Filtre source : ADT^A01 accepté ; ORM abandonné (ou acheminé ailleurs).
  2. Protection du transformateur : PID-3 vide → filtré ou ERREUR avec une raison, pas une TypeError.
  3. Carte de configuration : XML du même canal par rapport aux bases de test et de production.
  4. File d'attente de destination : arrêter le serveur FHIR, envoyer A01, message QUEUED, le serveur renvoie, message ENVOYÉ une fois.
  5. Git : exportez le XML du canal, modifiez une ligne de transformateur, diff affiche cette ligne – pas une réorganisation des propriétés de 4 000 lignes.

Ne collez jamais de PHI en production dans les descriptions de canaux, les messages de test stockés dans Git ou le volet « Générer » de l'administrateur sur une machine de production.

Modes de défaillance et restauration

Les files d'attente de destination ne constituent pas la table des erreurs.

Mode Comportement Utiliser
Jamais L'échec de l'envoi fait échouer immédiatement la destination Uniquement si une destination ultérieure doit voir une réponse synchrone
En cas d'échec Essayez une fois, puis faites la queue Par défaut pour FHIR HTTP et MLLP vers les récepteurs fragiles
Toujours Mettez d'abord en file d'attente, envoyez de manière asynchrone ; en aval voit QUEUED Volume élevé ; accepter dans le désordre si vous activez également le traitement parallèle

ERREUR signifie que le message est pas je vais réessayer tout seul. Les opérateurs retraitent ou vous acheminez les échecs vers un canal d'erreur (Channel Writer) qui appelle un humain. Réessayer est la file d'attente de destination. En mélangeant les deux, l'ADT A03 se trouve derrière un message A08 invalide et fausser l’état des séjours.

Exportation Git : les canaux vivent au format XML dans la base de données du moteur. Il n’y a pas de natif « le repo est le runtime ». Modèle pratique : REST exporte chaque canal vers un fichier ({id}-{name}.xml), formatage stable pour faciliter les comparaisons, pull request, import + déploiement sur la cible. Ne stockez pas configuration.properties dans le même dépôt que les secrets de production ; magasin clés et injecter des valeurs par environnement.

Échec Détection Restauration
Exception de transformateur ERREUR du connecteur, MLLP toujours ACKé si vous avez ACKé à la source trop tôt ACK après le succès de la destination, ou ACK à la source et acceptez que vous possédez désormais la relecture
Sauvegarde de file d'attente Le nombre de FILE D'ATTENTE grimpe Mettre la source en pause ; réparer le récepteur ; n'arrêtez pas et n'effacez pas la file d'attente
Mauvais environnement Testez Patient sur FHIR de production Carte de configuration + ID client séparés ; désactiver la destination de production dans les environnements inférieurs
Boucle via le Channel Writer Hausse brutale de la charge CPU Carte source de MSH-3 ; déposer les messages que ce moteur vient d'émettre

Désactivez une destination défaillante en annulant le déploiement cette destination (ou la chaîne) sans toucher au flux HIS. Maintenez le MLLP entrant actif si les expéditeurs cliniques ne peuvent pas mettre en mémoire tampon.

Service associé

Si vous avez besoin de canaux NextGen Connect / Mirth conçus, exportés et testés (ADT, ORM/ORU, FHIR HTTP), c'est-à-dire Mirth Connect. Pour une étude ciblée de l’architecture des canaux, utilisez formulaire de contact projet.

Cette page n'est pas une licence NextGen, ni un remplacement de Git par l’historique des canaux, ni une référence de débit.

Mirth ConnectNextGen ConnectHL7 v2Moteur d'intégrationFHIRCanauxCarte de configuration

Lectures et services associés

Poursuivons la conversation

Vous avez des questions sur ce sujet ? J'aimerais avoir de vos nouvelles.