Przeglądaj źródła

Merge pull request #578 from nightscout/oref-swift-fix-dynamic-isf-enable-logic

Fix dynamic ISF enabling logic
Sam King 8 miesięcy temu
rodzic
commit
5c54bbf96c

+ 1 - 1
Trio.xcodeproj/project.pbxproj

@@ -2868,7 +2868,6 @@
 				3B5CD2B22D4AEA6600CE213C /* Models */,
 				3B5CD2972D4AEA3C00CE213C /* Profile */,
 				3B5CD2A02D4AEA5100CE213C /* Utils */,
-				3B2A3BC02E2B19C600658FB9 /* DynamicISF.swift */,
 				3B5CD1E92D4912A600CE213C /* OpenAPSSwift.swift */,
 				3B5CD1EA2D4912A600CE213C /* JSONBridge.swift */,
 			);
@@ -3756,6 +3755,7 @@
 				DD30BA052E07667000DA677C /* DetermineBasal+Helpers.swift */,
 				DD30B9C62E06257300DA677C /* DetermineBasalGenerator.swift */,
 				3BAE876D2E47F12900FCA8D2 /* DosingEngine.swift */,
+				3B2A3BC02E2B19C600658FB9 /* DynamicISF.swift */,
 				3BAC929C2E56A84E00B853DA /* TempBasalFunctions.swift */,
 			);
 			path = DetermineBasal;

+ 24 - 1
Trio/Sources/APS/OpenAPSSwift/DynamicISF.swift

@@ -47,6 +47,10 @@ enum DynamicISF {
             return nil
         }
 
+        guard preferences.dynamicIsfState(profile: profile, trioCustomOrefVariables: trioCustomOrefVariables) != .off else {
+            return nil
+        }
+
         let bg = currentGlucose
 
         var tdd24h_14d_Ratio: Decimal
@@ -124,8 +128,27 @@ enum DynamicIsfState {
 }
 
 extension Preferences {
-    func dynamicIsfState() -> DynamicIsfState {
+    func dynamicIsfState(profile: Profile, trioCustomOrefVariables: TrioCustomOrefVariables) -> DynamicIsfState {
         guard useNewFormula else { return .off }
+
+        // Turn off when autosens.min = autosens.max
+        // BUG: This check matches the JS logic but there should
+        // be a check for max > min. It's impossible in the UI to have
+        // min > max so I'll leave it out (and we do a proper check
+        // elsewhere in DynamicISF)
+        let minLimit = min(profile.autosensMax, profile.autosensMin)
+        let maxLimit = max(profile.autosensMax, profile.autosensMin)
+        if maxLimit == minLimit || minLimit > 1 || maxLimit < 1 {
+            return .off
+        }
+
+        // checks for 'exercise mode' like conditions
+        if profile.highTemptargetRaisesSensitivity,
+           let profileTarget = profile.profileTarget(trioCustomOrefVariables: trioCustomOrefVariables), profileTarget >= 118
+        {
+            return .off
+        }
+
         return sigmoid ? .sigmoid : .logrithmic
     }
 }

+ 3 - 3
Trio/Sources/APS/OpenAPSSwift/Forecasts/ForecastGenerator.swift

@@ -59,7 +59,7 @@ enum ForecastGenerator {
             glucoseImpactSeries: glucoseImpactSeries,
             iobData: iobData,
             carbImpact: carbImpact,
-            dynamicIsfState: preferences.dynamicIsfState(),
+            dynamicIsfState: preferences.dynamicIsfState(profile: profile, trioCustomOrefVariables: trioCustomOrefVariables),
             insulinFactor: dynamicIsfResult?.insulinFactor,
             tdd: trioCustomOrefVariables.tdd(profile: profile),
             adjustmentFactorLogrithmic: profile.adjustmentFactor
@@ -79,7 +79,7 @@ enum ForecastGenerator {
             uamCarbImpact: uamCarbImpact,
             carbImpact: carbImpact,
             iobData: iobData,
-            dynamicIsfState: preferences.dynamicIsfState(),
+            dynamicIsfState: preferences.dynamicIsfState(profile: profile, trioCustomOrefVariables: trioCustomOrefVariables),
             insulinFactor: dynamicIsfResult?.insulinFactor,
             tdd: trioCustomOrefVariables.tdd(profile: profile),
             adjustmentFactorLogrithmic: profile.adjustmentFactor
@@ -90,7 +90,7 @@ enum ForecastGenerator {
             glucoseImpactSeriesWithZeroTemp: glucoseImpactSeriesWithZeroTemp,
             targetBG: targetGlucose,
             iobData: iobData,
-            dynamicIsfState: preferences.dynamicIsfState(),
+            dynamicIsfState: preferences.dynamicIsfState(profile: profile, trioCustomOrefVariables: trioCustomOrefVariables),
             insulinFactor: dynamicIsfResult?.insulinFactor,
             tdd: trioCustomOrefVariables.tdd(profile: profile),
             adjustmentFactorLogrithmic: profile.adjustmentFactor

Plik diff jest za duży
+ 1 - 1
TrioTests/OpenAPSSwiftTests/javascript/bundle/determine-basal.js