Преглед изворни кода

Don't use Rec. Bolus % or Fatty Meal % if wholeCalc is negative

Otherwise this feature that usually reduces the recommended bolus could actually increase it.
Mike Plante пре 1 година
родитељ
комит
3e5dd61167

+ 84 - 46
Trio/Sources/Modules/Treatments/View/PopupView.swift

@@ -663,55 +663,93 @@ struct PopupView: View {
 
             // Case: (Full Bolus × Rec. Bolus %) + Super Bolus
             case (true, false):
-                // Row 1: Header.
-                GridRow(alignment: .lastTextBaseline) {
-                    Text("Full Bolus")
-                        .gridCellColumns(3) // Allows label to expand above operators.
-                    Text("Rec. %")
-                    Text("")
-                        .layoutPriority(-15)
-                        .gridCellColumns(2)
-                    Text("Super Bolus")
-                }
-                .secondaryStyle()
+                if state.wholeCalc > 0 {
+                    // Row 1: Header.
+                    GridRow(alignment: .lastTextBaseline) {
+                        Text("Full Bolus")
+                            .gridCellColumns(3) // Allows label to expand above operators.
+                        Text("Rec. %")
+                        Text("")
+                            .layoutPriority(-15)
+                            .gridCellColumns(2)
+                        Text("Super Bolus")
+                    }
+                    .secondaryStyle()
 
-                // Row 2: Formula.
-                GridRow {
-                    Text("(")
-                        .operatorStyle()
-                    Text(insulinFormatter(state.wholeCalc)).valueStyle()
-                    Text("×")
-                        .operatorStyle()
-                    Text((100 * state.fraction).formatted() + " %")
-                        .valueStyle()
-                    Text(")")
-                        .operatorStyle()
-                    Text("+")
-                        .operatorStyle()
-                    Text(insulinFormatter(state.superBolusInsulin))
-                        .valueStyle()
-                    Text("=")
-                        .operatorStyle()
-                        .frame(idealWidth: 10, maxWidth: .infinity, alignment: .trailing)
-                        .layoutPriority(-15)
-                    Text(insulinFormatter(state.factoredInsulin))
-                        .solutionStyle(state.factoredInsulin)
-                }
+                    // Row 2: Formula.
+                    GridRow {
+                        Text("(")
+                            .operatorStyle()
+                        Text(insulinFormatter(state.wholeCalc)).valueStyle()
+                        Text("×")
+                            .operatorStyle()
+                        Text((100 * state.fraction).formatted() + " %")
+                            .valueStyle()
+                        Text(")")
+                            .operatorStyle()
+                        Text("+")
+                            .operatorStyle()
+                        Text(insulinFormatter(state.superBolusInsulin))
+                            .valueStyle()
+                        Text("=")
+                            .operatorStyle()
+                            .frame(idealWidth: 10, maxWidth: .infinity, alignment: .trailing)
+                            .layoutPriority(-15)
+                        Text(insulinFormatter(state.factoredInsulin))
+                            .solutionStyle(state.factoredInsulin)
+                    }
 
-                // Row 3: Units.
-                GridRow(alignment: .firstTextBaseline) {
-                    Text("")
-                        .layoutPriority(-15)
-                    Text("U")
-                    Text("")
-                        .layoutPriority(-15)
-                        .gridCellColumns(4)
-                    Text("U")
-                    Text("")
-                        .layoutPriority(-15)
-                    Text("U")
+                    // Row 3: Units.
+                    GridRow(alignment: .firstTextBaseline) {
+                        Text("")
+                            .layoutPriority(-15)
+                        Text("U")
+                        Text("")
+                            .layoutPriority(-15)
+                            .gridCellColumns(4)
+                        Text("U")
+                        Text("")
+                            .layoutPriority(-15)
+                        Text("U")
+                    }
+                    .unitStyle()
+                } else {
+                    // Row 1: Header.
+                    GridRow(alignment: .lastTextBaseline) {
+                        Text("Full Bolus")
+                        Text("")
+                            .layoutPriority(-15)
+                        Text("Super Bolus")
+                    }
+                    .secondaryStyle()
+
+                    // Row 2: Formula.
+                    GridRow {
+                        Text(insulinFormatter(state.wholeCalc)).valueStyle()
+                        Text("+")
+                            .operatorStyle()
+                        Text(insulinFormatter(state.superBolusInsulin))
+                            .valueStyle()
+                        Text("=")
+                            .operatorStyle()
+                            .frame(idealWidth: 10, maxWidth: .infinity, alignment: .trailing)
+                            .layoutPriority(-15)
+                        Text(insulinFormatter(state.factoredInsulin))
+                            .solutionStyle(state.factoredInsulin)
+                    }
+
+                    // Row 3: Units.
+                    GridRow(alignment: .firstTextBaseline) {
+                        Text("U")
+                        Text("")
+                            .layoutPriority(-15)
+                        Text("U")
+                        Text("")
+                            .layoutPriority(-15)
+                        Text("U")
+                    }
+                    .unitStyle()
                 }
-                .unitStyle()
 
             // This case should never occur as you can't apply a Super Bolus to a Fatty Meal
             // Per app logic, these options are mutually exclusive

+ 14 - 4
Trio/Sources/Services/BolusCalculator/BolusCalculationManager.swift

@@ -393,11 +393,21 @@ final class BaseBolusCalculationManager: BolusCalculationManager, Injectable {
 
         // apply custom factor at the end of the calculations
         // apply custom factor if fatty meal toggle in bolus calc config settings is on and the box for fatty meals is checked (in RootView)
-        var factoredInsulin = wholeCalc * input.fraction
+        var factoredInsulin = wholeCalc
+
+        // Apply Recommended Bolus Percentage (input.fraction) and if selected apply Fatty Meal Bolus Percentage (input.fattyMealFactor)
+        // If factoredInsulin is negative, though, don't apply either
+        if factoredInsulin > 0 {
+            factoredInsulin *= input.fraction
+
+            if input.useFattyMealCorrectionFactor {
+                factoredInsulin *= input.fattyMealFactor
+            }
+        }
+
+        // Calculate and add super bolus insulin if enabled
         var superBolusInsulin: Decimal = 0
-        if input.useFattyMealCorrectionFactor {
-            factoredInsulin *= input.fattyMealFactor
-        } else if input.useSuperBolus {
+        if input.useSuperBolus {
             superBolusInsulin = input.sweetMealFactor * input.basal
             factoredInsulin += superBolusInsulin
         }