Demandes de remboursement X12 837 vers FHIR Claim : boucles, segments et un mapping qui tient
Comment est structurée une demande de remboursement X12 837 professionnelle ou institutionnelle, comment ses boucles et segments se projettent sur une ressource FHIR R4 Claim, où intervient ExplanationOfBenefit, et les pièges qui cassent les flux de facturation.
Ala Ben Aicha

Réponse directe
Le X12 837 est la demande de remboursement électronique imposée par HIPAA aux États-Unis, en version 005010 : 837P pour les actes professionnels, 837I pour les établissements, 837D pour le dentaire. Les données de la demande se trouvent dans la boucle 2300 (CLM, HI) et les lignes de prestation dans la boucle 2400 (SV1 ou SV2, DTP). Chacun de ces éléments se projette proprement sur une ressource FHIR R4 Claim : CLM02 vers Claim.total, HI vers Claim.diagnosis, chaque ligne 2400 vers Claim.item, et les pointeurs SV107 vers Claim.item.diagnosisSequence. Le résultat de la liquidation (ce que rapporte un avis de paiement 835) relève de ClaimResponse ou d’ExplanationOfBenefit, pas de Claim.
Quel 837, quelle version
| Transaction | Guide d’implémentation dans GS08 / ST03 |
Émetteur typique | Segment de ligne |
|---|---|---|---|
| 837P Professionnel | 005010X222A1 |
Cabinets médicaux, laboratoires, ambulances | SV1 (HCPCS/CPT) |
| 837I Institutionnel | 005010X223A2 |
Hôpitaux, établissements de soins de suite, HAD | SV2 (code de recette + HCPCS) |
| 837D Dentaire | 005010X224A2 |
Cabinets dentaires | SV3 (CDT) |
Le standard HIPAA des demandes de remboursement figure au 45 CFR 162.1102. Le texte cite les rapports techniques de mai 2006 et leurs errata de 2007. Les guides compagnons des payeurs et de Medicare attendent les identifiants des errata ultérieurs de juin 2010 indiqués ci-dessus : c’est donc ce qui figure dans l’enveloppe.
Une version plus récente arrive-t-elle ? En 2022, X12 a demandé au NCVHS d’examiner les guides 008020 (837P 008020X323, 837I 008020X324). En juin 2023, le NCVHS a recommandé au HHS de ne pas engager de réglementation pour les demandes de remboursement et les avis de paiement, et X12 a publiquement exprimé son désaccord. En octobre 2026, aucune règle ne remplace la 005010 pour le 837. L’article a été modifié en décembre 2024 et en août 2025 pour faire passer les demandes de pharmacie de ville à NCPDP F6 ; les références X12 837 n’ont pas bougé. Par ailleurs, CMS-0053-F (mars 2026) a adopté les X12 275/277 version 6020 pour les pièces jointes aux demandes, avec une mise en conformité au 26 mai 2028.
Anatomie d’un 837P
Trois enveloppes entourent chaque lot de demandes :
- ISA / IEA : l’interchange.
ISAest à largeur fixe (106 caractères, terminateur compris) ;ISA13doit être égal àIEA02. - GS / GE : le groupe fonctionnel.
GS01vautHCpour les demandes ;GS06doit être égal àGE02. - ST / SE : le jeu de transactions.
SE01est le nombre de segments deSTàSEinclus.
À l’intérieur, des boucles hiérarchiques (HL) portent les acteurs :
| Boucle | Contenu | Segments clés |
|---|---|---|
| En-tête | Finalité du lot | BHT (BHT06 = CH facturable, RP déclaration/rencontre) |
| 1000A | Émetteur | NM1*41, PER |
| 1000B | Destinataire | NM1*40 |
| 2000A | Niveau du prestataire facturant | HL code de niveau 20, PRV taxonomie |
| 2010AA | Nom, NPI, adresse et identifiant fiscal du prestataire facturant | NM1*85 avec le qualifiant XX, N3, N4, REF*EI |
| 2000B | Niveau de l’assuré | HL code de niveau 22, SBR (rang du payeur, lien, indicateur de type de couverture) |
| 2010BA / 2010BB | Assuré et payeur | NM1*IL, DMG ; NM1*PR |
| 2000C | Patient, uniquement s’il n’est pas l’assuré | PAT, NM1*QC |
| 2300 | Demande | CLM, HI, REF, DTP |
| 2310x | Prestataires au niveau de la demande (adressant, exécutant, structure) | NM1, PRV |
| 2400 | Ligne de prestation | LX, SV1 ou SV2, DTP*472 |
Un 837P synthétique avec deux lignes de prestation (NPI fictif, identifiant d’adhérent fictif, aucun patient réel) :
ISA*00* *00* *ZZ*SUBMITTERID *ZZ*RECEIVERID *261005*1200*^*00501*000000101*1*T*:~
GS*HC*SUBMITTERID*RECEIVERID*20261005*1200*101*X*005010X222A1~
ST*837*0001*005010X222A1~
BHT*0019*00*BATCH0001*20261005*1200*CH~
NM1*41*2*EXAMPLE BILLING SERVICE*****46*SUB12345~
PER*IC*EDI DESK*TE*5555550100~
NM1*40*2*EXAMPLE PAYER*****46*PAYER01~
HL*1**20*1~
PRV*BI*PXC*207Q00000X~
NM1*85*2*EXAMPLE FAMILY CLINIC*****XX*1234567893~
N3*100 MAIN ST~
N4*ANYTOWN*NY*123451234~
REF*EI*123456789~
HL*2*1*22*0~
SBR*P*18*******CI~
NM1*IL*1*DOE*JANE****MI*XYZ123456789~
N3*1 TEST LANE~
N4*ANYTOWN*NY*12345~
DMG*D8*19800101*F~
NM1*PR*2*EXAMPLE PAYER*****PI*PAYER01~
CLM*PCN-0001*175***11:B:1*Y*A*Y*Y~
HI*ABK:E119*ABF:I10~
LX*1~
SV1*HC:99213*125*UN*1***1:2~
DTP*472*D8*20261001~
LX*2~
SV1*HC:83036*50*UN*1***1~
DTP*472*D8*20261001~
SE*27*0001~
GE*1*101~
IEA*1*000000101~
Lecture de la demande : SBR02 = 18 signifie que le patient est l’assuré, donc pas de boucle 2000C. CLM05 = 11:B:1 donne le lieu de prestation 11 (cabinet), le qualifiant B et la fréquence 1 (demande initiale). HI porte des codes CIM-10-CM sans le point décimal : ABK est le diagnostic principal, ABF un diagnostic associé. SV107 = 1:2 rattache la première ligne aux deux diagnostics.
Le 837I diffère précisément là où ça fait mal : CLM05 porte le type de structure et la fréquence (le type de facture) au lieu du lieu de prestation, CL1 ajoute les informations d’admission, SV2 place le code de recette en premier, et il n’existe pas de pointeur de diagnostic au niveau de la ligne.
Mapping vers FHIR R4 Claim
FHIR R4 Claim exige status, type, use, patient, created, provider, priority et au moins un insurance. La plupart proviennent directement du 837.
| Source 837 | Élément FHIR R4 Claim | Remarques |
|---|---|---|
ST03 (X222A1 / X223A2 / X224A2) |
Claim.type |
professional / institutional / oral du système de codes claim-type |
BHT06 = CH |
Claim.use = claim |
Les déclarations de rencontre RP n’ont pas de valeur use exacte ; traitez-les dans un flux séparé |
BHT04 / BHT05 |
Claim.created |
|
CLM01 |
Claim.identifier |
Numéro de contrôle patient ; votre clé d’idempotence |
CLM02 |
Claim.total |
Doit égaler la somme des montants des lignes |
CLM05-3 = 7 ou 8, REF*F8 |
Claim.related |
Remplacement ou annulation d’une demande antérieure du payeur |
HI positions 1..12 |
Claim.diagnosis.sequence + diagnosisCodeableConcept |
Rétablissez le point CIM-10-CM : E119 devient E11.9 |
| 2010BA / 2000C | Claim.patient |
Assuré ou ayant droit, selon SBR02 et la boucle 2000C |
SBR, 2010BB NM1*PR |
Claim.insurance.coverage vers Coverage |
focal = true pour le payeur concerné par la demande |
2010AA NM109 (XX) |
Claim.provider |
NPI facturant en tant qu’identifiant |
2310B exécutant, PRV03 |
Claim.careTeam, careTeam.qualification |
La taxonomie va dans qualification, jamais dans le champ NPI |
LX01 |
Claim.item.sequence |
|
SV101 (+ modificateurs) |
item.productOrService, item.modifier |
CPT/HCPCS |
SV201 (837I) |
item.revenue |
Code de recette NUBC |
SV102 / SV203 |
item.net |
Montant de la ligne |
SV103 + SV104 |
item.quantity |
Conservez l’unité : UN unités ou MJ minutes |
CLM05-1, remplacé par SV105 |
item.locationCodeableConcept |
Codes de lieu de prestation CMS |
SV107 |
item.diagnosisSequence |
Les valeurs sont des positions dans HI |
DTP*472 |
item.servicedDate ou servicedPeriod |
D8 date unique, RD8 période |
| (aucune) | Claim.priority |
Valeur normal ; le 837 n’a pas d’équivalent |
La première ligne de l’exemple, en FHIR :
{
"resourceType": "Claim",
"id": "example-837p-pcn-0001",
"identifier": [{ "system": "urn:example:patient-control-number", "value": "PCN-0001" }],
"status": "active",
"type": {
"coding": [{ "system": "http://terminology.hl7.org/CodeSystem/claim-type", "code": "professional" }]
},
"use": "claim",
"patient": { "reference": "Patient/example-jane-doe" },
"created": "2026-10-05T12:00:00Z",
"provider": {
"identifier": { "system": "http://hl7.org/fhir/sid/us-npi", "value": "1234567893" }
},
"priority": {
"coding": [{ "system": "http://terminology.hl7.org/CodeSystem/processpriority", "code": "normal" }]
},
"diagnosis": [
{
"sequence": 1,
"diagnosisCodeableConcept": {
"coding": [{ "system": "http://hl7.org/fhir/sid/icd-10-cm", "code": "E11.9" }]
}
},
{
"sequence": 2,
"diagnosisCodeableConcept": {
"coding": [{ "system": "http://hl7.org/fhir/sid/icd-10-cm", "code": "I10" }]
}
}
],
"insurance": [
{ "sequence": 1, "focal": true, "coverage": { "reference": "Coverage/example-xyz123456789" } }
],
"item": [
{
"sequence": 1,
"diagnosisSequence": [1, 2],
"productOrService": {
"coding": [{ "system": "http://www.ama-assn.org/go/cpt", "code": "99213" }]
},
"servicedDate": "2026-10-01",
"locationCodeableConcept": {
"coding": [
{
"system": "https://www.cms.gov/Medicare/Coding/place-of-service-codes/Place_of_Service_Code_Set",
"code": "11"
}
]
},
"quantity": { "value": 1 },
"net": { "value": 125.0, "currency": "USD" }
}
],
"total": { "value": 175.0, "currency": "USD" }
}
La seconde ligne (83036, 50,00, pointeur 1) suit la même forme. L’URI du système de lieux de prestation est celle à laquelle se lie le guide CARIN ; utilisez-la pour que les profils EOB en aval valident.
Claim, ClaimResponse ou ExplanationOfBenefit ?
- Claim est la demande : ce que le prestataire a facturé. Il se construit à partir du 837.
- ClaimResponse est la réponse du payeur à une ressource FHIR Claim. L’autorisation préalable dans Da Vinci PAS utilise ce couple.
- ExplanationOfBenefit (EOB) est la demande liquidée telle que le payeur l’a enregistrée : montant admis, payé, reste à charge, motifs d’ajustement. Sa source est le système de liquidation du payeur, les mêmes données que celles envoyées dans un avis de paiement 835 (
005010X221A1).
Pour les API des payeurs américains, les EOB destinés aux patients suivent le guide CARIN Blue Button (2.2.0, publié en mars 2026, FHIR R4). Da Vinci PDex (2.2.0, août 2026) couvre les informations issues des demandes sans les montants, plus les données cliniques, pour l’accès des prestataires et l’échange entre payeurs. CMS-0057-F impose en général les nouvelles API Provider Access et Payer-to-Payer à partir du 1er janvier 2027 ; l’article sur l’autorisation préalable Da Vinci détaille les dates et les types de payeurs. Côté clinique, patients et pathologies doivent être conformes à US Core.
Règle pratique : si vous êtes une intégration côté prestataire qui convertit des 837 sortants, produisez des Claim. Si vous êtes un payeur qui expose un historique, produisez des EOB à partir des données liquidées. N’essayez pas de construire un EOB à partir du seul 837 : il ne contient aucun montant payé.
Les pièges qui cassent les flux de facturation
NPI ou taxonomie. Le NPI du prestataire facturant est NM109 avec le qualifiant XX ; le code de taxonomie est PRV03. Ce sont deux identifiants aux rôles différents. Un NPI de type 2 (organisation) en 2010AA avec un NPI de type 1 pour l’exécutant en 2310B est normal. Mappez les NPI vers des identifiants et la taxonomie vers careTeam.qualification ou la spécialité d’un PractitionerRole.
Pointeurs de diagnostic. SV107 pointe vers des positions du segment HI (jusqu’à 12 codes sur un 837P, jusqu’à quatre pointeurs par ligne). Triez, dédoublonnez ou fusionnez les diagnostics et chaque pointeur devient faux sans le moindre message d’erreur. X12 confirme que tous les codes HI n’ont pas à être pointés. Conservez l’ordre d’origine et reportez-le dans diagnosis.sequence.
Points décimaux. X12 transporte la CIM-10-CM sans le point, la terminologie FHIR l’attend. Convertir dans un seul sens produit des codes rejetés de l’autre côté.
Lieu de prestation. CLM05-1 est la valeur par défaut de la demande ; SV105 la remplace pour une ligne. Déterminez la valeur effective par ligne avant le mapping.
Unités. SV103 UN (unités) et MJ (minutes, fréquent en anesthésie) se ressemblent une fois réduits à un nombre. Gardez l’unité.
Règles d’adresse. En 5010, l’adresse du prestataire facturant en 2010AA exige une adresse postale réelle et un code ZIP à neuf chiffres. Les sources qui stockent des ZIP à cinq chiffres échouent au niveau du clearinghouse.
Numéros de contrôle des enveloppes. ISA13, GS06 et ST02 doivent être uniques selon votre accord avec le partenaire d’échange et correspondre à leurs segments de fin. Les régénérer lors d’une nouvelle tentative peut créer une demande en double ; les réutiliser peut faire rejeter un fichier comme doublon. Fixez la règle avec le clearinghouse et journalisez les numéros de contrôle avec CLM01.
Les accusés de réception sont empilés. Un TA1 répond sur l’enveloppe d’interchange, un 999 (005010X231A1) sur la syntaxe et la conformité au guide d’implémentation, et un 277CA (005010X214) accepte ou rejette chaque demande. Un 999 accepté ne signifie pas que la demande l’est. Le paiement arrive plus tard, dans le 835. Rattachez chaque accusé à sa demande et remontez les rejets 277CA à l’équipe de facturation.
Des données de santé partout. Un 837 contient des PHI de bout en bout, journaux et files de messages en échec compris. Les garde-fous décrits dans HIPAA pour l’intégration santé s’appliquent au circuit EDI autant qu’aux API FHIR. Si votre équipe traite aussi des flux cliniques, les réflexes segment/champ acquis avec les messages HL7 v2 d’exemple se transposent, mais les règles de délimiteurs et d’enveloppes X12 sont plus strictes.
Liste de contrôle de réalisation
- Fixez le guide d’implémentation par partenaire d’échange (
005010X222A1ou005010X223A2) et chargez le guide compagnon du payeur. - Analysez les enveloppes, validez le nombre de segments et les numéros de contrôle avant tout mapping.
- Projetez 2300 et 2400 sur Claim avec le tableau ci-dessus ; rétablissez les points CIM-10-CM et conservez l’ordre de
HI. - Validez la ressource Claim contre votre profil cible, pas seulement contre R4 de base.
- Branchez le traitement des
TA1, 999 et 277CA, puis le rapprochement des 835 si vous portez le cycle de facturation. - Laissez la génération des EOB côté payeur, à partir des données liquidées.
Si vous avez besoin d’un flux 837, d’un mapping vers FHIR Claim, ou de faire cohabiter EDI et FHIR dans une intégration de DPI, voyez l’accompagnement en intégration EHR et EMR.