///|
pub(all) struct MewsInput {
systolic_bp : Int
heart_rate : Int
respiratory_rate : Int
temperature_tenths_c : Int
consciousness : Consciousness
} derive(Debug, Eq)
///|
pub fn validate_mews(input : MewsInput) -> ValidationError? {
match validate_range("systolic_bp", input.systolic_bp, 30, 300) {
Some(err) => Some(err)
None =>
match validate_range("heart_rate", input.heart_rate, 0, 300) {
Some(err) => Some(err)
None =>
match
validate_range("respiratory_rate", input.respiratory_rate, 0, 100) {
Some(err) => Some(err)
None =>
validate_range(
"temperature_tenths_c",
input.temperature_tenths_c,
250,
450,
)
}
}
}
}
///|
pub fn mews_systolic_bp_points(value : Int) -> Int {
if value <= 70 {
3
} else if value <= 80 {
2
} else if value <= 100 {
1
} else if value <= 199 {
0
} else {
2
}
}
///|
pub fn mews_heart_rate_points(value : Int) -> Int {
if value < 40 {
2
} else if value <= 50 {
1
} else if value <= 100 {
0
} else if value <= 129 {
2
} else {
3
}
}
///|
pub fn mews_respiratory_rate_points(value : Int) -> Int {
if value < 9 {
2
} else if value <= 14 {
0
} else if value <= 20 {
1
} else if value <= 29 {
2
} else {
3
}
}
///|
pub fn mews_temperature_points(value : Int) -> Int {
if value < 350 {
2
} else if value <= 380 {
0
} else if value <= 390 {
1
} else {
2
}
}
///|
pub fn mews_consciousness_points(value : Consciousness) -> Int {
match value {
Alert => 0
NewConfusion | Voice | Pain | Unresponsive => 3
}
}
///|
pub fn mews_severity(score : Int) -> Severity {
if score >= 9 {
Critical
} else if score >= 5 {
High
} else if score >= 2 {
Medium
} else {
Low
}
}
///|
pub fn score_mews(input : MewsInput) -> ScoreReport {
let bp = mews_systolic_bp_points(input.systolic_bp)
let heart = mews_heart_rate_points(input.heart_rate)
let respiration = mews_respiratory_rate_points(input.respiratory_rate)
let temperature = mews_temperature_points(input.temperature_tenths_c)
let consciousness = mews_consciousness_points(input.consciousness)
let score = bp + heart + respiration + temperature + consciousness
report(
"MEWS",
score,
mews_severity(score),
"MEWS is an early-warning score and does not replace local escalation policy.",
[
explanation("Systolic blood pressure", bp, "MEWS systolic pressure band"),
explanation("Heart rate", heart, "MEWS pulse band"),
explanation("Respiratory rate", respiration, "MEWS respiratory band"),
explanation("Temperature", temperature, "MEWS temperature band"),
explanation("Consciousness", consciousness, "MEWS AVPU contribution"),
],
)
}