diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
index a8cb8b25..acc19c68 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
@@ -19,6 +19,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class TargetLesionCalculateDto
{
+ ///
+ /// 是否存在靶病灶
+ ///
+ public bool ExistsTargetLesion { get; set; }
+
///
/// 非淋巴结靶病灶长径之和 decimal
///
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
index 020be441..a083b692 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
@@ -885,7 +885,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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();
- if (thisValue - lastValue > 5)
+ if (thisValue - lastValue >= 5)
{
isExists = true;
}
@@ -1190,6 +1190,49 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// 获取靶病灶评估
///
///
+ ///
+ /// 靶病灶疗效评估算法:
+ /// 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
+ /// }
+ /// }
+ /// }
+ /// }
+ ///
///
public async Task GetTargetLesionEvaluate(ReadingCalculateDto inDto)
{
@@ -1204,6 +1247,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
TargetLesionCalculateDto resultData = new TargetLesionCalculateDto()
{
+ // 是否存在靶病灶
+ ExistsTargetLesion= tableQuestion.Count()>0,
+
//非淋巴结靶病灶长径之和 decimal
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,
// SOD 变化值 比整体访视期间SOD最低点SOD绝对增加值<5 mm
- 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
- ,
+ LowChangeLess5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < 5,
// 比整体访视期间SOD最低点SOD绝对增加值≥5 mm
- 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
- ,
+ LowChangeBigger5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
// 被评估为NE的单个靶病灶 是否存在状态为不可评估的靶病灶
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;
- if (resultData.SumOfDiameter == 0 && resultData.DiameterLessThan10 && !resultData.ExixtsNETargetLesion)
- {
- 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)
+ TargetAssessment result = TargetAssessment.SD;
+ if (!resultData.ExistsTargetLesion)
{
result = TargetAssessment.ND;
}
-
- else if (
- (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR) && resultData.CurrenShortBigger10 && resultData.IsAddFive)
- ||
- (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR) && resultData.CurrentMajoreBigger0)
- )
+ else
{
- result = TargetAssessment.PD;
- }
+ if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
+ {
+ if (resultData.CurrenShortBigger10 && resultData.IsAddFive)
+ {
+ 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();
}