Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
a39c30f
chore: replace IPS package with NEHR-IPS package
JohanGHole Sep 3, 2025
381d613
chore: generate db-dump from metadata.json and replace ANC package
JohanGHole Sep 3, 2025
80edf1c
feat: TEI->FHIR nehr patient mapping
JohanGHole Sep 5, 2025
598464e
Merge branch 'main' into FEAT(INTEROP-87)-Sri-Lanka-demo
JohanGHole Sep 5, 2025
bf0ea76
fix: merge issues
JohanGHole Sep 5, 2025
fc086ef
chore: replace IPS package with NEHR-IPS package
JohanGHole Sep 3, 2025
33225a7
chore: generate db-dump from metadata.json and replace ANC package
JohanGHole Sep 3, 2025
b0f05e4
feat: TEI->FHIR nehr patient mapping
JohanGHole Sep 5, 2025
9ea8cd3
fix: solve errors following rebase
cjmamo Sep 5, 2025
fcb21cf
Merge branch 'FEAT(INTEROP-87)-Sri-Lanka-demo' of https://github.com/…
JohanGHole Sep 5, 2025
d8974f3
prepare for demo environment
cjmamo Sep 5, 2025
9f593ef
prepare for demo environment
cjmamo Sep 5, 2025
8208a13
prepare for demo environment
cjmamo Sep 8, 2025
d36e3a0
prepare for demo environment
cjmamo Sep 8, 2025
c23cc59
prepare for demo environment
cjmamo Sep 8, 2025
aca00ee
prepare for demo environment
cjmamo Sep 8, 2025
51cc076
prepare for demo environment
cjmamo Sep 8, 2025
5d5a701
prepare for demo environment
cjmamo Sep 8, 2025
9179f72
prepare for demo environment
cjmamo Sep 8, 2025
fc83411
prepare for demo environment
cjmamo Sep 8, 2025
1eb3ca1
prepare for demo environment
cjmamo Sep 8, 2025
4915bef
prepare for demo environment
cjmamo Sep 8, 2025
e7a2ad1
prepare for demo environment
cjmamo Sep 8, 2025
2d18650
prepare for demo environment
cjmamo Sep 8, 2025
9521ccd
prepare for demo environment
cjmamo Sep 8, 2025
27fea71
prepare for demo environment
cjmamo Sep 8, 2025
cc3095d
prepare for demo environment
cjmamo Sep 8, 2025
e5ce6d8
prepare for demo environment
cjmamo Sep 8, 2025
c85942b
prepare for demo environment
cjmamo Sep 8, 2025
c1ef059
prepare for demo environment
cjmamo Sep 8, 2025
709b293
prepare for demo environment
cjmamo Sep 8, 2025
545ad9c
prepare for demo environment
cjmamo Sep 8, 2025
7fc01bb
prepare for demo environment
cjmamo Sep 8, 2025
2f2bd2b
prepare for demo environment
cjmamo Sep 8, 2025
d9e848a
prepare for demo environment
cjmamo Sep 8, 2025
0d2b4ca
prepare for demo environment
cjmamo Sep 8, 2025
a2af5c1
Merge branch 'FEAT(INTEROP-87)-Sri-Lanka-demo' of https://github.com/…
JohanGHole Sep 8, 2025
24c4326
prepare for demo environment
cjmamo Sep 5, 2025
718fc73
feat: fetch dhis2 system information and populate Device Information …
JohanGHole Sep 8, 2025
ce51bf3
Merge branch 'FEAT(INTEROP-87)-Sri-Lanka-demo' of https://github.com/…
JohanGHole Sep 8, 2025
1bf77ab
prepare for demo environment
cjmamo Sep 8, 2025
2e28379
prepare for demo environment
cjmamo Sep 8, 2025
d509dc9
Merge branch 'FEAT(INTEROP-87)-Sri-Lanka-demo' of https://github.com/…
JohanGHole Sep 8, 2025
c61418d
test: add docker-compose.test.yml overlay
cjmamo Sep 9, 2025
f70f5fa
Merge branch 'FEAT(INTEROP-87)-Sri-Lanka-demo' of https://github.com/…
JohanGHole Sep 9, 2025
8d79132
chore: replace IPS package with NEHR-IPS package
JohanGHole Sep 3, 2025
7a0d25a
chore: generate db-dump from metadata.json and replace ANC package
JohanGHole Sep 3, 2025
617a74d
feat: TEI->FHIR nehr patient mapping
JohanGHole Sep 5, 2025
7033219
fix: merge issues
JohanGHole Sep 5, 2025
e13ff03
chore: replace IPS package with NEHR-IPS package
JohanGHole Sep 3, 2025
cd0c50f
feat: TEI->FHIR nehr patient mapping
JohanGHole Sep 5, 2025
80b9cb4
fix: solve errors following rebase
cjmamo Sep 5, 2025
5e6e696
prepare for demo environment
cjmamo Sep 5, 2025
e160e6c
prepare for demo environment
cjmamo Sep 5, 2025
bd23a35
prepare for demo environment
cjmamo Sep 8, 2025
83d5128
prepare for demo environment
cjmamo Sep 8, 2025
edd995e
prepare for demo environment
cjmamo Sep 8, 2025
dded437
prepare for demo environment
cjmamo Sep 8, 2025
1183ffc
prepare for demo environment
cjmamo Sep 8, 2025
44bfec3
prepare for demo environment
cjmamo Sep 8, 2025
0e677e0
prepare for demo environment
cjmamo Sep 8, 2025
5fed72d
prepare for demo environment
cjmamo Sep 8, 2025
0b35b96
prepare for demo environment
cjmamo Sep 8, 2025
62828c7
prepare for demo environment
cjmamo Sep 8, 2025
4a2781b
prepare for demo environment
cjmamo Sep 8, 2025
ecd706f
prepare for demo environment
cjmamo Sep 8, 2025
775b15e
prepare for demo environment
cjmamo Sep 8, 2025
ef01c06
prepare for demo environment
cjmamo Sep 8, 2025
5cdbfbe
prepare for demo environment
cjmamo Sep 8, 2025
2bc1087
prepare for demo environment
cjmamo Sep 8, 2025
552fc9d
prepare for demo environment
cjmamo Sep 8, 2025
19a253c
prepare for demo environment
cjmamo Sep 8, 2025
ccbe2a4
prepare for demo environment
cjmamo Sep 8, 2025
5094ba0
prepare for demo environment
cjmamo Sep 8, 2025
c551227
prepare for demo environment
cjmamo Sep 8, 2025
33274e8
prepare for demo environment
cjmamo Sep 8, 2025
5e78e21
prepare for demo environment
cjmamo Sep 8, 2025
2178d8a
prepare for demo environment
cjmamo Sep 8, 2025
614dcc2
feat: fetch dhis2 system information and populate Device Information …
JohanGHole Sep 8, 2025
1779cd5
prepare for demo environment
cjmamo Sep 5, 2025
22a9fe1
prepare for demo environment
cjmamo Sep 8, 2025
404d37c
test: add docker-compose.test.yml overlay
cjmamo Sep 9, 2025
d372c8f
test: bump timeout
cjmamo Sep 9, 2025
80096df
test: bump timeout
cjmamo Sep 9, 2025
a791679
test: bump timeout
cjmamo Sep 9, 2025
0ad3b5c
test: bump timeout
cjmamo Sep 9, 2025
6011c50
prepare for demo environment
cjmamo Sep 9, 2025
2931969
prepare for demo environment
cjmamo Sep 9, 2025
c759da0
prepare for demo environment
cjmamo Sep 9, 2025
6b9045f
prepare for demo environment
cjmamo Sep 9, 2025
2c927a7
fix: solve errors following rebase
cjmamo Sep 9, 2025
8719a77
prepare for demo environment
cjmamo Sep 9, 2025
0c4ffe6
read from .env file for esignet private key
cjmamo Sep 9, 2025
e092afe
Merge branch 'FEAT(INTEROP-87)-Sri-Lanka-demo' of https://github.com/…
JohanGHole Sep 9, 2025
176d1e4
fix: 2e2 test failure with nehr patient
JohanGHole Sep 9, 2025
22bc533
fix: add robustness to nehr patient mapping
JohanGHole Sep 9, 2025
400a102
solve SSL errors in fhir agent: remove custom e2e timeouts; add loggi…
cjmamo Sep 10, 2025
60392f6
solve SSL errors in fhir agent
cjmamo Sep 10, 2025
11e80e2
tolerate unexpected address structure; reformat
cjmamo Sep 10, 2025
4b1f9c5
tolerate unexpected address structure
cjmamo Sep 10, 2025
1b8edfd
refactor: minor log change
cjmamo Sep 10, 2025
f59d378
fix: some details for remote esignet usage
KaiVandivier Sep 10, 2025
ada730c
fix: mapping for SL demo
KaiVandivier Sep 10, 2025
99a7151
feat: calculate age
KaiVandivier Sep 10, 2025
6864cf8
fix: send age as a string
KaiVandivier Sep 10, 2025
32557a3
pull secret from Docker Compose .env file
cjmamo Sep 11, 2025
5ebe31f
pull service URL from Docker Compose .env file
cjmamo Sep 11, 2025
e7da95b
pull env vars Docker Compose .env file
cjmamo Sep 11, 2025
7194bb4
pull env vars Docker Compose .env file
cjmamo Sep 11, 2025
90810e5
remove un-referenced volumes
cjmamo Sep 11, 2025
114468d
chore: update ANC metadata
JohanGHole Sep 11, 2025
8aceae7
Merge branch 'FEAT(INTEROP-87)-Sri-Lanka-demo' of https://github.com/…
JohanGHole Sep 11, 2025
62147af
chore: update ANC metadata to remove hidden unenrolled TEIs
JohanGHole Sep 11, 2025
4a5f141
refactor: modularize datasonnet transformations
JohanGHole Sep 14, 2025
551055c
feat: dhis2 user => practitioner mapping
JohanGHole Sep 14, 2025
be36727
Merge branch 'main' into FEAT(INTEROP-87)-Sri-Lanka-demo
KaiVandivier Sep 15, 2025
bb64dff
feat: program stages => encounters mapping
JohanGHole Sep 15, 2025
9dca5fa
feat: registration data elements => fhir resources
JohanGHole Sep 15, 2025
9ca6d21
feat: ANC visit program stage data elements => resources
JohanGHole Sep 16, 2025
1f06d07
feat: referral program stage DEs => fhir resources
JohanGHole Sep 17, 2025
7bcd72f
fix: ensure resource uniqueness for registration resources
JohanGHole Sep 17, 2025
aeca3d2
fix: ensure uniqueness for anc visit resource IDs
JohanGHole Sep 17, 2025
1a7f799
fix: remove TEI dependency from libsonnet files
JohanGHole Sep 17, 2025
2594c76
feat: allow routes to the integration server
KaiVandivier Sep 17, 2025
96dce60
feat: include esignet sub as fhir patient identifier
JohanGHole Sep 18, 2025
6b14fbe
fix: update hemoglobin data element to use correct fhir data type
JohanGHole Sep 18, 2025
c129890
feat: update dhis2 metadata
JohanGHole Sep 18, 2025
71880ec
feat: map individual_id claim
KaiVandivier Sep 25, 2025
23bbf63
fix: plugin shrinking bug on Windows
KaiVandivier Oct 1, 2025
f917809
fix: more generic styles
KaiVandivier Oct 1, 2025
6b653a9
feat: add DHIS2 eSignet login config
netroms Oct 2, 2025
53df986
feat: add DHIS2 eSignet login config
netroms Oct 2, 2025
20a72e3
Added PHN Plugin
ajhmohammed Oct 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion config/dhis2/dhis.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,33 @@ connection.url = jdbc:postgresql://dhis2-db:5432/dhis
connection.username = dhis
connection.password = dhis

route.remote_servers_allowed = http://mock-relying-party-service:8888
route.remote_servers_allowed = http://mock-relying-party-service:8888,https://mosip.integration.dhis2.org

server.base.url = https://mosip.integration.dhis2.org/
oauth2.server.enabled = on

# Enables JWT Bearer tokens usage
oidc.jwt.token.authentication.enabled = on

# Enables OIDC login
oidc.oauth2.login.enabled = on

# eSignet variables:
oidc.provider.esignet.client_id = [DHIS2_ESIGNET_CLIENT_ID]
oidc.provider.esignet.client_secret = my-client-secret
oidc.provider.esignet.mapping_claim = email
oidc.provider.esignet.scopes = profile openid
oidc.provider.esignet.authorization_uri = https://esignet-mosipid.collab.mosip.net/authorize
oidc.provider.esignet.token_uri = https://esignet-mosipid.collab.mosip.net/v1/esignet/oauth/v2/token
oidc.provider.esignet.user_info_uri = https://esignet-mosipid.collab.mosip.net/v1/esignet/oidc/userinfo
oidc.provider.esignet.issuer_uri = https://esignet-mosipid.collab.mosip.net/v1/esignet
oidc.provider.esignet.jwk_uri = https://esignet-mosipid.collab.mosip.net/.well-known/jwks.json
oidc.provider.esignet.client_authentication_method = private_key_jwt
oidc.provider.esignet.keystore_path = /opt/dhis2/esignet_online.jks
oidc.provider.esignet.keystore_password = mypass
oidc.provider.esignet.key_alias = esignet
oidc.provider.esignet.key_password = mypass
oidc.provider.esignet.jwk_set_url = https://mosip.integration.dhis2.org/api/publicKeys/esignet/jwks.json
oidc.provider.esignet.redirect_url = https://mosip.integration.dhis2.org/oauth2/code/esignet
oidc.provider.esignet.display_alias = Log in with eSignet
oidc.provider.esignet.login_image = /dhis-web-commons/oidc/esignet.svg
89 changes: 36 additions & 53 deletions config/dhis2/pluginConfig.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"WSGAb5XwJ3Y": [
"eozjj9UivfS": [
{
"id": "default",
"elements": [
Expand All @@ -8,104 +8,87 @@
"type": "plugin",
"fieldMap": [
{
"IdFromApp": "A6Hb0Kvg4vb",
"IdFromApp": "EOMGwaUTMrU",
"objectType": "TrackedEntityAttribute",
"IdFromPlugin": "address"
},
{
"IdFromApp": "NI0QRzJvQ0k",
"IdFromApp": "Yie7mOY913J",
"objectType": "TrackedEntityAttribute",
"IdFromPlugin": "dateOfBirth"
},
{
"IdFromApp": "sB1IHYu2xQT",
"IdFromApp": "VQl0wK3eqiw",
"objectType": "TrackedEntityAttribute",
"IdFromPlugin": "givenName"
"IdFromPlugin": "fullName"
},
{
"IdFromApp": "ENRjVGxVL6l",
"IdFromApp": "gGAQeOr1Pgu",
"objectType": "TrackedEntityAttribute",
"IdFromPlugin": "familyName"
"IdFromPlugin": "phone"
},
{
"IdFromApp": "ciCR6BBvIT4",
"IdFromApp": "CSZevH4P5yV",
"objectType": "TrackedEntityAttribute",
"IdFromPlugin": "phone"
"IdFromPlugin": "registrationNumber"
},
{
"IdFromApp": "p7zizFkC6Lv",
"objectType": "TrackedEntityAttribute",
"IdFromPlugin": "gender"
},
{
"IdFromApp": "u5AESfSOhIG",
"objectType": "TrackedEntityAttribute",
"IdFromPlugin": "age"
},
{
"IdFromApp": "CJLJmmp8r9g",
"objectType": "TrackedEntityAttribute",
"IdFromPlugin": "subjectId"
},
{
"IdFromApp": "PpEGiQurAll",
"IdFromApp": "M6NNPC3hNrb",
"objectType": "TrackedEntityAttribute",
"IdFromPlugin": "uniqueId"
"IdFromPlugin": "individualId"
}
],
"pluginSource": "http://localhost:8080/api/apps/esignet-capture-plugin/plugin.html"
},
{
"id": "PpEGiQurAll",
"type": "TrackedEntityAttribute"
},
{
"id": "sB1IHYu2xQT",
"type": "TrackedEntityAttribute"
},
{
"id": "ENRjVGxVL6l",
"type": "TrackedEntityAttribute"
},
{
"id": "NI0QRzJvQ0k",
"type": "TrackedEntityAttribute"
},
{
"id": "B6TnnFMgmCk",
"type": "TrackedEntityAttribute"
},
{
"id": "A6Hb0Kvg4vb",
"type": "TrackedEntityAttribute"
},
{
"id": "ciCR6BBvIT4",
"type": "TrackedEntityAttribute"
},
{
"id": "qJdyXIggXXJ",
"type": "TrackedEntityAttribute"
"pluginSource": "https://mosip.integration.dhis2.org/api/apps/esignet-capture-plugin/plugin.html"
},
{
"id": "Y2smKuoVgDU",
"id": "CSZevH4P5yV",
"type": "TrackedEntityAttribute"
},
{
"id": "ALeyhBFw22F",
"id": "u5AESfSOhIG",
"type": "TrackedEntityAttribute"
},
{
"id": "LiiC5TIaqva",
"id": "Yie7mOY913J",
"type": "TrackedEntityAttribute"
},
{
"id": "NihUionWia1",
"id": "VQl0wK3eqiw",
"type": "TrackedEntityAttribute"
},
{
"id": "AoOp84H5Vt1",
"id": "p7zizFkC6Lv",
"type": "TrackedEntityAttribute"
},
{
"id": "ruUzdQRiYpy",
"id": "EOMGwaUTMrU",
"type": "TrackedEntityAttribute"
},
{
"id": "QjdN4mhh4UN",
"id": "M6NNPC3hNrb",
"type": "TrackedEntityAttribute"
},
{
"id": "rYnea37ReDs",
"id": "IrUmPkFMDU5",
"type": "TrackedEntityAttribute"
},
{
"id": "MRGgEyilusR",
"id": "gGAQeOr1Pgu",
"type": "TrackedEntityAttribute"
}
]
Expand Down
9 changes: 6 additions & 3 deletions config/ehr/hapi.application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,10 @@ hapi:
implementationguides:
ips:
packageUrl: file:///package.tgz
name: hl7.fhir.uv.ips
version: 2.0.0
name: lk-nehr-fhir-ips.r4
version: 0.1.0
installMode: STORE_AND_INSTALL
validate_resource_status_for_package_upload: false
### example from registry (packages.fhir.org)
# swiss:
# name: swiss.mednet.fhir
Expand Down Expand Up @@ -322,7 +324,8 @@ hapi:
server_address: "http://hapi.fhir.org/baseR4"
refuse_to_fetch_third_party_urls: false
fhir_version: R4
# validation:
# validation:
# enabled: true
# requests_enabled: true
# responses_enabled: true
# binary_storage_enabled: true
Expand Down
Binary file removed config/ehr/ips-package.tgz
Binary file not shown.
Binary file added config/ehr/nehr-ips-package.tgz
Binary file not shown.
Binary file added config/esignet/esignet_local.p12
Binary file not shown.
Binary file added config/esignet/mock_local.p12
Binary file not shown.
78 changes: 78 additions & 0 deletions config/reverse-proxy/nginx.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
worker_processes 1;

events {
worker_connections 1024;
}

http {
gzip on; # Enables compression, incl Web API content-types
gzip_types
"application/json;charset=utf-8" application/json
"application/javascript;charset=utf-8" application/javascript text/javascript
"application/xml;charset=utf-8" application/xml text/xml
"text/css;charset=utf-8" text/css
"text/plain;charset=utf-8" text/plain;

upstream dhis2 {
server dhis2:8080 max_fails=3 fail_timeout=60s;
}

upstream nehr {
server ehr:8080 max_fails=3 fail_timeout=60s;
}

upstream esignet-ui {
server esignet-ui:4000 max_fails=3 fail_timeout=60s;
}

# HTTP server - rewrite to force use of SSL
server {
listen 80;
rewrite ^ https://mosip.integration.dhis2.org$request_uri? permanent;
}

# HTTPS server
server {
listen 443 ssl;
client_max_body_size 10M;

ssl_certificate /etc/letsencrypt/live/mosip.integration.dhis2.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mosip.integration.dhis2.org/privkey.pem;

include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

# Proxy pass to servlet container
location / {
proxy_pass http://dhis2/;
proxy_redirect off;
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 https;
proxy_buffer_size 128k;
proxy_buffers 8 128k;
proxy_busy_buffers_size 256k;
proxy_cookie_path ~*^/(.*) "/$1; SameSite=Lax";
}

location /nehr/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://nehr/;

sub_filter_types text/html;
sub_filter_once off;
sub_filter 'href="/' 'href="/nehr/';
sub_filter 'src="/' 'src="/nehr/';
}

location /esignet/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://esignet-ui/;
}
}
}
Binary file removed db-dump/dump.sql.gz
Binary file not shown.
Binary file added db-dump/sri-lanka-anc-metadata-db.sql.gz
Binary file not shown.
36 changes: 36 additions & 0 deletions docker-compose.demo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
services:
dhis2-db:
volumes:
- dhis2-db:/var/lib/postgresql/data
reverse-proxy:
ports:
- "80:80"
- "443:443"
networks:
- ehr
volumes:
- ./config/reverse-proxy/nginx.conf:/etc/nginx/nginx.conf:ro
- /etc/letsencrypt:/etc/letsencrypt:ro
ehr:
volumes:
- ehr-db:/tmp
environment:
HAPI_FHIR_TESTER_HOME_SERVER_ADDRESS: https://mosip.integration.dhis2.org/nehr/fhir
HAPI_FHIR_SERVER_ADDRESS: https://mosip.integration.dhis2.org/nehr/fhir
SPRING_DATASOURCE_URL: jdbc:h2:file:/tmp/data/h2
esignet-db:
volumes:
- esignet-db:/var/lib/postgresql/data
mock-relying-party-service:
environment:
- ESIGNET_SERVICE_URL=${ESIGNET_SERVICE_URL}
- ESIGNET_AUD_URL=${ESIGNET_AUD_URL}
- CLIENT_PRIVATE_KEY=${CLIENT_PRIVATE_KEY}
fhir-sync-agent:
environment:
DHIS2APIURL: http://dhis2:8080/api

volumes:
dhis2-db:
esignet-db:
ehr-db:
Loading