Pular para o conteúdo principal

Modelo de Dados FHIR para Integração com HealthPass (Alpha)

Este documento descreve os recursos FHIR, campos e estruturas de dados necessários para integração de sistemas EMR com o HealthPass. Um sistema EMR deve ser capaz de fornecer e receber esses recursos FHIR através de uma API FHIR R4 padrão.

Versão Alpha

Esta API ainda está em fase alpha e sujeita a alterações. Funcionalidades, endpoints e estruturas de dados podem ser modificados ou removidos em versões futuras.


Índice

  1. Visão Geral
  2. Recurso Patient
  3. Recurso Observation
  4. Recurso Condition
  5. Recurso MedicationRequest
  6. Recurso Appointment
  7. Recurso Practitioner
  8. Recurso RelatedPerson
  9. Recurso DiagnosticReport
  10. Referência de Sistemas de Codificação
  11. Operações de API Necessárias

Visão Geral

O HealthPass utiliza recursos FHIR R4 para trocar dados de saúde de pacientes. A integração requer:

  • Capacidades de Leitura/Busca para recuperar registros de pacientes
  • Capacidades de Criação/Atualização para registrar novos dados clínicos
  • Parâmetros de busca FHIR padrão para filtrar resultados

Tipos de Backend Suportados

BackendAutenticação
Google Healthcare APIOAuth 2.0 com conta de serviço
Servidor FHIR PadrãoBearer token ou headers personalizados
MedplumOAuth 2.0

Recurso Patient

O recurso Patient representa pacientes individuais no sistema.

Campos Obrigatórios

CampoTipoDescrição
resourceTypestringDeve ser "Patient"
activebooleanSe o registro do paciente está ativo
nameHumanName[]Nome(s) do paciente
telecomContactPoint[]Informações de contato (telefone, email)

Campos Opcionais

CampoTipoDescrição
idstringID do recurso FHIR
identifierIdentifier[]Identificadores externos (ID nacional, MRN)
birthDatedateData de nascimento (AAAA-MM-DD)
gendercodemale | female | other | unknown
addressAddress[]Endereços do paciente

Exemplo de Recurso Patient

{
"resourceType": "Patient",
"id": "patient-123",
"active": true,
"identifier": [
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "NNZAF"
}
]
},
"system": "https://www.gov.za/south-african-id-number",
"value": "9001015009087"
}
],
"name": [
{
"use": "official",
"family": "Silva",
"given": ["João"]
}
],
"telecom": [
{
"system": "phone",
"value": "+27821234567",
"use": "mobile"
}
],
"gender": "male",
"birthDate": "1990-01-01",
"address": [
{
"use": "home",
"line": ["Rua Principal, 123"],
"city": "Cidade do Cabo",
"state": "Cabo Ocidental",
"postalCode": "8001",
"country": "ZA"
}
]
}

Parâmetros de Busca

ParâmetroTipoDescrição
identifiertokenBuscar por identificador do paciente
namestringBuscar por nome do paciente
telecomtokenBuscar por número de telefone (usado para deduplicação)

Recurso Observation

Observações capturam medições clínicas, sinais vitais, sintomas e dados de avaliação.

Campos Obrigatórios

CampoTipoDescrição
resourceTypestringDeve ser "Observation"
statuscodefinal | amended | corrected | cancelled
codeCodeableConceptO que foi observado (código LOINC ou SNOMED)
subjectReference(Patient)Referência do paciente
effectiveDateTimedateTimeQuando a observação foi feita

Campos de Valor (um obrigatório)

CampoTipoCaso de Uso
valueQuantityQuantityMedições numéricas (sinais vitais, laboratório)
valueStringstringDescrições em texto
valueBooleanbooleanObservações Sim/Não
valueCodeableConceptCodeableConceptValores codificados
componentBackboneElement[]Observações em painel (ex.: pressão arterial)

Categorias de Observação

Sinais Vitais (LOINC)

TemplateCódigo LOINCDescriçãoUnidade
weight29463-7Peso corporalkg
height8302-2Altura corporalcm
bmi39156-5Índice de massa corporalkg/m2
blood_pressure_systolic8480-6Pressão arterial sistólicammHg
blood_pressure_diastolic8462-4Pressão arterial diastólicammHg
blood_pressure_panel85354-9Painel de pressão arterial(componente)
heart_rate8867-4Frequência cardíacabatimentos/min
temperature8310-5Temperatura corporalCel
respiratory_rate9279-1Frequência respiratória/min

Laboratório (LOINC)

TemplateCódigo LOINCDescriçãoUnidade
glucose_glucometer33747-0Glicose [Massa/volume] em sangue capilar por glicosímetromg/dL
hba1c4548-4Hemoglobina A1c/Hemoglobina total no sangue%

Avaliação (LOINC)

TemplateCódigo LOINCDescriçãoTipo de Valor
sex_at_birth76689-9Sexo atribuído ao nascerCodeableConcept
gestational_dm66157-9Histórico de diabetes gestacionalboolean
family_hx_diabetes97063-2Histórico familiar de diabetesboolean
high_blood_pressure_history54686-6Histórico de pressão altaboolean
race_ethnicity32624-7Raçastring
diabetes_risk_score94560-0Pontuação de risco de diabetesQuantity (pontos)
physically_active68516-4Fisicamente ativoboolean
diabetes_history44877-9Histórico de diabetesboolean
diabetes_duration77983-4Duração do diabetesQuantity (anos)
hypertension_history54686-6Histórico de hipertensãoboolean
hypertension_duration77984-2Duração da hipertensãoQuantity (anos)
current_symptoms75322-8Sintomasstring
current_medications10160-0Histórico de uso de medicamentosstring
selected_medication67540-8Medicamento selecionadostring
symptom_duration88878-4Duração dos sintomasQuantity (dias)
symptoms75322-8Queixasstring

Sintomas Respiratórios (SNOMED CT)

TemplateCódigo SNOMEDDescrição
cough49727002Tosse
productive_cough28743005Tosse produtiva
wheezing56018004Sibilância
chills43724002Calafrios
pleuritic_pain2237002Dor pleurítica
anosmia44169009Perda do olfato

Outros Sintomas (SNOMED CT)

TemplateCódigo SNOMEDDescrição
fatigue84229001Fadiga
myalgia68962001Dor muscular
headache25064002Dor de cabeça
sneezing76067001Espirros
sinus_pain5056003Dor sinusal
otalgia16001004Dor de ouvido
chest_pain29857009Dor no peito
rigor38880002Rigidez
nasal_congestion68235000Congestão nasal
fever386661006Febre
other_symptoms418799008Outro sintoma

Extensão de Método do Relator

Observações incluem um campo method indicando quem relatou os dados:

RelatorCódigo SNOMEDDescrição
self1156040003Auto-relatado
provider1156041004Relatado por profissional de saúde

Exemplo de Observation (Sinal Vital)

{
"resourceType": "Observation",
"status": "final",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "vital-signs",
"display": "Vital Signs"
}
]
}
],
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "8310-5",
"display": "Body temperature"
}
]
},
"subject": {
"reference": "Patient/patient-123"
},
"effectiveDateTime": "2024-01-15T10:30:00Z",
"valueQuantity": {
"value": 37.2,
"unit": "Cel",
"system": "http://unitsofmeasure.org",
"code": "Cel"
},
"method": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "1156040003",
"display": "Self reported"
}
]
}
}

Exemplo de Observation (Painel de Pressão Arterial)

{
"resourceType": "Observation",
"status": "final",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "vital-signs"
}
]
}
],
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "85354-9",
"display": "Blood pressure panel"
}
]
},
"subject": {
"reference": "Patient/patient-123"
},
"effectiveDateTime": "2024-01-15T10:30:00Z",
"component": [
{
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "8480-6",
"display": "Systolic blood pressure"
}
]
},
"valueQuantity": {
"value": 120,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
},
{
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "8462-4",
"display": "Diastolic blood pressure"
}
]
},
"valueQuantity": {
"value": 80,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
}
]
}

Parâmetros de Busca

ParâmetroTipoDescrição
patientreferenceFiltrar por paciente
codetokenFiltrar por código LOINC/SNOMED (separados por vírgula para múltiplos)
_sortstringOrdem de classificação (use -_lastUpdated para mais recente)
_countnumberMáximo de resultados a retornar

Recurso Condition

Condições representam diagnósticos e problemas de saúde do paciente.

Campos Obrigatórios

CampoTipoDescrição
resourceTypestringDeve ser "Condition"
clinicalStatusCodeableConceptactive | recurrence | relapse | inactive | remission | resolved
verificationStatusCodeableConceptunconfirmed | provisional | differential | confirmed | refuted | entered-in-error
codeCodeableConceptCódigo da condição (SNOMED + ICD-10)
subjectReference(Patient)Referência do paciente
recordedDatedateTimeQuando a condição foi documentada

Campos Opcionais

CampoTipoDescrição
onsetDateTimedateTimeQuando a condição começou
categoryCodeableConceptproblem-list-item | encounter-diagnosis

Templates de Condição

TemplateCódigo SNOMEDCódigo ICD-10Descrição
pneumonia233604007J18.9Pneumonia
covid19840539006U07.1COVID-19
asthma195967001J45.909Asma
bronchitis10509002J20.9Bronquite aguda
hypertension38341003I10Distúrbio hipertensivo
diabetes_type244054006E11.9Diabetes mellitus tipo 2
diabetes_type146635009E10.9Diabetes mellitus tipo 1
influenza6142004J11.1Gripe
strep_throat43878008J02.0Faringite estreptocócica
depression35489007F32.9Transtorno depressivo maior
anxiety48694002F41.9Transtorno de ansiedade
fever386661006R50.9Febre
headache25064002R51.9Dor de cabeça

Exemplo de Condition

{
"resourceType": "Condition",
"clinicalStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
"code": "active"
}
]
},
"verificationStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
"code": "confirmed"
}
]
},
"code": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "233604007",
"display": "Pneumonia"
},
{
"system": "http://hl7.org/fhir/sid/icd-10-cm",
"code": "J18.9",
"display": "Pneumonia, unspecified organism"
}
]
},
"subject": {
"reference": "Patient/patient-123"
},
"recordedDate": "2024-01-15T10:30:00Z"
}

Parâmetros de Busca

ParâmetroTipoDescrição
patientreferenceFiltrar por paciente
clinical-statustokenFiltrar por status clínico
_sortstringOrdem de classificação
_countnumberMáximo de resultados

Recurso MedicationRequest

MedicationRequests representam prescrições e pedidos de medicamentos.

Campos Obrigatórios

CampoTipoDescrição
resourceTypestringDeve ser "MedicationRequest"
statuscodeactive | on-hold | cancelled | completed | entered-in-error | stopped | draft | unknown
intentcodeproposal | plan | order | original-order | reflex-order | filler-order | instance-order | option
medicationCodeableConceptCodeableConceptCódigo do medicamento (RxNorm)
subjectReference(Patient)Referência do paciente
authoredOndateTimeQuando a prescrição foi escrita

Campos Opcionais

CampoTipoDescrição
requesterReference(Practitioner)Profissional prescritor
dosageInstructionDosage[]Como o medicamento deve ser tomado

Templates de Medicamentos (RxNorm)

Antibióticos

TemplateCódigo RxNormDescrição
amoxicillin_500mg308182Amoxicilina 500 MG Cápsula Oral
amoxicillin_250mg308180Amoxicilina 250 MG Cápsula Oral
azithromycin_250mg308460Azitromicina 250 MG Comprimido Oral
ciprofloxacin_500mg309043Ciprofloxacino 500 MG Comprimido Oral

Medicamentos para Dor

TemplateCódigo RxNormDescrição
acetaminophen_500mg313782Paracetamol 500 MG Comprimido Oral
ibuprofen_600mg310965Ibuprofeno 600 MG Comprimido Oral
tramadol_50mg836395Cloridrato de Tramadol 50 MG Comprimido Oral

Cardiovascular

TemplateCódigo RxNormDescrição
lisinopril_10mg314076Lisinopril 10 MG Comprimido Oral
metoprolol_50mg866514Succinato de Metoprolol 50 MG Comprimido de Liberação Prolongada
atorvastatin_20mg617312Atorvastatina 20 MG Comprimido Oral

Diabetes

TemplateCódigo RxNormDescrição
metformin_500mg860975Cloridrato de Metformina 500 MG Comprimido Oral
insulin_glargine274783Insulina Glargina 100 UNT/ML Solução Injetável

Respiratório

TemplateCódigo RxNormDescrição
albuterol_inhaler329498Salbutamol 0.083 MG/ACTUAT Inalador de Dose Medida
prednisone_20mg312615Prednisona 20 MG Comprimido Oral

Saúde Mental

TemplateCódigo RxNormDescrição
sertraline_50mg312940Sertralina 50 MG Comprimido Oral
lorazepam_1mg197589Lorazepam 1 MG Comprimido Oral

Gastrointestinal

TemplateCódigo RxNormDescrição
omeprazole_20mg312681Omeprazol 20 MG Cápsula de Liberação Retardada
ondansetron_4mg312836Ondansetrona 4 MG Comprimido Oral

Alergia

TemplateCódigo RxNormDescrição
cetirizine_10mg1014678Cloridrato de Cetirizina 10 MG Comprimido Oral
diphenhydramine_25mg1014599Cloridrato de Difenidramina 25 MG Cápsula Oral

Exemplo de MedicationRequest

{
"resourceType": "MedicationRequest",
"status": "active",
"intent": "order",
"medicationCodeableConcept": {
"coding": [
{
"system": "http://www.nlm.nih.gov/research/umls/rxnorm",
"code": "308182",
"display": "Amoxicillin 500 MG Oral Capsule"
}
]
},
"subject": {
"reference": "Patient/patient-123"
},
"authoredOn": "2024-01-15T10:30:00Z",
"requester": {
"reference": "Practitioner/practitioner-456",
"display": "Dra. Maria Santos"
},
"dosageInstruction": [
{
"sequence": 1,
"text": "Tomar 1 cápsula (500mg) por via oral três vezes ao dia durante 7 dias",
"timing": {
"repeat": {
"frequency": 3,
"period": 1,
"periodUnit": "d",
"boundsDuration": {
"value": 7,
"unit": "days",
"system": "http://unitsofmeasure.org",
"code": "d"
}
}
},
"doseAndRate": [
{
"doseQuantity": {
"value": 500,
"unit": "mg",
"system": "http://unitsofmeasure.org",
"code": "mg"
}
}
]
}
]
}

Parâmetros de Busca

ParâmetroTipoDescrição
patientreferenceFiltrar por paciente
statustokenFiltrar por status
_sortstringOrdem de classificação
_countnumberMáximo de resultados

Recurso Appointment

Agendamentos representam consultas de saúde programadas.

Campos Obrigatórios

CampoTipoDescrição
resourceTypestringDeve ser "Appointment"
statuscodeproposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist
participantBackboneElement[]Participantes do agendamento
startinstantData/hora de início (ISO 8601)
endinstantData/hora de término (ISO 8601)

Campos Opcionais

CampoTipoDescrição
appointmentTypeCodeableConceptTipo de agendamento (ex.: CONSULT)
descriptionstringMotivo do agendamento
serviceTypeCodeableConcept[]Serviço sendo agendado

Exemplo de Appointment

{
"resourceType": "Appointment",
"status": "booked",
"appointmentType": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0276",
"code": "CONSULT",
"display": "Consultation"
}
]
},
"description": "Consulta de acompanhamento",
"start": "2024-01-20T09:00:00Z",
"end": "2024-01-20T09:30:00Z",
"participant": [
{
"actor": {
"reference": "Patient/patient-123",
"display": "João Silva"
},
"status": "accepted"
},
{
"actor": {
"reference": "Practitioner/practitioner-456",
"display": "Dra. Maria Santos"
},
"status": "accepted"
},
{
"actor": {
"reference": "Location/location-city-center",
"display": "Clínica Centro da Cidade"
},
"status": "accepted"
}
]
}

Parâmetros de Busca

ParâmetroTipoDescrição
patientreferenceFiltrar por paciente
statustokenFiltrar por status
datedateFiltrar por data
actorreferenceFiltrar por participante
_sortstringOrdem de classificação (use -start para mais recente)

Recurso Practitioner

Profissionais representam prestadores de serviços de saúde.

Campos Utilizados

CampoTipoDescrição
idstringID do Profissional
nameHumanName[]Nome do profissional
qualificationBackboneElement[]Especialidade/qualificações

Exemplo de Practitioner

{
"resourceType": "Practitioner",
"id": "practitioner-456",
"name": [
{
"family": "Santos",
"given": ["Maria"],
"prefix": ["Dra."]
}
],
"qualification": [
{
"code": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "394802001",
"display": "General medicine"
}
]
}
}
]
}

Parâmetros de Busca

ParâmetroTipoDescrição
name:containsstringBuscar por nome
specialty:textstringBuscar por especialidade
_countnumberMáximo de resultados
_sortstringOrdem de classificação (padrão: name)

Recurso RelatedPerson

RelatedPersons representam membros da família ou cuidadores vinculados a pacientes. O HealthPass utiliza um padrão de vinculação bidirecional que requer dois recursos RelatedPerson para representar completamente um relacionamento responsável-filho.

Padrão de Vinculação Bidirecional

Para permitir navegação em ambas as direções (responsável → filhos E filho → responsável), dois recursos RelatedPerson são criados para cada relacionamento:

┌─────────────────────┐                      ┌─────────────────────┐
│ Patient (Respons.) │ │ Patient (Filho) │
│ id: parent-123 │ │ id: child-456 │
└─────────────────────┘ └─────────────────────┘
│ │
│ RelatedPerson #1 │ RelatedPerson #2
│ (vinculado ao responsável) │ (vinculado ao filho)
▼ ▼
┌─────────────────────────────┐ ┌─────────────────────────────┐
│ RelatedPerson │ │ RelatedPerson │
│ patient: Patient/parent-123 │ │ patient: Patient/child-456 │
│ relationship: CHILD │ │ relationship: PRN (respons.)│
│ identifier: child-456 │ │ identifier: parent-123 │
└─────────────────────────────┘ └─────────────────────────────┘

Por Que Dois Recursos?

Caso de UsoConsulta de BuscaRelatedPerson Usado
Encontrar todos os filhos de um responsávelpatient=Patient/parent-123&relationship=CHILD#1 (vinculado ao responsável)
Encontrar o responsável de um filhopatient=Patient/child-456&relationship=PRN#2 (vinculado ao filho)

O campo identifier armazena o ID do outro paciente, permitindo que o sistema busque o recurso Patient relacionado após encontrar o RelatedPerson.

Campos Obrigatórios

CampoTipoDescrição
resourceTypestringDeve ser "RelatedPerson"
patientReference(Patient)O paciente ao qual este recurso está "vinculado" (âncora de busca)
relationshipCodeableConcept[]Tipo de relacionamento da perspectiva deste paciente

Campos Opcionais

CampoTipoDescrição
nameHumanName[]Nome da pessoa relacionada
identifierIdentifier[]Crítico: Armazena o ID do outro paciente para referência cruzada

Códigos de Relacionamento

CódigoSistemaDescriçãoUso
CHILDhttp://terminology.hl7.org/CodeSystem/v3-RoleCodeFilhoQuando vinculado ao responsável, aponta para o filho
PRNhttp://terminology.hl7.org/CodeSystem/v3-RoleCodeResponsávelQuando vinculado ao filho, aponta para o responsável

Sistema de Identificador

O identificador que armazena o ID do paciente vinculado usa:

CampoValor
systemhttp://example.org/fhir/related-person-patient
valueO ID do Paciente FHIR da pessoa vinculada

Exemplo: Relacionamento Completo Responsável-Filho

Dados dois pacientes:

  • Responsável: João Silva (Patient/parent-123)
  • Filho: João Junior Silva (Patient/child-456)

RelatedPerson #1: Vinculado ao Responsável (permite "encontrar meus filhos")

{
"resourceType": "RelatedPerson",
"patient": {
"reference": "Patient/parent-123",
"display": "João Silva"
},
"relationship": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode",
"code": "CHILD",
"display": "Child"
}
]
}
],
"name": [
{
"family": "Silva",
"given": ["João Junior"]
}
],
"identifier": [
{
"system": "http://example.org/fhir/related-person-patient",
"value": "child-456"
}
]
}

RelatedPerson #2: Vinculado ao Filho (permite "encontrar meu responsável")

{
"resourceType": "RelatedPerson",
"patient": {
"reference": "Patient/child-456",
"display": "João Junior Silva"
},
"relationship": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode",
"code": "PRN",
"display": "Parent"
}
]
}
],
"name": [
{
"family": "Silva",
"given": ["João"]
}
],
"identifier": [
{
"system": "http://example.org/fhir/related-person-patient",
"value": "parent-123"
}
]
}

Parâmetros de Busca

ParâmetroTipoDescrição
patientreferenceFiltrar pelo paciente ao qual este RelatedPerson está vinculado
relationshiptokenFiltrar por código de relacionamento (CHILD, PRN, etc.)
_countnumberMáximo de resultados

Operações de API

OperaçãoDescrição
get_children(patient_id)Busca patient=Patient/{id}&relationship=CHILD, extrai IDs dos filhos do identifier
get_parent(patient_id)Busca patient=Patient/{id}&relationship=PRN, extrai ID do responsável do identifier
get_related_persons(patient_id)Retorna todos os recursos RelatedPerson vinculados a um paciente
create_related_person(spec)Cria um novo recurso RelatedPerson

Notas de Implementação

  1. Criando um relacionamento: Ao vincular um responsável e filho, crie AMBOS os recursos RelatedPerson em uma única transação para garantir consistência.

  2. Excluindo um relacionamento: Remova AMBOS os recursos RelatedPerson para desvincular completamente.

  3. O campo patient é a "âncora" - determina sob qual paciente este recurso aparece ao buscar.

  4. O campo identifier armazena a referência cruzada para o OUTRO paciente, permitindo navegação bidirecional.


Recurso DiagnosticReport

DiagnosticReports representam resultados de laboratório e relatórios de exames diagnósticos.

Campos Utilizados

CampoTipoDescrição
codeCodeableConceptTipo de exame
subjectReference(Patient)Referência do paciente
effectiveDateTimedateTimeQuando o exame foi realizado
resultReference(Observation)[]Resultados das observações

Parâmetros de Busca

ParâmetroTipoDescrição
subjectreferenceFiltrar por paciente
_sortstringOrdem de classificação (use -date para mais recente)
_countnumberMáximo de resultados

Referência de Sistemas de Codificação

Sistemas de Codificação Primários

SistemaURLUso
LOINChttp://loinc.orgObservações (40+ códigos)
SNOMED CThttp://snomed.info/sctCondições, sintomas
RxNormhttp://www.nlm.nih.gov/research/umls/rxnormMedicamentos (23 códigos)
ICD-10-CMhttp://hl7.org/fhir/sid/icd-10-cmDiagnósticos de condições

Sistemas de Terminologia HL7

SistemaURL
Status Clínico de Condiçãohttp://terminology.hl7.org/CodeSystem/condition-clinical
Status de Verificação de Condiçãohttp://terminology.hl7.org/CodeSystem/condition-ver-status
Status de MedicationRequesthttp://hl7.org/fhir/CodeSystem/medicationrequest-status
Intent de MedicationRequesthttp://hl7.org/fhir/CodeSystem/medicationrequest-intent
Categoria de Observaçãohttp://terminology.hl7.org/CodeSystem/observation-category
Unidades de Medidahttp://unitsofmeasure.org

Operações de API Necessárias

Operações Mínimas Necessárias

RecursoCriarLerBuscarAtualizar
PatientSimSimSimSim
ObservationSimSimSimNão
ConditionSimSimSimNão
MedicationRequestSimSimSimNão
AppointmentSimSimSimSim
PractitionerNãoSimSimNão
RelatedPersonSimSimSimNão
DiagnosticReportNãoSimSimNão

Suporte a Bundle/Transação

O sistema usa transações FHIR Bundle para criar múltiplos recursos atomicamente:

{
"resourceType": "Bundle",
"type": "transaction",
"entry": [
{
"resource": { ... },
"request": {
"method": "POST",
"url": "Observation"
}
}
]
}

Criação Condicional (Deduplicação)

Recursos Patient são criados com headers If-None-Exist para evitar duplicatas:

If-None-Exist: telecom=+27821234567

Resumo do Fluxo de Dados

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│ WhatsApp │────▶│ Plataforma │────▶│ Servidor FHIR │
│ Entrada │ │ HealthPass │ │ (API EMR) │
└─────────────────┘ └──────────────────┘ └─────────────────┘


┌──────────────────────┐
│ Recursos Criados: │
│ - Patient │
│ - Observations │
│ - Conditions │
│ - MedicationRequests│
│ - Appointments │
└──────────────────────┘

Fluxo de Registro de Paciente

  1. Usuário fornece dados demográficos via WhatsApp
  2. HealthPass cria recurso Patient com criação condicional (deduplicação por telecom)
  3. ID do paciente armazenado nos campos de contato para referência futura
  4. Observations demográficas criadas (sexo ao nascer, etnia, etc.)

Fluxo de Encontro Clínico

  1. Usuário agenda consulta → recurso Appointment criado
  2. Usuário relata sintomas → recursos Observation criados (auto-relatados)
  3. Profissional faz diagnóstico → recurso Condition criado
  4. Profissional prescreve medicamento → recurso MedicationRequest criado

Fluxo de Acesso a Dados de Saúde

  1. Usuário solicita registros de saúde via HealthPass
  2. Sistema consulta Observations, Conditions, MedicationRequests do paciente
  3. Registro mais recente por tipo é retornado (deduplicação)
  4. Dados exibidos em template WhatsApp ou gera PIN compartilhável

Informações de Contato

Para dúvidas sobre integração, entre em contato com a equipe HealthPass.