Skip to content

Commit 397fd72

Browse files
siddh1004sagarwal
andauthored
Revert "Remove diagnosis questions from medical history screen (#5650)" (#5656)
This reverts https://app.shortcut.com/simpledotorg/story/16904/modify-medical-history-screen-to-remove-diagnosis-status Co-authored-by: sagarwal <[email protected]>
1 parent 2658ab9 commit 397fd72

File tree

29 files changed

+645
-7
lines changed

29 files changed

+645
-7
lines changed

CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
### Changes
3535

3636
- Hide next button when registration is going
37-
- Remove hypertension and diabetes questions from medical history screen
3837

3938
## 2025.09.09
4039

app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryEffect.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,14 @@ sealed class NewMedicalHistoryViewEffect : NewMedicalHistoryEffect()
1717

1818
data class OpenPatientSummaryScreen(val patientUuid: UUID) : NewMedicalHistoryViewEffect()
1919

20+
data object ShowOngoingHypertensionTreatmentError : NewMedicalHistoryViewEffect()
21+
22+
data object ShowDiagnosisRequiredError : NewMedicalHistoryViewEffect()
23+
24+
data object ShowHypertensionDiagnosisRequiredError : NewMedicalHistoryViewEffect()
25+
26+
data object ShowChangeDiagnosisErrorDialog : NewMedicalHistoryViewEffect()
27+
28+
data object ShowOngoingDiabetesTreatmentErrorDialog : NewMedicalHistoryViewEffect()
29+
2030
data object GoBack : NewMedicalHistoryViewEffect()

app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryEvent.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ data class CurrentFacilityLoaded(val facility: Facility) : NewMedicalHistoryEven
2929

3030
data class SyncTriggered(val registeredPatientUuid: UUID) : NewMedicalHistoryEvent()
3131

32+
data object ChangeDiagnosisNotNowClicked : NewMedicalHistoryEvent() {
33+
override val analyticsName = "New Medical History:Change Diagnosis:Not Now Clicked"
34+
}
35+
3236
data object BackClicked : NewMedicalHistoryEvent() {
3337
override val analyticsName: String = "New Medical History:Back Clicked"
3438
}

app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryModel.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ data class NewMedicalHistoryModel(
1919
val ongoingMedicalHistoryEntry: OngoingMedicalHistoryEntry,
2020
val currentFacility: Facility?,
2121
val nextButtonState: ButtonState?,
22+
val hasShownChangeDiagnosisError: Boolean,
2223
val showIsSmokingQuestion: Boolean,
2324
val showSmokelessTobaccoQuestion: Boolean,
2425
) : Parcelable {
@@ -35,6 +36,12 @@ data class NewMedicalHistoryModel(
3536
val facilityDiabetesManagementEnabled: Boolean
3637
get() = currentFacility!!.config.diabetesManagementEnabled
3738

39+
val hasAnsweredBothDiagnosisQuestions: Boolean
40+
get() = !(ongoingMedicalHistoryEntry.diagnosedWithHypertension == Unanswered || ongoingMedicalHistoryEntry.hasDiabetes == Unanswered)
41+
42+
val hasAnsweredHypertensionDiagnosis: Boolean
43+
get() = ongoingMedicalHistoryEntry.diagnosedWithHypertension != Unanswered
44+
3845
val registeringPatient: Boolean
3946
get() = nextButtonState == ButtonState.SAVING
4047

@@ -44,12 +51,27 @@ data class NewMedicalHistoryModel(
4451
val diagnosedWithDiabetes: Boolean
4552
get() = ongoingMedicalHistoryEntry.hasDiabetes == Yes
4653

54+
val answeredIsOnHypertensionTreatment: Boolean
55+
get() = ongoingMedicalHistoryEntry.isOnHypertensionTreatment != Unanswered
56+
57+
val answeredIsOnDiabetesTreatment: Boolean
58+
get() = ongoingMedicalHistoryEntry.isOnDiabetesTreatment != Unanswered
59+
4760
val showOngoingHypertensionTreatment: Boolean
4861
get() = diagnosedWithHypertension && (country.isoCountryCode == Country.INDIA || country.isoCountryCode == Country.SRI_LANKA)
4962

5063
val showOngoingDiabetesTreatment: Boolean
5164
get() = facilityDiabetesManagementEnabled && diagnosedWithDiabetes && country.isoCountryCode == Country.INDIA
5265

66+
private val hasNoHypertension: Boolean
67+
get() = ongoingMedicalHistoryEntry.diagnosedWithHypertension == No
68+
69+
private val hasNoDiabetes: Boolean
70+
get() = ongoingMedicalHistoryEntry.hasDiabetes == No
71+
72+
val showChangeDiagnosisError: Boolean
73+
get() = facilityDiabetesManagementEnabled && !hasShownChangeDiagnosisError && hasNoHypertension && hasNoDiabetes
74+
5375
companion object {
5476
fun default(
5577
country: Country,
@@ -61,6 +83,7 @@ data class NewMedicalHistoryModel(
6183
ongoingMedicalHistoryEntry = OngoingMedicalHistoryEntry(),
6284
currentFacility = null,
6385
nextButtonState = null,
86+
hasShownChangeDiagnosisError = false,
6487
showIsSmokingQuestion = showIsSmokingQuestion,
6588
showSmokelessTobaccoQuestion = showSmokelessTobaccoQuestion
6689
)
@@ -85,4 +108,8 @@ data class NewMedicalHistoryModel(
85108
fun patientRegistered(): NewMedicalHistoryModel {
86109
return copy(nextButtonState = ButtonState.SAVED)
87110
}
111+
112+
fun changeDiagnosisErrorShown(): NewMedicalHistoryModel {
113+
return copy(hasShownChangeDiagnosisError = true)
114+
}
88115
}

app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryScreen.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,41 @@ class NewMedicalHistoryScreen : Fragment(), NewMedicalHistoryUiActions, HandlesB
100100
router.push(PatientSummaryScreenKey(patientUuid, OpenIntention.ViewNewPatient, Instant.now(utcClock)))
101101
}
102102

103+
override fun showOngoingHypertensionTreatmentErrorDialog() {
104+
SelectOngoingHypertensionTreatmentErrorDialog.show(fragmentManager = activity.supportFragmentManager)
105+
}
106+
107+
override fun showOngoingDiabetesTreatmentErrorDialog() {
108+
SelectOngoingDiabetesTreatmentErrorDialog.show(fragmentManager = activity.supportFragmentManager)
109+
}
110+
103111
override fun goBack() {
104112
router.pop()
105113
}
106114

115+
override fun showDiagnosisRequiredErrorDialog() {
116+
SelectDiagnosisErrorDialog.show(activity.supportFragmentManager)
117+
}
118+
119+
override fun showHypertensionDiagnosisRequiredErrorDialog() {
120+
MaterialAlertDialogBuilder(requireContext())
121+
.setTitle(getString(R.string.select_diagnosis_error_diagnosis_required))
122+
.setMessage(getString(R.string.select_diagnosis_error_enter_diagnosis_hypertension))
123+
.setPositiveButton(getString(R.string.select_diagnosis_error_ok), null)
124+
.show()
125+
}
126+
127+
override fun showChangeDiagnosisErrorDialog() {
128+
MaterialAlertDialogBuilder(requireContext())
129+
.setTitle(getString(R.string.change_diagnosis_title))
130+
.setMessage(getString(R.string.change_diagnosis_message))
131+
.setPositiveButton(getString(R.string.change_diagnosis_positive), null)
132+
.setNegativeButton(getString(R.string.change_diagnosis_negative)) { _, _ ->
133+
viewModel.dispatch(ChangeDiagnosisNotNowClicked)
134+
}
135+
.show()
136+
}
137+
107138
override fun onBackPressed(): Boolean {
108139
viewModel.dispatch(BackClicked)
109140
return true

app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUiActions.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,11 @@ import java.util.UUID
44

55
interface NewMedicalHistoryUiActions {
66
fun openPatientSummaryScreen(patientUuid: UUID)
7+
fun showOngoingHypertensionTreatmentErrorDialog()
8+
fun showDiagnosisRequiredErrorDialog()
9+
fun showHypertensionDiagnosisRequiredErrorDialog()
10+
fun showChangeDiagnosisErrorDialog()
11+
fun showOngoingDiabetesTreatmentErrorDialog()
12+
713
fun goBack()
814
}

app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUpdate.kt

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,37 @@ class NewMedicalHistoryUpdate : Update<NewMedicalHistoryModel, NewMedicalHistory
1616
): Next<NewMedicalHistoryModel, NewMedicalHistoryEffect> {
1717
return when (event) {
1818
is NewMedicalHistoryAnswerToggled -> answerToggled(model, event.question, event.answer)
19-
is SaveMedicalHistoryClicked -> registerPatient(model)
19+
is SaveMedicalHistoryClicked -> saveClicked(model)
2020
is PatientRegistered -> next(model.patientRegistered(), TriggerSync(event.patientUuid))
2121
is OngoingPatientEntryLoaded -> next(model.ongoingPatientEntryLoaded(event.ongoingNewPatientEntry))
2222
is CurrentFacilityLoaded -> currentFacilityLoaded(event, model)
2323
is SyncTriggered -> dispatch(OpenPatientSummaryScreen(event.registeredPatientUuid))
24+
is ChangeDiagnosisNotNowClicked -> registerPatient(model)
2425
is BackClicked -> dispatch(GoBack)
2526
}
2627
}
2728

29+
private fun saveClicked(model: NewMedicalHistoryModel): Next<NewMedicalHistoryModel, NewMedicalHistoryEffect> {
30+
return when {
31+
model.showChangeDiagnosisError -> {
32+
next(model.changeDiagnosisErrorShown(), ShowChangeDiagnosisErrorDialog)
33+
}
34+
model.facilityDiabetesManagementEnabled && !model.hasAnsweredBothDiagnosisQuestions -> {
35+
dispatch(ShowDiagnosisRequiredError)
36+
}
37+
!model.facilityDiabetesManagementEnabled && !model.hasAnsweredHypertensionDiagnosis -> {
38+
dispatch(ShowHypertensionDiagnosisRequiredError)
39+
}
40+
model.showOngoingHypertensionTreatment && !model.answeredIsOnHypertensionTreatment -> {
41+
dispatch(ShowOngoingHypertensionTreatmentError)
42+
}
43+
model.showOngoingDiabetesTreatment && !model.answeredIsOnDiabetesTreatment -> {
44+
dispatch(ShowOngoingDiabetesTreatmentErrorDialog)
45+
}
46+
else -> registerPatient(model)
47+
}
48+
}
49+
2850
private fun registerPatient(model: NewMedicalHistoryModel): Next<NewMedicalHistoryModel, NewMedicalHistoryEffect> {
2951
return if (model.registeringPatient) {
3052
noChange()

app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryViewEffectHandler.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ class NewMedicalHistoryViewEffectHandler(
1010
override fun handle(viewEffect: NewMedicalHistoryViewEffect) {
1111
when (viewEffect) {
1212
is OpenPatientSummaryScreen -> uiActions.openPatientSummaryScreen(viewEffect.patientUuid)
13+
ShowOngoingHypertensionTreatmentError -> uiActions.showOngoingHypertensionTreatmentErrorDialog()
14+
ShowDiagnosisRequiredError -> uiActions.showDiagnosisRequiredErrorDialog()
15+
ShowHypertensionDiagnosisRequiredError -> uiActions.showHypertensionDiagnosisRequiredErrorDialog()
16+
ShowChangeDiagnosisErrorDialog -> uiActions.showChangeDiagnosisErrorDialog()
17+
ShowOngoingDiabetesTreatmentErrorDialog -> uiActions.showOngoingDiabetesTreatmentErrorDialog()
1318
GoBack -> uiActions.goBack()
1419
}.exhaustive()
1520
}
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package org.simple.clinic.medicalhistory.ui
2+
3+
import androidx.compose.animation.AnimatedVisibility
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.fillMaxWidth
6+
import androidx.compose.foundation.layout.padding
7+
import androidx.compose.material.Card
8+
import androidx.compose.material.Divider
9+
import androidx.compose.material.MaterialTheme
10+
import androidx.compose.material.Text
11+
import androidx.compose.runtime.Composable
12+
import androidx.compose.runtime.LaunchedEffect
13+
import androidx.compose.ui.Alignment
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.res.dimensionResource
16+
import androidx.compose.ui.res.stringResource
17+
import androidx.compose.ui.tooling.preview.Preview
18+
import org.simple.clinic.R
19+
import org.simple.clinic.appconfig.Country
20+
import org.simple.clinic.common.ui.theme.SimpleTheme
21+
import org.simple.clinic.medicalhistory.Answer
22+
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion
23+
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsOnHypertensionTreatment
24+
25+
@Composable
26+
fun MedicalHistoryDiagnosisWithTreatment(
27+
diagnosisQuestion: MedicalHistoryQuestion,
28+
diagnosisLabel: String,
29+
diagnosisAnswer: Answer?,
30+
treatmentQuestion: MedicalHistoryQuestion,
31+
treatmentAnswer: Answer?,
32+
showTreatmentQuestion: Boolean,
33+
modifier: Modifier = Modifier,
34+
onSelectionChange: (MedicalHistoryQuestion, Answer) -> Unit,
35+
) {
36+
LaunchedEffect(showTreatmentQuestion) {
37+
if (!showTreatmentQuestion) {
38+
onSelectionChange(treatmentQuestion, Answer.Unanswered)
39+
}
40+
}
41+
42+
Card(modifier = modifier.fillMaxWidth()) {
43+
Column(
44+
modifier = Modifier
45+
.padding(horizontal = dimensionResource(R.dimen.spacing_16))
46+
.padding(
47+
top = dimensionResource(R.dimen.spacing_16),
48+
bottom = dimensionResource(R.dimen.spacing_4)
49+
)
50+
) {
51+
Text(
52+
modifier = Modifier
53+
.padding(bottom = dimensionResource(R.dimen.spacing_4)),
54+
text = diagnosisLabel,
55+
style = SimpleTheme.typography.subtitle1Medium,
56+
color = MaterialTheme.colors.onSurface,
57+
)
58+
59+
MedicalHistoryQuestionOptions(
60+
modifier = Modifier.align(Alignment.End),
61+
selectedAnswer = diagnosisAnswer,
62+
onSelectionChange = { newAnswer ->
63+
if (newAnswer == diagnosisAnswer) {
64+
onSelectionChange(diagnosisQuestion, Answer.Unanswered)
65+
} else {
66+
onSelectionChange(diagnosisQuestion, newAnswer)
67+
}
68+
}
69+
)
70+
71+
AnimatedVisibility(
72+
visible = showTreatmentQuestion
73+
) {
74+
Column {
75+
Divider(
76+
modifier = Modifier.padding(
77+
top = dimensionResource(R.dimen.spacing_4),
78+
bottom = dimensionResource(R.dimen.spacing_8)
79+
),
80+
color = SimpleTheme.colors.onSurface11
81+
)
82+
83+
Text(
84+
modifier = Modifier
85+
.padding(bottom = dimensionResource(R.dimen.spacing_4)),
86+
text = stringResource(treatmentQuestion.questionRes),
87+
style = MaterialTheme.typography.body1,
88+
color = MaterialTheme.colors.onSurface,
89+
)
90+
91+
MedicalHistoryQuestionOptions(
92+
modifier = Modifier.align(Alignment.End),
93+
selectedAnswer = treatmentAnswer,
94+
onSelectionChange = { newAnswer ->
95+
if (newAnswer == treatmentAnswer) {
96+
onSelectionChange(treatmentQuestion, Answer.Unanswered)
97+
} else {
98+
onSelectionChange(treatmentQuestion, newAnswer)
99+
}
100+
}
101+
)
102+
}
103+
}
104+
}
105+
}
106+
}
107+
108+
@Preview
109+
@Composable
110+
private fun MedicalHistoryDiagnosisWithTreatmentPreview() {
111+
SimpleTheme {
112+
MedicalHistoryDiagnosisWithTreatment(
113+
diagnosisQuestion = MedicalHistoryQuestion.DiagnosedWithHypertension,
114+
diagnosisLabel = stringResource(R.string.medicalhistory_diagnosis_hypertension_required),
115+
diagnosisAnswer = Answer.Yes,
116+
treatmentQuestion = IsOnHypertensionTreatment(Country.INDIA),
117+
treatmentAnswer = Answer.Unanswered,
118+
showTreatmentQuestion = true,
119+
onSelectionChange = { _, _ -> }
120+
)
121+
}
122+
}

app/src/main/java/org/simple/clinic/medicalhistory/ui/NewMedicalHistoryUi.kt

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ import org.simple.clinic.common.ui.components.TopAppBar
2727
import org.simple.clinic.common.ui.theme.SimpleTheme
2828
import org.simple.clinic.medicalhistory.Answer
2929
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion
30+
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.DiagnosedWithDiabetes
31+
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.DiagnosedWithHypertension
32+
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsOnDiabetesTreatment
33+
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsOnHypertensionTreatment
3034
import org.simple.clinic.medicalhistory.OngoingMedicalHistoryEntry
3135
import org.simple.clinic.medicalhistory.newentry.NewMedicalHistoryModel
3236

@@ -76,13 +80,33 @@ fun NewMedicalHistoryUi(
7680
val scrollState = rememberScrollState()
7781
Column(
7882
modifier = Modifier
79-
.fillMaxWidth()
80-
.verticalScroll(scrollState)
81-
.padding(paddingValues)
82-
.padding(dimensionResource(R.dimen.spacing_8)),
83+
.fillMaxWidth()
84+
.verticalScroll(scrollState)
85+
.padding(paddingValues)
86+
.padding(dimensionResource(R.dimen.spacing_8)),
8387
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.spacing_8))
8488
) {
8589
val showDiabetesDiagnosis = model.hasLoadedCurrentFacility && model.facilityDiabetesManagementEnabled
90+
MedicalHistoryDiagnosisWithTreatment(
91+
diagnosisLabel = stringResource(R.string.medicalhistory_diagnosis_hypertension_required),
92+
diagnosisQuestion = DiagnosedWithHypertension,
93+
diagnosisAnswer = model.ongoingMedicalHistoryEntry.diagnosedWithHypertension,
94+
treatmentQuestion = IsOnHypertensionTreatment(model.country.isoCountryCode),
95+
treatmentAnswer = model.ongoingMedicalHistoryEntry.isOnHypertensionTreatment,
96+
showTreatmentQuestion = model.showOngoingHypertensionTreatment,
97+
onSelectionChange = onSelectionChange
98+
)
99+
if (showDiabetesDiagnosis) {
100+
MedicalHistoryDiagnosisWithTreatment(
101+
diagnosisLabel = stringResource(R.string.medicalhistory_diagnosis_diabetes_required),
102+
diagnosisQuestion = DiagnosedWithDiabetes,
103+
diagnosisAnswer = model.ongoingMedicalHistoryEntry.hasDiabetes,
104+
treatmentQuestion = IsOnDiabetesTreatment,
105+
treatmentAnswer = model.ongoingMedicalHistoryEntry.isOnDiabetesTreatment,
106+
showTreatmentQuestion = model.showOngoingDiabetesTreatment,
107+
onSelectionChange = onSelectionChange
108+
)
109+
}
86110
HistoryContainer(
87111
heartAttackAnswer = model.ongoingMedicalHistoryEntry.hasHadHeartAttack,
88112
strokeAnswer = model.ongoingMedicalHistoryEntry.hasHadStroke,
@@ -115,6 +139,7 @@ private val previewMedicalHistoryModel = NewMedicalHistoryModel(
115139
ongoingMedicalHistoryEntry = OngoingMedicalHistoryEntry(),
116140
currentFacility = null,
117141
nextButtonState = null,
142+
hasShownChangeDiagnosisError = true,
118143
showIsSmokingQuestion = true,
119144
showSmokelessTobaccoQuestion = true
120145
)
@@ -126,7 +151,7 @@ private fun NewMedicalHistoryUiPreview() {
126151
model = previewMedicalHistoryModel,
127152
navigationIconClick = {},
128153
onNextClick = {}
129-
) { _, _ ->
154+
) { question, answer ->
130155
//do nothing
131156
}
132157
}

0 commit comments

Comments
 (0)