diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index ad48de76..b0e13ad8 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -2020,7 +2020,7 @@
- SOD 百分比 整体访视期间最低点SOD相比增加
+ SOD 百分比 整体访视期间SOD最低点SOD相比增加<20%
@@ -2050,7 +2050,7 @@
- 当前访视点非淋巴结病灶长径>0
+ 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
index a85d8b4b..8ac891b4 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
@@ -630,6 +630,7 @@ namespace IRaCIS.Application.Services
IsSign = x.IsSign,
ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList,
+ TrialClinicalDataSetCriteriaList=x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList,
Id = x.Id,
UploadRole = x.ClinicalDataTrialSet.UploadRole,
IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC,
@@ -647,8 +648,9 @@ namespace IRaCIS.Application.Services
// 根据标准
if (inDto.VisitTaskId != null)
{
- var criterionType = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).Select(x => x.TrialReadingCriterion.CriterionType).FirstNotNullAsync();
- result = result.Where(x => x.CriterionEnumList.Contains((int)criterionType)).ToList();
+ var visitTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId);
+
+ result = result.Where(x => x.TrialClinicalDataSetCriteriaList.Any(z=>z.TrialReadingCriterionId==visitTaskInfo.TrialReadingCriterionId)).ToList();
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
index 8e854dd3..4fab6332 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
@@ -25,7 +25,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public decimal LowSod { get; set; }
///
- /// 是否存在靶病灶
+ /// 当前SOD
+ ///
+ public decimal PresentSod { get; set; }
+
+ ///
+ /// 是否存在靶病灶 (当前访视 至少一个靶病灶的状态为存在)
///
public bool ExistsTargetLesion { get; set; }
@@ -55,7 +60,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public bool SODPercentLess30 { get; set; }
///
- /// SOD 百分比 整体访视期间最低点SOD相比增加
+ /// SOD 百分比 整体访视期间SOD最低点SOD相比增加<20%
///
public bool LowPercentLess20 { get; set; }
@@ -85,7 +90,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string LastTargetLesionEvaluate { get; set; }
///
- /// 当前访视点非淋巴结病灶长径>0
+ /// 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0
///
public bool CurrentMajoreBigger0 { get; set; }
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
index 2be2e2e4..6ec1ee08 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
@@ -389,6 +389,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public ClinicalDataTable ClinicalTableData { get; set; }
+
+ public List TrialClinicalDataSetCriteriaList { get; set; }
}
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index c3dd14ba..e2e65f24 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 31ef0224..d7fdd40b 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= tableQuestion.Count()>0,
+ 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()),
@@ -1479,11 +1491,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
//// 上次访视点整体肿瘤评估
LastTargetLesionEvaluate = string.Empty,
- // 当前访视点非淋巴结病灶长径>0
- CurrentMajoreBigger0 = true,
+ // 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm
+ CurrentMajoreBigger0 = false,
- // 至少一个淋巴结靶病灶短径≥10 mm
- CurrenShortBigger10 = true,
+ // 当前访视点淋巴结病灶, 至少一个淋巴结靶病灶短径≥10 mm
+ CurrenShortBigger10 = false,
//淋巴结非靶病灶状态全部为消失
NonTargetStateIsLoss = true,
@@ -1499,7 +1511,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
{
// 淋巴结非靶病灶状态全部为消失
- resultData.NonTargetStateIsLoss = item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault()== NoTargetState.Loss.GetEnumInt();
+ resultData.NonTargetStateIsLoss = resultData.NonTargetStateIsLoss&& item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault()== NoTargetState.Loss.GetEnumInt();
}
}
@@ -1509,15 +1521,17 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
{
// 淋巴结的短径
- resultData.DiameterLessThan10 = (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() < 10;
+ resultData.DiameterLessThan10 = resultData.DiameterLessThan10&&(item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() < 10;
+
+ resultData.CurrenShortBigger10= resultData.CurrenShortBigger10|| (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() >= 10;
+
-
}
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && !x.Answer.EqEnum(YesOrNoOrNa.Yes)))
{
- // 当前访视点非淋巴结病灶
- resultData.CurrentMajoreBigger0 = (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() > 0;
+ // 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径
+ resultData.CurrentMajoreBigger0 = resultData.CurrentMajoreBigger0|| (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() > 0;
}
}
@@ -1527,64 +1541,126 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
resultData.LastTargetLesionEvaluate = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == questionId)
.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();