Generación Bundle Submit Health Event Request
Alcance de este documento
El siguiente documento tiene como objetivo ser una Guía de apoyo para la generación del Bundle correspondiente al Request de la transacción Submit Health Event definida en el documento Guía de Implementación WHO Digital Documentation of COVID-19 Certificates (DDCC).
Esta guía contiene una explicación sencilla de una transacción Submit Health Event como contexto para la generación del mensaje, una descripción del mensaje y sus elementos, una operación de validación de recursos HL7 FHIR y un ejemplo de cómo debe ser construido el mensaje.
Contexto
Transacción: Submit Health Event
La siguiente figura muestra cómo se estructura el perfil con las entradas correspondientes para las variantes descritas anteriormente. Para la construcción del mensaje en esta guía utilizaremos la segunda variante “Bundle con entrada del tipo QuestionnaireResponse” destacado en rojo.
Bundle de Entrada
El mensaje y sus elementos
Desde la Guía de Implementación se observa la estructura del perfil “DDCCSubmitHealthEventRequest”, el cual es el del tipo Bundle. De todos estos elementos, solo uno es obligatorio, el “type” y debe aparecer una sola vez.
Para continuar, en la siguiente imagen, dentro del elemento “Slices for entry” (), se observa que contiene dos elementos anidados que corresponden a las variantes anteriormente descritas:
resource(DDCCGenerateHealthCertificateParameters)
entry:ddccQuestionnaireResponse
resource(DDCCQuestionnaireResponse)
Cada uno de estos “entries”, contiene un elemento resource, el cual contiene un recurso.
Para la generación de esta transacción, utilizaremos la entry ddccQuestionnaireResponse
. La cual se basa en el perfil denominado DDCCQuestionnaireResponse.
Bundle (DDCCSubmitHealthEventRequest)
Bundle es un contenedor de recursos que permite agrupar y transmitir recursos de una sola vez. En este caso se agrupa un único recurso QuestionnaireResponse dentro del bundle. El siguiente fragmento de código muestra la estructura del recurso. Para una comprensión más sencilla se excluyen los recursos anidados de la sección entry:
{
"resourceType": "Bundle",
"id": "example-submithealth-request",
"meta": {
"profile": [
"http://worldhealthorganization.github.io/ddcc/StructureDefinition/DDCCSubmitHealthEventRequest"
]
},
"type": "batch",
"entry": [
{
"resource": {DDCCQuestionnaireResponse},
"request": {
"method": "POST"
"url": "QuestionnaireResponse/$generateHealthCertificate"
}
}
]
}
Significado de cada atributo presente en el Bundle.
Se describen los elementos mas relevantes, importantes y necesarios para este proyecto:
Línea | Elemento | Descripción |
---|---|---|
2 |
| Tipo de recurso que se esta generando |
3 | | Identificador del recurso que se esta generando. |
4:8 | | Contiene URI del perfil contra el cual el el recurso que se esta generando. Para este caso siempre se utilizará la URI |
9 | | Indica el tipo de bundle que se esta generando. Para este caso, siempre debe ser el valor "batch”. Lo que hará el servidor es almacenar el/los recursos anidados en los correspondientes enpoints del servidor. En este caso almacenará los datos del recurso en el endpoint |
10:17 | | Contiene un recurso. Para este caso, la entry creada se utilizará para contener el perfil del recurso |
12 |
| Contiene la información del recurso |
14 |
| Metodo REST ulitizado para crear el recurso. En este caso se debe utilizar el metodo POST |
15 |
| Dirección o endpoint del servidor al cual se enviará la solicitud. Para este caso se debe utilizar la operación |
QuestionnaireResponse (DDCCQuestionnaireResponse)
Corresponde a un conjunto estructurado de preguntas y sus respuestas. Las preguntas están ordenadas y agrupadas en subconjuntos coherentes, correspondientes a la estructura de la agrupación del cuestionario que se responde. En la guía DDCC se utiliza para contener los atributos del conjunto mínimo de datos. El siguiente fragmento de código muestra la estructura del recurso. Para una comprensión más sencilla se simplifica sección item.
{
"resourceType": "QuestionnaireResponse",
"id": "",
"meta": {
"profile": [
"http://worldhealthorganization.github.io/ddcc/StructureDefinition/DDCCQuestionnaireResponse"
]
},
"questionnaire": "http://worldhealthorganization.github.io/ddcc/DDCCVSCoreDataSetQuestionnaire",
"status": "completed",
"authored": "2022-10-03",
"item": [
{
"linkId": "name",
"answer": [
{
"valueString": "Juan Carlos Perez"
}
]
}
]
}
Significado de cada atributo presente en el QuestionnaireResponse
Se describen los elementos mas relevantes, importantes y necesarios para este proyecto.
Línea | Elemento | Descripción |
---|---|---|
2 |
| Tipo de recurso que se esta generando |
3 |
| Identificador del recurso que se esta generando. |
4:8 |
| Contiene URI del perfil contra el cual el el recurso que se esta generando se debe validar. Para este caso siempre se utilizará la URI |
9 |
| url que hace referencia al modelo del cuestionario que se esta trabajando. Para este caso se debe usar |
10 |
| Estado del cuestionario. Las posibles opciones son: “in-progress | completed | amended | entered-in-error | stopped“ |
11 | | Fecha cuando las respuestas fueron capturadas. Formato de la fecha es “AAAA-MM-DD”, AAAA= Año, MM= Mes, DD= Dia |
12:21 |
| Es un arreglo que puede contener múltiples respuestas del cuestionario. |
14 |
| Identificador de la pregunta |
17 |
| Respuesta a la pregunta consignada. El tipo de dato puede variar tomando la forma de |
Operación $validate: Validación de recursos en HL7 FHIR
Dentro de las multiples prestaciones que entregan los servidores HAPI FHIR, una de ellas es poder validar recursos FHIR contra alguna versión especifica o contra perfiles creados para algún caso de uso determinado.
Para este caso particular, se ha configurado y levantado un servidor HAPI FHIR (https://ddcc-fhir.cens.cl/ ) sobre el cual se han cargado todas las definiciones incluidas en este proyecto, a fin de poder realizar validaciones de los recursos que se van generando mientras se avanza en el proyecto.
A continuación se explica la forma de poder validar un recurso, especificamente como ejemplo se utiliza el recurso “DDCCSubmitHealthEventRequest”.
Para validar el recurso, se debe realizar una operación “REST” del tipo “POST” y se debe utilizar la siguiente sintaxis:
https://ops-fhir.cens.cl/fhir/Bundle/$validate
, donde:
https://ops-fhir.cens.cl/fhir → Corresponde a la URL del servidor que se habilito para las pruebas
Bundle → Es el tipo de recurso que se desea validar, en este caso el recurso DDCCSubmitHealthEventRequest corresponde a un recurso del tipo Bundle
$validate → corresponde a la operación que se debe realizar para validar el recurso
Ejemplo de un Bundle generado
A continuacion, se muestra un ejemplo del recurso DDCC SubmitHealthEventRequest.
{
"resourceType": "Bundle",
"id": "DDCC-TX-SHE-bundle-example-Spanish",
"meta": {
"profile": [
"http://worldhealthorganization.github.io/ddcc/StructureDefinition/DDCCSubmitHealthEventRequest"
]
},
"type": "batch",
"entry": [
{
"fullUrl": "http://www.example.org/fhir/Parameters/DDCC-Ejemplo-SubmitHealthEvent",
"resource": {
"resourceType": "QuestionnaireResponse",
"id": "DDCC-VS-QuestionnaireResponse-Ejemplo-SubmitHealthEvent",
"meta": {
"profile": [
"http://worldhealthorganization.github.io/ddcc/StructureDefinition/DDCCQuestionnaireResponse"
]
},
"questionnaire": "http://worldhealthorganization.github.io/ddcc/DDCCVSCoreDataSetQuestionnaire",
"status": "completed",
"subject": {
"reference": "Patient/DDCC-Paciente-ej01"
},
"authored": "2022-10-03",
"item": [
{
"linkId": "name",
"answer": [
{
"valueString": "Juan Carlos Perez"
}
]
},
{
"linkId": "birthDate",
"answer": [
{
"valueDate": "1993-08-17"
}
]
},
{
"linkId": "identifier",
"answer": [
{
"valueString": "12345678904"
}
]
},
{
"linkId": "sex",
"answer": [
{
"valueCoding": {
"system": "http://hl7.org/fhir/administrative-gender",
"code": "male"
}
}
]
},
{
"linkId": "vaccine",
"answer": [
{
"valueCoding": {
"system": "http://id.who.int/icd11/mms",
"code": "XM9QW8"
}
}
]
},
{
"linkId": "brand",
"answer": [
{
"valueCoding": {
"system": "http://id.who.int/icd11/mms",
"code": "XM4YL8"
}
}
]
},
{
"linkId": "manufacturer",
"answer": [
{
"valueCoding": {
"system": "http://worldhealthorganization.github.io/ddcc/CodeSystem/DDCC-Example-Test-CodeSystem",
"code": "TEST"
}
}
]
},
{
"linkId": "ma_holder",
"answer": [
{
"valueCoding": {
"system": "http://worldhealthorganization.github.io/ddcc/CodeSystem/DDCC-Example-Test-CodeSystem",
"code": "TEST"
}
}
]
},
{
"linkId": "lot",
"answer": [
{
"valueString": "ER8732"
}
]
},
{
"linkId": "date",
"answer": [
{
"valueDate": "2021-04-05"
}
]
},
{
"linkId": "vaccine_valid",
"answer": [
{
"valueDate": "2021-04-19"
}
]
},
{
"linkId": "dose",
"answer": [
{
"valueInteger": 1
}
]
},
{
"linkId": "total_doses",
"answer": [
{
"valueInteger": 2
}
]
},
{
"linkId": "country",
"answer": [
{
"valueCoding": {
"system": "urn:iso:std:iso:3166",
"code": "ESP"
}
}
]
},
{
"linkId": "centre",
"answer": [
{
"valueString": "xxx1yyy2"
}
]
},
{
"linkId": "hw",
"answer": [
{
"valueString": "lAH8TnzqAInqwkslHzOlSA"
}
]
},
{
"linkId": "disease",
"answer": [
{
"valueCoding": {
"system": "http://id.who.int/icd11/mms",
"code": "RA01"
}
}
]
},
{
"linkId": "due_date",
"answer": [
{
"valueDate": "2021-04-28"
}
]
},
{
"linkId": "pha",
"answer": [
{
"valueString": "dPD2PfwzBQyphcjeUiAdRP"
}
]
},
{
"linkId": "hcid",
"answer": [
{
"valueString": "bMlJkAt0V92RYhhG3fNt4"
}
]
},
{
"linkId": "valid_from",
"answer": [
{
"valueDate": "2021-04-05"
}
]
},
{
"linkId": "valid_until",
"answer": [
{
"valueDate": "2022-04-05"
}
]
}
]
},
"request": {
"method": "POST",
"url": "QuestionnaireResponse/$generateHealthCertificate"
}
}
]
}
Descargar archivo de ejemplo