Kenya ePrescription FHIR Implementation Guide
0.1.0 - ci-build Kenya flag

Kenya ePrescription FHIR Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Resource Profile: Kenya eRx Medication

Official URL: https://nshr-uat.sha.go.ke/StructureDefinition/ke-medication Version: 0.1.0
Draft as of 2026-04-24 Computable Name: KEMedication

Copyright/Legal: Copyright 2025+ Digital Health Agency, Kenya. This content is licensed under Creative Commons Attribution 4.0 International (CC-BY-4.0). Terminology content from the Kenya Pharmacy and Poisons Board (PPB) via Open Concept Lab (OCL) is subject to separate terms.

Profile on Medication for the Kenya eRx Implementation Guide. Represents a drug product from the Kenya MOH PPB product catalogue.

Usages:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

Description of Profiles, Differentials, Snapshots and how the different presentations work.

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Medication 0..* Medication Definition of a Medication
... meta SΣ 1..1 Meta Metadata about the resource
.... profile SΣ 1..* canonical(StructureDefinition) Profiles this resource claims to conform to.
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... code SΣ 1..1 CodeableConcept Medicinal product code from Kenya MOH PPB Generic Products
Binding: https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs (required)
... status ?!SΣ 1..1 code Medication status (active, inactive, entered-in-error)
Binding: Medication Status Codes (required)
... manufacturer Σ 0..1 Reference(Organization) Manufacturer of the product
... form S 1..1 CodeableConcept Dose form (tablet, syrup, injection, etc.)
Binding: https://nshr-uat.sha.go.ke/ValueSet/formulation-vs (required)
... amount Σ 0..1 Ratio Strength ratio (e.g. 500 mg / tablet)
... ingredient S 0..* BackboneElement Active or inactive ingredient
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... item[x] S 1..1 CodeableConcept Active component from Kenya MOH PPB Active Components
Binding: https://nshr-uat.sha.go.ke/ValueSet/active-components-vs (required)
.... strength S 0..1 Ratio Active ingredient strength (UCUM units)
... batch S 0..1 BackboneElement Details about packaged medications
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... lotNumber S 0..1 string Lot or batch number
.... expirationDate S 0..1 dateTime Expiry date of the product

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Medication.code Base required https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs Not State Unknown
Medication.status Base required Medication status codes 📦4.0.1 FHIR Std.
Medication.form Base required https://nshr-uat.sha.go.ke/ValueSet/formulation-vs Not State Unknown
Medication.ingredient.​item[x] Base required https://nshr-uat.sha.go.ke/ValueSet/active-components-vs Not State Unknown

Constraints

Id Grade Path(s) Description Expression
dom-2 error Medication If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Medication If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Medication If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error Medication If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Medication A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from Medication

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Medication 0..* Medication Definition of a Medication
... meta S 1..1 Meta Metadata about the resource
.... profile S 1..* canonical(StructureDefinition) Profiles this resource claims to conform to.
... identifier S 1..* Identifier Product catalogue identifier (PPB or facility-assigned)
... code S 1..1 CodeableConcept Medicinal product code from Kenya MOH PPB Generic Products
Binding: https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs (required)
... manufacturer 0..1 Reference(Organization) Manufacturer of the product
... form S 1..1 CodeableConcept Dose form (tablet, syrup, injection, etc.)
Binding: https://nshr-uat.sha.go.ke/ValueSet/formulation-vs (required)
... amount 0..1 Ratio Strength ratio (e.g. 500 mg / tablet)
... ingredient S 0..* BackboneElement Active or inactive ingredient
.... item[x] S 1..1 CodeableConcept Active component from Kenya MOH PPB Active Components
Binding: https://nshr-uat.sha.go.ke/ValueSet/active-components-vs (required)
.... strength S 0..1 Ratio Active ingredient strength (UCUM units)
... batch S 0..1 BackboneElement Details about packaged medications
.... lotNumber S 0..1 string Lot or batch number
.... expirationDate S 0..1 dateTime Expiry date of the product

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Medication.code Base required https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs Not State Unknown
Medication.status Base required Medication status codes 📦4.0.1 FHIR Std.
Medication.form Base required https://nshr-uat.sha.go.ke/ValueSet/formulation-vs Not State Unknown
Medication.ingredient.​item[x] Base required https://nshr-uat.sha.go.ke/ValueSet/active-components-vs Not State Unknown
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Medication 0..* Medication Definition of a Medication
... id Σ 0..1 id Logical id of this artifact
... meta SΣ 1..1 Meta Metadata about the resource
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... versionId Σ 0..1 id Version specific identifier
.... lastUpdated Σ 0..1 instant When the resource version last changed
.... source Σ 0..1 uri Identifies where the resource comes from
.... profile SΣ 1..* canonical(StructureDefinition) Profiles this resource claims to conform to.
.... security Σ 0..* Coding Security Labels applied to this resource
Binding: All Security Labels (extensible): Security Labels from the Healthcare Privacy and Security Classification System.
.... tag Σ 0..* Coding Tags applied to this resource
Binding: CommonTags (example): Codes that represent various types of tags, commonly workflow-related; e.g. "Needs review by Dr. Jones".
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier SΣ 1..* Identifier Product catalogue identifier (PPB or facility-assigned)
... code SΣ 1..1 CodeableConcept Medicinal product code from Kenya MOH PPB Generic Products
Binding: https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs (required)
... status ?!SΣ 1..1 code Medication status (active, inactive, entered-in-error)
Binding: Medication Status Codes (required)
... manufacturer Σ 0..1 Reference(Organization) Manufacturer of the product
... form S 1..1 CodeableConcept Dose form (tablet, syrup, injection, etc.)
Binding: https://nshr-uat.sha.go.ke/ValueSet/formulation-vs (required)
... amount Σ 0..1 Ratio Strength ratio (e.g. 500 mg / tablet)
... ingredient S 0..* BackboneElement Active or inactive ingredient
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... item[x] S 1..1 CodeableConcept Active component from Kenya MOH PPB Active Components
Binding: https://nshr-uat.sha.go.ke/ValueSet/active-components-vs (required)
.... isActive 0..1 boolean Active ingredient indicator
.... strength S 0..1 Ratio Active ingredient strength (UCUM units)
... batch S 0..1 BackboneElement Details about packaged medications
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... lotNumber S 0..1 string Lot or batch number
.... expirationDate S 0..1 dateTime Expiry date of the product

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Medication.meta.security Base extensible SecurityLabels 📍4.0.1 FHIR Std.
Medication.meta.tag Base example Common Tags 📍4.0.1 FHIR Std.
Medication.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Medication.code Base required https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs Not State Unknown
Medication.status Base required Medication status codes 📦4.0.1 FHIR Std.
Medication.form Base required https://nshr-uat.sha.go.ke/ValueSet/formulation-vs Not State Unknown
Medication.ingredient.​item[x] Base required https://nshr-uat.sha.go.ke/ValueSet/active-components-vs Not State Unknown

Constraints

Id Grade Path(s) Description Expression
dom-2 error Medication If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Medication If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Medication If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error Medication If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Medication A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from Medication

Summary

Mandatory: 6 elements
Must-Support: 12 elements

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Medication 0..* Medication Definition of a Medication
... meta SΣ 1..1 Meta Metadata about the resource
.... profile SΣ 1..* canonical(StructureDefinition) Profiles this resource claims to conform to.
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... code SΣ 1..1 CodeableConcept Medicinal product code from Kenya MOH PPB Generic Products
Binding: https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs (required)
... status ?!SΣ 1..1 code Medication status (active, inactive, entered-in-error)
Binding: Medication Status Codes (required)
... manufacturer Σ 0..1 Reference(Organization) Manufacturer of the product
... form S 1..1 CodeableConcept Dose form (tablet, syrup, injection, etc.)
Binding: https://nshr-uat.sha.go.ke/ValueSet/formulation-vs (required)
... amount Σ 0..1 Ratio Strength ratio (e.g. 500 mg / tablet)
... ingredient S 0..* BackboneElement Active or inactive ingredient
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... item[x] S 1..1 CodeableConcept Active component from Kenya MOH PPB Active Components
Binding: https://nshr-uat.sha.go.ke/ValueSet/active-components-vs (required)
.... strength S 0..1 Ratio Active ingredient strength (UCUM units)
... batch S 0..1 BackboneElement Details about packaged medications
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... lotNumber S 0..1 string Lot or batch number
.... expirationDate S 0..1 dateTime Expiry date of the product

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Medication.code Base required https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs Not State Unknown
Medication.status Base required Medication status codes 📦4.0.1 FHIR Std.
Medication.form Base required https://nshr-uat.sha.go.ke/ValueSet/formulation-vs Not State Unknown
Medication.ingredient.​item[x] Base required https://nshr-uat.sha.go.ke/ValueSet/active-components-vs Not State Unknown

Constraints

Id Grade Path(s) Description Expression
dom-2 error Medication If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Medication If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Medication If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error Medication If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Medication A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

Differential View

This structure is derived from Medication

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Medication 0..* Medication Definition of a Medication
... meta S 1..1 Meta Metadata about the resource
.... profile S 1..* canonical(StructureDefinition) Profiles this resource claims to conform to.
... identifier S 1..* Identifier Product catalogue identifier (PPB or facility-assigned)
... code S 1..1 CodeableConcept Medicinal product code from Kenya MOH PPB Generic Products
Binding: https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs (required)
... manufacturer 0..1 Reference(Organization) Manufacturer of the product
... form S 1..1 CodeableConcept Dose form (tablet, syrup, injection, etc.)
Binding: https://nshr-uat.sha.go.ke/ValueSet/formulation-vs (required)
... amount 0..1 Ratio Strength ratio (e.g. 500 mg / tablet)
... ingredient S 0..* BackboneElement Active or inactive ingredient
.... item[x] S 1..1 CodeableConcept Active component from Kenya MOH PPB Active Components
Binding: https://nshr-uat.sha.go.ke/ValueSet/active-components-vs (required)
.... strength S 0..1 Ratio Active ingredient strength (UCUM units)
... batch S 0..1 BackboneElement Details about packaged medications
.... lotNumber S 0..1 string Lot or batch number
.... expirationDate S 0..1 dateTime Expiry date of the product

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Medication.code Base required https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs Not State Unknown
Medication.status Base required Medication status codes 📦4.0.1 FHIR Std.
Medication.form Base required https://nshr-uat.sha.go.ke/ValueSet/formulation-vs Not State Unknown
Medication.ingredient.​item[x] Base required https://nshr-uat.sha.go.ke/ValueSet/active-components-vs Not State Unknown

Snapshot View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Medication 0..* Medication Definition of a Medication
... id Σ 0..1 id Logical id of this artifact
... meta SΣ 1..1 Meta Metadata about the resource
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... versionId Σ 0..1 id Version specific identifier
.... lastUpdated Σ 0..1 instant When the resource version last changed
.... source Σ 0..1 uri Identifies where the resource comes from
.... profile SΣ 1..* canonical(StructureDefinition) Profiles this resource claims to conform to.
.... security Σ 0..* Coding Security Labels applied to this resource
Binding: All Security Labels (extensible): Security Labels from the Healthcare Privacy and Security Classification System.
.... tag Σ 0..* Coding Tags applied to this resource
Binding: CommonTags (example): Codes that represent various types of tags, commonly workflow-related; e.g. "Needs review by Dr. Jones".
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier SΣ 1..* Identifier Product catalogue identifier (PPB or facility-assigned)
... code SΣ 1..1 CodeableConcept Medicinal product code from Kenya MOH PPB Generic Products
Binding: https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs (required)
... status ?!SΣ 1..1 code Medication status (active, inactive, entered-in-error)
Binding: Medication Status Codes (required)
... manufacturer Σ 0..1 Reference(Organization) Manufacturer of the product
... form S 1..1 CodeableConcept Dose form (tablet, syrup, injection, etc.)
Binding: https://nshr-uat.sha.go.ke/ValueSet/formulation-vs (required)
... amount Σ 0..1 Ratio Strength ratio (e.g. 500 mg / tablet)
... ingredient S 0..* BackboneElement Active or inactive ingredient
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... item[x] S 1..1 CodeableConcept Active component from Kenya MOH PPB Active Components
Binding: https://nshr-uat.sha.go.ke/ValueSet/active-components-vs (required)
.... isActive 0..1 boolean Active ingredient indicator
.... strength S 0..1 Ratio Active ingredient strength (UCUM units)
... batch S 0..1 BackboneElement Details about packaged medications
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... lotNumber S 0..1 string Lot or batch number
.... expirationDate S 0..1 dateTime Expiry date of the product

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Medication.meta.security Base extensible SecurityLabels 📍4.0.1 FHIR Std.
Medication.meta.tag Base example Common Tags 📍4.0.1 FHIR Std.
Medication.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Medication.code Base required https://nshr-uat.sha.go.ke/ValueSet/generic-products-vs Not State Unknown
Medication.status Base required Medication status codes 📦4.0.1 FHIR Std.
Medication.form Base required https://nshr-uat.sha.go.ke/ValueSet/formulation-vs Not State Unknown
Medication.ingredient.​item[x] Base required https://nshr-uat.sha.go.ke/ValueSet/active-components-vs Not State Unknown

Constraints

Id Grade Path(s) Description Expression
dom-2 error Medication If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Medication If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Medication If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error Medication If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Medication A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from Medication

Summary

Mandatory: 6 elements
Must-Support: 12 elements

 

Other representations of profile: CSV, Excel, Schematron