Guia de Implementação da SES GO - Segurança
0.0.2 - draft
Guia de Implementação da SES GO - Segurança - Local Development build (v0.0.2) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Abaixo segue uma apreciação das relações que podem ser estabelecidas entre instâncias de recursos FHIR, em particular, por meio do tipo de dados Reference. Na sequência são fornecidas as necessidades a serem atendidas pela estratégia de assinatura digital e, por fim, as restrições impostas sobre o tipo de dados Reference para atender tais necessidades.
Convém reiterar que o contexto contemplado é o da transferência de informação em saúde assinada digitalmente. Há várias questões envolvidas. Por exemplo, o excerto da especificação do padrão FHIR, Copiando recursos e atribuindo novos IDs, esclarece a necessidade de atualizar referências usadas por instâncias transferidas:
"Quando recursos são trocados entre sistemas, pode ser necessário atribuir novos IDs lógicos a eles. Quando um recurso recebe um novo ID lógico, nada no recurso é alterado além do Resource.id, mas qualquer referência que aponte para esse recurso precisa ser atualizada. A necessidade de novos IDs depende do contexto, assim como a forma como as referências aos recursos são atualizadas."
Isso motiva uma compreensão ampla do emprego de referências, o que é feito abaixo, seguido de necessidades definidas para o contexto em questão e as repercussões destas necessidades, registradas na forma de restrições.
Esta seção investiga as relações estabelecidas entre instâncias, sem perda de generalidade, pela relação entre uma instância de Observation e a instância de Patient, respectivamente, uma observação realizada sobre um paciente. Quaisquer outros recursos poderiam ser empregados. Tanto que o foco está concentrado no tipo de dados Reference, o tipo por meio do qual estas ligações entre instâncias pode ser realizado.
Considere abaixo a instância do recurso Observation. O elemento subject
do tipo Reference
liga esta instância a um
paciente que possui um identificador de negócio com o valor x
. Neste caso, o tipo Resource
não identifica necessariamente uma instância de Patient. Em vez disso,
fornece um identificador de negócio para uma entidade, neste caso, um paciente.
{
"resourceType" : "Observation",
"status" : "final",
"code" : {
"text" : "massa"
},
"subject" : {
"identifier" : {
"value" : "x"
}
}
}
Esta instância é autocontida. Observe que há uma referência lógica por
meio da propriedade identifier
de Reference.
A variante abaixo também é autocontida e, novamente, a instância de Patient
correspondente ao paciente sobre o qual
a observação é feita não é indicada diretamente. O que é fornecido é um identificador de negócio (CPF) que identifica o paciente.
{
"resourceType" : "Observation",
"status" : "final",
"code" : {
"text" : "massa"
},
"subject" : {
"identifier" : {
"system" : "https://saude.br/sid/cpf",
"value" : "123.456.789-00"
}
}
}
O cenário abaixo também ilustra uma instância autocontida. À semelhança do caso anterior, nenhuma instância de Patient é diretamente indicada, apenas um simples texto é fornecido. Em tempo, a interpretação do contexto clínico das informações e das informações propriamente ditas está além do escopo de interesse.
{
"resourceType" : "Observation",
"status" : "final",
"code" : {
"text" : "massa"
},
"subject" : {
"display" : "Seu José da padaria"
}
}
Na variante abaixo, também autocontida, a instância de
Observation indica diretamente a instância de Patient
presente internamente no elemento contained
.
{
"resourceType": "Observation",
"contained": [
{
"resourceType": "Patient",
"id": "1",
"name": [
{
"text": "José da Silva"
}
]
}
],
"status": "final",
"code": {
"text": "massa"
},
"subject": {
"reference": "#1"
}
}
Os cenários acima ilustram instâncias que não referenciarem diretamente uma instância externa. Por outro lado, a instância abaixo faz referência a uma instância de Patient por uma URL absoluta (a URL de localização da instância).
{
"resourceType" : "Observation",
"status" : "final",
"code" : {
"text" : "massa"
},
"subject" : {
"reference" : "http://algum.server/Patient/x"
}
}
A instância acima usa uma URL absoluta, enquanto aquela abaixo, usa uma URL relativa. Ambas são referências para instâncias externas.
{
"resourceType": "Observation",
"status": "final",
"code": {
"text": "massa"
},
"subject": {
"reference": "Patient/x"
}
}
Ainda é possível empregar o elemento Reference.reference
, no contexto
de um Bundle, para indicar uma instância externa à instância de Observation,
conforme abaixo.
{
"resourceType": "Observation",
"status": "final",
"code": {
"text": "massa"
},
"subject": {
"reference": "urn:uuid:550e8400-e29b-41d4-a716-446655440000"
}
}
Estas possibilidades de uso do tipo de dados Reference, ilustradas acima, são sumarizadas na tabela abaixo.
Campo | Tipo de Referência | Descrição |
---|---|---|
identifier |
Referência lógica | Identifica indiretamente a instância referenciada por meio de um identificador de negócio. Observe que não usa a localização absoluta nem relativa da instância. |
reference (Patient/x ) |
Referência relativa | Referência direta para uma instância no servidor FHIR em questão. |
reference (http://example.com/fhir/Patient/x ) |
Referência absoluta | Referência completa incluindo a URL base do servidor FHIR onde a instância está disponível. |
reference (urn:uuid:550e8400-e29b-41d4-a716-446655440000 ) |
URI lógica | Pode conter identificadores como UUIDs ou OIDs para referência independente de um servidor FHIR específico, mas contida em um Bundle. |
display |
Apenas exibição | Descrição cujo propósito é identificar o que está sendo referenciado. |
type |
Tipo esperado | Indica explicitamente o tipo do recurso esperado na referência, auxiliando na validação e interoperabilidade. |
N1 Quando uma instância aponta para um conteúdo externo, a informação em saúde registrada depende do conteúdo referenciado (ou então a referência poderia ser removida). Isso significa que, ao assinar a instância, o signatário certifica apenas a referência, e não a integridade completa da informação. Dessa forma, mesmo que o conteúdo referenciado seja alterado, a assinatura da instância continua válida para o receptor, pois a referência não foi alterada. Tendo em vista a indisponibilidade, no momento, de um serviço que assegure o conteúdo indicado por uma referência, essa situação não é aceitável, e a estratégia de assinatura deve abranger apenas instâncias autocontidas, ou seja, aquelas que não possuem referências a conteúdos externos não assinados.
N2 A informação em saúde assinada deve ser transferida por meio de um Bundle, cuja preservação (manutenção) não é obrigatória para garantir a validação da assinatura digital. Isso significa que, ao receber o Bundle, suas instâncias podem ser extraídas e armazenadas em outros repositórios sem comprometer a validade da assinatura.
N3 A estratégia deve adotar padrões técnicos amplamente reconhecidos e considerados sólidos para a definição e validação da assinatura digital, alinhando-se às diretrizes do FHIR e a outras recomendações aplicáveis.
As necessidades acima impõem as seguntes restrições a serem observadas pelo presente guia:
Provenance.signature
, além de uma referência para cada instância do conjunto assinado. Tais referências serão registradas no elemento Provenance.target
.Reference.identifier
é utilizado, então Reference.reference
não poderá ser utilizado e vice-versa. Ou seja, o uso de um inibe o uso do outro. O uso de Reference.identifier
é o método recomendado para identificar conceitos de negócio, sempre que o cenário permitir.Reference.reference
é fornecido, ele deve obrigatoriamente ser um UUID no formato urn:uuid:[uuid]
, onde [uuid]
é um UUID válido, por exemplo, urn:uuid:550e8400-e29b-41d4-a716-446655440003
.Reference.reference
, contido no conjunto assinado e na instância de Provenance, deve existir uma entrada no Bundle cujo fullUrl possui o mesmo valor.