Skip to content

Commit c1833db

Browse files
authored
1 parent f567bc5 commit c1833db

File tree

11 files changed

+247
-93
lines changed

11 files changed

+247
-93
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@
6666
- Add `LabBasedCVDRiskCalculator` and effect to calculate lab based cvd risk
6767
- Add `CholesterolEntrySheet`
6868
- 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: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ 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,
@@ -19,7 +19,7 @@ data class StatinInfo(
1919
companion object {
2020
fun default(): StatinInfo {
2121
return StatinInfo(
22-
canPrescribeStatin = false,
22+
canShowStatinNudge = false,
2323
)
2424
}
2525
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,11 @@ class PatientSummaryScreen :
328328
StatinNudge(
329329
statinInfo = statinInfo,
330330
modifier = Modifier.padding(start = 8.dp, end = 8.dp, top = 8.dp),
331+
isNonLabBasedStatinNudgeEnabled = features.isEnabled(Feature.NonLabBasedStatinNudge),
332+
isLabBasedStatinNudgeEnabled = features.isEnabled(Feature.LabBasedStatinNudge),
331333
addSmokingClick = { additionalEvents.notify(AddSmokingClicked) },
332-
addBMIClick = { additionalEvents.notify(AddBMIClicked) }
334+
addBMIClick = { additionalEvents.notify(AddBMIClicked) },
335+
addCholesterol = { additionalEvents.notify(AddCholesterolClicked) }
333336
)
334337
}
335338
}
@@ -361,6 +364,10 @@ class PatientSummaryScreen :
361364
is ScreenRequest.BMIEntrySheet -> {
362365
additionalEvents.notify(BMIReadingAdded)
363366
}
367+
368+
is ScreenRequest.CholesterolEntrySheet -> {
369+
additionalEvents.notify(CholesterolAdded)
370+
}
364371
}
365372
}
366373

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

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ class PatientSummaryUpdate(
3434
private val isNonLabBasedStatinNudgeEnabled: Boolean,
3535
private val isLabBasedStatinNudgeEnabled: Boolean,
3636
private val minAgeForStatin: Int = 40,
37-
private val maxAgeForCVDRisk: Int = 74
37+
private val maxAgeForCVDRisk: Int = 74,
38+
private val minReqMaxRiskRangeForLabBasedNudge: Int = 10,
3839
) : Update<PatientSummaryModel, PatientSummaryEvent, PatientSummaryEffect> {
3940

4041
override fun update(
@@ -151,7 +152,7 @@ class PatientSummaryUpdate(
151152
hasCVD -> {
152153
val updatedModel = model.updateStatinInfo(
153154
StatinInfo(
154-
canPrescribeStatin = canPrescribeStatin,
155+
canShowStatinNudge = canPrescribeStatin,
155156
hasCVD = true
156157
)
157158
)
@@ -162,7 +163,7 @@ class PatientSummaryUpdate(
162163
hasDiabetes && event.age > maxAgeForCVDRisk -> {
163164
val updatedModel = model.updateStatinInfo(
164165
StatinInfo(
165-
canPrescribeStatin = canPrescribeStatin,
166+
canShowStatinNudge = canPrescribeStatin,
166167
hasDiabetes = true
167168
)
168169
)
@@ -181,7 +182,7 @@ class PatientSummaryUpdate(
181182
else -> {
182183
val updatedModel = model.updateStatinInfo(
183184
StatinInfo(
184-
canPrescribeStatin = false,
185+
canShowStatinNudge = false,
185186
hasCVD = false
186187
)
187188
)
@@ -218,7 +219,7 @@ class PatientSummaryUpdate(
218219
hasCVD || (hasDiabetes && event.age >= minAgeForStatin) -> {
219220
val updatedModel = model.updateStatinInfo(
220221
StatinInfo(
221-
canPrescribeStatin = canPrescribeStatin,
222+
canShowStatinNudge = canPrescribeStatin,
222223
hasCVD = hasCVD
223224
)
224225
)
@@ -236,7 +237,7 @@ class PatientSummaryUpdate(
236237
else -> {
237238
val updatedModel = model.updateStatinInfo(
238239
StatinInfo(
239-
canPrescribeStatin = false,
240+
canShowStatinNudge = false,
240241
hasCVD = false
241242
)
242243
)
@@ -268,7 +269,7 @@ class PatientSummaryUpdate(
268269
val bmiReading = event.bmiReading
269270
val calculatedRiskRange = event.riskRange
270271
val canPrescribeStatin = if (isLabBasedStatinNudgeEnabled) {
271-
true
272+
checkIfLabBasedNudgeCanBeShown(event.medicalHistory, event.riskRange)
272273
} else {
273274
calculatedRiskRange?.canPrescribeStatin ?: false
274275
}
@@ -285,7 +286,7 @@ class PatientSummaryUpdate(
285286
}
286287

287288
val statinInfo = StatinInfo(
288-
canPrescribeStatin = canPrescribeStatin,
289+
canShowStatinNudge = canPrescribeStatin,
289290
cvdRisk = riskRange,
290291
isSmoker = medicalHistory.isSmoking,
291292
bmiReading = bmiReading,
@@ -302,12 +303,18 @@ class PatientSummaryUpdate(
302303
}
303304
}
304305

306+
private fun checkIfLabBasedNudgeCanBeShown(
307+
medicalHistory: MedicalHistory,
308+
riskRange: CVDRiskRange?
309+
): Boolean {
310+
val maxRiskRange = riskRange?.max ?: 0
311+
return !(medicalHistory.diagnosedWithDiabetes != Yes && maxRiskRange < minReqMaxRiskRangeForLabBasedNudge)
312+
}
313+
305314
private fun labBasedRiskRange(calculatedRiskRange: CVDRiskRange?): CVDRiskRange? {
306315
if (calculatedRiskRange == null) return null
307316

308-
val reqMaxRiskRange = 10
309-
310-
return if (calculatedRiskRange.max < reqMaxRiskRange) {
317+
return if (calculatedRiskRange.max < minReqMaxRiskRangeForLabBasedNudge) {
311318
null
312319
} else {
313320
calculatedRiskRange

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class PatientSummaryViewRenderer(
4747
}
4848

4949
private fun renderClinicalDecisionBasedOnAppointment(model: PatientSummaryModel) {
50-
if (model.statinInfo?.canPrescribeStatin == true)
50+
if (model.statinInfo?.canShowStatinNudge == true)
5151
return
5252

5353
if (model.hasScheduledAppointment) {
@@ -154,7 +154,7 @@ class PatientSummaryViewRenderer(
154154
if (model.hasStatinInfoLoaded.not()) return
155155
ui.updateStatinAlert(model.statinInfo!!)
156156

157-
if (model.statinInfo.canPrescribeStatin) {
157+
if (model.statinInfo.canShowStatinNudge) {
158158
ui.hideClinicalDecisionSupportAlertWithoutAnimation()
159159
}
160160
}

app/src/main/java/org/simple/clinic/summary/addcholesterol/CholesterolEntrySheet.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.simple.clinic.summary.addcholesterol
22

33
import android.content.Context
4+
import android.os.Parcelable
45
import android.view.LayoutInflater
56
import android.view.ViewGroup
67
import android.view.inputmethod.EditorInfo
@@ -20,6 +21,7 @@ import org.simple.clinic.mobius.ViewEffectsHandler
2021
import org.simple.clinic.mobius.ViewRenderer
2122
import org.simple.clinic.navigation.v2.Router
2223
import org.simple.clinic.navigation.v2.ScreenKey
24+
import org.simple.clinic.navigation.v2.Succeeded
2325
import org.simple.clinic.navigation.v2.fragments.BaseBottomSheet
2426
import org.simple.clinic.widgets.UiEvent
2527
import org.simple.clinic.widgets.textChanges
@@ -96,7 +98,7 @@ class CholesterolEntrySheet : BaseBottomSheet<
9698
}
9799

98100
override fun dismissSheet() {
99-
router.pop()
101+
router.popWithResult(Succeeded(CholesterolAdded))
100102
}
101103

102104
override fun showReqMaxCholesterolError() {
@@ -158,4 +160,7 @@ class CholesterolEntrySheet : BaseBottomSheet<
158160
interface Injector {
159161
fun inject(target: CholesterolEntrySheet)
160162
}
163+
164+
@Parcelize
165+
data object CholesterolAdded : Parcelable
161166
}

0 commit comments

Comments
 (0)