Compare commits

...

25 Commits

Author SHA1 Message Date
2919873247 Actualizado el ordden de las variables de entorno para dejar las requeridas al principio del archivo .env.example 2026-05-19 16:22:33 +00:00
099b2109aa Modificado el paso de verificación número 3 2026-05-19 16:22:02 +00:00
eaa41f4d68 Agregados los requisitos minimos y recomendados para el servidor 2026-05-14 02:39:35 +00:00
2019e440c8 Corregido error en secret de certificados ssl_cert que incluia un ) al final del nombre 2026-05-14 01:11:31 +00:00
d49074ac09 Revertido el cambio anterior 2026-05-14 01:05:44 +00:00
6d1b3ad8c9 Modificado package.json para corregir error on uuid 2026-05-14 01:05:02 +00:00
5e35029a2e Se actualizo el docker-compose para que el valor por defecto de la ruta a los certificados sea /dev/null y asi no se produzca un error cuando se carga el nodo por default sobre http 2026-05-14 00:52:54 +00:00
1e71f833ca Actualizada la documentación de bus-gateway 2026-05-07 03:03:13 +00:00
13319cdd37 Actualizado el diagrama de contenedoress 2026-05-07 02:30:14 +00:00
3774a44573 Actualizado el diagrama de contenedoress 2026-05-07 02:11:47 +00:00
8363da2869 Actualizado el diagrama de contenedores para reflejar mejor la relación entre contenedores 2026-05-07 02:10:56 +00:00
f5f8da077b Actualizado el diagrama de contenedores para reflejar mejor la relación entre contenedores 2026-05-07 02:09:51 +00:00
2a51a870f9 Agregado el diagrama de contenedores para dejar registro de la arquitectura 2026-05-07 02:05:23 +00:00
18ea7f1153 Actualizada la documentacion del ITI67 2026-05-06 18:11:55 +00:00
8f8a864b15 Actualizada la documentación del ITI67 2026-05-06 18:01:09 +00:00
4b722deed5 Actualizada la documentación del sistema 2026-05-06 14:22:52 +00:00
02e338c32a Actualizada la documentación de ITI65 2026-05-05 18:51:45 +00:00
885e05e1bd Actualizados los diagramas de secuencia 2026-05-05 18:48:59 +00:00
ffd47954d1 Creada la carpeta postman 2026-05-05 17:23:10 +00:00
ba87e83d71 Agregada la colección Postman 2026-05-05 17:22:33 +00:00
8c7525758e Modificadas las variables de entorno en el bus-gateway 2026-05-05 16:03:10 +00:00
14e0284cd9 Corregido error en health check del servidor hapi 2026-05-05 11:31:31 +00:00
17ab0cdf03 bus-gateway espera a que hapi-fhir esté healthy antes de levantar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 18:19:56 +00:00
9e24000992 Agregados healthchecks a hapi-fhir y hapi-db con cadena de dependencias
hapi-fhir ahora espera a que hapi-db esté healthy antes de arrancar, y
nginx espera a que hapi-fhir esté healthy. El healthcheck de hapi-fhir
consulta /fhir/metadata con start_period de 60s para tolerar el tiempo
de inicialización de Spring Boot.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 18:17:31 +00:00
ca043aa7b4 Eliminado el servicio GDHCN del stack del nodo
Se eliminan los servicios gdhcn-validator-service y gdhcn-db, el volumen
gdhcn-data, los Docker secrets asociados (trust-network-cert/key, signature-key),
las rutas nginx /gdhcn/ en HTTP y HTTPS, las variables de entorno de certificados
TNG/GDHCN del .env.example, y todas las referencias en el README.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 18:14:48 +00:00
15 changed files with 364 additions and 180 deletions

View File

@ -4,29 +4,35 @@
# =============================================================================
# =============================================================================
# NODO
# VARIABLES DE ENTORNO REQUERIDAS
# =============================================================================
# URL base del nodo (usada por bus-gateway internamente)
NODO_URL_BASE=http://localhost
# Zona horaria para todos los servicios
TZ=America/Argentina/Buenos_Aires
# =============================================================================
# BUS DE SALUD — Requeridas
# =============================================================================
# URL base del Bus de salud nacional
BUS_URL=https://bus-test.msal.gob.ar
# Secreto compartido para firmar tokens JWT (HS256) contra el Bus
BUS_JWT_SECRET=your-shared-secret
# Identificador del emisor JWT (ej.: URL del repositorio del nodo)
BUS_ISSUER=https://your-repositorio-url
# =============================================================================
# INFRAESTRUCTURA
# =============================================================================
# Zona horaria para todos los servicios
TZ=America/Argentina/Buenos_Aires
# =============================================================================
# BUS DE SALUD
# =============================================================================
# URL base del Bus de salud nacional
BUS_URL=https://bus-test.msal.gob.ar
# Scopes OAuth para el Master Patient Index
MPI_SCOPE=Patient/*.read,Patient/*.write
@ -57,19 +63,6 @@ NGINX_CONF=http
# SSL_CERT_PATH=./certs/server.crt
# SSL_KEY_PATH=./certs/server.key
# =============================================================================
# CERTIFICADOS / DOCKER SECRETS
# Los archivos se inyectan como Docker secrets.
# Los valores por defecto apuntan a ./certs/ — reemplazar en producción.
# =============================================================================
# Certificado de la red de confianza (TNG/GDHCN)
SIGNATURE_CERT_PATH=./certs/trust-network.pem
SIGNATURE_KEY_PATH=./certs/trust-network.key
# Clave privada para firma de documentos (Document Signing Certificate)
SSL_DCC_KEY_PATH=./certs/signature.key
# =============================================================================
# HAPI FHIR (Spring Boot)
# =============================================================================

View File

@ -14,7 +14,6 @@ Internet / Red interna
│ /fhir/IPSDocument → bus-gateway:3000 │
│ /fhir/DocumentReference→ bus-gateway:3000 │
│ /fhir/Patient → bus-gateway:3000 │
│ /gdhcn/* → gdhcn-validator-service │
│ /fhir/* (resto) → hapi-fhir:8080 │
└──────────────────────────────────────────────┘
```
@ -26,13 +25,11 @@ Internet / Red interna
| `hapi-fhir` | `hapiproject/hapi:latest` | 8080 (interno) | Servidor FHIR R4 (Spring Boot) con búsqueda Lucene |
| `hapi-db` | `postgres:14.6` | 5433 (interno) | Base de datos PostgreSQL para HAPI FHIR |
| `bus-gateway` | `./bus-gateway` (Node.js) | 3000 (interno) | Gateway al Bus de salud nacional (MPI + Document Registry) |
| `gdhcn-validator-service` | `createchile/gdhcn-validator_backend:v1.1` | 8182 | Validador de documentos de salud verificables (firmas digitales) |
| `gdhcn-db` | `postgres:16-alpine` | 5432 (interno) | Base de datos PostgreSQL para el validador GDHCN |
| `nginx` | `nginx:alpine` | 80 / 443 | Proxy inverso — punto de entrada HTTP/HTTPS |
**Red interna**: todos los servicios se comunican a través de la red Docker `hapi-network`.
**Volúmenes persistentes**: `hapi-data` (PostgreSQL de HAPI), `gdhcn-data` (PostgreSQL de GDHCN).
**Volúmenes persistentes**: `hapi-data` (PostgreSQL de HAPI).
## Transacciones IHE implementadas
@ -50,9 +47,21 @@ El `bus-gateway` implementa los siguientes perfiles de interoperabilidad:
## Requisitos
### Software
- Docker >= 20.10.8
- Docker Compose >= 1.29.2
### Hardware del servidor
| Recurso | Mínimo | Recomendado |
|---|---|---|
| CPU | 2 núcleos | 4 núcleos |
| Memoria RAM | 4 GB | 8 GB |
| Disco | 10 GB | 30 GB |
> El mayor consumo de recursos corresponde a **HAPI FHIR** (JVM + índice Lucene), que requiere al menos 2 GB de RAM para arrancar correctamente. El volumen de disco recomendado contempla el crecimiento de los datos clínicos almacenados en PostgreSQL.
## Instalación y configuración
### 1. Variables de entorno
@ -70,8 +79,13 @@ Los certificados se inyectan como **Docker secrets**. Las rutas se configuran en
| Archivo por defecto | Descripción |
|---|---|
| `./certs/server.crt` / `./certs/server.key` | Certificado TLS para nginx (solo modo HTTPS) |
| `./certs/trust-network.pem` / `./certs/trust-network.key` | Certificado de la red de confianza (GDHCN/TNG) |
| `./certs/signature.key` | Clave privada para firma de documentos (DSC) |
> **Importante:** Los archivos `ssl_cert` y `ssl_key` deben existir en el sistema de archivos para que Docker pueda montarlos como secrets, incluso si se usa el modo HTTP. Si no se cuenta con certificados reales, crear archivos vacíos:
>
> ```bash
> touch ./certs/server.crt
> touch ./certs/server.key
> ```
> Ver [certs/README.md](certs/README.md) para instrucciones de generación de certificados de prueba.
@ -105,7 +119,17 @@ Los parámetros del servidor FHIR se ajustan en [hapi-config/application.yaml](h
docker compose up -d
```
HAPI FHIR tarda aproximadamente **3040 segundos** en inicializar. El `bus-gateway` espera activamente a que el servidor FHIR esté listo antes de aceptar conexiones (hasta ~3 minutos de reintentos).
HAPI FHIR tarda aproximadamente **3040 segundos** en inicializar. El `bus-gateway` espera a que el contenedor `hapi-fhir` esté iniciado, pero no verifica que el servidor FHIR haya completado su arranque. Antes de usar los servicios, verificar que HAPI FHIR inicializó correctamente:
```bash
docker compose logs -f hapi-fhir
```
Buscar la línea que confirma el inicio exitoso:
```
Started Application in XX seconds
```
## Verificar el despliegue
@ -116,8 +140,8 @@ docker compose ps
# CapabilityStatement FHIR a través de nginx
curl http://localhost/fhir/metadata
# Health check del Bus Gateway a través de nginx
curl http://localhost/fhir/Patient?_summary=count
# Verificación de llegada al Bus mediante la consulta de un paciente.
curl --location 'http://localhost/fhir/Patient?identifier=http%3A%2F%2Fwww.renaper.gob.ar%2Fdni%7C30945027'
# Logs de un servicio específico
docker compose logs -f bus-gateway
@ -159,7 +183,6 @@ Todas las variables se definen en el archivo `.env` de la raíz del proyecto.
| Variable | Default | Descripción |
|---|---|---|
| `NODO_BASE_URL` | `http://localhost` | URL pública del nodo (usada por GDHCN para construir URLs) |
| `NODO_URL_BASE` | `http://localhost` | URL base del nodo (usada por bus-gateway) |
| `TZ` | `America/Argentina/Buenos_Aires` | Zona horaria para todos los servicios |
@ -177,14 +200,6 @@ Todas las variables se definen en el archivo `.env` de la raíz del proyecto.
| `SSL_CERT_PATH` | `./certs/server.crt` | Ruta al certificado TLS del servidor |
| `SSL_KEY_PATH` | `./certs/server.key` | Ruta a la clave privada TLS del servidor |
### Certificados / Secrets
| Variable | Default | Descripción |
|---|---|---|
| `SIGNATURE_CERT_PATH` | `./certs/trust-network.pem` | Certificado de la red de confianza (TNG/GDHCN) |
| `SIGNATURE_KEY_PATH` | `./certs/trust-network.key` | Clave privada de la red de confianza |
| `SSL_DCC_KEY_PATH` | `./certs/signature.key` | Clave privada para firma de documentos (DSC) |
### HAPI FHIR / PostgreSQL
| Variable | Default | Descripción |
@ -203,7 +218,7 @@ Todas las variables se definen en el archivo `.env` de la raíz del proyecto.
```
ips-nodo-dominio/
├── docker-compose.yml # Orquestación principal (6 servicios)
├── docker-compose.yml # Orquestación principal (4 servicios)
├── .env.example # Plantilla de variables de entorno
├── hapi-config/
│ └── application.yaml # Configuración de HAPI FHIR (Spring Boot)

View File

@ -1,4 +1,4 @@
NODO_BASE_URL=localhost
NODO_URL_BASE=localhost
# Bus FHIR (base, usado como fallback si no se definen MPI_URL o DOCUMENT_REGISTRY_URL)
BUS_URL=http://bus-host:8080

View File

@ -24,7 +24,7 @@ const config = {
errorKey: 'err',
nestedKey: null,
},
baseURL: process.env.NODO_BASE_URL || 'http://localhost',
baseURL: process.env.NODO_URL_BASE || 'http://localhost',
debug: process.env.BUS_DEBUG === 'true',
};

2
bus-gateway/docs/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.png
*.pdf

View File

@ -1,13 +1,13 @@
%%{init: {'theme': 'base', 'themeVariables': {'actorBkg': '#1D4ED8', 'actorBorder': '#1E3A8A', 'actorTextColor': '#FFFFFF', 'actorLineColor': '#93C5FD', 'noteBkgColor': '#FEF3C7', 'noteTextColor': '#92400E', 'noteBorderColor': '#F59E0B', 'signalColor': '#1E293B', 'signalTextColor': '#1E293B', 'labelBoxBkgColor': '#7C3AED', 'labelBoxBorderColor': '#5B21B6', 'labelTextColor': '#FFFFFF'}}}%%
sequenceDiagram
autonumber
participant HIS_A
participant NodoDominio as NodoDominio (HIS_A)
participant BusNacion as BusNacion
participant FederadorNacion as Federador
Note over HIS_A,FederadorNacion: Gestion de Identidad (PIXm/PDQm)
HIS_A->>NodoDominio: ITI-104 (Crea/Actualiza)
NodoDominio->>BusNacion: Enruta petición FHIR (POST /Patient)
BusNacion->>FederadorNacion: Ejecuta operación en el Federador
FederadorNacion-->>BusNacion: 201 Created (Recurso)
BusNacion-->>NodoDominio: Retorna Respuesta FHIR
NodoDominio-->>HIS_A: Confirma Operación
participant NodoDominio as Nodo
box rgb(237,233,254) PINS
participant FederadorNacion as Federador
end
Note over HIS_A,FederadorNacion: Gestion de Identidad
HIS_A->>NodoDominio: ITI-104: Federa un nuevo paciente en el MPI <br /> [POST /Patient]
NodoDominio->>FederadorNacion: Federa un nuevo paciente en el Federador <br /> [POST /Patient]
FederadorNacion-->>NodoDominio: 201 (Created)
NodoDominio-->>HIS_A: 200 OK (Patient)

View File

@ -1,20 +1,20 @@
%%{init: {'theme': 'base', 'themeVariables': {'actorBkg': '#1D4ED8', 'actorBorder': '#1E3A8A', 'actorTextColor': '#FFFFFF', 'actorLineColor': '#93C5FD', 'noteBkgColor': '#FEF3C7', 'noteTextColor': '#92400E', 'noteBorderColor': '#F59E0B', 'signalColor': '#1E293B', 'signalTextColor': '#1E293B', 'labelBoxBkgColor': '#7C3AED', 'labelBoxBorderColor': '#5B21B6', 'labelTextColor': '#FFFFFF'}}}%%
sequenceDiagram
autonumber
participant HIS_A
participant NodoDominio as "Nodo Dominio (emisor)"
participant BusNacion as "Bus Nacion"
participant FederadorNacion as "Federador Nacion"
participant IndiceNacion as "Indice Nacion"
participant NodoDominio as Nodo (Emisor)
box rgb(237,233,254) PINS
participant FederadorNacion as Federador
participant IndiceNacion as Indice Documentos
end
Note over HIS_A,IndiceNacion: 1. Recepcion Local del Documento Bundle (POST /Bundle)
HIS_A->>NodoDominio: ITI-65 (Crea/Actualiza)
Note over NodoDominio,FederadorNacion: 2. Resolución de Identidad (ITI-83)
NodoDominio->>BusNacion: Get /Patient/$ihe-pix?sourceIdentifier=[ID_Local]
BusNacion->>FederadorNacion: Consulta correspondencia
FederadorNacion-->>BusNacion: 200 OK (Retorna ID Nacional)
BusNacion-->>NodoDominio: Entrega ID Nacional
Note over NodoDominio,IndiceNacion: 3. Enrutamiento de la Petición (POST /Bundle)
NodoDominio->>BusNacion: Publica Document Reference (GET /DocumentRefereence?subject=[ID_Nacional])
BusNacion->>IndiceNacion: Registra Referencia
IndiceNacion-->>BusNacion: 201 (Created)
BusNacion-->>NodoDominio: Confirma operación
NodoDominio-->>HIS_A: 200 OK (Publicación exitosa)
HIS_A->>NodoDominio: ITI65: Provee un nuevo documento IPS (bundle)
Note right of NodoDominio: El Nodo almacena físicamente el documento y extrae la metadata.
Note over NodoDominio,FederadorNacion: 2. Resolución de Identidad
NodoDominio->>FederadorNacion: Busca al paciente por el su identificador local [GET /Patient?identifier=<ID_Local>]
FederadorNacion-->>NodoDominio: 200 OK (Patient Searchset)
Note over NodoDominio,IndiceNacion: 3. Enrutamiento de la Petición
Note right of NodoDominio: El Nodo genera la referencia al IPS y la asocia al identificador nacional del paciente.
NodoDominio->>IndiceNacion: Guarda la referencia al IPS en el índice de documentos [POST /DocumentReference]
IndiceNacion-->>NodoDominio: 201 (Created)
NodoDominio-->>HIS_A: 200 OK (DocumentReference)

View File

@ -1,27 +1,22 @@
%%{init: {'theme': 'base', 'themeVariables': {'actorBkg': '#1D4ED8', 'actorBorder': '#1E3A8A', 'actorTextColor': '#FFFFFF', 'actorLineColor': '#93C5FD', 'noteBkgColor': '#FEF3C7', 'noteTextColor': '#92400E', 'noteBorderColor': '#F59E0B', 'signalColor': '#1E293B', 'signalTextColor': '#1E293B', 'labelBoxBkgColor': '#7C3AED', 'labelBoxBorderColor': '#5B21B6', 'labelTextColor': '#FFFFFF'}}}%%
sequenceDiagram
autonumber
participant HIS_A
participant NodoDominio as "Nodo Dominio (emisor)"
participant BusNacion as "Bus Nacion"
participant FederadorNacion as "Federador Nacion"
participant IndiceNacion as "Indice Nacion"
participant NodoDominio2 as "Nodo Dominio (receptor)"
Note over HIS_A,FederadorNacion: 1. Busqueda y resolución de Identidad (PIXm ITI-83)
HIS_A->>NodoDominio: ITI-67: GET /DocumentReference?subject=[ID_Lcocal]
NodoDominio->>BusNacion: GET /Patient/$ihe-pix?sourceIdentifier=[ID_Local]
BusNacion->>FederadorNacion: Consulta correspondencia en MPI
FederadorNacion-->>BusNacion: 200 OK (Retorna ID Nacional)
BusNacion-->>NodoDominio: Entrega ID Nacional
Note over NodoDominio,IndiceNacion: 2. Busqueda de Metadatos (MHD ITI-67 adaptada)
NodoDominio->>BusNacion: GET /DocumentReference?subject=[ID_Nacional]
BusNacion->>IndiceNacion: Consulta en el índice de referencias
IndiceNacion-->>BusNacion: 200 OK (Bundle "searchset")
BusNacion-->>NodoDominio: Retorna Bundle con Document Reference
Note over HIS_A,NodoDominio2: 3. Descarga del documento (ITI-68 P2P)
HIS_A->>NodoDominio: Solicitar descarga de [URL_Directa]
NodoDominio->>NodoDominio2: GET [URL_Directa] (Conexión P2P, bypass BusNación)
NodoDominio2-->>NodoDominio: 200 OK (Retorna el documento clinico)
NodoDominio-->>HIS_A: Entrega documento fisico
participant NodoDominio as Nodo A
box rgb(237,233,254) PINS
participant FederadorNacion as Federador
participant IndiceNacion as Indice Documentos
end
participant NodoDominio2 as Nodo B
Note over HIS_A,FederadorNacion: 1. Busqueda y resolución de Identidad
HIS_A->>NodoDominio: ITI67: Solicita los IPS asociados al paciente por su identificador local <br /> [GET /DocumentReference?patient.identifier=<ID_Local>]
NodoDominio->>FederadorNacion: Busca el paciente por su identificador local <br /> [GET /Patient?identifier=<ID_Local>]
FederadorNacion-->>NodoDominio: 200 OK (Patient Searchset)
Note over NodoDominio,IndiceNacion: 2. Busqueda de Metadatos
Note right of NodoDominio: El Nodo obtiene el identificador nacional del paciente
NodoDominio->>IndiceNacion: Busca los IPS asociados al paciente por su identificador nacional <br /> [GET /DocumentReference?patient=<ID_Nacional>]
IndiceNacion-->>NodoDominio: 200 OK (DocumentReference Searchset)
NodoDominio-->>HIS_A: 200 OK (DocumentReference Searchset)
Note over HIS_A,NodoDominio2: 3. Descarga del documento (ITI-68)
HIS_A->>NodoDominio2: Obtiene el documento IPS <br /> [GET <URL_IPSBundle>]
NodoDominio2-->>HIS_A: 200 OK (IPS Bundle)

View File

@ -1,13 +1,13 @@
%%{init: {'theme': 'base', 'themeVariables': {'actorBkg': '#1D4ED8', 'actorBorder': '#1E3A8A', 'actorTextColor': '#FFFFFF', 'actorLineColor': '#93C5FD', 'noteBkgColor': '#FEF3C7', 'noteTextColor': '#92400E', 'noteBorderColor': '#F59E0B', 'signalColor': '#1E293B', 'signalTextColor': '#1E293B', 'labelBoxBkgColor': '#7C3AED', 'labelBoxBorderColor': '#5B21B6', 'labelTextColor': '#FFFFFF'}}}%%
sequenceDiagram
autonumber
participant HIS_A
participant NodoDominio as "Nodo Dominio (Repositorio Local)"
participant BusNacion as "Bus Nacion"
participant FederadorNacion as "Federador Nacion"
Note over HIS_A,FederadorNacion: Gestion de Identidad (PIXm/PDQm)
HIS_A->>NodoDominio: ITI-78 (Consulta)
NodoDominio->>BusNacion: Enruta petición FHIR (GET /Partient)
BusNacion->>FederadorNacion: Ejecuta operación en el Federador
FederadorNacion-->>BusNacion: 200 OK (Bundle)
BusNacion-->>NodoDominio: Retorna Respuesta FHIR
NodoDominio-->>HIS_A: Confirma Operación
participant NodoDominio as Nodo
box rgb(237,233,254) PINS
participant FederadorNacion as Federador
end
Note over HIS_A,FederadorNacion: Gestion de Identidad
HIS_A->>NodoDominio: ITI-78: Busca un paciente en el MPI <br /> [GET /Patient?identifier=<ID_Local>]
NodoDominio->>FederadorNacion: Busca un paciente en el Federador <br /> [GET /Patient?identifier=<ID_Local>]
FederadorNacion-->>NodoDominio: 200 OK (PatientSearchset)
NodoDominio-->>HIS_A: 200 OK (Patient Searchset)

View File

@ -7,7 +7,7 @@
"test": "jest"
},
"dependencies": {
"axios": "^1.3.5",
"axios": "1.14.0",
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"dotenv": "^16.0.0",
@ -16,13 +16,15 @@
"jade": "~1.11.0",
"morgan": "~1.9.1",
"pino": "^10.3.1",
"uuid": "^14.0.0"
"uuid": "9.0.1"
},
"devDependencies": {
"jest": "^30.3.0"
},
"jest": {
"testEnvironment": "node",
"setupFiles": ["./tests/setup.js"]
"setupFiles": [
"./tests/setup.js"
]
}
}
}

43
diagramaContenedores.puml Normal file
View File

@ -0,0 +1,43 @@
@startuml
skinparam backgroundColor #FFFFFF
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
title Diagrama de Contenedores para la Conectatón Argentina
System_Ext(historiaClinica, 'HCI', 'Registtra la historia clinica y genera resumenes de historia clinica (IPS)')
System_Boundary(nodo, 'Nodo'){
Container(nginx, 'nginx', 'Nginx', 'Direcciona las llamadas a los contenedores correspondientes')
Container(hapiFHIR, 'hapi-fhir', 'Java', 'Servidor HAPI FHIR. Brinda soporte para el almacenamiento de documentos IPS')
Container(busGateway, 'bus-gateway', 'NodeJS/Express', 'Orquesta la comunicación con los servicios del Ministerio de Salud de la nación')
ContainerDb(hapiDB, 'hapi-db', 'Postgres', 'Almacena datos del servidor HAPI FHIR')
}
System_Boundary(pins, 'PINS'){
Container(federador, 'Federador', 'Java/SpringBoot', 'Brinda la funcionalidad para la federación, busqueda y obtención de pacientes')
Container(indiceDocumentos, 'Indice de Documentos', 'Java/SpringBoot', 'Servicio de registro, busqueda y obtencion de referencias a documentos de salud')
}
Rel(historiaClinica, nginx, 'Provee documento IPS')
Rel(historiaClinica, nginx, 'Consulta el indice de documentos')
Rel(historiaClinica, nginx, 'Obtiene documentos IPS')
Rel(historiaClinica, nginx, 'Federa pacientes')
Rel(nginx, busGateway, 'Delega ITI65, ITI67, ITI104 e ITI78')
Rel(nginx, hapiFHIR, 'Delega ITI68')
Rel(busGateway, hapiFHIR, 'Guarda documento IPS')
Rel(hapiFHIR, hapiDB, 'Persiste datos')
Rel(busGateway, federador, 'Federa, busca y recupera pacientes')
Rel(busGateway, indiceDocumentos, 'Registra, busca y repuera referencias a documentos')
@enduml

View File

@ -3,7 +3,8 @@ services:
container_name: hapi-fhir
image: "hapiproject/hapi:latest"
depends_on:
- hapi-db
hapi-db:
condition: service_healthy
volumes:
- ./hapi-config:/data/hapi
environment:
@ -31,53 +32,17 @@ services:
networks:
- hapi-network
healthcheck:
test: [ "CMD-SHELL", "pg_isready -p 5433" ]
test: ["CMD-SHELL", "pg_isready -p 5433"]
interval: 20s
timeout: 10s
retries: 5
command: -p 5433
gdhcn-validator-service:
container_name: gdhcn-validator-service
image: createchile/gdhcn-validator_backend:v1.1
ports:
- 8182:8080
secrets:
- trust-network-cert
- trust-network-key
- signature-key
environment:
- POSTGRES_DB=gdhcn-validator
- SERVER_PORT=8080
- SPRING_DATASOURCE_URL=jdbc:postgresql://gdhcn-db:5432/gdhcn-validator
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=root
- TNG_TLS_PEM=/run/secrets/trust-network-cert
- TNG_TLS_KEY=/run/secrets/trust-network-key
- TNG_DSC_PRIVATEKEY=/run/secrets/signature-key
- TNG_COUNTRY=AR
- TNG_DSC_PRIVATEKEY_KID=I1BAX8FATLs=
- GDHCN_BASEURL=${NODO_URL_BASE:-http://localhost}/gdhcn
networks:
- hapi-network
volumes:
- ./json:/json
gdhcn-db:
container_name: gdhcn-db
image: postgres:16-alpine
restart: always
volumes:
- gdhcn-data:/var/lib/postgresql/data
networks:
- hapi-network
environment:
- POSTGRES_DB=gdhcn-validator
- POSTGRES_USER=root
- POSTGRES_PASSWORD=root
bus-gateway:
container_name: bus-gateway
depends_on:
hapi-fhir:
condition: service_started
build:
context: ./bus-gateway
environment:
@ -102,8 +67,10 @@ services:
container_name: nginx
image: nginx:alpine
depends_on:
- hapi-fhir
- bus-gateway
hapi-fhir:
condition: service_started
bus-gateway:
condition: service_started
environment:
TZ: ${TZ:-America/Argentina/Buenos_Aires}
ports:
@ -126,17 +93,8 @@ volumes:
hapi-data:
name: hapi-data
driver: local
gdhcn-data:
name: gdhcn-data
driver: local
secrets:
ssl_cert:
file: ${SSL_CERT_PATH:-./certs/server.crt}
ssl_key:
file: ${SSL_KEY_PATH:-./certs/server.key}
trust-network-cert:
file: ${SIGNATURE_CERT_PATH:-./certs/trust-network.pem}
trust-network-key:
file: ${SIGNATURE_KEY_PATH:-./certs/trust-network.key}
signature-key:
file: ${SSL_DCC_KEY_PATH:-./certs/signature.key}

View File

@ -66,15 +66,6 @@ http {
proxy_read_timeout 90s;
}
location /gdhcn/ {
proxy_pass http://gdhcn-validator-service:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 90s;
}
# Todo lo demás va a hapi-fhir
location / {
proxy_pass http://hapi_fhir;

View File

@ -82,15 +82,6 @@ http {
proxy_read_timeout 90s;
}
location /gdhcn/ {
proxy_pass http://gdhcn-validator-service:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 90s;
}
# Todo lo demás va a hapi-fhir
location / {
proxy_pass http://hapi_fhir;

File diff suppressed because one or more lines are too long