Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
$bulk-member-matchopération pour HealthLake
AWS HealthLake prend en charge l'$bulk-member-matchopération de traitement asynchrone des demandes de correspondance de plusieurs membres. Cette opération permet aux établissements de santé de faire correspondre efficacement les identifiants uniques de centaines de membres dans différents systèmes de santé en utilisant des informations démographiques et de couverture dans une seule demande groupée. Cette fonctionnalité est essentielle pour l'échange de payer-to-payer données à grande échelle, les transitions de membres et les exigences de conformité au CMS et est conforme à la spécification
Note
L'$bulk-member-matchopération est basée sur une spécification FHIR sous-jacente qui est actuellement expérimentale et sujette à modification. Au fur et à mesure de l'évolution des spécifications, le comportement et l'interface de cette API seront mis à jour en conséquence. Il est conseillé aux développeurs de surveiller les notes de HealthLake publication d'AWS et les mises à jour pertinentes des spécifications FHIR afin de rester informés de toute modification susceptible d'avoir un impact sur leurs intégrations.
Cette opération est particulièrement utile lorsque vous devez :
Procédez au jumelage des membres à grande échelle pendant les périodes d'inscription ouvertes
Faciliter les transitions de membres en masse entre les payeurs
Support des exigences d'échange de données de conformité des CMS à grande échelle
Associez efficacement les cohortes de membres à travers les réseaux de santé
Minimisez les appels d'API et améliorez l'efficacité opérationnelle pour les scénarios de mise en correspondance de volumes élevés
Usage
L'$bulk-member-matchopération est une opération asynchrone invoquée sur les ressources du groupe à l'aide de la méthode POST :
POST [base]/Group/$bulk-member-match
Après avoir soumis une demande de correspondance groupée, vous pouvez consulter le statut du poste en utilisant :
GET [base]/$bulk-member-match-status/{jobId}
Paramètres pris en charge
HealthLake prend en charge les $bulk-member-match paramètres FHIR suivants :
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
|
Patient |
Oui |
Ressource destinée aux patients contenant des informations démographiques pour le membre à jumeler. |
|
Couverture |
Oui |
Ressource de couverture qui sera utilisée pour la comparaison avec les enregistrements existants. |
|
Couverture |
Non |
Ressource de couverture à associer pendant le processus de mise en correspondance. |
|
Consentement |
Oui |
La ressource de consentement à des fins d'autorisation est également stockée. Cela est différent de l' |
Demande POST pour soumettre en masse un job correspondant à un nombre de membres
L'exemple suivant montre une demande POST visant à soumettre un job de mise en relation groupé de membres. Chaque membre est encapsulé dans un MemberBundle paramètre contenant les Consent ressources requises MemberPatientCoverageToMatch, ainsi qu'un paramètre facultatifCoverageToLink.
POST [base]/Group/$bulk-member-match Content-Type: application/fhir+json { "resourceType": "Parameters", "parameter": [ { "name": "MemberBundle", "part": [ { "name": "MemberPatient", "resource": { "resourceType": "Patient", "identifier": [ { "system": "http://example.org/patient-id", "value": "patient-0" } ], "name": [ { "family": "Smith", "given": ["James"] } ], "gender": "male", "birthDate": "1950-01-01" } }, { "name": "CoverageToMatch", "resource": { "resourceType": "Coverage", "status": "active", "identifier": [ { "system": "http://example.org/coverage-id", "value": "cov-0" } ], "subscriberId": "sub-0", "beneficiary": { "reference": "Patient/patient123" }, "relationship": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/subscriber-relationship", "code": "self" } ] }, "payor": [ { "reference": "Organization/org123" } ] } }, { "name": "Consent", "resource": { "resourceType": "Consent", "status": "active", "scope": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/consentscope", "code": "patient-privacy" } ] }, "category": [ { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "IDSCL" } ] } ], "patient": { "reference": "Patient/patient123" }, "performer": [ { "reference": "Patient/patient123" } ], "sourceReference": { "reference": "http://example.org/DocumentReference/consent-source" }, "policy": [ { "uri": "http://hl7.org/fhir/us/davinci-hrex/StructureDefinition-hrex-consent.html#regular" } ], "provision": { "type": "permit", "period": { "start": "2024-01-01", "end": "2025-12-31" }, "actor": [ { "role": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type", "code": "performer" } ] }, "reference": { "identifier": { "system": "http://hl7.org/fhir/sid/us-npi", "value": "9876543210" }, "display": "Old Health Plan" } }, { "role": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-ParticipationType", "code": "IRCP" } ] }, "reference": { "identifier": { "system": "http://hl7.org/fhir/sid/us-npi", "value": "0123456789" }, "display": "New Health Plan" } } ], "action": [ { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/consentaction", "code": "disclose" } ] } ] } } }, { "name": "CoverageToLink", "resource": { "resourceType": "Coverage", "status": "active", "identifier": [ { "system": "http://example.org/coverage-link-id", "value": "cov-link-0" } ], "subscriberId": "new-sub-0", "beneficiary": { "reference": "Patient/patient123" }, "relationship": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/subscriber-relationship", "code": "self" } ] }, "payor": [ { "identifier": { "system": "http://hl7.org/fhir/sid/us-npi", "value": "0123456789" }, "display": "New Health Plan" } ] } } ] } ] }
Réponse à la tâche terminée avec sortie
Lorsque le travail est terminé, la réponse inclut les métadonnées du travail et une ressource de paramètres FHIR contenant trois ressources de groupe qui catégorisent les résultats du match.
{ "datastoreId": "datastoreId", "jobId": "jobId", "status": "COMPLETED", "submittedTime": "2026-03-20T18:45:26.321Z", "numberOfMembers": 3, "numberOfMembersProcessedSuccessfully": 3, "numberOfMembersWithCustomerError": 0, "numberOfMembersWithServerError": 0, "output": { "resourceType": "Parameters", "meta": { "profile": [ "http://hl7.org/fhir/us/davinci-pdex/StructureDefinition/pdex-parameters-multi-member-match-bundle-out" ] }, "parameter": [ { "name": "MatchedMembers", "resource": { "resourceType": "Group", "id": "group1", "text": { "status": "generated", "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Matched members group</div>" }, "contained": [ { "resourceType": "Patient", "id": "1", "identifier": [ { "system": "http://example.org/patient-id", "value": "patient-0" } ], "name": [ { "family": "Smith", "given": ["James"] } ], "gender": "male", "birthDate": "1950-01-01" } ], "type": "person", "actual": true, "code": { "coding": [ { "system": "http://hl7.org/fhir/us/davinci-pdex/CodeSystem/PdexMultiMemberMatchResultCS", "code": "match", "display": "Matched" } ] }, "quantity": 1, "member": [ { "entity": { "extension": [ { "url": "http://hl7.org/fhir/us/davinci-pdex/StructureDefinition/base-ext-match-parameters", "valueReference": { "reference": "#1" } } ], "reference": "Patient/patient123" } } ] } }, { "name": "NonMatchedMembers", "resource": { "resourceType": "Group", "id": "Group2", "text": { "status": "generated", "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Non-matched members group</div>" }, "contained": [ { "resourceType": "Patient", "id": "1", "identifier": [ { "system": "http://example.org/patient-id", "value": "patient-501" } ], "name": [ { "family": "Carter", "given": ["Emily"] } ], "gender": "female", "birthDate": "1985-06-15" } ], "type": "person", "actual": true, "code": { "coding": [ { "system": "http://hl7.org/fhir/us/davinci-pdex/CodeSystem/PdexMultiMemberMatchResultCS", "code": "nomatch", "display": "Not Matched" } ] }, "quantity": 1, "member": [ { "entity": { "extension": [ { "url": "http://hl7.org/fhir/us/davinci-pdex/StructureDefinition/base-ext-match-parameters", "valueReference": { "reference": "#1" } } ], "reference": "Patient/patient123" } } ] } }, { "name": "ConsentConstrainedMembers", "resource": { "resourceType": "Group", "id": "group3", "text": { "status": "generated", "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Consent constrained members group</div>" }, "contained": [ { "resourceType": "Patient", "id": "1", "identifier": [ { "system": "http://example.org/patient-id", "value": "patient-502" } ], "name": [ { "family": "Nguyen", "given": ["David"] } ], "gender": "male", "birthDate": "1972-11-22" } ], "type": "person", "actual": true, "code": { "coding": [ { "system": "http://hl7.org/fhir/us/davinci-pdex/CodeSystem/PdexMultiMemberMatchResultCS", "code": "consentconstraint", "display": "Consent Constraint" } ] }, "quantity": 1, "member": [ { "entity": { "extension": [ { "url": "http://hl7.org/fhir/us/davinci-pdex/StructureDefinition/base-ext-match-parameters", "valueReference": { "reference": "#1" } } ], "reference": "Patient/123" } } ] } } ] } }
Ressources du groupe de sortie
La tâche terminée renvoie une ressource Parameters contenant trois ressources de groupe :
- MatchedMembers Groupe
Contient les références des patients pour tous les membres correctement mis en correspondance et n'est pas classé dans la catégorie des contraintes de consentement.
Le Group.quantity champ contient le nombre total de membres dans chacun de leurs groupes respectifs.
- NonMatchedMembers Groupe
Contient des références aux membres pour lesquels aucune correspondance n'a été trouvée ou plusieurs correspondances ont été identifiées.
- ConsentConstrainedMembers Groupe
-
Contient des références de patients pour tous les membres mis en correspondance avec succès lorsque les contraintes de consentement empêchent le partage de données. Une ressource de consentement est considérée comme limitée lorsque les deux conditions suivantes sont présentes :
-
L'URI de la politique se termine par
#sensitive— Il s'agit du signal le plus clair et le plus direct. Le payeur soumissionnaire déclare explicitement : « Les données de ce membre sont sensibles, manipulez-les avec soin »."policy": [{ "uri": "...hrex-consent.html#sensitive" }] -
Le type de disposition de niveau supérieur est le
denysuivant : le membre a largement refusé le partage de données."provision": { "type": "deny" }
-
Intégration avec $ davinci-data-export
La ressource de MatchedMembers groupe renvoyée par $bulk-member-match peut être directement utilisée avec l'$davinci-data-exportopération de récupération des données des membres en masse :
POST [base]/Group/{matched-group-id}/$davinci-data-export GET [base]/Group/{matched-group-id}
Cette intégration permet des flux de travail efficaces dans lesquels vous identifiez d'abord les membres correspondants en masse, puis exportez leurs dossiers médicaux complets à l'aide de la ressource de groupe qui en résulte.
Caractéristiques de performance
L'$bulk-member-matchopération est conçue pour le traitement de gros volumes et s'exécute de manière asynchrone :
Simultanéité : maximum de 5 opérations simultanées par magasin de données.
Évolutivité : gère jusqu'à 500 membres par demande (limite de charge utile de 5 Mo).
Opérations parallèles : compatible avec les opérations simultanées d'importation, d'exportation ou de suppression en bloc.
Autorisation
L'API utilise le protocole d'autorisation SMART on FHIR avec les étendues requises suivantes :
system/Patient.read— Nécessaire pour rechercher et associer les ressources destinées aux patients.system/Coverage.read— Nécessaire pour valider les informations de couverture.system/Group.write— Nécessaire pour créer des ressources de groupe de résultats.system/Organization.read— Conditionnel, obligatoire si la couverture fait référence à des organisations.system/Practitioner.read— Conditionnel, obligatoire si la couverture fait référence à des praticiens.system/PractitionerRole.read— Conditionnel, obligatoire si la couverture fait référence aux rôles des praticiens.system/Consent.write— Conditionnel, obligatoire si des ressources de consentement sont fournies.
L'opération prend également en charge AWS l'autorisation IAM Signature Version 4 (SigV4) pour l'accès programmatique.
Gestion des erreurs
L'opération gère les conditions d'erreur suivantes :
400 Mauvaise demande : format de demande non valide, paramètres requis manquants ou charge utile supérieure aux limites de taille (500 membres ou 5 Mo).
422 Entité intraitable : erreurs de traitement lors de l'exécution de la tâche.
Erreurs relatives à un membre individuel : lorsqu'un membre en particulier échoue, l'opération se poursuit avec les membres restants et inclut les détails de l'erreur dans le NonMatchedMembers groupe avec les codes de motif appropriés. Par exemple, un
MemberBundlePatient dont lebirthDateparamètre est absent renverra le message d'erreur suivant :"errors": [ { "memberIndex": 1, "jsonBlob": { "resourceType": "OperationOutcome", "issue": [ { "severity": "error", "code": "invalid", "diagnostics": "MemberPatient.birthDate is required" } ], "statusCode": 400 } } ]
Les détails de l'erreur sont disponibles via le point de terminaison du sondage d'état et incluent :
numberOfMembersWithCustomerError: Nombre de membres présentant des erreurs de validation ou de saisie.numberOfMembersWithServerError: nombre de membres présentant des erreurs de traitement côté serveur.
Opérations liées
$member-matchopération pour HealthLake— Opération de mise en correspondance de membres individuels.
Fonctionnement du FHIR R4 $davinci-data-export pour HealthLake— Exportation de données en masse à l'aide des ressources du groupe.
FHIR R4 pour $operations HealthLake— Liste complète des opérations prises en charge.