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)