Skip to content

Commit 03889c4

Browse files
Merge pull request #5290 from simpledotorg/master
2 parents 313257e + c1833db commit 03889c4

20 files changed

+800
-117
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,12 @@
6262
- Bug fixes in CI workflows
6363
- Fetch `lab_based_cvd_risk_calculation_sheet` from remote config
6464
- Add `cholesterol_value` to `MedicalHistory` table
65-
- Bump AGP to v8.8.1
6665
- Fix JSON variable name in non-lab based statin calculation sheet
6766
- Add `LabBasedCVDRiskCalculator` and effect to calculate lab based cvd risk
6867
- Add `CholesterolEntrySheet`
68+
- Bump AGP to v8.8.2
69+
- Calculate lab-based CVD risk score
70+
- Update copy of statin nudge to support lab-based nudge
6971

7072
### Fixes
7173

app/src/main/java/org/simple/clinic/cvdrisk/CVDRiskLevel.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@ import org.simple.clinic.R
66
enum class CVDRiskLevel(val displayStringResId: Int, val color: Color) {
77
LOW_HIGH(R.string.statin_alert_low_high_risk_patient_x, Color(0xFFFF7A00)),
88
MEDIUM_HIGH(R.string.statin_alert_medium_high_risk_patient_x, Color(0xFFFF7A00)),
9-
HIGH(R.string.statin_alert_high_risk_patient_x, Color(0xFFFF3355));
9+
HIGH(R.string.statin_alert_high_risk_patient_x, Color(0xFFFF3355)),
10+
VERY_HIGH(R.string.statin_alert_very_high_risk_range, Color(0xFFFF3355));
1011

1112
companion object {
1213
fun compute(cvdRiskRange: CVDRiskRange): CVDRiskLevel {
1314
return when {
1415
cvdRiskRange.min < 5 -> LOW_HIGH
1516
cvdRiskRange.min < 10 -> MEDIUM_HIGH
16-
else -> HIGH
17+
cvdRiskRange.min < 20 -> HIGH
18+
else -> VERY_HIGH
1719
}
1820
}
1921
}

app/src/main/java/org/simple/clinic/cvdrisk/StatinInfo.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,19 @@ import org.simple.clinic.patientattribute.BMIReading
77

88
@Parcelize
99
data class StatinInfo(
10-
val canPrescribeStatin: Boolean,
10+
val canShowStatinNudge: Boolean,
1111
val cvdRisk: CVDRiskRange? = null,
1212
val isSmoker: Answer = Answer.Unanswered,
1313
val bmiReading: BMIReading? = null,
1414
val hasCVD: Boolean = false,
15+
val hasDiabetes: Boolean = false,
16+
val age: Int = 0,
17+
val cholesterol: Float? = null,
1518
) : Parcelable {
1619
companion object {
1720
fun default(): StatinInfo {
1821
return StatinInfo(
19-
canPrescribeStatin = false,
22+
canShowStatinNudge = false,
2023
)
2124
}
2225
}

app/src/main/java/org/simple/clinic/medicalhistory/MedicalHistory.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import androidx.room.Query
1212
import androidx.room.RawQuery
1313
import androidx.sqlite.db.SimpleSQLiteQuery
1414
import io.reactivex.Flowable
15-
import io.reactivex.Observable
1615
import kotlinx.parcelize.Parcelize
1716
import org.simple.clinic.medicalhistory.Answer.Unanswered
1817
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.DiagnosedWithDiabetes
@@ -69,6 +68,14 @@ data class MedicalHistory(
6968

7069
val deletedAt: Instant?
7170
) : Parcelable {
71+
72+
companion object {
73+
74+
fun convertCholesterolToMmol(cholesterol: Float): Float {
75+
return cholesterol / 38.67f
76+
}
77+
}
78+
7279
val diagnosisRecorded: Boolean
7380
get() = diagnosedWithHypertension != Unanswered && diagnosedWithDiabetes != Unanswered
7481

app/src/main/java/org/simple/clinic/medicalhistory/sync/MedicalHistoryPayload.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ data class MedicalHistoryPayload(
4646
@Json(name = "smoking")
4747
val isSmoking: Answer,
4848

49-
@Json(name = "cholesterol_value")
49+
@Json(name = "cholesterol")
5050
val cholesterol: Float?,
5151

5252
@Json(name = "created_at")

app/src/main/java/org/simple/clinic/summary/PatientSummaryEffect.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,5 @@ data class ShowHypertensionDiagnosisWarning(val continueToDiabetesDiagnosisWarni
141141
data object ShowSmokingStatusDialog : PatientSummaryViewEffect()
142142

143143
data class OpenBMIEntrySheet(val patientUuid: UUID) : PatientSummaryViewEffect()
144+
145+
data class OpenCholesterolEntrySheet(val patientUuid: UUID) : PatientSummaryViewEffect()

app/src/main/java/org/simple/clinic/summary/PatientSummaryEffectHandler.kt

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ import org.simple.clinic.cvdrisk.CVDRiskRange
1616
import org.simple.clinic.cvdrisk.CVDRiskRepository
1717
import org.simple.clinic.cvdrisk.LabBasedCVDRiskInput
1818
import org.simple.clinic.cvdrisk.NonLabBasedCVDRiskInput
19-
import org.simple.clinic.cvdrisk.StatinInfo
2019
import org.simple.clinic.cvdrisk.calculator.LabBasedCVDRiskCalculator
2120
import org.simple.clinic.cvdrisk.calculator.NonLabBasedCVDRiskCalculator
2221
import org.simple.clinic.drugs.DiagnosisWarningPrescriptions
2322
import org.simple.clinic.drugs.PrescriptionRepository
2423
import org.simple.clinic.facility.Facility
2524
import org.simple.clinic.facility.FacilityRepository
25+
import org.simple.clinic.medicalhistory.MedicalHistory
2626
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion
2727
import org.simple.clinic.medicalhistory.MedicalHistoryRepository
2828
import org.simple.clinic.overdue.AppointmentRepository
@@ -233,7 +233,7 @@ class PatientSummaryEffectHandler @AssistedInject constructor(
233233
systolic = bloodPressure.reading.systolic,
234234
isSmoker = medicalHistory.isSmoking,
235235
diagnosedWithDiabetes = medicalHistory.diagnosedWithDiabetes,
236-
cholesterol = null //Update once the value is available in medical history
236+
cholesterol = medicalHistory.cholesterol?.let { MedicalHistory.convertCholesterolToMmol(it) }
237237
)
238238
)
239239
}
@@ -279,18 +279,20 @@ class PatientSummaryEffectHandler @AssistedInject constructor(
279279
.observeOn(schedulersProvider.io())
280280
.map { effect ->
281281
val patientUuid = effect.patientUuid
282+
val patient = patientRepository.patientImmediate(patientUuid)
282283
val medicalHistory = medicalHistoryRepository.historyForPatientOrDefaultImmediate(
283284
defaultHistoryUuid = uuidGenerator.v4(),
284285
patientUuid = patientUuid
285286
)
286-
val bmiReading = patientAttributeRepository.getPatientAttributeImmediate(patientUuid)
287-
val cvdRisk = cvdRiskRepository.getCVDRiskImmediate(patientUuid)
288-
StatinInfoLoaded(StatinInfo(
289-
canPrescribeStatin = cvdRisk?.riskScore?.canPrescribeStatin ?: false,
290-
cvdRisk = cvdRisk?.riskScore,
291-
isSmoker = medicalHistory.isSmoking,
292-
bmiReading = bmiReading?.bmiReading,
293-
))
287+
val patientAttribute = patientAttributeRepository.getPatientAttributeImmediate(patientUuid)
288+
val riskRange = cvdRiskRepository.getCVDRiskImmediate(patientUuid)?.riskScore
289+
290+
StatinInfoLoaded(
291+
age = patient!!.ageDetails.estimateAge(userClock),
292+
medicalHistory = medicalHistory,
293+
riskRange = riskRange,
294+
bmiReading = patientAttribute?.bmiReading,
295+
)
294296
}
295297
}
296298
}

app/src/main/java/org/simple/clinic/summary/PatientSummaryEvent.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package org.simple.clinic.summary
22

33
import org.simple.clinic.cvdrisk.CVDRisk
44
import org.simple.clinic.cvdrisk.CVDRiskRange
5-
import org.simple.clinic.cvdrisk.StatinInfo
65
import org.simple.clinic.drugs.DiagnosisWarningPrescriptions
76
import org.simple.clinic.drugs.PrescribedDrug
87
import org.simple.clinic.facility.Facility
98
import org.simple.clinic.medicalhistory.Answer
109
import org.simple.clinic.medicalhistory.MedicalHistory
1110
import org.simple.clinic.overdue.Appointment
11+
import org.simple.clinic.patientattribute.BMIReading
1212
import org.simple.clinic.patientattribute.PatientAttribute
1313
import org.simple.clinic.reassignpatient.ReassignPatientSheetClosedFrom
1414
import org.simple.clinic.reassignpatient.ReassignPatientSheetOpenedFrom
@@ -163,7 +163,10 @@ data class CVDRiskCalculated(
163163
data object CVDRiskUpdated : PatientSummaryEvent()
164164

165165
data class StatinInfoLoaded(
166-
val statinInfo: StatinInfo
166+
val age: Int,
167+
val medicalHistory: MedicalHistory,
168+
val riskRange: CVDRiskRange?,
169+
val bmiReading: BMIReading?,
167170
) : PatientSummaryEvent()
168171

169172
data object AddSmokingClicked : PatientSummaryEvent()
@@ -175,3 +178,7 @@ data class SmokingStatusAnswered(
175178
data object BMIReadingAdded : PatientSummaryEvent()
176179

177180
data object AddBMIClicked : PatientSummaryEvent()
181+
182+
data object AddCholesterolClicked: PatientSummaryEvent()
183+
184+
data object CholesterolAdded : PatientSummaryEvent()

app/src/main/java/org/simple/clinic/summary/PatientSummaryScreen.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ import org.simple.clinic.reassignpatient.ReassignPatientSheetOpenedFrom
7171
import org.simple.clinic.remoteconfig.ConfigReader
7272
import org.simple.clinic.scheduleappointment.ScheduleAppointmentSheet
7373
import org.simple.clinic.scheduleappointment.facilityselection.FacilitySelectionScreen
74+
import org.simple.clinic.summary.addcholesterol.CholesterolEntrySheet
7475
import org.simple.clinic.summary.addphone.AddPhoneNumberDialog
7576
import org.simple.clinic.summary.compose.StatinNudge
7677
import org.simple.clinic.summary.linkId.LinkIdWithPatientSheet.LinkIdWithPatientSheetKey
@@ -327,8 +328,11 @@ class PatientSummaryScreen :
327328
StatinNudge(
328329
statinInfo = statinInfo,
329330
modifier = Modifier.padding(start = 8.dp, end = 8.dp, top = 8.dp),
331+
isNonLabBasedStatinNudgeEnabled = features.isEnabled(Feature.NonLabBasedStatinNudge),
332+
isLabBasedStatinNudgeEnabled = features.isEnabled(Feature.LabBasedStatinNudge),
330333
addSmokingClick = { additionalEvents.notify(AddSmokingClicked) },
331-
addBMIClick = { additionalEvents.notify(AddBMIClicked) }
334+
addBMIClick = { additionalEvents.notify(AddBMIClicked) },
335+
addCholesterol = { additionalEvents.notify(AddCholesterolClicked) }
332336
)
333337
}
334338
}
@@ -360,6 +364,10 @@ class PatientSummaryScreen :
360364
is ScreenRequest.BMIEntrySheet -> {
361365
additionalEvents.notify(BMIReadingAdded)
362366
}
367+
368+
is ScreenRequest.CholesterolEntrySheet -> {
369+
additionalEvents.notify(CholesterolAdded)
370+
}
363371
}
364372
}
365373

@@ -757,6 +765,10 @@ class PatientSummaryScreen :
757765
.show()
758766
}
759767

768+
override fun openCholesterolEntrySheet(patientUuid: UUID) {
769+
router.pushExpectingResult(ScreenRequest.CholesterolEntrySheet, CholesterolEntrySheet.Key(patientUuid))
770+
}
771+
760772
override fun openBMIEntrySheet(patientUuid: UUID) {
761773
router.pushExpectingResult(ScreenRequest.BMIEntrySheet, BMIEntrySheet.Key(patientUuid))
762774
}
@@ -903,5 +915,8 @@ class PatientSummaryScreen :
903915

904916
@Parcelize
905917
data object BMIEntrySheet : ScreenRequest()
918+
919+
@Parcelize
920+
data object CholesterolEntrySheet : ScreenRequest()
906921
}
907922
}

app/src/main/java/org/simple/clinic/summary/PatientSummaryUiActions.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,5 @@ interface PatientSummaryUiActions {
4242
fun showHypertensionDiagnosisWarning(continueToDiabetesDiagnosisWarning: Boolean)
4343
fun showSmokingStatusDialog()
4444
fun openBMIEntrySheet(patientUuid: UUID)
45+
fun openCholesterolEntrySheet(patientUuid: UUID)
4546
}

0 commit comments

Comments
 (0)