StableVersion4.3/HL_FristAidPlatform_ChestPain/CalculateGraceScore.cs

210 lines
5.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
namespace HL_FristAidPlatform_ChestPain
{
/// <summary>
/// 计算 Grace分值
/// </summary>
public static class CalculateGraceScore
{
/// <summary>
/// 计算分值
/// </summary>
/// <param name="systolicPressure">收缩压</param>
/// <param name="creatinine">肌酐</param>
/// <param name="age">年龄</param>
/// <param name="heartRate">心率</param>
/// <param name="isSTChange">ST段变化</param>
/// <param name="isSuddenCardiacSrrest">入院时心脏骤停</param>
/// <param name="isMyocardialNecrosis">心肌坏死标志物升高</param>
/// <param name="killipClassification">killip分级</param>
/// <returns></returns>
public static int CalculateScore(int systolicPressure, decimal creatinine, int age, int heartRate, bool isSTChange, bool isSuddenCardiacSrrest, bool isMyocardialNecrosis, int killipClassification)
{
int Score = 0;
#region 年龄
if (age < 30)
{
Score += 0;
}
if (age >= 30 && age <= 39)
{
Score += 8;
}
else if (age >= 40 && age <= 49)
{
Score += 25;
}
else if (age >= 50 && age <= 59)
{
Score += 41;
}
else if (age >= 60 && age <= 69)
{
Score += 58;
}
else if (age >= 70 && age <= 79)
{
Score += 75;
}
else if (age >= 80)
{
Score += 91;
}
#endregion
#region 心率
if (heartRate < 50)
{
Score += 0;
}
else if (heartRate >= 50 && heartRate <= 69)
{
Score += 3;
}
else if (heartRate >= 70 && heartRate <= 89)
{
Score += 9;
}
else if (heartRate >= 90 && heartRate <= 109)
{
Score += 15;
}
else if (heartRate >= 110 && heartRate <= 149)
{
Score += 24;
}
else if (heartRate >= 150 && heartRate <= 199)
{
Score += 38;
}
else if (heartRate >= 200)
{
Score += 46;
}
#endregion
#region 收缩压
if (systolicPressure < 80)
{
Score += 58;
}
else if (systolicPressure >= 80 && systolicPressure <= 99)
{
Score += 53;
}
else if (systolicPressure >= 100 && systolicPressure <= 119)
{
Score += 43;
}
else if (systolicPressure >= 120 && systolicPressure <= 139)
{
Score += 34;
}
else if (systolicPressure >= 140 && systolicPressure <= 159)
{
Score += 24;
}
else if (systolicPressure >= 160 && systolicPressure <= 199)
{
Score += 10;
}
else if (systolicPressure >= 200)
{
Score += 0;
}
#endregion
#region 肌酐
//单位转换 umol/L转为mg/dl方式umol/L*0.01131
double Cur_creatinine = HL_FristAidPlatform_Public.PublicClass.ToDouble(creatinine, 0) * 0.01131;
Cur_creatinine = Math.Round(Cur_creatinine, 2);
if (Cur_creatinine > 0 && Cur_creatinine <= 0.39)
{
Score += 1;
}
else if (Cur_creatinine >= 0.4 && Cur_creatinine <= 0.79)
{
Score += 4;
}
else if (Cur_creatinine >= 0.8 && Cur_creatinine <= 1.19)
{
Score += 7;
}
else if (Cur_creatinine >= 1.2 && Cur_creatinine <= 1.59)
{
Score += 10;
}
else if (Cur_creatinine > 1.6 && Cur_creatinine <= 1.99)
{
Score += 13;
}
else if (Cur_creatinine >= 2.0 && Cur_creatinine <= 3.99)
{
Score += 21;
}
else if (Cur_creatinine > 4)
{
Score += 28;
}
#endregion
#region killip分级
//Killip分级 1I级(no CHF)2II级(rales and / or JVD)3III级(pulmonary edema)4IV级(cardiogenic shock)
if (killipClassification == 1)
{
Score += 0;
}
else if (killipClassification == 2)
{
Score += 20;
}
else if (killipClassification == 3)
{
Score += 39;
}
else if (killipClassification == 4)
{
Score += 59;
}
#endregion
#region 入院时心脏骤停
if (isSuddenCardiacSrrest)
{
Score += 39;
}
else
{
Score += 0;
}
#endregion
#region ST段变化
if (isSTChange)
{
Score += 28;
}
else
{
Score += 0;
}
#endregion
#region 心肌坏死标志物升高
if (isMyocardialNecrosis)
{
Score += 14;
}
else
{
Score += 0;
}
#endregion
return Score;
}
}
}