Pour les développeurs

Connecteur de laboratoire : comment un rapport de laboratoire en HL7 v2, CSV ou JSON devient des Observations FHIR en une seule requête

Comment connecter un laboratoire à un dossier patient : un seul POST avec le rapport complet (HL7 v2 ORU^R01, CSV ou JSON), les résultats mappés à LOINC avec les unités, les plages de référence et le laboratoire comme exécutant, les marqueurs non mappés renvoyés. Le connecteur de laboratoire Anpheros, avec les règles qu'il applique.

par Publié 5 min de lecture

Un laboratoire a une seule mission dans une intégration : intégrer le rapport dans le dossier du patient sans retaper, sans perdre la plage de référence et sans inventer un format que personne d'autre ne lit. Le connecteur de laboratoire Anpheros prend le rapport tel que le laboratoire le produit déjà, en HL7 v2, CSV ou JSON, et transforme chaque résultat en une Observation FHIR avec un code LOINC, une unité, une plage de référence, une date et le laboratoire nommé comme exécutant. Ce guide est le contrat.

Version technique pour les développeurs : Connecteur de laboratoire · API des résultats de laboratoire sur developers.anpheros.com, avec les requêtes, les réponses et les limites. Cette page est la version en langage clair.

Une requête

POST /v1/patients/{patient_id}/labs/import
Authorization: Bearer <project key>
Content-Type: text/csv | x-application/hl7-v2+er7 | application/json
X-Anpheros-Source-System: labx        (optionnel ; enregistré dans Provenance)
Idempotency-Key: <report id>          (optionnel ; une nouvelle tentative renvoie la même réponse)

La réponse indique ce qui s'est passé :

{"created": 3, "skipped": 0, "unmapped": ["Marker très rare"], "warnings": [],
 "observations": [{"id": "…", "marker": "TSH", "code": "3016-3", "system": "http://loinc.org",
                   "value": 2.1, "unit": "mUI/L", "date": "2026-09-01"}]}

Formats

HL7 v2 ORU^R01, en texte ER7. OBX-3 est l'identifiant (code^texte^LN est LOINC ; un code local est conservé comme code propre au laboratoire), OBX-5 la valeur, OBX-6 l'unité, OBX-7 la plage de référence, OBX-8 le drapeau anormal (devient interpretation), OBX-11 le statut, OBX-14 ou OBR-7 la date. MSH-4 nomme l'établissement émetteur, qui devient l'exécutant ; OBR-3 et MSH-10 deviennent l'identifiant du rapport dans Provenance. Les résultats en attente, supprimés ou erronés (I, X, D, W) et les segments OBX sans valeur ne deviennent pas des Observations et sont nommés dans warnings.

CSV avec une ligne d'en-tête ; séparateurs , ; ou tabulation, virgule décimale acceptée, dates ISO, DD.MM.YYYY ou DD/MM/YYYY. Colonnes reconnues en roumain ou en anglais : marker, value, unit, reference range (70-100, <5, >3.5) ou ref_low/ref_high, date, code LOINC optionnel, note. Un CSV ne transporte pas de laboratoire, donc l'exécutant est manquant à moins que vous n'envoyiez X-Anpheros-Acting-As.

Analiza;Rezultat;UM;Interval de referinta;Data
Hemoglobina glicozilata (HbA1c);6,4;%;4,0-5,6;01.09.2026
TSH;2,1;mUI/L;0,4-4,0;01.09.2026

JSON lorsque vous avez déjà des données structurées : {"date": "2026-09-01", "origin": "report-77", "laboratory": "Synevo", "items": [{"marker": "TSH", "value": 2.1, "unit": "mUI/L", "ref_low": 0.4, "ref_high": 4.0, "code": "3016-3"}]}.

Règles de mappage importantes

  • LOINC quand il est fourni, sinon par nom. Les noms sont comparés aux noms et synonymes LOINC en roumain et en anglais. Un nom qui correspond à plusieurs concepts, ou qui porte un qualificateur que le concept n'a pas (urine, non-HDL, libre, ratio), n'est pas deviné : il conserve le code du laboratoire sous urn:anpheros:lab-code et apparaît dans unmapped, afin que vous puissiez améliorer le mappage de votre côté. Envoyez des codes LOINC chaque fois que vous les avez.
  • Les valeurs ne sont jamais converties. L'urée et l'azote uréique sont des codes différents ; le LDL direct et le LDL calculé sont des codes différents ; le glucose du sérum et le glucose du sang capillaire sont des codes différents. Le connecteur choisit le bon à partir du nom et de la méthode, et laisse le nombre tel quel.
  • Les heures conservent leur fuseau horaire. Une heure v2 avec un décalage est conservée ; sans décalage, le décalage de MSH-7 est utilisé avec un avertissement ; sans décalage nulle part, seule la date est stockée. Les heures CSV n'ont pas de fuseau horaire et sont stockées comme des dates.
  • Idempotent. Envoyez le même rapport deux fois avec la même Idempotency-Key et vous obtiendrez la même réponse et aucun doublon.
  • Provenance sur chaque résultat : le système source, l'identifiant du rapport et l'exécutant, comme l'exige la norme HL7 Europe Laboratory Report.

Ce que le patient voit

Les résultats apparaissent dans le dossier de la personne et, s'ils utilisent Anpheros Daily, sur leur téléphone dès leur arrivée, avec la plage de référence et la tendance par rapport aux rapports précédents. Rien à scanner, rien à retaper. Si un résultat est anormal, la personne voit le drapeau ; l'application ne l'interprète pas.

Tests

Le sandbox est gratuit et les patients synthétiques ont déjà un historique de laboratoire. Envoyez un rapport à l'un d'eux et relisez-le :

curl -X POST "$BASE/v1/patients/$PID/labs/import" -H "Authorization: Bearer $KEY" \
     -H "Content-Type: text/csv" --data-binary @report.csv
curl "$BASE/fhir/R4/Observation?patient=$PID&category=laboratory&_sort=-date" -H "Authorization: Bearer $KEY"

La spécification complète, y compris les notes de conformité HL7 Europe, se trouve sur developers.anpheros.com/guides/lab-connector.

Questions fréquentes

Devons-nous modifier ce que notre LIS produit ?

Non. Envoyez le message ORU^R01 ou l'export CSV tel quel. Si vous pouvez ajouter des codes LOINC, faites-le ; sinon, le connecteur mappe par nom et vous indique ce qu'il n'a pas pu mapper.

Qu'en est-il des résultats que vous ne pouvez pas mapper ?

Ils sont stockés avec le code propre au laboratoire et le texte exact du rapport, donc rien n'est perdu, et ils sont listés dans unmapped afin que vous puissiez ajouter un code LOINC la prochaine fois.

Les plages de référence et les drapeaux anormaux sont-ils conservés ?

Oui : la plage va à referenceRange, le drapeau à interpretation, l'unité est stockée en UCUM, et la valeur n'est jamais convertie.

Un laboratoire peut-il envoyer des résultats pour un patient qu'il n'a pas créé ?

Uniquement avec le consentement de la personne, ou en tant qu'organisation pour laquelle le projet agit avec X-Anpheros-Acting-As. Un projet voit les patients qu'il a créés ; tout le reste nécessite une autorisation.

L'intégration a-t-elle un coût ?

Le sandbox est gratuit. La production commence à 49 € par mois par organisation, avec le premier mois gratuit ; voir tarifs.

Ce guide est informatif et ne remplace pas une consultation médicale. Pour toute décision concernant votre santé, parlez-en à votre médecin. En cas d’urgence, appelez le 112.
À propos de l'auteur
Adrian Kereky

Fondateur d’Anpheros. Ingénieur en électronique, il a passé six ans sur la conduite autonome, dans des projets automobiles menés en partenariat avec Samsung et NVIDIA, sur l’architecture des systèmes d’aide à la conduite et d’IA qui tournent sur des puces NVIDIA avec CUDA. Il a ensuite construit Anpheros : le dossier médical contrôlé par le patient et la plateforme HL7 FHIR R4 sur laquelle il repose.

En savoir plus sur Anpheros et l'auteur →

Gardez votre dossier médical avec vous

Anpheros Daily conserve symptômes, analyses, médicaments et documents au même endroit, dans un format standard, sous votre contrôle. Le plan Basic est gratuit.

Télécharger Anpheros Daily