Skip to main content

AJ FHIR Immunisation App

v1.0.0 · Spring Boot 3.3 · HAPI FHIR 7.4 · Java 21 · Port 8084 · Apache 2.0

A dedicated SMART on FHIR application for vaccination management. Unlike the general-purpose SMART Client, this app focuses entirely on immunization: vaccination history, WHO schedule forecasting, and printable WHO VDS-NC digital certificates with QR codes.

What it does​

Auth Server :9000            Immunisation App :8084           HAPI FHIR :8080
│ │ │
│◄── GET /.well-known/ ─────────│ │
│ smart-configuration │ │
│──► authorization_endpoint ────│ │
│ │── GET /oauth2/authorize ────►│
│ │── POST /oauth2/token ───────►│
│◄── access_token │ (patient + Immunization │
│ patient=P/ePatient-xxx ─── │ scopes granted) │
│ need_patient_banner=true │ │
│ │── GET Immunization?patient──►│
│ │◄── vaccination history ──────│
│ │── GET ImmunizationRec... ──►│
│ │◄── forecast / due dates ─────│
│ │── GET Patient/{id} ─────────►│
│ │◄── demographics ─────────────│
│ │ │
│ Dashboard, History, Schedule, Certificate │

Key features​

FeatureDetail
Vaccination historyFull Immunization record — vaccine, date, dose number, lot number, series, administering facility, route, site
WHO schedule forecastImmunizationRecommendation — overdue, due, immune status with due dates
VDS-NC digital certificateWHO-compliant QR code payload (ICAO Doc 9303 structure), printable vaccination card
Caffeine cacheFHIR queries cached 5 minutes per patient — no repeated HAPI calls during navigation
SMART v2.2 full handshakePKCE S256, dynamic discovery, RS256 id_token validation, proactive token refresh
Separate registered clientOwn client_id, own scopes — consent is scoped to patient/Immunization.rs only

SMART scopes​

launch
openid
fhirUser
patient/Patient.rs
patient/Immunization.rs
patient/ImmunizationRecommendation.rs

Three patient scopes only — the minimum needed. Consent is granted specifically for immunization data, not for general clinical access.

Platform port map​

PortService
8080HAPI FHIR JPA
8081SMART Client (general)
8082Consent Manager
8083Referral Module
8084This app
9000Auth Server

Why a dedicated app​

The existing SMART Client reads Patient, Condition, and Medication — it is a general clinical record viewer. Immunization workflows are clinically distinct:

  • School nurses need vaccination status without seeing diagnoses or medications
  • Travel health clinics need a focused certificate generator, not a full record viewer
  • Public health practitioners need population-level vaccination coverage views
  • Consent is narrower — a patient can consent to share vaccination records without sharing conditions or medications

Separate registration means separate scope grants and separate consent records in the Consent Manager.


Next: Quick Start →