View a markdown version of this page

$bulk-member-matchoperação para HealthLake - AWS HealthLake

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

$bulk-member-matchoperação para HealthLake

AWS HealthLake suporta a $bulk-member-match operação de processamento de solicitações de correspondência de vários membros de forma assíncrona. Essa operação permite que as organizações de saúde combinem com eficiência centenas de identificadores exclusivos de membros em diferentes sistemas de saúde usando informações demográficas e de cobertura em uma única solicitação em massa. Esse recurso é essencial para troca de payer-to-payer dados em grande escala, transições de membros e requisitos de conformidade do CMS e segue a especificação FHIR.

nota

A $bulk-member-match operação é baseada em uma especificação FHIR subjacente que atualmente é experimental e está sujeita a alterações. Conforme a especificação evolui, o comportamento e a interface dessa API serão atualizados adequadamente. Recomenda-se que os desenvolvedores monitorem as notas de HealthLake lançamento da AWS e as atualizações relevantes da especificação FHIR para se manterem informados sobre quaisquer alterações que possam afetar suas integrações.

Essa operação é particularmente útil quando você precisa:

  • Processe a correspondência de membros em grande escala durante os períodos de inscrição aberta

  • Facilite as transições de membros em massa entre pagadores

  • Support os requisitos de troca de dados de conformidade do CMS em grande escala

  • Combine eficientemente grupos de membros em todas as redes de saúde

  • Minimize as chamadas de API e melhore a eficiência operacional para cenários de correspondência de alto volume

Usage

A $bulk-member-match operação é uma operação assíncrona invocada em recursos do Grupo usando o método POST:

POST [base]/Group/$bulk-member-match

Depois de enviar uma solicitação de correspondência em massa, você pode pesquisar o status do trabalho usando:

GET [base]/$bulk-member-match-status/{jobId}

Parâmetros compatíveis

HealthLake suporta os seguintes parâmetros FHIR: $bulk-member-match

Parâmetro Tipo Obrigatório Description

MemberPatient

Paciente

Sim

Recurso para pacientes contendo informações demográficas para o membro a ser combinado.

CoverageToMatch

Cobertura

Sim

Recurso de cobertura que será usado para comparar com os registros existentes.

CoverageToLink

Cobertura

Não

Recurso de cobertura a ser vinculado durante o processo de correspondência.

Consent

Consentimento

Sim

O recurso de consentimento para fins de autorização também é armazenado. Isso é diferente da $member-match operação individual em que o consentimento não é necessário.

Solicitação POST para enviar uma vaga de correspondência de membros em massa

O exemplo a seguir mostra uma solicitação POST para enviar um trabalho por correspondência de membros em massa. Cada membro é encapsulado em um MemberBundle parâmetro contendo os Consent recursos e os recursos necessários MemberPatientCoverageToMatch, além de um opcionalCoverageToLink.

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" } ] } } ] } ] }

Resposta de trabalho concluída com saída

Quando o trabalho é concluído, a resposta inclui metadados do trabalho e um recurso de parâmetros FHIR contendo três recursos de grupo que categorizam os resultados da correspondência.

{ "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" } } ] } } ] } }

Recursos do Grupo de Saída

O trabalho concluído retorna um recurso de Parâmetros contendo três recursos do Grupo:

MatchedMembers Group (Grupo)

Contém referências de pacientes para todos os membros combinados com sucesso e não é categorizado como restrição de consentimento.

O Group.quantity campo contém a contagem total de membros em cada um de seus respectivos grupos.

NonMatchedMembers Group (Grupo)

Contém referências a membros em que nenhuma correspondência foi encontrada ou várias correspondências foram identificadas.

ConsentConstrainedMembers Group (Grupo)

Contém referências de pacientes para todos os membros combinados com sucesso, onde restrições de consentimento impedem o compartilhamento de dados. Um recurso de consentimento é considerado restrito quando as duas condições a seguir estão presentes:

  • O URI da política termina em #sensitive — Esse é o sinal mais claro e direto. O pagador responsável pelo envio está explicitamente dizendo: “Os dados deste membro são confidenciais — manuseie-os com cuidado”.

    "policy": [{ "uri": "...hrex-consent.html#sensitive" }]
  • O tipo de provisão de nível superior é deny — O membro recusou amplamente o compartilhamento de dados.

    "provision": { "type": "deny" }

Integração com $ davinci-data-export

O recurso de MatchedMembers grupo retornado por $bulk-member-match pode ser usado diretamente com a $davinci-data-export operação para recuperar dados de membros em massa:

POST [base]/Group/{matched-group-id}/$davinci-data-export GET [base]/Group/{matched-group-id}

Essa integração permite fluxos de trabalho eficientes em que você primeiro identifica os membros correspondentes em massa e depois exporta seus registros de saúde completos usando o recurso de grupo resultante.

Características de desempenho

A $bulk-member-match operação foi projetada para processamento de alto volume e é executada de forma assíncrona:

  • Concorrência: máximo de 5 operações simultâneas por armazenamento de dados.

  • Escalabilidade: lida com até 500 membros por solicitação (limite de carga útil de 5 MB).

  • Operações paralelas: Compatível com operações simultâneas de importação, exportação ou exclusão em massa.

Autorização

A API usa SMART no protocolo de autorização FHIR com os seguintes escopos obrigatórios:

  • system/Patient.read— Necessário para pesquisar e combinar os recursos do paciente.

  • system/Coverage.read— Necessário para validar as informações de cobertura.

  • system/Group.write— Necessário para criar recursos do Grupo de resultados.

  • system/Organization.read— Condicional, obrigatório se a cobertura fizer referência a organizações.

  • system/Practitioner.read— Condicional, exigido se a cobertura fizer referência a profissionais.

  • system/PractitionerRole.read— Condicional, exigido se a cobertura fizer referência às funções dos profissionais.

  • system/Consent.write— Condicional, exigido se os recursos de consentimento forem fornecidos.

A operação também oferece suporte à autorização AWS do IAM Signature Version 4 (SigV4) para acesso programático.

Tratamento de erros

A operação trata das seguintes condições de erro:

  • 400 Solicitação inválida: formato de solicitação inválido, parâmetros obrigatórios ausentes ou a carga excede os limites de tamanho (500 membros ou 5 MB).

  • 422 Entidade não processável: erros de processamento durante a execução do trabalho.

  • Erros individuais de membros: quando um membro específico não consegue processar, a operação continua com os membros restantes e inclui detalhes do erro no NonMatchedMembers Grupo com códigos de motivo apropriados. Por exemplo, um MemberBundle paciente sem o birthDate parâmetro retornará o seguinte erro:

    "errors": [ { "memberIndex": 1, "jsonBlob": { "resourceType": "OperationOutcome", "issue": [ { "severity": "error", "code": "invalid", "diagnostics": "MemberPatient.birthDate is required" } ], "statusCode": 400 } } ]

Os detalhes do erro estão disponíveis por meio do endpoint da pesquisa de status e incluem:

  • numberOfMembersWithCustomerError: Contagem de membros com erros de validação ou entrada.

  • numberOfMembersWithServerError: contagem de membros com erros de processamento no servidor.