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.
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
- Visão Geral
- Recurso Patient
- Recurso Observation
- Recurso Condition
- Recurso MedicationRequest
- Recurso Appointment
- Recurso Practitioner
- Recurso RelatedPerson
- Recurso DiagnosticReport
- Referência de Sistemas de Codificação
- 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
| Backend | Autenticação |
|---|
| Google Healthcare API | OAuth 2.0 com conta de serviço |
| Servidor FHIR Padrão | Bearer token ou headers personalizados |
| Medplum | OAuth 2.0 |
Recurso Patient
O recurso Patient representa pacientes individuais no sistema.
Campos Obrigatórios
| Campo | Tipo | Descrição |
|---|
resourceType | string | Deve ser "Patient" |
active | boolean | Se o registro do paciente está ativo |
name | HumanName[] | Nome(s) do paciente |
telecom | ContactPoint[] | Informações de contato (telefone, email) |
Campos Opcionais
| Campo | Tipo | Descrição |
|---|
id | string | ID do recurso FHIR |
identifier | Identifier[] | Identificadores externos (ID nacional, MRN) |
birthDate | date | Data de nascimento (AAAA-MM-DD) |
gender | code | male | female | other | unknown |
address | Address[] | 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âmetro | Tipo | Descrição |
|---|
identifier | token | Buscar por identificador do paciente |
name | string | Buscar por nome do paciente |
telecom | token | Buscar 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
| Campo | Tipo | Descrição |
|---|
resourceType | string | Deve ser "Observation" |
status | code | final | amended | corrected | cancelled |
code | CodeableConcept | O que foi observado (código LOINC ou SNOMED) |
subject | Reference(Patient) | Referência do paciente |
effectiveDateTime | dateTime | Quando a observação foi feita |
Campos de Valor (um obrigatório)
| Campo | Tipo | Caso de Uso |
|---|
valueQuantity | Quantity | Medições numéricas (sinais vitais, laboratório) |
valueString | string | Descrições em texto |
valueBoolean | boolean | Observações Sim/Não |
valueCodeableConcept | CodeableConcept | Valores codificados |
component | BackboneElement[] | Observações em painel (ex.: pressão arterial) |
Categorias de Observação
Sinais Vitais (LOINC)
| Template | Código LOINC | Descrição | Unidade |
|---|
weight | 29463-7 | Peso corporal | kg |
height | 8302-2 | Altura corporal | cm |
bmi | 39156-5 | Índice de massa corporal | kg/m2 |
blood_pressure_systolic | 8480-6 | Pressão arterial sistólica | mmHg |
blood_pressure_diastolic | 8462-4 | Pressão arterial diastólica | mmHg |
blood_pressure_panel | 85354-9 | Painel de pressão arterial | (componente) |
heart_rate | 8867-4 | Frequência cardíaca | batimentos/min |
temperature | 8310-5 | Temperatura corporal | Cel |
respiratory_rate | 9279-1 | Frequência respiratória | /min |
Laboratório (LOINC)
| Template | Código LOINC | Descrição | Unidade |
|---|
glucose_glucometer | 33747-0 | Glicose [Massa/volume] em sangue capilar por glicosímetro | mg/dL |
hba1c | 4548-4 | Hemoglobina A1c/Hemoglobina total no sangue | % |
Avaliação (LOINC)
| Template | Código LOINC | Descrição | Tipo de Valor |
|---|
sex_at_birth | 76689-9 | Sexo atribuído ao nascer | CodeableConcept |
gestational_dm | 66157-9 | Histórico de diabetes gestacional | boolean |
family_hx_diabetes | 97063-2 | Histórico familiar de diabetes | boolean |
high_blood_pressure_history | 54686-6 | Histórico de pressão alta | boolean |
race_ethnicity | 32624-7 | Raça | string |
diabetes_risk_score | 94560-0 | Pontuação de risco de diabetes | Quantity (pontos) |
physically_active | 68516-4 | Fisicamente ativo | boolean |
diabetes_history | 44877-9 | Histórico de diabetes | boolean |
diabetes_duration | 77983-4 | Duração do diabetes | Quantity (anos) |
hypertension_history | 54686-6 | Histórico de hipertensão | boolean |
hypertension_duration | 77984-2 | Duração da hipertensão | Quantity (anos) |
current_symptoms | 75322-8 | Sintomas | string |
current_medications | 10160-0 | Histórico de uso de medicamentos | string |
selected_medication | 67540-8 | Medicamento selecionado | string |
symptom_duration | 88878-4 | Duração dos sintomas | Quantity (dias) |
symptoms | 75322-8 | Queixas | string |
Sintomas Respiratórios (SNOMED CT)
| Template | Código SNOMED | Descrição |
|---|
cough | 49727002 | Tosse |
productive_cough | 28743005 | Tosse produtiva |
wheezing | 56018004 | Sibilância |
chills | 43724002 | Calafrios |
pleuritic_pain | 2237002 | Dor pleurítica |
anosmia | 44169009 | Perda do olfato |
Outros Sintomas (SNOMED CT)
| Template | Código SNOMED | Descrição |
|---|
fatigue | 84229001 | Fadiga |
myalgia | 68962001 | Dor muscular |
headache | 25064002 | Dor de cabeça |
sneezing | 76067001 | Espirros |
sinus_pain | 5056003 | Dor sinusal |
otalgia | 16001004 | Dor de ouvido |
chest_pain | 29857009 | Dor no peito |
rigor | 38880002 | Rigidez |
nasal_congestion | 68235000 | Congestão nasal |
fever | 386661006 | Febre |
other_symptoms | 418799008 | Outro sintoma |
Extensão de Método do Relator
Observações incluem um campo method indicando quem relatou os dados:
| Relator | Código SNOMED | Descrição |
|---|
self | 1156040003 | Auto-relatado |
provider | 1156041004 | Relatado 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âmetro | Tipo | Descrição |
|---|
patient | reference | Filtrar por paciente |
code | token | Filtrar por código LOINC/SNOMED (separados por vírgula para múltiplos) |
_sort | string | Ordem de classificação (use -_lastUpdated para mais recente) |
_count | number | Máximo de resultados a retornar |
Recurso Condition
Condições representam diagnósticos e problemas de saúde do paciente.
Campos Obrigatórios
| Campo | Tipo | Descrição |
|---|
resourceType | string | Deve ser "Condition" |
clinicalStatus | CodeableConcept | active | recurrence | relapse | inactive | remission | resolved |
verificationStatus | CodeableConcept | unconfirmed | provisional | differential | confirmed | refuted | entered-in-error |
code | CodeableConcept | Código da condição (SNOMED + ICD-10) |
subject | Reference(Patient) | Referência do paciente |
recordedDate | dateTime | Quando a condição foi documentada |
Campos Opcionais
| Campo | Tipo | Descrição |
|---|
onsetDateTime | dateTime | Quando a condição começou |
category | CodeableConcept | problem-list-item | encounter-diagnosis |
Templates de Condição
| Template | Código SNOMED | Código ICD-10 | Descrição |
|---|
pneumonia | 233604007 | J18.9 | Pneumonia |
covid19 | 840539006 | U07.1 | COVID-19 |
asthma | 195967001 | J45.909 | Asma |
bronchitis | 10509002 | J20.9 | Bronquite aguda |
hypertension | 38341003 | I10 | Distúrbio hipertensivo |
diabetes_type2 | 44054006 | E11.9 | Diabetes mellitus tipo 2 |
diabetes_type1 | 46635009 | E10.9 | Diabetes mellitus tipo 1 |
influenza | 6142004 | J11.1 | Gripe |
strep_throat | 43878008 | J02.0 | Faringite estreptocócica |
depression | 35489007 | F32.9 | Transtorno depressivo maior |
anxiety | 48694002 | F41.9 | Transtorno de ansiedade |
fever | 386661006 | R50.9 | Febre |
headache | 25064002 | R51.9 | Dor 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âmetro | Tipo | Descrição |
|---|
patient | reference | Filtrar por paciente |
clinical-status | token | Filtrar por status clínico |
_sort | string | Ordem de classificação |
_count | number | Máximo de resultados |
Recurso MedicationRequest
MedicationRequests representam prescrições e pedidos de medicamentos.
Campos Obrigatórios
| Campo | Tipo | Descrição |
|---|
resourceType | string | Deve ser "MedicationRequest" |
status | code | active | on-hold | cancelled | completed | entered-in-error | stopped | draft | unknown |
intent | code | proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option |
medicationCodeableConcept | CodeableConcept | Código do medicamento (RxNorm) |
subject | Reference(Patient) | Referência do paciente |
authoredOn | dateTime | Quando a prescrição foi escrita |
Campos Opcionais
| Campo | Tipo | Descrição |
|---|
requester | Reference(Practitioner) | Profissional prescritor |
dosageInstruction | Dosage[] | Como o medicamento deve ser tomado |
Templates de Medicamentos (RxNorm)
Antibióticos
| Template | Código RxNorm | Descrição |
|---|
amoxicillin_500mg | 308182 | Amoxicilina 500 MG Cápsula Oral |
amoxicillin_250mg | 308180 | Amoxicilina 250 MG Cápsula Oral |
azithromycin_250mg | 308460 | Azitromicina 250 MG Comprimido Oral |
ciprofloxacin_500mg | 309043 | Ciprofloxacino 500 MG Comprimido Oral |
Medicamentos para Dor
| Template | Código RxNorm | Descrição |
|---|
acetaminophen_500mg | 313782 | Paracetamol 500 MG Comprimido Oral |
ibuprofen_600mg | 310965 | Ibuprofeno 600 MG Comprimido Oral |
tramadol_50mg | 836395 | Cloridrato de Tramadol 50 MG Comprimido Oral |
Cardiovascular
| Template | Código RxNorm | Descrição |
|---|
lisinopril_10mg | 314076 | Lisinopril 10 MG Comprimido Oral |
metoprolol_50mg | 866514 | Succinato de Metoprolol 50 MG Comprimido de Liberação Prolongada |
atorvastatin_20mg | 617312 | Atorvastatina 20 MG Comprimido Oral |
Diabetes
| Template | Código RxNorm | Descrição |
|---|
metformin_500mg | 860975 | Cloridrato de Metformina 500 MG Comprimido Oral |
insulin_glargine | 274783 | Insulina Glargina 100 UNT/ML Solução Injetável |
Respiratório
| Template | Código RxNorm | Descrição |
|---|
albuterol_inhaler | 329498 | Salbutamol 0.083 MG/ACTUAT Inalador de Dose Medida |
prednisone_20mg | 312615 | Prednisona 20 MG Comprimido Oral |
Saúde Mental
| Template | Código RxNorm | Descrição |
|---|
sertraline_50mg | 312940 | Sertralina 50 MG Comprimido Oral |
lorazepam_1mg | 197589 | Lorazepam 1 MG Comprimido Oral |
Gastrointestinal
| Template | Código RxNorm | Descrição |
|---|
omeprazole_20mg | 312681 | Omeprazol 20 MG Cápsula de Liberação Retardada |
ondansetron_4mg | 312836 | Ondansetrona 4 MG Comprimido Oral |
Alergia
| Template | Código RxNorm | Descrição |
|---|
cetirizine_10mg | 1014678 | Cloridrato de Cetirizina 10 MG Comprimido Oral |
diphenhydramine_25mg | 1014599 | Cloridrato 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âmetro | Tipo | Descrição |
|---|
patient | reference | Filtrar por paciente |
status | token | Filtrar por status |
_sort | string | Ordem de classificação |
_count | number | Máximo de resultados |
Recurso Appointment
Agendamentos representam consultas de saúde programadas.
Campos Obrigatórios
| Campo | Tipo | Descrição |
|---|
resourceType | string | Deve ser "Appointment" |
status | code | proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist |
participant | BackboneElement[] | Participantes do agendamento |
start | instant | Data/hora de início (ISO 8601) |
end | instant | Data/hora de término (ISO 8601) |
Campos Opcionais
| Campo | Tipo | Descrição |
|---|
appointmentType | CodeableConcept | Tipo de agendamento (ex.: CONSULT) |
description | string | Motivo do agendamento |
serviceType | CodeableConcept[] | 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âmetro | Tipo | Descrição |
|---|
patient | reference | Filtrar por paciente |
status | token | Filtrar por status |
date | date | Filtrar por data |
actor | reference | Filtrar por participante |
_sort | string | Ordem de classificação (use -start para mais recente) |
Recurso Practitioner
Profissionais representam prestadores de serviços de saúde.
Campos Utilizados
| Campo | Tipo | Descrição |
|---|
id | string | ID do Profissional |
name | HumanName[] | Nome do profissional |
qualification | BackboneElement[] | 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âmetro | Tipo | Descrição |
|---|
name:contains | string | Buscar por nome |
specialty:text | string | Buscar por especialidade |
_count | number | Máximo de resultados |
_sort | string | Ordem de classificação (padrão: name) |
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 Uso | Consulta de Busca | RelatedPerson Usado |
|---|
| Encontrar todos os filhos de um responsável | patient=Patient/parent-123&relationship=CHILD | #1 (vinculado ao responsável) |
| Encontrar o responsável de um filho | patient=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
| Campo | Tipo | Descrição |
|---|
resourceType | string | Deve ser "RelatedPerson" |
patient | Reference(Patient) | O paciente ao qual este recurso está "vinculado" (âncora de busca) |
relationship | CodeableConcept[] | Tipo de relacionamento da perspectiva deste paciente |
Campos Opcionais
| Campo | Tipo | Descrição |
|---|
name | HumanName[] | Nome da pessoa relacionada |
identifier | Identifier[] | Crítico: Armazena o ID do outro paciente para referência cruzada |
Códigos de Relacionamento
Sistema de Identificador
O identificador que armazena o ID do paciente vinculado usa:
| Campo | Valor |
|---|
system | http://example.org/fhir/related-person-patient |
value | O 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)
{
"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"
}
]
}
{
"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âmetro | Tipo | Descrição |
|---|
patient | reference | Filtrar pelo paciente ao qual este RelatedPerson está vinculado |
relationship | token | Filtrar por código de relacionamento (CHILD, PRN, etc.) |
_count | number | Máximo de resultados |
Operações de API
| Operação | Descriçã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
-
Criando um relacionamento: Ao vincular um responsável e filho, crie AMBOS os recursos RelatedPerson em uma única transação para garantir consistência.
-
Excluindo um relacionamento: Remova AMBOS os recursos RelatedPerson para desvincular completamente.
-
O campo patient é a "âncora" - determina sob qual paciente este recurso aparece ao buscar.
-
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
| Campo | Tipo | Descrição |
|---|
code | CodeableConcept | Tipo de exame |
subject | Reference(Patient) | Referência do paciente |
effectiveDateTime | dateTime | Quando o exame foi realizado |
result | Reference(Observation)[] | Resultados das observações |
Parâmetros de Busca
| Parâmetro | Tipo | Descrição |
|---|
subject | reference | Filtrar por paciente |
_sort | string | Ordem de classificação (use -date para mais recente) |
_count | number | Máximo de resultados |
Referência de Sistemas de Codificação
Sistemas de Codificação Primários
| Sistema | URL | Uso |
|---|
| LOINC | http://loinc.org | Observações (40+ códigos) |
| SNOMED CT | http://snomed.info/sct | Condições, sintomas |
| RxNorm | http://www.nlm.nih.gov/research/umls/rxnorm | Medicamentos (23 códigos) |
| ICD-10-CM | http://hl7.org/fhir/sid/icd-10-cm | Diagnósticos de condições |
Sistemas de Terminologia HL7
| Sistema | URL |
|---|
| Status Clínico de Condição | http://terminology.hl7.org/CodeSystem/condition-clinical |
| Status de Verificação de Condição | http://terminology.hl7.org/CodeSystem/condition-ver-status |
| Status de MedicationRequest | http://hl7.org/fhir/CodeSystem/medicationrequest-status |
| Intent de MedicationRequest | http://hl7.org/fhir/CodeSystem/medicationrequest-intent |
| Categoria de Observação | http://terminology.hl7.org/CodeSystem/observation-category |
| Unidades de Medida | http://unitsofmeasure.org |
Operações de API Necessárias
Operações Mínimas Necessárias
| Recurso | Criar | Ler | Buscar | Atualizar |
|---|
| Patient | Sim | Sim | Sim | Sim |
| Observation | Sim | Sim | Sim | Não |
| Condition | Sim | Sim | Sim | Não |
| MedicationRequest | Sim | Sim | Sim | Não |
| Appointment | Sim | Sim | Sim | Sim |
| Practitioner | Não | Sim | Sim | Não |
| RelatedPerson | Sim | Sim | Sim | Não |
| DiagnosticReport | Não | Sim | Sim | Nã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
- Usuário fornece dados demográficos via WhatsApp
- HealthPass cria recurso Patient com criação condicional (deduplicação por telecom)
- ID do paciente armazenado nos campos de contato para referência futura
- Observations demográficas criadas (sexo ao nascer, etnia, etc.)
Fluxo de Encontro Clínico
- Usuário agenda consulta → recurso Appointment criado
- Usuário relata sintomas → recursos Observation criados (auto-relatados)
- Profissional faz diagnóstico → recurso Condition criado
- Profissional prescreve medicamento → recurso MedicationRequest criado
Fluxo de Acesso a Dados de Saúde
- Usuário solicita registros de saúde via HealthPass
- Sistema consulta Observations, Conditions, MedicationRequests do paciente
- Registro mais recente por tipo é retornado (deduplicação)
- Dados exibidos em template WhatsApp ou gera PIN compartilhável
Para dúvidas sobre integração, entre em contato com a equipe HealthPass.