Test.EIImageViewer
parent
f1630fc8ec
commit
a198a6fc3e
|
@ -19,6 +19,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
|
|
||||||
public class TargetLesionCalculateDto
|
public class TargetLesionCalculateDto
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 是否存在靶病灶
|
||||||
|
/// </summary>
|
||||||
|
public bool ExistsTargetLesion { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 非淋巴结靶病灶长径之和 decimal
|
/// 非淋巴结靶病灶长径之和 decimal
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -885,7 +885,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
var thisRowData = thisQuestionAsnwer.Where(x => x.RowIndex == item).SelectMany(x => x.TableQuestionList).ToList();
|
var thisRowData = thisQuestionAsnwer.Where(x => x.RowIndex == item).SelectMany(x => x.TableQuestionList).ToList();
|
||||||
var thisValue = thisRowData.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
var thisValue = thisRowData.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
||||||
|
|
||||||
if (thisValue - lastValue > 5)
|
if (thisValue - lastValue >= 5)
|
||||||
{
|
{
|
||||||
isExists = true;
|
isExists = true;
|
||||||
}
|
}
|
||||||
|
@ -1190,6 +1190,49 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
/// 获取靶病灶评估
|
/// 获取靶病灶评估
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
|
/// <remarks>
|
||||||
|
/// 靶病灶疗效评估算法:
|
||||||
|
/// If(没有靶病灶)
|
||||||
|
/// {
|
||||||
|
/// 靶病灶疗效为 ND。
|
||||||
|
/// }else
|
||||||
|
/// {
|
||||||
|
/// 初始化靶病灶疗效为 SD
|
||||||
|
/// If(上次访视点评估是CR)
|
||||||
|
/// {
|
||||||
|
/// If(当前访视点淋巴结病灶, 至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
|
||||||
|
/// {
|
||||||
|
/// 靶病灶疗效为 PD
|
||||||
|
/// }
|
||||||
|
/// If(当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||||
|
/// {
|
||||||
|
/// 靶病灶疗效为 PD
|
||||||
|
/// }
|
||||||
|
/// } else if(比整体访视期间最低点SOD增加≥20 %)
|
||||||
|
/// {
|
||||||
|
/// 靶病灶疗效为 PD
|
||||||
|
/// }else
|
||||||
|
/// {
|
||||||
|
/// If (有被评估为NE的单个靶病灶)
|
||||||
|
/// {
|
||||||
|
/// 靶病灶疗效为 NE
|
||||||
|
/// }else
|
||||||
|
/// {
|
||||||
|
/// If(与基线期SOD相比减小≥30 %
|
||||||
|
/// {
|
||||||
|
/// If(与整体访视期间最低点SOD相比增加<20 % 或者 比整体访视期间最低点SOD绝对增加值<5 mm)
|
||||||
|
/// {
|
||||||
|
/// 靶病灶疗效为 PR
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10)
|
||||||
|
/// {
|
||||||
|
/// 靶病灶疗效为 CR
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// </remarks>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<string> GetTargetLesionEvaluate(ReadingCalculateDto inDto)
|
public async Task<string> GetTargetLesionEvaluate(ReadingCalculateDto inDto)
|
||||||
{
|
{
|
||||||
|
@ -1204,6 +1247,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
}
|
}
|
||||||
TargetLesionCalculateDto resultData = new TargetLesionCalculateDto()
|
TargetLesionCalculateDto resultData = new TargetLesionCalculateDto()
|
||||||
{
|
{
|
||||||
|
// 是否存在靶病灶
|
||||||
|
ExistsTargetLesion= tableQuestion.Count()>0,
|
||||||
|
|
||||||
//非淋巴结靶病灶长径之和 decimal
|
//非淋巴结靶病灶长径之和 decimal
|
||||||
SumOfDiameter = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SumOfDiameter).Sum(x => x.Answer.IsNullOrEmptyReturn0()),
|
SumOfDiameter = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SumOfDiameter).Sum(x => x.Answer.IsNullOrEmptyReturn0()),
|
||||||
|
|
||||||
|
@ -1228,14 +1274,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
LowPercentBigger20 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 20,
|
LowPercentBigger20 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 20,
|
||||||
|
|
||||||
// SOD 变化值 比整体访视期间SOD最低点SOD绝对增加值<5 mm
|
// SOD 变化值 比整体访视期间SOD最低点SOD绝对增加值<5 mm
|
||||||
LowChangeLess5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < 5
|
LowChangeLess5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < 5,
|
||||||
&& inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >- 5
|
|
||||||
,
|
|
||||||
|
|
||||||
// 比整体访视期间SOD最低点SOD绝对增加值≥5 mm
|
// 比整体访视期间SOD最低点SOD绝对增加值≥5 mm
|
||||||
LowChangeBigger5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5
|
LowChangeBigger5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
|
||||||
|| inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) <=- 5
|
|
||||||
,
|
|
||||||
|
|
||||||
// 被评估为NE的单个靶病灶 是否存在状态为不可评估的靶病灶
|
// 被评估为NE的单个靶病灶 是否存在状态为不可评估的靶病灶
|
||||||
ExixtsNETargetLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.UnableEvaluate)),
|
ExixtsNETargetLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.UnableEvaluate)),
|
||||||
|
@ -1284,54 +1326,50 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TargetAssessment result = TargetAssessment.NE;
|
TargetAssessment result = TargetAssessment.SD;
|
||||||
if (resultData.SumOfDiameter == 0 && resultData.DiameterLessThan10 && !resultData.ExixtsNETargetLesion)
|
if (!resultData.ExistsTargetLesion)
|
||||||
{
|
|
||||||
result = TargetAssessment.CR;
|
|
||||||
}
|
|
||||||
else if (
|
|
||||||
(resultData.SODPercentBigger30 && resultData.LowPercentLess20 && !resultData.ExixtsNETargetLesion)
|
|
||||||
||
|
|
||||||
(resultData.SODPercentBigger30 && resultData.LowChangeLess5 && !resultData.ExixtsNETargetLesion)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
result = TargetAssessment.PR;
|
|
||||||
}
|
|
||||||
else if (
|
|
||||||
(resultData.SODPercentLess30 && resultData.LowPercentLess20 && !resultData.ExixtsNETargetLesion)
|
|
||||||
||
|
|
||||||
(resultData.SODPercentLess30 && resultData.LowChangeLess5 && !resultData.ExixtsNETargetLesion)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
result = TargetAssessment.SD;
|
|
||||||
}
|
|
||||||
else if (resultData.LowPercentBigger20 && resultData.LowChangeBigger5)
|
|
||||||
{
|
|
||||||
result = TargetAssessment.PD;
|
|
||||||
}
|
|
||||||
else if (
|
|
||||||
(resultData.LowPercentLess20 && resultData.ExixtsNETargetLesion)
|
|
||||||
||
|
|
||||||
(resultData.LowPercentBigger20 && resultData.LowChangeLess5 && resultData.ExixtsNETargetLesion)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
result = TargetAssessment.NE;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (!resultData.ExixtsNETargetLesion && resultData.SumOfDiameter == 0 && resultData.SODPercent == 0)
|
|
||||||
{
|
{
|
||||||
result = TargetAssessment.ND;
|
result = TargetAssessment.ND;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
else if (
|
{
|
||||||
(resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR) && resultData.CurrenShortBigger10 && resultData.IsAddFive)
|
if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
|
||||||
||
|
{
|
||||||
(resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR) && resultData.CurrentMajoreBigger0)
|
if (resultData.CurrenShortBigger10 && resultData.IsAddFive)
|
||||||
)
|
|
||||||
{
|
{
|
||||||
result = TargetAssessment.PD;
|
result = TargetAssessment.PD;
|
||||||
}
|
}
|
||||||
|
if (resultData.CurrentMajoreBigger0)
|
||||||
|
{
|
||||||
|
result = TargetAssessment.PD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (resultData.LowPercentBigger20)
|
||||||
|
{
|
||||||
|
result = TargetAssessment.PD;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (resultData.ExixtsNETargetLesion)
|
||||||
|
{
|
||||||
|
result = TargetAssessment.NE;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if (resultData.SODPercentBigger30)
|
||||||
|
{
|
||||||
|
if (resultData.LowPercentLess20||resultData.LowChangeLess5)
|
||||||
|
{
|
||||||
|
result = TargetAssessment.PR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resultData.SumOfDiameter == 0 && resultData.DiameterLessThan10)
|
||||||
|
{
|
||||||
|
result = TargetAssessment.CR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return result.GetEnumInt();
|
return result.GetEnumInt();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue