Visão geral do modelo de dados
O modelo de dados para controle de acesso é representado por recursos de consentimento. Eles definem as regras aplicáveis e a quais dados elas se aplicam.
Consentimento do FHIR
As regras de acesso são expressas nos recursos de consentimento do FHIR. O consentimento do FHIR é um tipo de recurso do FHIR que captura as escolhas de um consumidor de saúde. Ele permite ou nega que um conjunto de atores realizem ações que afetam o consumidor para um propósito específico em um ambiente especificado por um período. Por exemplo, um consumidor pode ser um paciente de saúde, qualquer pessoa que atue em nome de um paciente de saúde ou outra pessoa que celebra um contrato de consentimento.
As ações registradas em um consentimento do FHIR podem ser amplas e lidar com mais do que apenas os dados do registro de saúde eletrônico (EHR, na sigla em inglês) do consumidor. No entanto, para fins de consentimento na API Cloud Healthcare, o foco está nas ações relacionadas ao acesso a dados, e a aplicação dessas ações é limitada à leitura de dados do FHIR de um armazenamento do FHIR.
Um recurso de consentimento tem um status que indica o estado atual do consentimento. Embora um armazenamento FHIR possa conter muitos consentimentos em estados diferentes, a API Cloud Healthcare só aplica consentimentos que estão no estado ativo. Os consentimentos em qualquer outro estado não têm efeito na aplicação. Se o consentimento for dado em nome de um paciente, ele será registrado como concedido por um artista.
Tipo de política
A API Cloud Healthcare oferece suporte aos seguintes tipos de política de consentimento:
Consentimento do paciente: é associado a um paciente usando
Consent.patient
(STU3, R4) e vincula tantos dados quantos forem definidos pelo compartimento do paciente (STU3, R4).Política de administrador: não está associada a nenhum paciente e precisa ter um URL de extensão
https://g.co/fhir/medicalrecords/ConsentAdminPolicy
. Esse tipo de política pode ser vinculado a um subconjunto ou a todos os recursos na loja especificados pelos critérios de recursos. A política de administrador define a política padrão para todos os recursos de vinculação na loja.Política de cascata do administrador: um tipo de política de administrador que exige o URL da extensão
https://g.co/fhir/medicalrecords/CascadingPolicy
e o URL da extensão da política do administrador. É possível vincular esse tipo de política a um compartimento de recursos que correspondem aos critérios de recurso. Tem as seguintes limitações:- Suporte apenas para paciente (STU3, R4) ou encontro (STU3, R4) como base do compartimento.
- O armazenamento FHIR em que a política é aplicada precisa ter
disableReferentialIntegrity
definido comofalse
.
É possível combinar tipos de políticas no mesmo nível de recurso para permitir ou negar o acesso a um recurso. Se o consentimento de um paciente estiver ausente, a política de administrador poderá aprovar o acesso a um recurso.
Diretiva de consentimento
As diretivas de consentimento são instruções codificadas em um consentimento do FHIR que permite ou nega o acesso a dados a uma entidade autorizada, como um beneficiário ou um acessor. Um único consentimento do FHIR pode codificar várias diretivas de consentimento. Cada diretiva fornece o seguinte:
Tipo de aplicação: uma instrução
permit
oudeny
.Ação: as permissões cobertas por essa diretiva. Somente
access
é aceito para fornecer acesso somente leitura.Critérios de acionador: um conjunto de atributos que identificam o solicitante da API coberto pela diretiva.
Critérios de recursos: um conjunto de atributos que identificam os recursos cobertos pela diretiva.
Critérios de acessório
A API Cloud Healthcare oferece suporte a três propriedades de um acionador para uso em uma diretiva de consentimento e para corresponder a um acionador que faz uma solicitação de acesso a dados. É necessário ter uma correspondência exata que diferencia maiúsculas de minúsculas para que uma diretiva seja aplicada ao acessório como parte da determinação de acesso oferecida pelo servidor FHIR.
Essas propriedades são codificadas da seguinte maneira:
Ator: representa um indivíduo, grupo ou papel de acesso que identifica o acessório ou uma característica dele.
Finalidade: representa a intenção de uso dos dados.
Ambiente: representa um identificador abstrato que descreve o ambiente ou as condições em que o acessório está agindo.
Por exemplo, um acessório pode ser representado pelas seguintes propriedades:
Agente:
Practitioner/123
Finalidade:
ETREAT
ou acesso para fins de tratamento de emergênciaAmbiente:
Application/abc
Nesse exemplo, essas propriedades representam um médico que está acessando dados ao
realizar um tratamento de emergência usando um aplicativo de software chamado abc
.
provision.actor
e
provision.purpose
são definidos como parte do padrão FHIR, enquanto o ambiente é
https://g.co/fhir/medicalrecords/Environment
. Esse link não pode ser
resolvido.
Todas as diretivas de consentimento precisam especificar um actor
para ser aplicado, mas não precisam
sempre especificar um purpose
ou um environment
. Por exemplo, se nenhuma environment
for especificada na diretiva de consentimento, ela vai corresponder a qualquer
environment
que não esteja coberto por outras diretivas de consentimento.
Critérios de recursos
A API Cloud Healthcare oferece suporte aos seguintes elementos como parte do recurso de consentimento:
Tipo de recurso (STU3, R4): representa o tipo ao qual a política de consentimento é vinculada, por exemplo,
Encounter
,Observation
ouImmunization
.ID do recurso (STU3, R4): representa o ID ao qual a política de consentimento é vinculada.
Fonte de dados: representa a origem do recurso conforme identificado pelo recurso
meta.source
(disponível apenas no R4).Tag de dados: representa o rótulo personalizado do recurso, conforme descrito no
meta.tag
do recurso (STU3, R4).Rótulo de segurança: representa rótulos de segurança que definem os recursos afetados como identificados no campo
meta.security
(STU3, R4). Os seguintes sistemas de código são aceitos:Confidencialidade: valores hierárquicos classificados de não restrito a mais restrito:
U
,L
,M
,N
,R
,V
. Se um consentimento permitir um rótulo de segurança deR
, ele será aplicado a todos os recursos rotulados comoR
ou inferior. Se um consentimento negar um rótulo de segurançaR
, ele será aplicado a todos os recursos que sejam pelo menos tão sensíveis quantoR
.ActCode: string de correspondência exata no código de segurança.
Fluxo de trabalho de acesso
Esta figura ilustra a jornada completa de uma solicitação para uma loja com controle de acesso do FHIR. Um token externo com o escopo de consentimento (à esquerda) é usado pelo aplicativo (#3) ao fazer uma solicitação para a loja FHIR com o controle de acesso ativado (à direita).
Escopo do consentimento
Ao fazer uma solicitação de acesso a dados, um acessório opera em um determinado
escopo de consentimento que representa as propriedades actor
, purpose
e environment
relacionadas a qualquer solicitação HTTP do FHIR. Os valores dessas propriedades
precisam corresponder aos fornecidos em um consentimento, com distinção entre maiúsculas e minúsculas, para
afetar a determinação de acesso da aplicação.
Um acessório pode ter vários identificadores actor
relevantes para fazer
uma determinação de acesso. Da mesma forma, pode haver várias purposes
ou
environments
relevantes em um contexto de consentimento específico. Portanto,
todas as propriedades de acessório relevantes precisam ser fornecidas como parte de uma solicitação HTTP
FHIR para representar corretamente esse acessório para fins de consentimento.
Por exemplo, o escopo de consentimento para uma determinada solicitação de dados pode ser o seguinte:
actor/Practitioner/444 actor/Group/999 purp/v3/TREAT purp/v3/ETREAT env/App/abc
Isso representa uma enfermeira ou um médico conhecido como profissional 444
, que é membro
do grupo 999
, que representa profissionais de um departamento em um
hospital específico. O profissional está lá para fornecer tratamento regular, mas
também pode lidar com tratamento de emergência como parte dessas ações. O
profissional está usando um aplicativo de software chamado abc
.
O escopo de consentimento é fornecido como um Escopo de consentimento de solicitação como parte da solicitação de dados de um acessório.
Solicitar escopo de consentimento
As solicitações FHIR usam cabeçalhos de solicitação HTTP FHIR para receber o escopo de consentimento do
acessor. Esse escopo de consentimento contém um conjunto de valores actor
, purpose
e
environment
para refletir a identidade atual do acessório, as qualificações,
a intenção de uso e as restrições ambientais em que o acessório opera.
Pode haver mais de uma dessas propriedades que representam o
escopo de consentimento de um accessor a qualquer momento.
As entradas de escopo de consentimento são definidas da seguinte maneira:
actor/{type}/{ID}
: uma propriedadeactor
em que o recursotype
é fornecido com oID
. Exemplos detype
incluem:Practitioner
Group
Patient
Por exemplo, se uma loja do formato
projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID/fhirStores/STORE_ID
chamar a API, uma referência local a um atorPractitioner/123
será resolvida comoprojects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID/fhirStores/STORE_ID/fhir/Practitioner/123
.purp/v3/{value}
: uma propriedadepurpose
em quevalue
é membro do conjunto de valores FHIR Purpose of Use (v3
) ou da extensão dele. Exemplos devalue
incluem:TREAT
ETREAT
HRESCH
env/{type}/{value}
: uma propriedadeenvironment
em quetype
evalue
são strings personalizadas sem taxonomia predefinida. Exemplos detype
evalue
incluem:App/my_app_1
Net/VPN
Além disso, os cabeçalhos de solicitação HTTP do FHIR também podem receber escopos especiais, como
btg
e bypass
, que são definidos da seguinte maneira:
btg
: o "break the glass" (ou BTG, na sigla em inglês) permite que você, como usuário humano, pule as verificações de consentimento em caso de emergências. Ele deve ser usado apenas em emergências e está sujeito a uma análise pós-auditoria. Como resultado,btg
exige pelo menos umactor
.bypass
: permite que usuários confiáveis (como um administrador) ou aplicativos confiáveis (como um pipeline de treinamento de ML) operem na loja FHIR sem autorização de consentimento. Portanto,bypass
requer pelo menos umactor
e umenv
.
Aplicação e determinação do acesso
Em um ambiente de saúde complexo, em que várias políticas e consentimentos coexistem, aplicar o acesso e determinar as permissões de acesso pode ser uma tarefa assustadora. Várias partes interessadas podem ter expectativas e requisitos diferentes em relação ao uso e à divulgação das informações do paciente. Para navegar nessa paisagem complexa, é necessário entender claramente como o acesso é aplicado e a lógica subjacente que governa a determinação do acesso.
Política de consentimento agregado
Um consumidor de cuidados de saúde, como um paciente ou um administrador, pode ter várias
diretivas de consentimento em um único recurso de consentimento. Os recursos de consentimento
podem conter uma combinação de diretivas
provision.type
permit
e deny
. Por padrão, um usuário pode ter qualquer número de recursos de consentimento, mas até
200 active
são aplicados por vez. Consulte
Restrições e limitações para mais detalhes.
Todas as diretivas de consentimento são extraídas dos recursos de consentimento active
de um determinado usuário para criar um conjunto de regras de consentimento agregadas.
Propriedades da diretiva de consentimento
A aplicação do consentimento é limitada a, no máximo, um propósito e a, no máximo, um ambiente por entrada de disposição.
As regras a seguir descrevem os princípios para o controle de acesso conjunto de consentimento do paciente, política de administrador e política em cascata do administrador:
Por padrão, o acesso a todos os recursos é negado se não houver uma diretiva correspondente.
Se o recurso solicitado não existir, apenas o tipo e o ID do recurso serão identificáveis. Todos os outros critérios de recurso e o proprietário do recurso são desconhecidos. A regra a seguir se aplica na ordem de listagem:
Se o tipo de recurso pertencer ao compartimento do paciente ou ao compartimento de atendimento, o acesso será negado.
Se esse não for seu caso, faça o seguinte:
Se houver uma política de administrador negando os critérios de acesso, independentemente dos outros critérios de recurso, o acesso será negado.
Se houver uma política de administrador que permita os critérios de acesso para os critérios de recurso identificável (ou seja, tipo e ID do recurso), um erro "recurso não encontrado" será retornado.
Em todos os outros casos, o acesso é negado.
As políticas de administrador são as políticas padrão usadas para corresponder a recursos na loja.
Os recursos que não pertencem a nenhum paciente são determinados apenas pelas políticas de administrador.
Os recursos que estão no compartimento do paciente (STU3, R4) ou no compartimento de encontro (STU3, R4) precisam de pelo menos uma diretiva de consentimento de permissão por política de administrador ou do paciente ou política de administrador em cascata e nenhuma diretiva de consentimento de negação da política de administrador e do paciente e da política de administrador em cascata. Essa condição é necessária para que todos os pacientes nomeados nos recursos sejam acessados pelo solicitante.
- Alguns recursos podem ser usados por vários participantes. Por exemplo,
Agendamento mostra uma lista de
participantes que podem ser pacientes. Todos os pacientes nomeados nesses
recursos precisam permitir o acesso ao acessório usando diretrizes de consentimento.
Caso contrário, os recursos não serão retornados. Se um recurso tiver uma permissão de uma política de hierarquia de encontros, em que o encontro referencia um paciente pelo campo
subject
(STU3, R4), o recurso será considerado permitido pelo paciente.
- Alguns recursos podem ser usados por vários participantes. Por exemplo,
Agendamento mostra uma lista de
participantes que podem ser pacientes. Todos os pacientes nomeados nesses
recursos precisam permitir o acesso ao acessório usando diretrizes de consentimento.
Caso contrário, os recursos não serão retornados. Se um recurso tiver uma permissão de uma política de hierarquia de encontros, em que o encontro referencia um paciente pelo campo
As regras descritas são resumidas pelo seguinte pseudocódigo:
Controle de acesso conjunto
ifresource
does not exist ifresource
is a patient-compartment or encounter-compartment resource: return "deny" else: if there is any admin policy denies access foraccessor criteria
regardless ofresource criteria
other than resource type and resource ID: return "deny" else if there is any admin policy permits access foraccessor criteria
based on the identifiableresource criteria
: return "resource not found" else: return "deny" else: letpatients
= list of patient references named in the patient compartment eligible fields of the requestedresource
if there is any matching deny from eitherpatients
's consents or admin policy or admin cascading policy: return "deny" if there is matching admin policy permits access: return "permit" if allpatients
have matching patient consents or admin cascading consent that permit access or are subject of encounters which permit the access through encounter cascading policy: return "permit" else: return "deny" end
O armazenamento FHIR verifica a permissão de consentimento no nível de cada recurso. Qualquer
referência
em um recurso não é resolvida e cascadeada para fins de verificação de acesso de consentimento.
Por exemplo, considere um paciente identificado por Patient/f001
que permite que um
profissional de saúde acesse todo o recurso MedicationRequest
, mas não o
recurso Patient/f001
devido à privacidade do paciente. Nesse cenário, o
profissional pode ver todo o recurso MedicationRequest
, que inclui um
campo subject
que se refere ao recurso Patient/f001
, mas não pode acessar o
conteúdo do recurso Patient/f001
, mesmo, por exemplo, ao realizar
uma pesquisa FHIR usando _include
.
Resolução de conflitos
É possível que haja conflitos entre várias diretivas permit
e deny
. Se duas
diretivas conflitantes corresponderem a um recurso, o conflito será resolvido usando o
modelo deny
vence permit
.
Apenas os consentimentos active
são incluídos para a aplicação do consentimento.
Lógica de aplicação do acesso a recursos
Ao fazer uma solicitação com consentimento para um armazenamento FHIR, o controle de acesso ocorre na seguinte ordem:
A API Cloud Healthcare verifica as permissões na conta de serviço do Google Cloud (ou no principal) configurada no proxy. Se a conta de serviço tiver as permissões corretas do IAM para executar o método FHIR solicitado na loja FHIR, a solicitação vai prosseguir.
Se a aplicação de consentimento estiver ativada na configuração do armazenamento FHIR e os cabeçalhos HTTP de consentimento estiverem presentes, a API Cloud Healthcare vai aplicar as políticas de acesso de consentimento para recursos de compartimento de pacientes. A aplicação das políticas de acesso de consentimento é baseada nos escopos de consentimento fornecidos na solicitação, de acordo com as diretivas de consentimento capturadas pela execução mais recente de
ApplyConsents
eApplyAdminConsents
.
As regras a seguir se aplicam ao fazer uma solicitação com consentimento para um armazenamento FHIR:
Forneça pelo menos um escopo de consentimento
actor
relevante para as ações de consentimento realizadas.Forneça outros escopos
purpose
eenvironment
relevantes para as ações de consentimento realizadas.Se o número de entradas de escopo de consentimento exceder os limites compatíveis, um erro será retornado.
Se você chamar um método que acesse vários recursos (por exemplo, os métodos
fhir.Patient-everything
,fhir.Encounter-everything
,fhir.executeBundle
oufhir.search
), a aplicação do consentimento se aplica a cada recurso individual. No entanto, há uma diferença sutil entre esses métodos de acesso a vários recursos:fhir.executeBundle
lendo vários recursos recebe "Acesso de consentimento negado ou o recurso que está sendo acessado não existe" para recursos individuais sem permissões de consentimento (consulte exemplos no Receber recursos FHIR com escopo de consentimento).fhir.search
pula recursos sem permissões de consentimento e não retorna o erro de acesso negado de consentimento, mesmo para pesquisar por_id
. Consulte exemplos no Pesquisar recursos FHIR com escopo de consentimento.fhir.Patient-everything
efhir.Encounter-everything
se comportam de maneira semelhante afhir.search
, exceto que eles retornam "O consentimento de acesso foi negado ou o recurso que está sendo acessado não existe" se o autor da chamada não tiver permissão de consentimento no recurso de paciente ou de encontro solicitado, respectivamente.
Determinação de acesso com consentimento
Uma diretiva de consentimento tem no máximo um actor
, no máximo um purpose
e no máximo
um environment
, enquanto o escopo de consentimento pode ter vários de cada um. Algumas diretivas de
consentimento não especificam as três propriedades de acessório. Nesse caso, qualquer
valor de propriedade do escopo de consentimento pode corresponder, dependendo das
regras de resolução de conflitos. Como resultado, um escopo de consentimento
pode corresponder a mais de uma diretiva de consentimento.
Se o escopo de consentimento de uma solicitação incluir duas ou mais entradas do mesmo
tipo de escopo de consentimento (actor
, purpose
ou environment
), o escopo
de consentimento provavelmente corresponde a várias diretrizes de consentimento. Algumas diretrizes de consentimento não especificam um purpose
ou um environment
. Portanto, o escopo do consentimento também precisa ser
correspondido a diretivas de consentimento que não especificam esses tipos de escopo.
Por exemplo, definir o escopo de consentimento como actor/Practitioner/123
actor/Group/999 purp/v3/TREAT env/App/abc
corresponde a qualquer uma das
diretivas de consentimento permit
ou deny
a seguir:
actor/Practitioner/123 purp/v3/TREAT env/App/abc
actor/Practitioner/123 purp/v3/TREAT
actor/Practitioner/123 env/App/abc
actor/Practitioner/123
actor/Group/999 purp/v3/TREAT env/App/abc
actor/Group/999 purp/v3/TREAT
actor/Group/999 env/App/abc
actor/Group/999