diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs index 81f0e1a3f..b0435897e 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs @@ -66,9 +66,9 @@ namespace IRaCIS.Core.Application.ViewModel public bool MeetRECISTPD { get; set; } /// - /// 本次访视SOD增加不小于5mm + /// 本次访视SOD与触发iRECIST访视相比本次访视SOD增加不小于5mm /// - public bool SODAddGreaterThan5 { get; set; } + public bool SODTiggerAddGreaterThan5 { get; set; } /// /// 比整体访视期间最低点SOD增加≥20 % diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs index 3912f28cb..d95cabca9 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs @@ -1648,6 +1648,27 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate + } + + /// + /// 获取第一次转变访视任务Id + /// + /// + 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; + } #endregion @@ -1670,7 +1691,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// { /// 靶病灶疗效为 ICPD /// } - /// else if (上一访视评估为iUPD&&本次访视SOD增加不小于5mm) + /// else if (上一访视评估为iUPD&&与触发iRECIST访视相比本次访视SOD增加不小于5mm) /// { /// 靶病灶疗效为 ICPD /// } @@ -1700,7 +1721,8 @@ 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 targetLesionQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.QuestionId).FirstOrDefault(); var sodQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SOD).Select(x => x.QuestionId).FirstOrDefault(); IRECISTTargetLesionDto resultData = new IRECISTTargetLesionDto() @@ -1715,8 +1737,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // 满足RECISTPD MeetRECISTPD = (await GetTargetLesionEvaluate(inDto)) == TargetAssessment.PD.GetEnumInt(), - // 本次访视SOD增加不小于5mm - SODAddGreaterThan5 = await GetSODData(inDto) - (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == sodQuestionId) + // 本次访视SOD与触发iRECIST访视相比本次访视SOD增加不小于5mm + SODTiggerAddGreaterThan5 = firstChangeTaskId==inDto.VisitTaskId ? false : await GetSODData(inDto) - (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstChangeTaskId && x.ReadingQuestionTrialId == sodQuestionId) .Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0() >= 5, //比整体访视期间最低点SOD增加≥20 % @@ -1771,8 +1793,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // 靶病灶疗效为 ICPD result = TargetAssessment.iCPD; } - // else if (上一访视评估为iUPD&&本次访视SOD增加不小于5mm) - else if (resultData.LastTaskTarget.EqEnum(TargetAssessment.iUPD) && resultData.SODAddGreaterThan5) + // else if (上一访视评估为iUPD&&与触发iRECIST访视相比本次访视SOD增加不小于5mm) + else if (resultData.LastTaskTarget.EqEnum(TargetAssessment.iUPD) && resultData.SODTiggerAddGreaterThan5) { // 靶病灶疗效为 ICPD result = TargetAssessment.iCPD; @@ -2536,7 +2558,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// /// /// - /// if(上一访视整体肿瘤评估评估为iCPD && 靶病灶评估、非靶病灶评估或新病灶评估任一项为iCPD) + /// if(上一访视整体肿瘤评估评估为iCPD && 靶病灶评估、非靶病灶评估或新病灶评估任一项为iCPD或iCPD) /// { /// 疗效为 iCPD /// } @@ -2610,11 +2632,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate LastTaskLesioniUPDOriCPD = lastTaskCalculateDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.Tumor && (x.Answer.EqEnum(OverallAssessment.iCPD) || x.Answer.EqEnum(OverallAssessment.iUPD))), }; - // if(上一访视整体肿瘤评估评估为iCPD && 靶病灶评估、非靶病灶评估或新病灶评估任一项为iCPD) + // if(上一访视整体肿瘤评估评估为iCPD && 靶病灶评估、非靶病灶评估或新病灶评估任一项为iCPD或iCPD) if (lastTaskCalculateDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.Tumor && x.Answer.EqEnum(OverallAssessment.iCPD)) - && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.iCPD)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iCPD)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.iCPD)))) + && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && (x.Answer.EqEnum(TargetAssessment.iCPD)||x.Answer.EqEnum(TargetAssessment.iUPD))) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && (x.Answer.EqEnum(NoTargetAssessment.iCPD) || x.Answer.EqEnum(NoTargetAssessment.iUPD))) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation&& (x.Answer.EqEnum(NewLesionAssessment.iCPD) || x.Answer.EqEnum(NewLesionAssessment.iUPD))))) { // 疗效为 iCPD result = OverallAssessment.iCPD;