Preferences.swift 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import Foundation
  2. struct Preferences: JSON {
  3. var maxIOB: Decimal = 0
  4. var maxDailySafetyMultiplier: Decimal = 3
  5. var currentBasalSafetyMultiplier: Decimal = 4
  6. var autosensMax: Decimal = 1.2
  7. var autosensMin: Decimal = 0.7
  8. var autoisf: Bool = false
  9. var autoISFhourlyChange: Decimal = 0.25
  10. var autoISFmax: Decimal = 1.3
  11. var autoISFmin: Decimal = 1
  12. var smbDeliveryRatio: Decimal = 0.5
  13. var smbMaxRangeExtension: Decimal = 1
  14. var rewindResetsAutosens: Bool = true
  15. var highTemptargetRaisesSensitivity: Bool = false
  16. var lowTemptargetLowersSensitivity: Bool = false
  17. var sensitivityRaisesTarget: Bool = true
  18. var resistanceLowersTarget: Bool = false
  19. var advTargetAdjustments: Bool = false
  20. var exerciseMode: Bool = false
  21. var halfBasalExerciseTarget: Decimal = 160
  22. var maxCOB: Decimal = 120
  23. var wideBGTargetRange: Bool = false
  24. var skipNeutralTemps: Bool = false
  25. var unsuspendIfNoTemp: Bool = false
  26. var bolusSnoozeDIADivisor: Decimal = 2
  27. var min5mCarbimpact: Decimal = 8
  28. var autotuneISFAdjustmentFraction: Decimal = 1.0
  29. var remainingCarbsFraction: Decimal = 1.0
  30. var remainingCarbsCap: Decimal = 90
  31. var enableUAM: Bool = false
  32. var a52RiskEnable: Bool = false
  33. var enableSMBWithCOB: Bool = false
  34. var enableSMBWithTemptarget: Bool = false
  35. var enableSMBAlways: Bool = false
  36. var enableSMBAfterCarbs: Bool = false
  37. var allowSMBWithHighTemptarget: Bool = false
  38. var maxSMBBasalMinutes: Decimal = 30
  39. var maxUAMSMBBasalMinutes: Decimal = 30
  40. var smbInterval: Decimal = 3
  41. var bolusIncrement: Decimal = 0.1
  42. var curve: InsulinCurve = .rapidActing
  43. var useCustomPeakTime: Bool = false
  44. var insulinPeakTime: Decimal = 75
  45. var carbsReqThreshold: Decimal = 1.0
  46. var noisyCGMTargetMultiplier: Decimal = 1.3
  47. var suspendZerosIOB: Bool = true
  48. var timestamp: Date?
  49. var floatingcarbs: Bool = false
  50. var smbDeliveryRatioBGrange: Decimal = 0
  51. var smbDeliveryRatioMin: Decimal = 0.5
  52. var smbDeliveryRatioMax: Decimal = 0.75
  53. var enableautoISFwithCOB: Bool = false
  54. var higherISFrangeWeight: Decimal = 0
  55. var lowerISFrangeWeight: Decimal = 0
  56. var deltaISFrangeWeight: Decimal = 0
  57. var postMealISFweight: Decimal = 0
  58. var postMealISFduration: Decimal = 3
  59. var postMealISFalways: Bool = false
  60. var bgAccelISFweight: Decimal = 0
  61. var bgBrakeISFweight: Decimal = 0
  62. var enableBGacceleration: Bool = false
  63. var maxDeltaBGthreshold: Decimal = 0.2
  64. var adjustmentFactor: Decimal = 1.0
  65. var enableChris: Bool = false
  66. var enableDynamicCR: Bool = false
  67. var useNewFormula: Bool = false
  68. var useWeightedAverage: Bool = false
  69. var weightPercentage: Decimal = 0.65
  70. var tddAdjBasal: Bool = false
  71. var enableSMB_high_bg: Bool = false
  72. var enableSMB_high_bg_target: Decimal = 110
  73. }
  74. extension Preferences {
  75. private enum CodingKeys: String, CodingKey {
  76. case maxIOB = "max_iob"
  77. case maxDailySafetyMultiplier = "max_daily_safety_multiplier"
  78. case currentBasalSafetyMultiplier = "current_basal_safety_multiplier"
  79. case autosensMax = "autosens_max"
  80. case autosensMin = "autosens_min"
  81. case autoisf = "use_autoisf"
  82. case autoISFhourlyChange = "autoisf_hourlychange"
  83. case autoISFmax = "autoisf_max"
  84. case autoISFmin = "autoisf_min"
  85. case smbDeliveryRatio = "smb_delivery_ratio"
  86. case smbMaxRangeExtension = "smb_max_range_extension"
  87. case rewindResetsAutosens = "rewind_resets_autosens"
  88. case highTemptargetRaisesSensitivity = "high_temptarget_raises_sensitivity"
  89. case lowTemptargetLowersSensitivity = "low_temptarget_lowers_sensitivity"
  90. case sensitivityRaisesTarget = "sensitivity_raises_target"
  91. case resistanceLowersTarget
  92. case advTargetAdjustments = "adv_target_adjustments"
  93. case exerciseMode = "exercise_mode"
  94. case halfBasalExerciseTarget = "half_basal_exercise_target"
  95. case maxCOB
  96. case wideBGTargetRange = "wide_bg_target_range"
  97. case skipNeutralTemps = "skip_neutral_temps"
  98. case unsuspendIfNoTemp = "unsuspend_if_no_temp"
  99. case bolusSnoozeDIADivisor = "bolussnooze_dia_divisor"
  100. case min5mCarbimpact = "min_5m_carbimpact"
  101. case autotuneISFAdjustmentFraction = "autotune_isf_adjustmentFraction"
  102. case remainingCarbsFraction
  103. case remainingCarbsCap
  104. case enableUAM
  105. case a52RiskEnable = "A52_risk_enable"
  106. case enableSMBWithCOB = "enableSMB_with_COB"
  107. case enableSMBWithTemptarget = "enableSMB_with_temptarget"
  108. case enableSMBAlways = "enableSMB_always"
  109. case enableSMBAfterCarbs = "enableSMB_after_carbs"
  110. case allowSMBWithHighTemptarget = "allowSMB_with_high_temptarget"
  111. case maxSMBBasalMinutes
  112. case maxUAMSMBBasalMinutes
  113. case smbInterval = "SMBInterval"
  114. case bolusIncrement = "bolus_increment"
  115. case curve
  116. case useCustomPeakTime
  117. case insulinPeakTime
  118. case carbsReqThreshold
  119. case noisyCGMTargetMultiplier
  120. case suspendZerosIOB = "suspend_zeros_iob"
  121. case floatingcarbs = "floating_carbs"
  122. case smbDeliveryRatioBGrange = "smb_delivery_ratio_bg_range"
  123. case smbDeliveryRatioMin = "smb_delivery_ratio_min"
  124. case smbDeliveryRatioMax = "smb_delivery_ratio_max"
  125. case enableautoISFwithCOB = "enableautoisf_with_COB"
  126. case higherISFrangeWeight = "higher_ISFrange_weight"
  127. case lowerISFrangeWeight = "lower_ISFrange_weight"
  128. case deltaISFrangeWeight = "delta_ISFrange_weight"
  129. case postMealISFweight = "postmeal_ISF_weight"
  130. case postMealISFduration = "postmeal_ISF_duration"
  131. case postMealISFalways = "enableppisf_always"
  132. case bgAccelISFweight = "bgAccel_ISF_weight"
  133. case bgBrakeISFweight = "bgBrake_ISF_weight"
  134. case enableBGacceleration = "enable_BG_acceleration"
  135. case maxDeltaBGthreshold = "maxDelta_bg_threshold"
  136. case adjustmentFactor
  137. case enableChris
  138. case enableDynamicCR
  139. case useNewFormula
  140. case useWeightedAverage
  141. case weightPercentage
  142. case tddAdjBasal
  143. case enableSMB_high_bg
  144. case enableSMB_high_bg_target
  145. }
  146. }
  147. enum InsulinCurve: String, JSON, Identifiable, CaseIterable {
  148. case rapidActing = "rapid-acting"
  149. case ultraRapid = "ultra-rapid"
  150. case bilinear
  151. var id: InsulinCurve { self }
  152. }