Skip to main content

Kenya Terminology and Surveillance

This page covers how the Kenya pack codes clinical data against the Kenya National Health Terminology Service (KNHTS), and how that coding drives IDSR notifications and weekly KHIS reporting.

KNHTS is the terminology authority​

KNHTS is the Digital Health Agency's national terminology service. It runs on Open Concept Lab, and its public read API is https://ilm-hie.dha.go.ke/ocl.

The Kenya pack takes its coded values from KNHTS sources:

DomainKNHTS sourceFHIR system URIStatus
DiagnosesWHO/ICD-11 (MMS 2025-01)http://id.who.int/icd/release/11/mmsRequired; validated at entry
Legacy diagnosesWHO/ICD-10-WHO + ICD-10→ICD-11 mappingshttp://hl7.org/fhir/sid/icd-10Additional coding only
SHA benefits and interventionsMOH-KENYA/BenefitsAndInterventionshttps://ilm-hie.dha.go.ke/ocl/orgs/MOH-KENYA/sources/BenefitsAndInterventionsRequired on pre-authorisation items; validated before submission
ProceduresWHO/ICHI.../orgs/WHO/sources/ICHIBinding planned
LaboratoryRegenstrief/LOINChttp://loinc.orgPreferred
Medicines, vaccines, devicesMOH-PPB/HPT.../orgs/MOH-PPB/sources/HPTBinding planned
Allergies, identifier types, encounter types, document typesMOH-KENYA/* interface terminologies.../orgs/MOH-KENYA/sources/<id>Binding planned

Kenyan sources that have no published canonical URL are identified by their KNHTS source URL. The constants live in packages/core/src/kenya.ts: KenyaShaInterventionSystem, KenyaIchiSystem, KenyaHealthProductSystem, getKenyaKnhtsSystem() and the others.

SNOMED CT, CVX, RxNorm and ICD-10-CM are not published in KNHTS, so Kenya workflows do not use them.

ICD-11 diagnosis rule​

In projects with countryPack = kenya, every Condition.code and Claim.diagnosis[].diagnosisCodeableConcept must contain an ICD-11 MMS coding. The repository enforces this on every create and update, in packages/server/src/country-pack/kenya/icd11-diagnosis.ts:

  1. Format. The ICD-11 code must be well formed. A diagnosis coded only in ICD-10 is rejected.
  2. KNHTS lookup. Each code is looked up in KNHTS. For a postcoordinated code such as 1A00&XN..., every part is looked up. A code that KNHTS does not contain, or has retired, is rejected with an OperationOutcome naming the code.
  3. Outages. If KNHTS cannot be reached, the diagnosis is accepted on the format check and a warning is logged. A national-service outage never blocks a clinical write.

The rule runs only when the diagnoses are new or changed, so legacy ICD-10-only records can still receive other updates. System writes are not checked.

Settings​

SettingWhereValuesDefault
kenyaIcd11DiagnosisEnforcementProject settingenforce, warn, offenforce
knhtsValidationServer config (MEDPLUM_KNHTS_VALIDATION)true, falsetrue (off in tests)
knhtsBaseUrlServer config (MEDPLUM_KNHTS_BASE_URL)URLhttps://ilm-hie.dha.go.ke/ocl

Lookups are cached in the server process: found codes for 24 hours, unknown codes for 1 hour. Production egress must allow ilm-hie.dha.go.ke:443.

SHA intervention codes​

SHA pre-authorisation items (Claim.item.productOrService) are coded with KenyaShaInterventionSystem. Before the request is built, each intervention code is looked up in the KNHTS BenefitsAndInterventions source. Unknown codes return an error result, and nothing is sent to SHA.

IDSR immediate notification​

When a Condition with an immediately notifiable ICD-11 code is created or updated, the server asynchronously creates a Task (idsr-immediate-notification) and an AuditEvent. A matching code is the listed code or any of its child codes; ICD-10 codes are recognised when present as an additional coding. The server also stamps the Condition, so later updates don't notify again.

The notifiable list is KenyaIdsrImmediateNotifiableConditions in packages/core/src/kenya.ts:

ConditionICD-11 code(s)
Cholera1A00
Typhoid fever1A07
Plague1B93
Anthrax1B97
Tetanus neonatorum1C15
Diphtheria1C17
Meningococcal disease1C1C
Acute poliomyelitis1C81
Rabies1C82
Yellow fever1D47
Ebola disease1D60.0
Marburg disease1D60.1
Crimean-Congo haemorrhagic fever1D49
Arenavirus disease1D61
Viral haemorrhagic fever, not elsewhere classified1D86
Smallpox1E70
Mpox1E71
Measles1F03
Influenza due to identified zoonotic or pandemic influenza virus1E31
COVID-19RA01

KHIS weekly export (MOH 505)​

GET /fhir/R4/$khis-weekly-export aggregates the facility's Conditions for an epidemiological week (Sunday–Saturday):

  • What is counted. Conditions are counted as suspected or confirmed per weekly notifiable condition, using KenyaKhisWeeklyNotifiableConditions. That list is the immediate list plus endemic conditions such as tuberculosis, malaria, meningitis, acute respiratory infections and pneumonia.
  • Where it goes. Counts are posted to the DHIS2 dataValueSets API.
  • Zero reporting. Every weekly condition is submitted, with 0 when there were no cases.
  • Paging. All Conditions in the week are read page by page. If the week exceeds the server's search offset limit, the export fails rather than submitting partial counts.
  • Evidence. The submission and the DHIS2 import summary are stored as a DocumentReference.

Every ICD-11 code in both tables was verified against KNHTS on 2026-10-18.

Re-verifying codes after a KNHTS release​

Look up each table code in KNHTS and compare the display name:

curl -s https://ilm-hie.dha.go.ke/ocl/orgs/WHO/sources/ICD-11/concepts/1B91/ | jq -r .display_name
# Leptospirosis

A 404 means the code is not in KNHTS. Request missing national concepts through the KNHTS request service instead of defining them locally.