IPTp-SP Digital Support System Implementation Guide
0.1.0 - ci-build Kenya flag

IPTp-SP Digital Support System Implementation Guide, published by IPTp-SP Digital Support System Implementation Team. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/daviemukungi/IPTp-FHIR-implementationIG/ and changes regularly. See the Directory of published versions

Resource Profile: IPTp ANC Provider

Official URL: http://iptp.kemri.go.ke/fhir/StructureDefinition/iptp-practitioner Version: 0.1.0
Draft as of 2026-06-30 Computable Name: IPTpPractitioner

An ANC health worker whitelisted to use the IPTp USSD enrollment system. Their MSISDN must be on the approved whitelist before access is granted.

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
.. Practitioner 0..* Practitioner A person with a formal responsibility in the provisioning of healthcare or related services
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:providerMSISDN S 1..1 string IPTp Provider MSISDN
URL: http://iptp.kemri.go.ke/fhir/StructureDefinition/iptp-provider-msisdn
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... active SΣ 1..1 boolean Whether this practitioner's record is in active use
... name SΣ 1..* HumanName The name(s) associated with the practitioner
... Slices for telecom SΣ 1..* ContactPoint A contact detail for the practitioner (that apply to all roles)
Slice: Unordered, Open by value:system
.... telecom:phone SΣ 1..1 ContactPoint A contact detail for the practitioner (that apply to all roles)
..... system ΣC 1..1 code phone | fax | email | pager | url | sms | other
Binding: ContactPointSystem (required): Telecommunications form for contact point.
Required Pattern: phone
..... value SΣ 1..1 string The actual contact point details
..... use ?!Σ 0..1 code home | work | temp | old | mobile - purpose of this contact point
Binding: ContactPointUse (required): Use of contact point.

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Practitioner.telecom:phone.​system Base required ContactPointSystem 📍4.0.1 FHIR Std.
Practitioner.telecom:phone.​use Base required ContactPointUse 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Practitioner If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Practitioner 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 Practitioner 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 Practitioner If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Practitioner 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 Practitioner

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Practitioner 0..* Practitioner A person with a formal responsibility in the provisioning of healthcare or related services
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:providerMSISDN S 1..1 string IPTp Provider MSISDN
URL: http://iptp.kemri.go.ke/fhir/StructureDefinition/iptp-provider-msisdn
... identifier S 1..* Identifier Provider identifier (national ID or facility staff ID)
... active S 1..1 boolean Whether this practitioner's record is in active use
... Slices for telecom S 1..* ContactPoint A contact detail for the practitioner (that apply to all roles)
Slice: Unordered, Open by value:system
.... telecom:phone S 1..1 ContactPoint A contact detail for the practitioner (that apply to all roles)
..... system 1..1 code phone | fax | email | pager | url | sms | other
Required Pattern: phone
..... value S 1..1 string The actual contact point details

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Practitioner 0..* Practitioner A person with a formal responsibility in the provisioning of healthcare or related services
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... 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
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:providerMSISDN S 1..1 string IPTp Provider MSISDN
URL: http://iptp.kemri.go.ke/fhir/StructureDefinition/iptp-provider-msisdn
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier SΣ 1..* Identifier Provider identifier (national ID or facility staff ID)
... active SΣ 1..1 boolean Whether this practitioner's record is in active use
... name SΣ 1..* HumanName The name(s) associated with the practitioner
... Slices for telecom SΣ 1..* ContactPoint A contact detail for the practitioner (that apply to all roles)
Slice: Unordered, Open by value:system
.... telecom:phone SΣ 1..1 ContactPoint A contact detail for the practitioner (that apply to all roles)
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
..... system ΣC 1..1 code phone | fax | email | pager | url | sms | other
Binding: ContactPointSystem (required): Telecommunications form for contact point.
Required Pattern: phone
..... value SΣ 1..1 string The actual contact point details
..... use ?!Σ 0..1 code home | work | temp | old | mobile - purpose of this contact point
Binding: ContactPointUse (required): Use of contact point.
..... rank Σ 0..1 positiveInt Specify preferred order of use (1 = highest)
..... period Σ 0..1 Period Time period when the contact point was/is in use
... address Σ 0..* Address Address(es) of the practitioner that are not role specific (typically home address)
... gender Σ 0..1 code male | female | other | unknown
Binding: AdministrativeGender (required): The gender of a person used for administrative purposes.
... birthDate Σ 0..1 date The date on which the practitioner was born
... photo 0..* Attachment Image of the person
... qualification 0..* BackboneElement Certification, licenses, or training pertaining to the provision of care
.... 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
.... identifier 0..* Identifier An identifier for this qualification for the practitioner
.... code 1..1 CodeableConcept Coded representation of the qualification
Binding: v2 table 0360, Version 2.7 (example): Specific qualification the practitioner has to provide a service.
.... period 0..1 Period Period during which the qualification is valid
.... issuer 0..1 Reference(Organization) Organization that regulates and issues the qualification
... communication 0..* CodeableConcept A language the practitioner can use in patient communication
Binding: CommonLanguages (preferred): A human language.
Additional BindingsPurpose
AllLanguages Max Binding


doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Practitioner.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Practitioner.telecom:phone.​system Base required ContactPointSystem 📍4.0.1 FHIR Std.
Practitioner.telecom:phone.​use Base required ContactPointUse 📍4.0.1 FHIR Std.
Practitioner.gender Base required AdministrativeGender 📍4.0.1 FHIR Std.
Practitioner.qualification.​code Base example v2 table 0360, Version 2.7 📦0360 FHIR Std.
Practitioner.communication Base preferred Common Languages 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Practitioner If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Practitioner 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 Practitioner 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 Practitioner If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Practitioner 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 Practitioner

Summary

Mandatory: 9 elements
Must-Support: 7 elements

Extensions

This structure refers to these extensions:

Slices

This structure defines the following Slices:

  • The element 1 is sliced based on the value of Practitioner.telecom

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Practitioner 0..* Practitioner A person with a formal responsibility in the provisioning of healthcare or related services
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:providerMSISDN S 1..1 string IPTp Provider MSISDN
URL: http://iptp.kemri.go.ke/fhir/StructureDefinition/iptp-provider-msisdn
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... active SΣ 1..1 boolean Whether this practitioner's record is in active use
... name SΣ 1..* HumanName The name(s) associated with the practitioner
... Slices for telecom SΣ 1..* ContactPoint A contact detail for the practitioner (that apply to all roles)
Slice: Unordered, Open by value:system
.... telecom:phone SΣ 1..1 ContactPoint A contact detail for the practitioner (that apply to all roles)
..... system ΣC 1..1 code phone | fax | email | pager | url | sms | other
Binding: ContactPointSystem (required): Telecommunications form for contact point.
Required Pattern: phone
..... value SΣ 1..1 string The actual contact point details
..... use ?!Σ 0..1 code home | work | temp | old | mobile - purpose of this contact point
Binding: ContactPointUse (required): Use of contact point.

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Practitioner.telecom:phone.​system Base required ContactPointSystem 📍4.0.1 FHIR Std.
Practitioner.telecom:phone.​use Base required ContactPointUse 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Practitioner If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Practitioner 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 Practitioner 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 Practitioner If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Practitioner 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 Practitioner

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Practitioner 0..* Practitioner A person with a formal responsibility in the provisioning of healthcare or related services
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:providerMSISDN S 1..1 string IPTp Provider MSISDN
URL: http://iptp.kemri.go.ke/fhir/StructureDefinition/iptp-provider-msisdn
... identifier S 1..* Identifier Provider identifier (national ID or facility staff ID)
... active S 1..1 boolean Whether this practitioner's record is in active use
... Slices for telecom S 1..* ContactPoint A contact detail for the practitioner (that apply to all roles)
Slice: Unordered, Open by value:system
.... telecom:phone S 1..1 ContactPoint A contact detail for the practitioner (that apply to all roles)
..... system 1..1 code phone | fax | email | pager | url | sms | other
Required Pattern: phone
..... value S 1..1 string The actual contact point details

doco Documentation for this format

Snapshot View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Practitioner 0..* Practitioner A person with a formal responsibility in the provisioning of healthcare or related services
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... 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
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:providerMSISDN S 1..1 string IPTp Provider MSISDN
URL: http://iptp.kemri.go.ke/fhir/StructureDefinition/iptp-provider-msisdn
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier SΣ 1..* Identifier Provider identifier (national ID or facility staff ID)
... active SΣ 1..1 boolean Whether this practitioner's record is in active use
... name SΣ 1..* HumanName The name(s) associated with the practitioner
... Slices for telecom SΣ 1..* ContactPoint A contact detail for the practitioner (that apply to all roles)
Slice: Unordered, Open by value:system
.... telecom:phone SΣ 1..1 ContactPoint A contact detail for the practitioner (that apply to all roles)
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
..... system ΣC 1..1 code phone | fax | email | pager | url | sms | other
Binding: ContactPointSystem (required): Telecommunications form for contact point.
Required Pattern: phone
..... value SΣ 1..1 string The actual contact point details
..... use ?!Σ 0..1 code home | work | temp | old | mobile - purpose of this contact point
Binding: ContactPointUse (required): Use of contact point.
..... rank Σ 0..1 positiveInt Specify preferred order of use (1 = highest)
..... period Σ 0..1 Period Time period when the contact point was/is in use
... address Σ 0..* Address Address(es) of the practitioner that are not role specific (typically home address)
... gender Σ 0..1 code male | female | other | unknown
Binding: AdministrativeGender (required): The gender of a person used for administrative purposes.
... birthDate Σ 0..1 date The date on which the practitioner was born
... photo 0..* Attachment Image of the person
... qualification 0..* BackboneElement Certification, licenses, or training pertaining to the provision of care
.... 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
.... identifier 0..* Identifier An identifier for this qualification for the practitioner
.... code 1..1 CodeableConcept Coded representation of the qualification
Binding: v2 table 0360, Version 2.7 (example): Specific qualification the practitioner has to provide a service.
.... period 0..1 Period Period during which the qualification is valid
.... issuer 0..1 Reference(Organization) Organization that regulates and issues the qualification
... communication 0..* CodeableConcept A language the practitioner can use in patient communication
Binding: CommonLanguages (preferred): A human language.
Additional BindingsPurpose
AllLanguages Max Binding


doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Practitioner.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Practitioner.telecom:phone.​system Base required ContactPointSystem 📍4.0.1 FHIR Std.
Practitioner.telecom:phone.​use Base required ContactPointUse 📍4.0.1 FHIR Std.
Practitioner.gender Base required AdministrativeGender 📍4.0.1 FHIR Std.
Practitioner.qualification.​code Base example v2 table 0360, Version 2.7 📦0360 FHIR Std.
Practitioner.communication Base preferred Common Languages 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Practitioner If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Practitioner 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 Practitioner 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 Practitioner If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Practitioner 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 Practitioner

Summary

Mandatory: 9 elements
Must-Support: 7 elements

Extensions

This structure refers to these extensions:

Slices

This structure defines the following Slices:

  • The element 1 is sliced based on the value of Practitioner.telecom

 

Other representations of profile: CSV, Excel, Schematron