Skip to content

Commit

Permalink
chore: complete logical model of HIV program
Browse files Browse the repository at this point in the history
  • Loading branch information
JohanGHole committed Sep 12, 2023
1 parent a55d686 commit 5bd5693
Show file tree
Hide file tree
Showing 9 changed files with 288 additions and 89 deletions.
66 changes: 66 additions & 0 deletions input/fsh/models/basepatient.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
Logical: PatientInfo
Title: "Base Patient Data Model"
Description: "Representation of common DHIS2 tracked entity properties."

* registrationDateTime 1..1 dateTime "Date-Time information was entered" "Date and Time when the patient information was entered into DHIS2"
* firstregisteredAt 1..1 Reference(Organization) "The Org unit where the patient was first registered"
* firstName 0..1 string "Given name of the patient"
* lastName 0..1 string "Family name"
* dateOfBirth 1..1 string "..."
* dateOfBirthIsEstimated 0..1 boolean "..."
* sexAtBirth 1..1 code "..."
* sexAtBirth from PatientSexAtBirthVS (example)
* ^comment = "(valueset depends on the program)"
* currentHomeAddress 1..1 string ""
* contactPhoneNumber 1..1 string ""
* countryOfBirth 0..1 string "..."
* countryOfBirth from urn:iso:std:iso:3166 (example)
* nationaId 0..1 string "..."
* consent 0..1 boolean "..."


// @Name: Local Code Systems

// Define a local code system
CodeSystem: PatientSexAtBirth
Id: patient-sex-at-birth
Title: "Patient Sex at Birth"
Description: "Patient sex at birth."
* #male "Male"
* ^designation[+].language = #pt
* ^designation[=].value = "Masculino"
* ^designation[+].language = #es
* ^designation[=].value = "Masculino"
* ^designation[+].language = #et
* ^designation[=].value = "Mees"
* #female "Female"
* ^designation[+].language = #pt
* ^designation[=].value = "Feminino"
* ^designation[+].language = #es
* ^designation[=].value = "Feminino"
* ^designation[+].language = #et
* ^designation[=].value = "Naine"
* #other "Other"
* ^designation[+].language = #pt
* ^designation[=].value = "Outro"
* ^designation[+].language = #es
* ^designation[=].value = "Otro"
* ^designation[+].language = #et
* ^designation[=].value = "Muu"
* #unknown "Unknown"
* ^designation[+].language = #pt
* ^designation[=].value = "Desconhecido"
* ^designation[+].language = #es
* ^designation[=].value = "Desconocido"
* ^designation[+].language = #et
* ^designation[=].value = "Teadmata"



ValueSet: PatientSexAtBirthVS
Id: patient-sex-at-birth-vs
Title: "Patient Sex at Birth Value Set"
Description: "patient sex at birth value set."
// The "include" in this rule is optional
// http://varnomen.hgvs.org can be replaced with an alias
* include codes from system PatientSexAtBirth
50 changes: 50 additions & 0 deletions input/fsh/models/hivCaseData.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
Logical: HIVCaseData
Title: "HIV Initial Case Report"
Description: "Initial case report filled out after enrollment."
* initialCaseReportDate 1..1 date "Initial Case Report"

* dateHIVPositiveTest 1..1 date "Date of documented positive HIV test"
* ageWhenDiagnosedWithHiv 0..1 integer "Age at diagnosis"
* verticalTransmission 0..1 boolean "Vertical transmission"
* typeOfTesting 0..1 Coding "Type of community-level testing"
* typeOfTesting from HIVtypeOfTestingVS (example)
* facilityLevelTestingEntryPoint 0..1 Coding "Entry point for facility-level testing"
* facilityLevelTestingEntryPoint from HIVfacilityLevelTestingEntryPointsVS (example)
* patientInKeyPopGroup 1..1 boolean "Does this person belong to any Key Population groups"
* keyPopGroupMenWhoHaveSexWithMen 0..1 boolean "Key population - Men who have sex with men"
* keyPopGroupInjectionDrugUser 0..1 boolean "Key population - Injection drug user"
* keyPopGroupPrisoner 0..1 boolean "Key population - Prisoner"
* keyPopGroupSexWorker 0..1 boolean "Key population - Sex worker"
* keyPopGroupTransgender 0..1 boolean "Key population - Transgender"


// Local code systems
CodeSystem: HIVtypeOfTesting
Title: "HIV Type of Testing"
Description: "HIV type of community-level testing."
* #MOBILE "Mobile testing (e.g. through vans or temporary testing facilities)"
* #VOLUNTARYCTC "Voluntary counceling and testing centres (not within a health facility setting)"
* #OTHERCOMMUNITY "Other community based testing"

CodeSystem: HIVfacilityLevelTestingEntryPoints
Title: "HIV Entry Points for Facility-Level Testing"
Description: "HIV entry points for facility-level testing."
* #PROVIDERINITIATED "Provider-initiated tested in a clinic or emergency facility"
* #ANTENATALCLINIC "Antenatal care clinic"
* #VOLUNTARYCOUNSELLING "Voluntary Counselling and Testing (within a health facility setting)"
* #FAMILYPLANNING "Family planning clinic"
* #OTHERFACILITY "Other facility-level testing"
* #TBCLINIC "TB clinic"



// Local value sets
ValueSet: HIVtypeOfTestingVS
Title: "HIV Type of Testing Value Set"
Description: "HIV type of testing value set."
* include codes from system HIVtypeOfTesting

ValueSet: HIVfacilityLevelTestingEntryPointsVS
Title: "HIV Entry Points for Facility-Level Testing Value Set"
Description: "HIV entry points for facility-level testing value set."
* include codes from system HIVfacilityLevelTestingEntryPoints
77 changes: 77 additions & 0 deletions input/fsh/models/hivCaseVisitData.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
Logical: HIVCaseVisitData
Title: "HIV Visit"
Description: "Report filled out during facility visit."

* visitDate 1..1 date "Viral load test date"
* dueDate 1..1 date "Visit due date"
* reasonForVisit 0..1 Coding "The reason for this visit"
* reasonForVisit from HIVreasonsForVisitVS (example)
* treatmentStarted 0..1 boolean "Is the patient currently on treatment"
* dateARTInitiation 0..1 date "Date of ART initiation"
* eligibleforTBPreventiveTreatment 0..1 boolean "Is patient eligible for preventive treatment"
// TODO: add constraint: TPT data elements are only filled out IF eligibleForTBPreventiveTreatment is true
* TPTEligibleDate 0..1 date "TPT Date Eligible"
* TPTInitiatedDate 0..1 date "TPT Date Initiated"
* TPTRegimen 0..1 Coding "TPT Regimen"
* TPTRegimen from HIVtptRegimenVS (example)
* TPTCompletedDate 0..1 date "TPT Date Completed"
* TPTrestartTreatment 0..1 boolean "TPT restart treatment"
* treatmentStatus 0..1 Coding "Treatment status"
* treatmentStatus from HIVtreatmentStatusVS (example)
* viralLoadTestDate 0..1 date "Viral load test date"
* viralLoadLessThanThousand 0..1 boolean "Viral load < 1000"
* numberOfviralLoadTestResults 0..1 integer "Viral load test results"
* previousViralLoadValue 0..1 integer "Previous viral load value"
* lastDateWithART 0..1 date "Last day with ART"
* dateOfDeath 0..1 date "Date of death"
* statusChangeDate 0..1 date "Status change date"
* currentlyPregnant 0..1 boolean "Currently pregnant?"
* daysARTdispensed 0..1 integer "Days of ART provided"

// Local code systems
CodeSystem: HIVreasonsForVisit
Title: "HIV Reasons for Visit"
Description: "HIV reasons for visit."
* #CLINICAL_VISIT "Clinical visit"
* #ARV_PICKUP "Antiretroviral drug pick up"
* #ISSUES "Issues and concerns"

// Local code systems
CodeSystem: HIVtptRegimen
Title: "HIV TPT Regimen"
Description: "HIV TPT regimen."
* #1HP "1HP (one month of daily rifapentine plus isoniazid)"
* #3HP "3HP (three months of weekly rifapentine plus isoniazid)"
* #3RH "3RH (three months of daily rifampicin plus isoniazid)"
* #4R "4R (four months of daily rifampicin monotherapy)"
* #6H "6H (six months of daily isoniazid monotherapy)"
* #9H "9H (nine months of daily isoniazid monotherapy)"
* #INH-B6 "Combination INH-B6-Cotrim (for the duration of INH specified)"
* #OTHERTPT "Other"

CodeSystem: HIVtreatmentStatus
Title: "HIV Treatment Status"
Description: "HIV treatment status."
* #RETAINED "On ART"
* #DEAD "Death (documented)"
* #TREATMENTSTOPPED "Refused (stopped) treatment"
* #TRANSFEROUT "Transferred out"
* #LTFU "Lost to follow up"



// Local value sets
ValueSet: HIVreasonsForVisitVS
Title: "HIV Reasons for Visit Value Set"
Description: "HIV reasons for visit value set."
* include codes from system HIVreasonsForVisit

ValueSet: HIVtptRegimenVS
Title: "HIV TPT Regimen Value Set"
Description: "HIV tpt regimen value set."
* include codes from system HIVtptRegimen

ValueSet: HIVtreatmentStatusVS
Title: "HIV Treatment Status Value Set"
Description: "HIV treatment status value set."
* include codes from system HIVtreatmentStatus
58 changes: 58 additions & 0 deletions input/fsh/models/hivFollowUp.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
Logical: HIVFollowUp
Title: "HIV Follow-Up"
Description: "Report filled out for follow-up."
* followUpAttemptDate 1..1 date ""
* followUpMethod 1..1 Coding ""
* followUpMethod from HIVFollowUpMethodsVS (example)
* followUpOutcome 1..1 Coding ""
* followUpOutcome from HIVFollowUpOutcomesVS (example)
* followUpReason 1..1 Coding ""
* followUpReason from HIVReasonsForFollowUpVS (example)
* followUpNotes 0..1 string ""

// Local Code systems
CodeSystem: HIVFollowUpMethods
Title: "HIV Follow-up Methods"
Description: "Methods used for HIV follow-up."
* #SMS "Text message"
* #PHONECALL "Phone"
* #HOMEVISIT "Home Visit"
* #OTHER "Other"

CodeSystem: HIVFollowUpOutcomes
Title: "HIV Follow-up Outcomes"
Description: "Outcomes for HIV follow-up."
* #RESCHEDULED "Returning to clinic"
* #TRANSFERRED_OUT "Self-transferred out"
* #HOSPITALIZED "Hospitalized"
* #REFUSED_TO_RETURN "Refused to return"
* #NORESPONSE "Not located"
* #DIED_REPORTED "Died (reported)"
* #DIED_CONFIRMED "Confirmed Dead"

CodeSystem: HIVReasonsForFollowUp
Title: "HIV Follow-up Reasons"
Description: "Reasons for HIV follow-up."
* #MISSED_CLINICAL_VISIT "Missed clinical care visit"
* #MISSED_ARV_PICKUP "Missed medication pickup"
* #MISSED_VISIT_NONCLINICAL "Missed non-clinical visit"
* #ART_NOT_STARTED "Did not initiate ART"
* #HIV_INCONCLUSIVE "Inconclusive HIV status"
* #TEST_RESULTS "Test results received"
* #OTHER_REASON "Other follow up reason (specify)"

// ValueSets
ValueSet: HIVFollowUpMethodsVS
Title: "HIV Follow-up Methods Value Set"
Description: "A value set including all methods used for HIV follow-up."
* include codes from system HIVFollowUpMethods

ValueSet: HIVFollowUpOutcomesVS
Title: "HIV Follow-up Outcome Value Set"
Description: "A value set including all possible outcomes of HIV follow-up."
* include codes from system HIVFollowUpOutcomes

ValueSet: HIVReasonsForFollowUpVS
Title: "HIV Follow-up Reasons Value Set"
Description: "A value set including all possible reasons for HIV follow-up."
* include codes from system HIVReasonsForFollowUp
30 changes: 25 additions & 5 deletions input/fsh/models/hivpatient.fsh
Original file line number Diff line number Diff line change
@@ -1,15 +1,35 @@
Logical: HIVPatientInfo
Parent: PatientInfo
Title: "HIV Patient data model"
Description: "When a patient is added, we register the person the enrollment info"
Title: "HIV Patient Data Model"
Description: "Extension of the base patient data model. Includes properties specific to the HIV program."

* hivEnrollmentUnit 0..1 string "The organization that has first registered the person"
* programNationaId 0..* Identifier "..."
* deceased 0..1 boolean "Is patient deceased?"
* deceasedDate 0..1 boolean "When did patient die?"
* gender 1..1 Coding ""
* gender from HIVPatientGenderVS (example)
* ^comment = "(valueset depends on the program)"
* healthFacilityCode 0..1 string "..."
* nhisId 0..1 string "..."

// * healthFacilityCode 0..1 string "..."
// * nhisId 0..1 string "..."
// @Name: Local Code Systems
// Define a local code system
CodeSystem: HIVPatientGender
Id: patient-gender
Title: "Patient Gender"
Description: "Patient gender codes."
* #male "Male"
* #female "Female"
* #transgender "Transgender"
* #other "Other"
* #unknown "Unknown"


// @Name: Local Code Systems

ValueSet: HIVPatientGenderVS
Title: "Patient Gender Value Set"
Description: "patient gender value set."
// The "include" in this rule is optional
// http://varnomen.hgvs.org can be replaced with an alias
* include codes from system HIVPatientGender
58 changes: 9 additions & 49 deletions input/fsh/models/hivprogram.fsh
Original file line number Diff line number Diff line change
@@ -1,50 +1,10 @@
Logical: HIVCaseData

* initialCaseReportDate 1..1 date "Initial Case Report"

* dateHIVPositiveTest 1..1 date "Date of documented positive HIV test"
* typeOfTesting 0..1 Coding "Type of community-level testing"
* facilityLevelTestingEntryPoint 0..1 Coding "Entry point for facility-level testing"
//* patientInKeyPopGroup 1..1 "Does this person belong to any Key Population groups"
* keyPopGroup 0..* Coding "Key Population group or groups this person belongs to"




Logical: HIVCaseVisitData

* visitDate 1..1 date "Visit date"
* dueDate 1..1 date "Visit due date"
* reasonForVisit 0..1 Coding "The reason for this visit"
* treatmentStarted 0..1 boolean "Is the patient currently on treatment"
* dateARTInitiation 0..1 date "Date of ART initiation"
// TBD: add the constraint that can only be filled IF treatmentStarted is true
* eligibleforTBPreventiveTreatment 0..1 boolean "Is patient eligible for preventive treatment"
* treatmentStatus 0..1 Coding "The reason for this visit"
* currentlyPregnant 0..1 boolean ""
* daysARTdispensed 0..1 integer ""
* TPTEligibleDate 0..1 date "..."
* TPTRegimen 0..1 Coding "..."
* TPTInitiatedDate 0..1 date "..."
* TPTCompletedDate 0..1 date "..."

Logical: HIVFollowUp

* followUpAttemptDate 0..1 date ""
* followUpOutcome 0..1 Coding ""



Logical: HIVView

* CaseReport 0..1 HIVCaseData ""
* Visit 0..* date ""
* FollowUp 0..* date ""

* dateHIVPositiveTest 1..1 date "Date of documented positive HIV test"
* typeOfTesting 0..1 Coding "Type of community-level testing"
* facilityLevelTestingEntryPoint 0..1 Coding "Entry point for facility-level testing"
//* patientInKeyPopGroup 1..1 "Does this person belong to any Key Population groups"
* keyPopGroup 0..* Coding "Key Population group or groups this person belongs to"


Title: "HIV Case Surveillance"
Description: "Logical model representation of the HIV case surveillance and treatment follow up program."

// Program stages
* caseReport 0..1 HIVCaseData "HIV Initial Case Report"
* visit 0..* HIVCaseVisitData "HIV Visit"
* followUp 0..* HIVFollowUp "HIV Follow-Up"
// enrollment
* patient 1..1 HIVPatientInfo "HIV Patient Info"
32 changes: 0 additions & 32 deletions input/fsh/models/hivprogram.fshOriginal

This file was deleted.

Loading

0 comments on commit 5bd5693

Please sign in to comment.