From d6a7e8dc6273537a64d3d002dd1880f6b0aad6c4 Mon Sep 17 00:00:00 2001
From: he <10978375@qq.com>
Date: Mon, 6 Mar 2023 11:27:43 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Reading/Dto/ReadingCalculateViewModel.cs | 5 +
.../ReadingImageTaskService.cs | 2 +
.../RECIST1Point1CalculateService.cs | 239 ++++++++++++------
3 files changed, 164 insertions(+), 82 deletions(-)
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
index 1d18eaa1a..4fab6332f 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
@@ -24,6 +24,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public decimal LowSod { get; set; }
+ ///
+ /// 当前SOD
+ ///
+ public decimal PresentSod { get; set; }
+
///
/// 是否存在靶病灶 (当前访视 至少一个靶病灶的状态为存在)
///
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index c3dd14ba5..e2e65f24b 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -1977,6 +1977,8 @@ namespace IRaCIS.Application.Services
task.IsNeedReadClinicalData = clinicalDataList.Where(x => x.ClinicalDataLevel != ClinicalLevel.Subject).Count() > 0;
}
+ // 如果已经签名 就不需要再读了
+ task.IsNeedReadClinicalData = visitTaskInfo.ReadingTaskState == ReadingTaskState.HaveSigned ? false : task.IsNeedReadClinicalData;
task.DigitPlaces = criterionInfo.DigitPlaces;
task.CriterionType = criterionInfo.CriterionType;
task.IseCRFShowInDicomReading = criterionInfo.IseCRFShowInDicomReading;
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
index d6be526cf..d7fdd40b4 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
@@ -1377,54 +1377,63 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
///
///
///
- /// 靶病灶疗效评估算法:
- ///if(没有靶病灶)
+ /// 靶病灶疗效评估算法-20230306确认版本:
+ ///if(基线没有靶病灶)
///{
- ///靶病灶疗效为 ND
+ /// 靶病灶疗效为 ND
///}else
///{
- ///初始化靶病灶疗效为 SD
- ///If(上次访视点评估是CR)
- ///{
- ///修改靶病灶疗效为 CR
- ///If (有被评估为NE的单个靶病灶)
- ///{
- ///靶病灶疗效为 NE
- ///}
- ///If(当前访视点淋巴结病灶, 至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
- ///{
- /// 靶病灶疗效为 PD
- ///}
- ///If(当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
- ///{
- /// 靶病灶疗效为 PD
- ///}
- ///} else
- ///{
- /// if(最低点SOD不为0,比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值(mm)≥5 mm)
+ /// 初始化靶病灶疗效为 SD
+ ///
+ /// if (与基线期SOD相比减小≥30 %)
+ /// {
+ /// 靶病灶疗效为 PR
+ ///
+ /// }
+ ///
+ ///if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10且淋巴结非靶病灶全部消失)
+ /// {
+ /// 靶病灶疗效为 CR
+ ///
+ /// }
+ ///
+ ///if (有被评估为NE的单个靶病灶)
+ /// {
+ /// 靶病灶疗效为 NE
+ ///
+ /// }
+ ///
+ ///if (最低点SOD > 0)
///{
+ /// if(比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm)
+ /// {
/// 靶病灶疗效为 PD
- ///}else
- /// {
- /// if (有被评估为NE的单个靶病灶)
+ ///
+ /// }
+ ///}
+ ///else
///{
- /// 靶病灶疗效为 NE
- ///}else
- /// {
- /// if (与基线期SOD相比减小≥30 %
- ///{
- /// if (与整体访视期间最低点SOD相比增加<20 % 或者 比整体访视期间最低点SOD绝对增加值<5 mm)
- ///{
- /// 靶病灶疗效为 PR
+ /// //进入该分支最低点SOD=0
+ /// if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm)
+ /// {
+ /// 靶病灶疗效为PD
+ ///
+ /// }
///}
///
- /// if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10)
- ///{
- /// 靶病灶疗效为 CR
- ///}
- /// }
+ ///if(上次访视点评估是CR)
+ /// {
+ /// if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
+ /// {
+ /// 靶病灶疗效为 PD
+ ///
/// }
- /// }
+ /// if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
+ /// {
+ /// 靶病灶疗效为 PD
+ ///
+ /// }
+ ///}
///}
///
///
@@ -1435,14 +1444,17 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
return TargetAssessment.NA.GetEnumInt();
}
-
+
TargetLesionCalculateDto resultData = new TargetLesionCalculateDto()
{
- // 是否存在靶病灶 (当前访视 至少一个靶病灶的状态为存在)
- ExistsTargetLesion=false,
+ // 是否存在靶病灶
+ ExistsTargetLesion = tableQuestion.Count() > 0,
// 最低SOD
- LowSod=(await GetLowSODVisit(inDto)).Select(x=>x.SOD).FirstOrDefault(),
+ LowSod = (await GetLowSODVisit(inDto)).Select(x => x.SOD).FirstOrDefault(),
+
+ // 当前Sod
+ PresentSod = (await GetSODData(inDto)) ?? 0,
//非淋巴结靶病灶长径之和 decimal
SumOfDiameter = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SumOfDiameter).Sum(x => x.Answer.IsNullOrEmptyReturn0()),
@@ -1506,9 +1518,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
foreach (var item in tableQuestion)
{
- // 是否存在靶病灶 (当前访视 至少一个靶病灶的状态为存在)
- resultData.ExistsTargetLesion = resultData.ExistsTargetLesion || item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault() == NoTargetState.Exist.GetEnumInt();
-
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
{
// 淋巴结的短径
@@ -1533,59 +1542,125 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
.Select(x => x.Answer).FirstOrDefaultAsync()) ?? string.Empty;
TargetAssessment result = TargetAssessment.SD;
+ //if(基线没有靶病灶)
if (!resultData.ExistsTargetLesion)
{
+ // 靶病灶疗效为 ND
result = TargetAssessment.ND;
}
else
{
- if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
+ //初始化靶病灶疗效为 SD
+ result = TargetAssessment.SD;
+
+ //if (与基线期SOD相比减小≥30 %)
+ if (resultData.SODPercentBigger30)
{
- if (resultData.ExixtsNETargetLesion)
- {
- result = TargetAssessment.NE;
- }
- if (resultData.CurrenShortBigger10 && resultData.IsAddFive)
- {
- result = TargetAssessment.PD;
- }
- if (resultData.CurrentMajoreBigger0)
+ //靶病灶疗效为 PR
+ result = TargetAssessment.PR;
+ }
+ //if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10且淋巴结非靶病灶全部消失)
+ if (resultData.SumOfDiameter == 0 && resultData.DiameterLessThan10 && resultData.NonTargetStateIsLoss)
+ {
+ //靶病灶疗效为 CR
+ result = TargetAssessment.CR;
+ }
+ // if (有被评估为NE的单个靶病灶)
+ if (resultData.ExixtsNETargetLesion)
+ {
+ // 靶病灶疗效为 NE
+ result = TargetAssessment.NE;
+ }
+ //if (最低点SOD > 0)
+ if (resultData.LowSod > 0)
+ {
+ // if(比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm)
+ if (resultData.LowPercentBigger20 && resultData.LowChangeBigger5)
{
+ // 靶病灶疗效为 PD
result = TargetAssessment.PD;
}
}
-
else
{
- if (resultData.LowSod != 0 && resultData.LowPercentBigger20 && resultData.LowChangeBigger5)
+ //进入该分支最低点SOD=0
+ // if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm)
+ if (resultData.PresentSod > 0 && resultData.LowChangeBigger5)
{
+ // 靶病灶疗效为PD
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&&resultData.NonTargetStateIsLoss)
- {
- result = TargetAssessment.CR;
- }
- }
- }
- }
-
-
}
+ //if(上次访视点评估是CR)
+ if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
+ {
+ //if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
+ if (resultData.CurrenShortBigger10 && resultData.IsAddFive)
+ {
+ //靶病灶疗效为 PD
+ result = TargetAssessment.PD;
+ }
+ //if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
+ if (resultData.CurrentMajoreBigger0)
+ {
+ //靶病灶疗效为 PD
+ result = TargetAssessment.PD;
+ }
+ }
+
+
+
+ #region 之前的逻辑 备注
+ //if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
+ //{
+ // if (resultData.ExixtsNETargetLesion)
+ // {
+ // result = TargetAssessment.NE;
+ // }
+ // if (resultData.CurrenShortBigger10 && resultData.IsAddFive)
+ // {
+ // result = TargetAssessment.PD;
+ // }
+ // if (resultData.CurrentMajoreBigger0)
+ // {
+ // result = TargetAssessment.PD;
+ // }
+ //}
+
+ //else
+ //{
+ // if (resultData.LowSod != 0 && resultData.LowPercentBigger20 && resultData.LowChangeBigger5)
+ // {
+ // 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 && resultData.NonTargetStateIsLoss)
+ // {
+ // result = TargetAssessment.CR;
+ // }
+ // }
+ // }
+ // }
+
+
+ //}
+ #endregion
+
+
}
return result.GetEnumInt();