Preferences.swift 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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 smbDeliveryRatio: Decimal = 0.5
  9. var rewindResetsAutosens: Bool = true
  10. var highTemptargetRaisesSensitivity: Bool = false
  11. var lowTemptargetLowersSensitivity: Bool = false
  12. var sensitivityRaisesTarget: Bool = false
  13. var resistanceLowersTarget: Bool = false
  14. var advTargetAdjustments: Bool = false
  15. var exerciseMode: Bool = false
  16. var halfBasalExerciseTarget: Decimal = 160
  17. var maxCOB: Decimal = 120
  18. var wideBGTargetRange: Bool = false
  19. var skipNeutralTemps: Bool = false
  20. var unsuspendIfNoTemp: Bool = false
  21. var min5mCarbimpact: Decimal = 8
  22. var autotuneISFAdjustmentFraction: Decimal = 1.0
  23. var remainingCarbsFraction: Decimal = 1.0
  24. var remainingCarbsCap: Decimal = 90
  25. var enableUAM: Bool = false
  26. var a52RiskEnable: Bool = false
  27. var enableSMBWithCOB: Bool = false
  28. var enableSMBWithTemptarget: Bool = false
  29. var enableSMBAlways: Bool = false
  30. var enableSMBAfterCarbs: Bool = false
  31. var allowSMBWithHighTemptarget: Bool = false
  32. var maxSMBBasalMinutes: Decimal = 30
  33. var maxUAMSMBBasalMinutes: Decimal = 30
  34. var smbInterval: Decimal = 3
  35. var bolusIncrement: Decimal = 0.1
  36. var curve: InsulinCurve = .rapidActing
  37. var useCustomPeakTime: Bool = false
  38. var insulinPeakTime: Decimal = 75
  39. var carbsReqThreshold: Decimal = 1.0
  40. var noisyCGMTargetMultiplier: Decimal = 1.3
  41. var suspendZerosIOB: Bool = false
  42. var timestamp: Date?
  43. var maxDeltaBGthreshold: Decimal = 0.2
  44. var adjustmentFactor: Decimal = 0.8
  45. var adjustmentFactorSigmoid: Decimal = 0.5
  46. var sigmoid: Bool = false
  47. var enableDynamicCR: Bool = false
  48. var useNewFormula: Bool = false
  49. var useWeightedAverage: Bool = false
  50. var weightPercentage: Decimal = 0.65
  51. var tddAdjBasal: Bool = false
  52. var enableSMB_high_bg: Bool = false
  53. var enableSMB_high_bg_target: Decimal = 110
  54. var threshold_setting: Decimal = 60
  55. var updateInterval: Decimal = 20
  56. }
  57. extension Preferences {
  58. private enum CodingKeys: String, CodingKey {
  59. case maxIOB = "max_iob"
  60. case maxDailySafetyMultiplier = "max_daily_safety_multiplier"
  61. case currentBasalSafetyMultiplier = "current_basal_safety_multiplier"
  62. case autosensMax = "autosens_max"
  63. case autosensMin = "autosens_min"
  64. case smbDeliveryRatio = "smb_delivery_ratio"
  65. case rewindResetsAutosens = "rewind_resets_autosens"
  66. case highTemptargetRaisesSensitivity = "high_temptarget_raises_sensitivity"
  67. case lowTemptargetLowersSensitivity = "low_temptarget_lowers_sensitivity"
  68. case sensitivityRaisesTarget = "sensitivity_raises_target"
  69. case resistanceLowersTarget = "resistance_lowers_target"
  70. case advTargetAdjustments = "adv_target_adjustments"
  71. case exerciseMode = "exercise_mode"
  72. case halfBasalExerciseTarget = "half_basal_exercise_target"
  73. case maxCOB
  74. case wideBGTargetRange = "wide_bg_target_range"
  75. case skipNeutralTemps = "skip_neutral_temps"
  76. case unsuspendIfNoTemp = "unsuspend_if_no_temp"
  77. case min5mCarbimpact = "min_5m_carbimpact"
  78. case autotuneISFAdjustmentFraction = "autotune_isf_adjustmentFraction"
  79. case remainingCarbsFraction
  80. case remainingCarbsCap
  81. case enableUAM
  82. case a52RiskEnable = "A52_risk_enable"
  83. case enableSMBWithCOB = "enableSMB_with_COB"
  84. case enableSMBWithTemptarget = "enableSMB_with_temptarget"
  85. case enableSMBAlways = "enableSMB_always"
  86. case enableSMBAfterCarbs = "enableSMB_after_carbs"
  87. case allowSMBWithHighTemptarget = "allowSMB_with_high_temptarget"
  88. case maxSMBBasalMinutes
  89. case maxUAMSMBBasalMinutes
  90. case smbInterval = "SMBInterval"
  91. case bolusIncrement = "bolus_increment"
  92. case curve
  93. case useCustomPeakTime
  94. case insulinPeakTime
  95. case carbsReqThreshold
  96. case noisyCGMTargetMultiplier
  97. case suspendZerosIOB = "suspend_zeros_iob"
  98. case maxDeltaBGthreshold = "maxDelta_bg_threshold"
  99. case adjustmentFactor
  100. case adjustmentFactorSigmoid
  101. case sigmoid
  102. case enableDynamicCR
  103. case useNewFormula
  104. case useWeightedAverage
  105. case weightPercentage
  106. case tddAdjBasal
  107. case enableSMB_high_bg
  108. case enableSMB_high_bg_target
  109. case threshold_setting
  110. case updateInterval
  111. }
  112. }
  113. enum InsulinCurve: String, JSON, Identifiable, CaseIterable {
  114. case rapidActing = "rapid-acting"
  115. case ultraRapid = "ultra-rapid"
  116. case bilinear
  117. var id: InsulinCurve { self }
  118. }