diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs index 832715bc4..52674a116 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs @@ -294,7 +294,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Func ChangeAllTaskFun { get; set; } - public bool IsConvertedTask { get; set; } = false; + public bool? IsConvertedTask { get; set; } } } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs index 39db472cf..e6b3855c5 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs @@ -465,13 +465,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate new ReadingCalculateData (){QuestionType=QuestionType.LastVisitiSODChange,GetDecimalNullFun=GetISODChange}, // 靶病灶评估 - new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate}, + new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate,IsConvertedTask=false}, // IRECIST靶病灶评估 new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetIRECISTTargetLesionEvaluate,IsConvertedTask=true}, //非靶病灶评估 - new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate}, + new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate,IsConvertedTask=false}, //IRECIST非靶病灶评估 new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetIRECISTNoTargetLesionEvaluate,IsConvertedTask=true}, @@ -491,20 +491,32 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate //IRECIST新病灶评估 new ReadingCalculateData (){QuestionType=QuestionType.NewLesionEvaluation,GetStringFun=GetNewLesionAssessment,IsConvertedTask=true}, + //是否存在新病灶 + new ReadingCalculateData (){QuestionType=QuestionType.NewLesions,GetStringFun=GetNewLesionEvaluate,IsConvertedTask=false}, + + // IRECIST是否存在新病灶 IRECIST + new ReadingCalculateData (){QuestionType=QuestionType.NewLesions,GetStringFun=GetNewLesionIRECSITEvaluate,IsConvertedTask=true}, + + //是否存在疾病 + new ReadingCalculateData (){QuestionType=QuestionType.ExistDisease,GetStringFun=GetIsExistDisease}, + //整体肿瘤评估 - new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetTumor}, + new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetTumor,IsConvertedTask=false}, //IRECIST整体肿瘤评估 new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetIRECSITTargetLesionEvaluate,IsConvertedTask=true}, - //是否存在疾病 - new ReadingCalculateData (){QuestionType=QuestionType.ExistDisease,GetStringFun=GetIsExistDisease}, + + //IRECIST整体肿瘤评估 + new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetIRECSITTargetLesionEvaluate,IsConvertedTask=true}, + + }; // 过滤转化的 - calculateList = calculateList.Where(x => x.IsConvertedTask == inDto.IsConvertedTask).ToList(); + calculateList = calculateList.Where(x => x.IsConvertedTask == inDto.IsConvertedTask||x.IsConvertedTask==null).ToList(); // 没有靶病灶只计算最后几个 if (inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).Sum(x => x.TableRowInfoList.Count()) == 0) @@ -2367,75 +2379,137 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate return result == null ? string.Empty : ((NewLesionAssessment)result).GetEnumInt(); } - #endregion + #endregion - #region iRECSIT整体肿瘤评估 + #region 获取新病灶评估 + /// + /// 获取新病灶评估 + /// + /// + /// + public async Task GetNewLesionIRECSITEvaluate(ReadingCalculateDto inDto) + { - /// - /// - /// - /// - /// if(上一访视评估为iUPD或iCPD&&靶病灶评估、非靶病灶评估或新病灶评估任一项为iCPD) - /// { - /// 疗效为 iCPD - /// } - /// else if (上一访视评估为iUPD或iCPD&&靶病灶评估、非靶病灶评估或新病灶评估任一项从前一访视非iUPD结果评估为当前访视iUPD) - /// { - /// 疗效为 iCPD - /// } - /// else if (靶病灶评估为iUPD || 非靶病灶评估为iUPD || 新病灶评估为iUPD) - /// { - /// 疗效为 iUPD - /// } - /// else if ((靶病灶评估为iCR || 非靶病灶评估为iCR) && 新病灶评估为ND) - /// { - /// 疗效为 iCR - /// } - /// else if (靶病灶评估为iPR && 非靶病灶评估为iCR,iNN,NE或ND && 新病灶评估为ND或疑似或NE) - /// { - /// 疗效为 iPR - /// } - /// else if (靶病灶评估为iPR && 非靶病灶评估为iNN或NE && 新病灶评估为否或疑似或NE) - /// { - /// 疗效为 iPR - /// } - /// else if (靶病灶评估为iPR && 非靶病灶评估为iCR或ND && 新病灶评估为疑似或NE) - /// { - /// 疗效为 iPR - /// } - /// else if (靶病灶评估为ND && 非靶病灶评估为iCR && 新病灶评估为疑似或NE) - /// { - /// 疗效为 iPR - /// } - /// else if (靶病灶评估为iSD && 非靶病灶评估为iCR,iNN,NE或ND && 新病灶评估为ND或疑似或NE) - /// { - /// 疗效为 iSD - /// } - /// else if (靶病灶评估为ND && 非靶病灶评估为iNN && 新病灶评估为ND或疑似或NE) - /// { - /// 疗效为 iNN - /// } - /// else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为ND或疑似) - /// { - /// 疗效为 ND - /// } - /// else if (靶病灶评估为NE && 非靶病灶评估为iCR,iNN,NE或ND && 新病灶评估为ND或疑似或NE) - /// { - /// 疗效为 NE - /// } - /// else if (靶病灶评估为ND && 非靶病灶评估为NE && 新病灶评估为否或疑似或NE) - /// { - /// 疗效为 NE - /// } - /// else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为NE) - /// { - /// 疗效为 NE - /// } - /// - /// - /// - public async Task GetIRECSITTargetLesionEvaluate(ReadingCalculateDto inDto) + NewLesionAssessment result = NewLesionAssessment.No; + if (inDto.IsBaseLine) + { + return NewLesionAssessment.NA.GetEnumInt(); + } + + var newTargetQuestions = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewTargetLesion).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList).ToList(); + + var newNonTargetQuestions = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewNonTargetLesion).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList).ToList(); + + var OtherPreviousNewLesionQuestions = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.OtherPreviousNewLesion).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList).ToList(); + + var triggeringQuestions = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TriggeringIRECSIT).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList).ToList(); + + // 当前访视存在至少一个明确新病灶 + if (newTargetQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.Exist)) + || newNonTargetQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewNoTargetLesionState.Exist)) + || OtherPreviousNewLesionQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.Exists)) + || triggeringQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.Exist)) + + ) + { + result = NewLesionAssessment.Yes; + } + //只要有任何一个新病灶状态为“无法评估” + else if (newTargetQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.NotEvaluable)) + || newNonTargetQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewNoTargetLesionState.NotEvaluable)) + || OtherPreviousNewLesionQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.NotEvaluable)) + || triggeringQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.NotEvaluable)) + + ) + { + result = NewLesionAssessment.NE; + } + //当前访视不存在明确新病灶且存在至少一个疑似新病灶 + else if ( (!OtherPreviousNewLesionQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.Exists)) && OtherPreviousNewLesionQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.Equivocal))) + || (!triggeringQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.Exist)) && triggeringQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.Equivocal))) + + ) + { + result = NewLesionAssessment.Suspected; + } + + + else + { + result = NewLesionAssessment.No; + } + return result.GetEnumInt(); + + } + #endregion + + #region iRECSIT整体肿瘤评估 + + /// + /// + /// + /// + /// if(上一访视评估为iUPD或iCPD&&靶病灶评估、非靶病灶评估或新病灶评估任一项为iCPD) + /// { + /// 疗效为 iCPD + /// } + /// else if (上一访视评估为iUPD或iCPD&&靶病灶评估、非靶病灶评估或新病灶评估任一项从前一访视非iUPD结果评估为当前访视iUPD) + /// { + /// 疗效为 iCPD + /// } + /// else if (靶病灶评估为iUPD || 非靶病灶评估为iUPD || 新病灶评估为iUPD) + /// { + /// 疗效为 iUPD + /// } + /// else if ((靶病灶评估为iCR || 非靶病灶评估为iCR) && 新病灶评估为ND) + /// { + /// 疗效为 iCR + /// } + /// else if (靶病灶评估为iPR && 非靶病灶评估为iCR,iNN,NE或ND && 新病灶评估为ND或疑似或NE) + /// { + /// 疗效为 iPR + /// } + /// else if (靶病灶评估为iPR && 非靶病灶评估为iNN或NE && 新病灶评估为否或疑似或NE) + /// { + /// 疗效为 iPR + /// } + /// else if (靶病灶评估为iPR && 非靶病灶评估为iCR或ND && 新病灶评估为疑似或NE) + /// { + /// 疗效为 iPR + /// } + /// else if (靶病灶评估为ND && 非靶病灶评估为iCR && 新病灶评估为疑似或NE) + /// { + /// 疗效为 iPR + /// } + /// else if (靶病灶评估为iSD && 非靶病灶评估为iCR,iNN,NE或ND && 新病灶评估为ND或疑似或NE) + /// { + /// 疗效为 iSD + /// } + /// else if (靶病灶评估为ND && 非靶病灶评估为iNN && 新病灶评估为ND或疑似或NE) + /// { + /// 疗效为 iNN + /// } + /// else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为ND或疑似) + /// { + /// 疗效为 ND + /// } + /// else if (靶病灶评估为NE && 非靶病灶评估为iCR,iNN,NE或ND && 新病灶评估为ND或疑似或NE) + /// { + /// 疗效为 NE + /// } + /// else if (靶病灶评估为ND && 非靶病灶评估为NE && 新病灶评估为否或疑似或NE) + /// { + /// 疗效为 NE + /// } + /// else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为NE) + /// { + /// 疗效为 NE + /// } + /// + /// + /// + public async Task GetIRECSITTargetLesionEvaluate(ReadingCalculateDto inDto) { var lastVisitTaskId = await GetLastVisitTaskId(inDto); @@ -2987,54 +3061,54 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate #endregion - //#region 获取新病灶评估 - ///// - ///// 获取新病灶评估 - ///// - ///// - ///// - //public async Task GetNewLesionEvaluate(ReadingCalculateDto inDto) - //{ + #region 获取新病灶评估 + /// + /// 获取新病灶评估 + /// + /// + /// + public async Task GetNewLesionEvaluate(ReadingCalculateDto inDto) + { - // NewLesionAssessment result = NewLesionAssessment.No; - // if (inDto.IsBaseLine) - // { - // return NewLesionAssessment.NA.GetEnumInt(); - // } + NewLesionAssessment result = NewLesionAssessment.No; + if (inDto.IsBaseLine) + { + return NewLesionAssessment.NA.GetEnumInt(); + } - // var tableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewLesions).SelectMany(x => x.TableRowInfoList).ToList(); + var tableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewLesions).SelectMany(x => x.TableRowInfoList).ToList(); - // var tableQuestions = tableRows.SelectMany(x => x.TableQuestionList).ToList(); + var tableQuestions = tableRows.SelectMany(x => x.TableQuestionList).ToList(); - // // 当前访视存在至少一个明确新病灶 - // if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist))) - // { - // result = NewLesionAssessment.Yes; - // } - // //只要有任何一个新病灶状态为“无法评估” - // else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.UnableEvaluate))) - // { - // result = NewLesionAssessment.NE; - // } - // //当前访视不存在明确新病灶且存在至少一个疑似新病灶 - // else if (!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist)) && - // tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Suspected)) - // ) - // { - // result = NewLesionAssessment.Suspected; - // } + // 当前访视存在至少一个明确新病灶 + if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist))) + { + result = NewLesionAssessment.Yes; + } + //只要有任何一个新病灶状态为“无法评估” + else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.UnableEvaluate))) + { + result = NewLesionAssessment.NE; + } + //当前访视不存在明确新病灶且存在至少一个疑似新病灶 + else if (!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist)) && + tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Suspected)) + ) + { + result = NewLesionAssessment.Suspected; + } - - // else - // { - // result = NewLesionAssessment.No; - // } - // return result.GetEnumInt(); - //} - //#endregion + else + { + result = NewLesionAssessment.No; + } + return result.GetEnumInt(); + + } + #endregion #endregion