Profile.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import Foundation
  2. struct Profile: Codable {
  3. // Kotlin-defined properties from AndroidAPS OapsProfile.kt
  4. // with defaults pulled from profile.js
  5. var dia: Decimal?
  6. var min5mCarbImpact: Decimal = 8
  7. var maxIob: Decimal = 0 // if max_iob is not provided, will default to zero
  8. var maxDailyBasal: Decimal?
  9. var maxBasal: Decimal?
  10. var minBg: Decimal?
  11. var maxBg: Decimal?
  12. @JavascriptOptional var targetBg: Decimal?
  13. var smbDeliveryRatio: Decimal = 0.5
  14. var carbRatio: Decimal?
  15. var sens: Decimal?
  16. var maxDailySafetyMultiplier: Decimal = 3
  17. var currentBasalSafetyMultiplier: Decimal = 4
  18. var highTemptargetRaisesSensitivity: Bool = false // raise sensitivity for temptargets >= 101
  19. var lowTemptargetLowersSensitivity: Bool = false // lower sensitivity for temptargets <= 99
  20. var sensitivityRaisesTarget: Bool = false // raise BG target when autosens detects sensitivity
  21. var resistanceLowersTarget: Bool = false // lower BG target when autosens detects resistance
  22. var exerciseMode: Bool = false // when true, > 100 mg/dL high temp target adjusts sensitivityRatio
  23. var halfBasalExerciseTarget: Decimal = 160 // when temptarget is 160 mg/dL *and* exercise_mode=true, run 50% basal
  24. var maxCOB: Decimal = 120 // maximum carbs a typical body can absorb over 4 hours
  25. var skipNeutralTemps: Bool = false
  26. var remainingCarbsCap: Decimal = 90
  27. var enableUAM: Bool = false
  28. var a52RiskEnable: Bool = false
  29. var smbInterval: Decimal = 3
  30. var enableSMBWithCOB: Bool = false
  31. var enableSMBWithTemptarget: Bool = false
  32. var allowSMBWithHighTemptarget: Bool = false
  33. var enableSMBAlways: Bool = false
  34. var enableSMBAfterCarbs: Bool = false
  35. var maxSMBBasalMinutes: Decimal = 30
  36. var maxUAMSMBBasalMinutes: Decimal = 30
  37. var bolusIncrement: Decimal = 0.1
  38. var carbsReqThreshold: Decimal = 1
  39. var currentBasal: Decimal?
  40. var temptargetSet: Bool?
  41. var autosensMax: Decimal = 1.2
  42. var outUnits: String?
  43. // Additional properties
  44. var autosensMin: Decimal = 0.7
  45. var rewindResetsAutosens: Bool = true
  46. var remainingCarbsFraction: Decimal = 1.0
  47. var unsuspendIfNoTemp: Bool = false
  48. var autotuneIsfAdjustmentFraction: Decimal = 1.0
  49. var enableSMBHighBg: Bool = false
  50. var enableSMBHighBgTarget: Decimal = 110
  51. var maxDeltaBgThreshold: Decimal = 0.2
  52. var curve: InsulinCurve = .rapidActing
  53. var useCustomPeakTime: Bool = false
  54. var insulinPeakTime: Decimal = 75
  55. var offlineHotspot: Bool = false
  56. var noisyCGMTargetMultiplier: Decimal = 1.3
  57. var suspendZerosIob: Bool = true
  58. var enableEnliteBgproxy: Bool = false
  59. var calcGlucoseNoise: Bool = false
  60. var adjustmentFactor: Decimal = 0.8
  61. var adjustmentFactorSigmoid: Decimal = 0.5
  62. var useNewFormula: Bool = false
  63. var enableDynamicCR: Bool = false
  64. var sigmoid: Bool = false
  65. var weightPercentage: Decimal = 0.65
  66. var tddAdjBasal: Bool = false
  67. var thresholdSetting: Decimal = 60
  68. var model: String?
  69. var basalprofile: [BasalProfileEntry]?
  70. var isfProfile: ComputedInsulinSensitivities?
  71. var bgTargets: ComputedBGTargets?
  72. var carbRatios: CarbRatios?
  73. private enum CodingKeys: String, CodingKey {
  74. case dia
  75. case min5mCarbImpact = "min_5m_carbimpact"
  76. case maxIob = "max_iob"
  77. case maxDailyBasal = "max_daily_basal"
  78. case maxBasal = "max_basal"
  79. case minBg = "min_bg"
  80. case maxBg = "max_bg"
  81. case targetBg = "target_bg"
  82. case smbDeliveryRatio = "smb_delivery_ratio"
  83. case carbRatio = "carb_ratio"
  84. case sens
  85. case maxDailySafetyMultiplier = "max_daily_safety_multiplier"
  86. case currentBasalSafetyMultiplier = "current_basal_safety_multiplier"
  87. case highTemptargetRaisesSensitivity = "high_temptarget_raises_sensitivity"
  88. case lowTemptargetLowersSensitivity = "low_temptarget_lowers_sensitivity"
  89. case sensitivityRaisesTarget = "sensitivity_raises_target"
  90. case resistanceLowersTarget = "resistance_lowers_target"
  91. case exerciseMode = "exercise_mode"
  92. case halfBasalExerciseTarget = "half_basal_exercise_target"
  93. case maxCOB
  94. case skipNeutralTemps = "skip_neutral_temps"
  95. case remainingCarbsCap
  96. case enableUAM
  97. case a52RiskEnable = "A52_risk_enable"
  98. case smbInterval = "SMBInterval"
  99. case enableSMBWithCOB = "enableSMB_with_COB"
  100. case enableSMBWithTemptarget = "enableSMB_with_temptarget"
  101. case allowSMBWithHighTemptarget = "allowSMB_with_high_temptarget"
  102. case enableSMBAlways = "enableSMB_always"
  103. case enableSMBAfterCarbs = "enableSMB_after_carbs"
  104. case maxSMBBasalMinutes
  105. case maxUAMSMBBasalMinutes
  106. case bolusIncrement = "bolus_increment"
  107. case carbsReqThreshold
  108. case currentBasal = "current_basal"
  109. case temptargetSet
  110. case autosensMax = "autosens_max"
  111. case outUnits = "out_units"
  112. case autosensMin = "autosens_min"
  113. case rewindResetsAutosens = "rewind_resets_autosens"
  114. case remainingCarbsFraction
  115. case unsuspendIfNoTemp = "unsuspend_if_no_temp"
  116. case autotuneIsfAdjustmentFraction = "autotune_isf_adjustmentFraction"
  117. case enableSMBHighBg = "enableSMB_high_bg"
  118. case enableSMBHighBgTarget = "enableSMB_high_bg_target"
  119. case maxDeltaBgThreshold = "maxDelta_bg_threshold"
  120. case curve
  121. case useCustomPeakTime
  122. case insulinPeakTime
  123. case offlineHotspot = "offline_hotspot"
  124. case noisyCGMTargetMultiplier
  125. case suspendZerosIob = "suspend_zeros_iob"
  126. case enableEnliteBgproxy
  127. case calcGlucoseNoise = "calc_glucose_noise"
  128. case adjustmentFactor
  129. case adjustmentFactorSigmoid
  130. case useNewFormula
  131. case enableDynamicCR
  132. case sigmoid
  133. case weightPercentage
  134. case tddAdjBasal
  135. case thresholdSetting = "threshold_setting"
  136. case model
  137. case basalprofile
  138. case isfProfile
  139. case bgTargets = "bg_targets"
  140. case carbRatios = "carb_ratios"
  141. }
  142. }