فهرست منبع

Save 120 days

HbA1c fix
Jon B.M 3 سال پیش
والد
کامیت
77465dd2e8
1فایلهای تغییر یافته به همراه68 افزوده شده و 83 حذف شده
  1. 68 83
      FreeAPS/Sources/APS/APSManager.swift

+ 68 - 83
FreeAPS/Sources/APS/APSManager.swift

@@ -761,8 +761,61 @@ final class BaseAPSManager: APSManager, Injectable {
             iPa = 50
         }
 
-        // HbA1c string:
+        // Averages:
+        // If more than l day of stats:
         let stats = storage.retrieve(OpenAPS.Monitor.dailyStats, as: [DailyStats].self)
+
+        var avgS: Decimal = 0
+        var nrAvgs: Decimal = 0
+        var sevenDaysAvg: Decimal = 0
+        var thirtyDaysAverage: Decimal = 0
+        var totalDataAvg: Decimal = 0
+        let arraysInjson = stats?.count ?? 0
+        // let end = arraysInjson - 1
+        var i = 0
+
+        if arraysInjson > 1 {
+            while i < arraysInjson {
+                avgS += stats?[i].BG_daily_Average_mg_dl as! Decimal
+                nrAvgs += 1
+                if nrAvgs >= 1 {
+                    totalDataAvg = avgS / nrAvgs
+                }
+                if nrAvgs == 7 {
+                    sevenDaysAvg = avgS / nrAvgs
+                }
+                if nrAvgs == 30 {
+                    thirtyDaysAverage = avgS / nrAvgs
+                }
+                i += 1
+            }
+        }
+
+        // HbA1c estimation (%, mmol/mol
+        let NGSPa1CStatisticValue = (46.7 + tir().averageGlucose) / 28.7 // NGSP (%)
+        let IFCCa1CStatisticValue = 10.929 *
+            (NGSPa1CStatisticValue - 2.152) // IFCC (mmol/mol)  A1C(mmol/mol) = 10.929 * (A1C(%) - 2.15)
+        // 7 days
+        let NGSPa1CStatisticValue_7 = (46.7 + sevenDaysAvg) / 28.7
+        let IFCCa1CStatisticValue_7 = 10.929 * (NGSPa1CStatisticValue_7 - 2.152)
+        // 14 days
+        let NGSPa1CStatisticValue_30 = (46.7 + thirtyDaysAverage) / 28.7
+        let IFCCa1CStatisticValue_30 = 10.929 * (NGSPa1CStatisticValue_30 - 2.152)
+        // A
+        let NGSPa1CStatisticValue_total = (46.7 + totalDataAvg) / 28.7
+        let IFCCa1CStatisticValue_total = 10.929 * (NGSPa1CStatisticValue_total - 2.152)
+
+        // Round
+        let HbA1cRoundedIFCC = round(Double(IFCCa1CStatisticValue) * 10) / 10
+        let HbA1cRoundedNGSP = round(Double(NGSPa1CStatisticValue) * 10) / 10
+        let HbA1cRoundedIFCC_7 = round(Double(IFCCa1CStatisticValue_7) * 10) / 10
+        let HbA1cRoundedNGSP_7 = round(Double(NGSPa1CStatisticValue_7) * 10) / 10
+        let HbA1cRoundedIFCC_30 = round(Double(IFCCa1CStatisticValue_30) * 10) / 10
+        let HbA1cRoundedNGSP_30 = round(Double(NGSPa1CStatisticValue_30) * 10) / 10
+        let HbA1cRoundedIFCC_total = round(Double(IFCCa1CStatisticValue_total) * 10) / 10
+        let HbA1cRoundedNGSP_total = round(Double(NGSPa1CStatisticValue_total) * 10) / 10
+
+        // HbA1c string:
         let length__ = stats?.count ?? 0
         var string7Days = ""
         var string14Days = ""
@@ -770,20 +823,20 @@ final class BaseAPSManager: APSManager, Injectable {
 
         switch length__ {
         case 7...:
-            string7Days = " HbA1c for previous 7 days: \(tir().HbA1cIFCC_7) mmol/mol / \(tir().HbA1cNGSP_7) %."
+            string7Days = " HbA1c for previous 7 days: \(HbA1cRoundedIFCC_7) mmol/mol / \(HbA1cRoundedNGSP_7) %."
             fallthrough
         case 14...:
-            string14Days = " HbA1c for previous 14 days: \(tir().HbA1cIFCC_14) mmol/mol / \(tir().HbA1cNGSP_14) %."
+            string14Days = " HbA1c for previous 30 days: \(HbA1cRoundedIFCC_30) mmol/mol / \(HbA1cRoundedNGSP_30) %."
             fallthrough
         case 2...:
             stringTotal =
-                " HbA1c for total number of days(\(length__)): \(tir().HbA1cIFCC_total) mmol/mol / \(tir().HbA1cNGSP_total) %."
+                " HbA1c for total number of days(\(length__)): \(HbA1cRoundedIFCC_total) mmol/mol / \(HbA1cRoundedNGSP_total) %."
         default:
             stringTotal = ""
         }
 
         let HbA1c_string =
-            "Estimated HbA1c: \(tir().HbA1cIFCC) mmol/mol / \(tir().HbA1cNGSP) % and Average Blood Glucose: \(tir().averageGlucose) mg/dl / \(round(Double(tir().averageGlucose * 0.0555) * 10) / 10) mmol/l for the previous day, 00:00-23:59." +
+            "Estimated HbA1c: \(HbA1cRoundedIFCC) mmol/mol / \(HbA1cRoundedNGSP) % and Average Blood Glucose: \(tir().averageGlucose) mg/dl / \(round(Double(tir().averageGlucose * 0.0555) * 10) / 10) mmol/l for the previous day, 00:00-23:59." +
             string7Days + string14Days + stringTotal
 
         let dailystat = DailyStats(
@@ -830,29 +883,23 @@ final class BaseAPSManager: APSManager, Injectable {
                 storage.transaction { storage in
                     storage.append(dailystat, to: file, uniqBy: \.id)
                     newEntries = storage.retrieve(file, as: [DailyStats].self)?
-                        .filter { $0.date.addingTimeInterval(1.days.timeInterval) < now }
                         .sorted { $0.date > $1.date } ?? []
+                        .filter {
+                            $0.date.addingTimeInterval(1.days.timeInterval) < now && $0.date
+                                .addingTimeInterval(120.days.timeInterval) > Date() }
                     storage.save(Array(newEntries), as: file)
                 }
             }
         }
     }
 
-    // Time In Range (%), Average Glucose (24 hours) and HbA1c
+    // Time In Range (%), Average Glucose (24 hours)
     func tir()
         -> (
             averageGlucose: Decimal,
             hypos: Decimal,
             hypers: Decimal,
-            TIR: Decimal,
-            HbA1cIFCC: Decimal,
-            HbA1cNGSP: Decimal,
-            HbA1cIFCC_7: Decimal,
-            HbA1cNGSP_7: Decimal,
-            HbA1cIFCC_14: Decimal,
-            HbA1cNGSP_14: Decimal,
-            HbA1cIFCC_total: Decimal,
-            HbA1cNGSP_total: Decimal
+            TIR: Decimal
         )
     {
         let glucose = storage.retrieve(OpenAPS.Monitor.glucose, as: [BloodGlucose].self)
@@ -861,7 +908,7 @@ final class BaseAPSManager: APSManager, Injectable {
         let endIndex = length_ - 1
 
         guard length_ != 0 else {
-            return (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+            return (0, 0, 0, 0)
         }
 
         var bg: Decimal = 0
@@ -873,39 +920,9 @@ final class BaseAPSManager: APSManager, Injectable {
                 nr_bgs += 1
             }
         }
-        var averageGlucose = bg / nr_bgs
+        var averageGlucose_ = bg / nr_bgs
         // Round
-        averageGlucose = Decimal(round(Double(averageGlucose)))
-
-        // If more than l day of stats:
-        let stats = storage.retrieve(OpenAPS.Monitor.dailyStats, as: [DailyStats].self)
-        
-        var avgS: Decimal = 0
-        var nrAvgs: Decimal = 0
-        var sevenDaysAvg: Decimal = 0
-        var fourteenDaysAvg: Decimal = 0
-        var totalDataAvg: Decimal = 0
-        let arraysInjson = stats?.count ?? 0
-
-        if arraysInjson > 1 {
-            for entry in stats! {
-                if stats?.BG_daily_Average_mg_dl != nil {
-                    avgS += entry.BG_daily_Average_mg_dl
-                    print("Average: \(entry.BG_daily_Average_mg_dl)")
-                    nrAvgs += 1
-
-                    if nrAvgs >= 1 {
-                        totalDataAvg = avgS / nrAvgs
-                    }
-                    if nrAvgs == 7 {
-                        sevenDaysAvg = avgS / nrAvgs
-                    }
-                    if nrAvgs == 14 {
-                        fourteenDaysAvg = avgS / nrAvgs
-                    }
-                }
-            }
-        }
+        averageGlucose_ = Decimal(round(Double(averageGlucose_)))
 
         let fullTime = glucose![0].date - glucose![endIndex].date
         var timeInHypo: Decimal = 0
@@ -950,30 +967,6 @@ final class BaseAPSManager: APSManager, Injectable {
         let hyperRounded = round(Double(hypers) * 10) / 10
         let TIRrounded = round((100 - (hypoRounded + hyperRounded)) * 10) / 10
 
-        // HbA1c estimation (%, mmol/mol
-        let NGSPa1CStatisticValue = (46.7 + averageGlucose) / 28.7 // NGSP (%)
-        let IFCCa1CStatisticValue = 10.929 *
-            (NGSPa1CStatisticValue - 2.152) // IFCC (mmol/mol)  A1C(mmol/mol) = 10.929 * (A1C(%) - 2.15)
-        // 7 days
-        let NGSPa1CStatisticValue_7 = (46.7 + sevenDaysAvg) / 28.7
-        let IFCCa1CStatisticValue_7 = 10.929 * (NGSPa1CStatisticValue_7 - 2.152)
-        // 14 days
-        let NGSPa1CStatisticValue_14 = (46.7 + fourteenDaysAvg) / 28.7
-        let IFCCa1CStatisticValue_14 = 10.929 * (NGSPa1CStatisticValue_14 - 2.152)
-        // A
-        let NGSPa1CStatisticValue_total = (46.7 + totalDataAvg) / 28.7
-        let IFCCa1CStatisticValue_total = 10.929 * (NGSPa1CStatisticValue_total - 2.152)
-
-        // Round
-        let HbA1cRoundedIFCC = round(Double(IFCCa1CStatisticValue) * 10) / 10
-        let HbA1cRoundedNGSP = round(Double(NGSPa1CStatisticValue) * 10) / 10
-        let HbA1cRoundedIFCC_7 = round(Double(IFCCa1CStatisticValue_7) * 10) / 10
-        let HbA1cRoundedNGSP_7 = round(Double(NGSPa1CStatisticValue_7) * 10) / 10
-        let HbA1cRoundedIFCC_14 = round(Double(IFCCa1CStatisticValue_14) * 10) / 10
-        let HbA1cRoundedNGSP_14 = round(Double(NGSPa1CStatisticValue_14) * 10) / 10
-        let HbA1cRoundedIFCC_total = round(Double(IFCCa1CStatisticValue_total) * 10) / 10
-        let HbA1cRoundedNGSP_total = round(Double(NGSPa1CStatisticValue_total) * 10) / 10
-
         // For testing. See in Xcode console each loop.
         /*
          print(
@@ -982,18 +975,10 @@ final class BaseAPSManager: APSManager, Injectable {
          */
 
         return (
-            averageGlucose,
+            averageGlucose_,
             Decimal(hypoRounded),
             Decimal(hyperRounded),
-            Decimal(TIRrounded),
-            Decimal(HbA1cRoundedIFCC),
-            Decimal(HbA1cRoundedNGSP),
-            Decimal(HbA1cRoundedIFCC_7),
-            Decimal(HbA1cRoundedNGSP_7),
-            Decimal(HbA1cRoundedIFCC_14),
-            Decimal(HbA1cRoundedNGSP_14),
-            Decimal(HbA1cRoundedIFCC_total),
-            Decimal(HbA1cRoundedNGSP_total)
+            Decimal(TIRrounded)
         )
     }