From 6e30f7269226bb8a62bfa692abb827029471efdd Mon Sep 17 00:00:00 2001 From: Samiul Hoque Date: Wed, 13 Feb 2019 14:14:10 +0600 Subject: [PATCH] Update blood pressure assessment for age check --- guideline_hearts.json | 93 +++++++++++++++++++++------------ pkg/algorithms/hearts/hearts.go | 2 +- pkg/engine/blood_pressure.go | 25 ++++++--- pkg/engine/body_composition.go | 2 +- pkg/version.go | 2 +- 5 files changed, 82 insertions(+), 42 deletions(-) diff --git a/guideline_hearts.json b/guideline_hearts.json index 74398b8..13b9d3e 100644 --- a/guideline_hearts.json +++ b/guideline_hearts.json @@ -723,7 +723,7 @@ "from": 141, "unit": "mmHg" }, - "target": "130/80" + "target": "120/80" }, { "diabetes": false, @@ -731,7 +731,7 @@ "from": 91, "unit": "mmHg" }, - "target": "130/80" + "target": "120/80" } ], "code": "BP-HTN" @@ -758,27 +758,54 @@ ], "code": "BP-DM-TARGET" }, + { + "category": "Suspected secondary Hypertension", + "definition": "Elevated blood pressure in patient age < 40", + "conditions": [{ + "diabetes": false, + "age": { + "to": 40 + }, + "sbp": { + "from": 140, + "unit": "mmHg" + }, + "target": "140/90" + }, + { + "diabetes": false, + "dbp": { + "from": 81, + "to": 90, + "unit": "mmHg" + }, + "target": "120/80" + } + ], + "code": "BP-ELEVATED" + }, { "category": "Elevated bp", "definition": "elevated blood pressure, not hypertension", "conditions": [{ - "diabetes": false, - "sbp": { - "from": 121, - "to": 140, - "unit": "mmHg" - }, - "target": "120/80" - }, - { - "diabetes": false, - "dbp": { - "from": 81, - "to": 90, - "unit": "mmHg" + "diabetes": false, + "sbp": { + "from": 121, + "to": 140, + "unit": "mmHg" + }, + "target": "120/80" }, - "target": "120/80" - }], + { + "diabetes": false, + "dbp": { + "from": 81, + "to": 90, + "unit": "mmHg" + }, + "target": "120/80" + } + ], "code": "BP-ELEVATED" }, { @@ -825,7 +852,7 @@ "to": 7.0, "unit": "%" }, - "target": "< 7%" + "target": "< 7%" }], "code": "DM-EXISTING-GOOD-CONTROL" }, @@ -839,7 +866,7 @@ "to": 4, "unit": "%" }, - "target": "< 7%" + "target": "< 7%" }], "code": "DM-EXISTING-OVER-CONTROL" }, @@ -853,7 +880,7 @@ "from": 7.1, "unit": "%" }, - "target": "< 7%" + "target": "< 7%" }], "code": "DM-EXISTING-POOR-CONTROL" }, @@ -867,7 +894,7 @@ "to": 7.0, "unit": "mmol/L" }, - "target": "< 126 mg/dL (7.0 mmol/L)" + "target": "< 126 mg/dL (7.0 mmol/L)" }], "code": "DM-EXISTING-GOOD-CONTROL" }, @@ -881,7 +908,7 @@ "to": 4, "unit": "mmol/L" }, - "target": "< 126 mg/dL (7.0 mmol/L)" + "target": "< 126 mg/dL (7.0 mmol/L)" }], "code": "DM-EXISTING-OVER-CONTROL" }, @@ -895,7 +922,7 @@ "from": 7.1, "unit": "mmol/L" }, - "target": "< 126 mg/dL (7.0 mmol/L)" + "target": "< 126 mg/dL (7.0 mmol/L)" }], "code": "DM-EXISTING-POOR-CONTROL" }, @@ -909,7 +936,7 @@ "from": 7.1, "unit": "mmol/L" }, - "target": "< 126 mg/dL (7.0 mmol/L)" + "target": "< 126 mg/dL (7.0 mmol/L)" }, { "hx_diabetes": false, @@ -918,7 +945,7 @@ "from": 6.5, "unit": "%" }, - "target": "< 7%" + "target": "< 7%" } ], "code": "DM-NEW-DIAGNOSIS" @@ -934,7 +961,7 @@ "to": 6.4, "unit": "%" }, - "target": "< 6.5%" + "target": "< 6.5%" }, { "hx_diabetes": false, @@ -944,7 +971,7 @@ "to": 7.0, "unit": "mmol/L" }, - "target": "< 100 mg/dL (6.0 mmol/L)" + "target": "< 100 mg/dL (6.0 mmol/L)" } ], "code": "DM-PRE-DIABETES" @@ -959,7 +986,7 @@ "to": 5.6, "unit": "%" }, - "target": "< 6.5%" + "target": "< 6.5%" }, { "hx_diabetes": false, @@ -968,7 +995,7 @@ "to": 5.5, "unit": "mmol/L" }, - "target": "< 100 mg/dL (6.0 mmol/L)" + "target": "< 100 mg/dL (6.0 mmol/L)" } ], "code": "DM-NONE" @@ -1039,7 +1066,7 @@ "to": 10, "unit": "%" }, - "target": "< 90mg/dL (5 mmol/L)" + "target": "Below 90mg/dL (5 mmol/L)" }], "code": "CHOL-LOW-CVD-RISK" }, @@ -1051,14 +1078,14 @@ "to": 1, "unit": "%" }, - "target": "< 90mg/dL (5 mmol/L)" + "target": "Below 90mg/dL (5 mmol/L)" }, { "range": { "to": 8.0, "unit": "mmol/L" }, - "target": "< 90mg/dL (5 mmol/L)" + "target": "Below 90mg/dL (5 mmol/L)" } ], "code": "CHOL-NO-CVD-RISK" diff --git a/pkg/algorithms/hearts/hearts.go b/pkg/algorithms/hearts/hearts.go index b1c4a64..869ff51 100644 --- a/pkg/algorithms/hearts/hearts.go +++ b/pkg/algorithms/hearts/hearts.go @@ -401,7 +401,7 @@ func (d *Data) get(ctx context.Context) error { if diabetes.Value == "diabetes" { diab = true } - bp, err := engineGuide.Body.BloodPressure.Process(diab, p.Sbp, p.Dbp) + bp, err := engineGuide.Body.BloodPressure.Process(diab, p.Sbp, p.Dbp, p.Age) if err != nil { errs = append(errs, err.Error()) } else { diff --git a/pkg/engine/blood_pressure.go b/pkg/engine/blood_pressure.go index 12c0a3c..2744b68 100644 --- a/pkg/engine/blood_pressure.go +++ b/pkg/engine/blood_pressure.go @@ -7,10 +7,11 @@ import ( // BloodPressureCondition object type BloodPressureCondition struct { - Diabetes *bool `json:"diabetes"` - SBP *RangeInt `json:"sbp"` - DBP *RangeInt `json:"dbp"` - Target *string `json:"target"` + Diabetes *bool `json:"diabetes"` + SBP *RangeInt `json:"sbp"` + DBP *RangeInt `json:"dbp"` + Age *RangeFloat `json:"age"` + Target *string `json:"target"` } // BloodPressureConditions slice @@ -28,13 +29,25 @@ type BloodPressureGuideline struct { type BloodPressureGuidelines []BloodPressureGuideline // Process function -func (b *BloodPressureGuidelines) Process(diabetes bool, sbp, dbp int) (Response, error) { +func (b *BloodPressureGuidelines) Process(diabetes bool, sbp, dbp int, age float64) (Response, error) { code := "" value := fmt.Sprintf("%d/%d", sbp, dbp) target := "" for _, g := range *b { for _, c := range *g.Conditions { + ageFrom := 0.0 + ageTo := math.MaxFloat64 + + if c.Age != nil { + if c.Age.From != nil { + ageFrom = *c.Age.From + } + if c.Age.To != nil { + ageTo = *c.Age.To + } + } + sbpFrom := 0 sbpTo := math.MaxInt32 @@ -64,7 +77,7 @@ func (b *BloodPressureGuidelines) Process(diabetes bool, sbp, dbp int) (Response conditionDiabetes = false } - if conditionDiabetes && sbpFrom <= sbp && sbpTo >= sbp && dbpFrom <= dbp && dbpTo >= dbp { + if conditionDiabetes && (age >= ageFrom && age <= ageTo) && sbpFrom <= sbp && sbpTo >= sbp && dbpFrom <= dbp && dbpTo >= dbp { code = *g.Code target = *c.Target break diff --git a/pkg/engine/body_composition.go b/pkg/engine/body_composition.go index 09b1453..fcf1c10 100644 --- a/pkg/engine/body_composition.go +++ b/pkg/engine/body_composition.go @@ -233,7 +233,7 @@ type BodyFatGuideline struct { type BodyFatGuidelines []BodyFatGuideline // Process function -func (b *BodyFatGuidelines) Process(gender string, age float64, bodyFat float64) (Response, error) { +func (b *BodyFatGuidelines) Process(gender string, age, bodyFat float64) (Response, error) { code := "" value := fmt.Sprintf("%.1f%%", bodyFat) target := "" diff --git a/pkg/version.go b/pkg/version.go index 9dac816..bd1778a 100644 --- a/pkg/version.go +++ b/pkg/version.go @@ -1,6 +1,6 @@ package pkg -const version = "v0.4.7" +const version = "v0.4.8" // GetVersion returns the current version func GetVersion() string {