View a markdown version of this page

$bulk-member-matchopération pour HealthLake - AWS HealthLake

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 FHIR.

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

MemberPatient

Patient

Oui

Ressource destinée aux patients contenant des informations démographiques pour le membre à jumeler.

CoverageToMatch

Couverture

Oui

Ressource de couverture qui sera utilisée pour la comparaison avec les enregistrements existants.

CoverageToLink

Couverture

Non

Ressource de couverture à associer pendant le processus de mise en correspondance.

Consent

Consentement

Oui

La ressource de consentement à des fins d'autorisation est également stockée. Cela est différent de l'$member-matchopération individuelle pour laquelle le consentement n'est pas requis.

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 deny suivant : 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 MemberBundle Patient dont le birthDate paramè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.