diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index ecb34cf08..8a9e4ad66 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -1201,6 +1201,11 @@
上一次访视Id
+
+
+ 首次转变的任务ID
+
+
删除病灶获取起始病灶序号(RECIST1Point1 固定是1)
@@ -1368,7 +1373,7 @@
-
+
与前一访视SOD相比变化量
@@ -1382,9 +1387,9 @@
-
+
- 与前一访视相比iSOD变化量
+ 与触发iRECIST访视相比iSOD变化量
@@ -7474,6 +7479,11 @@
与基线期SOD相比减小≥30 %
+
+
+ 非靶病灶中淋巴结病灶全部消失
+
+
IRECIST 非靶病灶
@@ -7554,6 +7564,16 @@
至少有一个新靶病无法评估
+
+
+ 当有“存在”状态的淋巴结新靶病灶
+
+
+
+
+ 当有“存在”或“太小”状态的非淋巴结新靶病灶
+
+
其他既往新病灶
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
index 2b55ba542..636b6fccc 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
@@ -78,6 +78,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// 上一次访视Id
///
public Guid? lastVisitTaskId;
+
+ ///
+ /// 首次转变的任务ID
+ ///
+ public Guid? firstChangeTaskId;
#endregion
#region 删除病灶获取起始病灶序号
@@ -484,8 +489,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
//被评估为NE的单个靶病灶
new ReadingCalculateData (){QuestionType=QuestionType.NETarget,GetStringFun=GetNETarget},
- // 与前一访视SOD相比变化量
- new ReadingCalculateData (){QuestionType=QuestionType.LastVisitSODChange,GetDecimalNullFun=GetLastTaskSODChange,IsConvertedTask=true},
+ // 与触发iRECIST访视相比SOD变化量
+ new ReadingCalculateData (){QuestionType=QuestionType.ComparedTriggeringSODChange,GetDecimalNullFun=GetComparedTriggeringSODChange,IsConvertedTask=true},
// 新靶病灶直径之和(iSOD)
new ReadingCalculateData (){QuestionType=QuestionType.ISOD,GetDecimalNullFun=GetiSODData,IsConvertedTask=true},
@@ -579,6 +584,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
QuestionType.ISOD,
QuestionType.ComparedTriggeringiSODChange,
+ QuestionType.ComparedTriggeringSODChange,
QuestionType.TargetLesion,
QuestionType.NoTargetLesion,
QuestionType.NewLesions,
@@ -1321,7 +1327,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
///
///
///
- public async Task GetLastTaskSODChange(ReadingCalculateDto inDto)
+ public async Task GetComparedTriggeringSODChange(ReadingCalculateDto inDto)
{
var lastTaskId = await this.GetLastVisitTaskId(inDto);
var lastSOD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
@@ -1658,17 +1664,25 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
private async Task GetFirstChangeTaskId(ReadingCalculateDto inDto)
{
- var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync();
- var firstChangeTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
- x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
- x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
- x.DoctorUserId == taskinfo.DoctorUserId &&
- x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
- x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum
- && x.BeforeConvertedTaskId!=null && x.TaskState == TaskState.Effect
- ).OrderBy(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
-
- return firstChangeTaskId;
+ if (firstChangeTaskId != null)
+ {
+ return firstChangeTaskId.Value;
+ }
+ else
+ {
+ var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync();
+ var taskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
+ x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
+ x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
+ x.DoctorUserId == taskinfo.DoctorUserId &&
+ x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
+ x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum
+ && x.BeforeConvertedTaskId != null && x.TaskState == TaskState.Effect
+ ).OrderBy(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
+ firstChangeTaskId = taskId;
+ return taskId;
+ }
+
}
#endregion
@@ -1723,7 +1737,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
var lastVisitTaskId = await GetLastVisitTaskId(inDto);
var targetLesionQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.QuestionId).FirstOrDefault();
-
+ var firstChangeTaskId = await GetFirstChangeTaskId(inDto);
var sodQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SOD).Select(x => x.QuestionId).FirstOrDefault();
IRECISTTargetLesionDto resultData = new IRECISTTargetLesionDto()
{
@@ -1738,7 +1752,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
MeetRECISTPD = (await GetTargetLesionEvaluate(inDto)) == TargetAssessment.PD.GetEnumInt(),
// 本次访视SOD与触发iRECIST访视相比本次访视SOD增加不小于5mm
- SODTiggerAddGreaterThan5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.ComparedTriggeringiSODChange).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
+ SODTiggerAddGreaterThan5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.ComparedTriggeringSODChange).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
+
//比整体访视期间最低点SOD增加≥20 %
LowSodAddGreaterThan20Percent = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 20,
@@ -1991,7 +2006,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// {
/// 疗效为 ND
/// }
- /// else if (上一访视新靶病灶评估为“iUPD” && 满足iSOD增加5mm)
+ /// else if (上一访视新靶病灶评估为“iUPD” && 与触发iRECIS任务iSod增加大于5mm)
/// {
/// 疗效为 iCPD
/// }
@@ -2032,9 +2047,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
LastTaskNewTargetLesion = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == newTargetLesionQuestionId)
.Select(x => x.Answer).FirstOrDefaultAsync()) ?? string.Empty,
- //SOD增加5mm以上
- ISODAdd5mm = await GetiSODData(inDto) - (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == isodQuestionId)
- .Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0() >= 5,
+ //与触发iRECIS任务iSod增加大于5mm
+ ISODAdd5mm = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.ComparedTriggeringiSODChange).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
//有"存在"状态的新靶病灶
HaveExixtsState = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.Exist)),
@@ -2084,8 +2098,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
// 疗效为 ND
result = NewTargetLesionAssessment.ND;
}
- // else if (上一访视新靶病灶评估为“iUPD” && 满足iSOD增加5mm)
- else if(data.LastTaskNewTargetLesion.EqEnum(NewTargetLesionAssessment.iUPD)&&data.ISODAdd5mm)
+ // else if (上一访视新靶病灶评估为“iUPD” && 与触发iRECIS任务iSod增加大于5mm)
+ else if (data.LastTaskNewTargetLesion.EqEnum(NewTargetLesionAssessment.iUPD)&&data.ISODAdd5mm)
{
// 疗效为 iCPD
result = NewTargetLesionAssessment.iCPD;
diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
index 43c3fc008..6a8aae2fe 100644
--- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
+++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
@@ -1466,7 +1466,7 @@ namespace IRaCIS.Core.Domain.Share
///
/// 与前一访视SOD相比变化量
///
- LastVisitSODChange = 23,
+ ComparedTriggeringSODChange = 23,
///
/// 新靶病灶直径之和(iSOD)