Uat_Study
hang 2023-04-28 09:43:57 +08:00
commit 466ac5e03e
2 changed files with 187 additions and 113 deletions

View File

@ -294,7 +294,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Func<ChangeAllTaskDto,Task> ChangeAllTaskFun { get; set; } public Func<ChangeAllTaskDto,Task> ChangeAllTaskFun { get; set; }
public bool IsConvertedTask { get; set; } = false; public bool? IsConvertedTask { get; set; }
} }
} }

View File

@ -465,13 +465,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
new ReadingCalculateData (){QuestionType=QuestionType.LastVisitiSODChange,GetDecimalNullFun=GetISODChange}, new ReadingCalculateData (){QuestionType=QuestionType.LastVisitiSODChange,GetDecimalNullFun=GetISODChange},
// 靶病灶评估 // 靶病灶评估
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate}, new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate,IsConvertedTask=false},
// IRECIST靶病灶评估 // IRECIST靶病灶评估
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetIRECISTTargetLesionEvaluate,IsConvertedTask=true}, 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非靶病灶评估 //IRECIST非靶病灶评估
new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetIRECISTNoTargetLesionEvaluate,IsConvertedTask=true}, new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetIRECISTNoTargetLesionEvaluate,IsConvertedTask=true},
@ -491,20 +491,32 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
//IRECIST新病灶评估 //IRECIST新病灶评估
new ReadingCalculateData (){QuestionType=QuestionType.NewLesionEvaluation,GetStringFun=GetNewLesionAssessment,IsConvertedTask=true}, 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整体肿瘤评估 //IRECIST整体肿瘤评估
new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetIRECSITTargetLesionEvaluate,IsConvertedTask=true}, 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) 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(); return result == null ? string.Empty : ((NewLesionAssessment)result).GetEnumInt();
} }
#endregion #endregion
#region iRECSIT整体肿瘤评估 #region 获取新病灶评估
/// <summary>
/// 获取新病灶评估
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> GetNewLesionIRECSITEvaluate(ReadingCalculateDto inDto)
{
/// <summary> NewLesionAssessment result = NewLesionAssessment.No;
/// if (inDto.IsBaseLine)
/// </summary> {
/// <remarks> return NewLesionAssessment.NA.GetEnumInt();
/// if上一访视评估为iUPD或iCPD&&靶病灶评估、非靶病灶评估或新病灶评估任一项为iCPD }
/// {
/// 疗效为 iCPD var newTargetQuestions = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewTargetLesion).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList).ToList();
/// }
/// else if (上一访视评估为iUPD或iCPD&&靶病灶评估、非靶病灶评估或新病灶评估任一项从前一访视非iUPD结果评估为当前访视iUPD) var newNonTargetQuestions = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewNonTargetLesion).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList).ToList();
/// {
/// 疗效为 iCPD var OtherPreviousNewLesionQuestions = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.OtherPreviousNewLesion).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList).ToList();
/// }
/// else if (靶病灶评估为iUPD || 非靶病灶评估为iUPD || 新病灶评估为iUPD) var triggeringQuestions = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TriggeringIRECSIT).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList).ToList();
/// {
/// 疗效为 iUPD // 当前访视存在至少一个明确新病灶
/// } if (newTargetQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.Exist))
/// else if ((靶病灶评估为iCR || 非靶病灶评估为iCR) && 新病灶评估为ND) || newNonTargetQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewNoTargetLesionState.Exist))
/// { || OtherPreviousNewLesionQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.Exists))
/// 疗效为 iCR || triggeringQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.Exist))
/// }
/// else if (靶病灶评估为iPR && 非靶病灶评估为iCRiNNNE或ND && 新病灶评估为ND或疑似或NE) )
/// { {
/// 疗效为 iPR result = NewLesionAssessment.Yes;
/// } }
/// else if (靶病灶评估为iPR && 非靶病灶评估为iNN或NE && 新病灶评估为否或疑似或NE) //只要有任何一个新病灶状态为“无法评估”
/// { else if (newTargetQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.NotEvaluable))
/// 疗效为 iPR || newNonTargetQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewNoTargetLesionState.NotEvaluable))
/// } || OtherPreviousNewLesionQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.NotEvaluable))
/// else if (靶病灶评估为iPR && 非靶病灶评估为iCR或ND && 新病灶评估为疑似或NE) || triggeringQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.NotEvaluable))
/// {
/// 疗效为 iPR )
/// } {
/// else if (靶病灶评估为ND && 非靶病灶评估为iCR && 新病灶评估为疑似或NE) result = NewLesionAssessment.NE;
/// { }
/// 疗效为 iPR //当前访视不存在明确新病灶且存在至少一个疑似新病灶
/// } 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)))
/// else if (靶病灶评估为iSD && 非靶病灶评估为iCRiNNNE或ND && 新病灶评估为ND或疑似或NE) || (!triggeringQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.Exist)) && triggeringQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.Equivocal)))
/// {
/// 疗效为 iSD )
/// } {
/// else if (靶病灶评估为ND && 非靶病灶评估为iNN && 新病灶评估为ND或疑似或NE) result = NewLesionAssessment.Suspected;
/// { }
/// 疗效为 iNN
/// }
/// else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为ND或疑似) else
/// { {
/// 疗效为 ND result = NewLesionAssessment.No;
/// } }
/// else if (靶病灶评估为NE && 非靶病灶评估为iCRiNNNE或ND && 新病灶评估为ND或疑似或NE) return result.GetEnumInt();
/// {
/// 疗效为 NE }
/// } #endregion
/// else if (靶病灶评估为ND && 非靶病灶评估为NE && 新病灶评估为否或疑似或NE)
/// { #region iRECSIT整体肿瘤评估
/// 疗效为 NE
/// } /// <summary>
/// else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为NE) ///
/// { /// </summary>
/// 疗效为 NE /// <remarks>
/// } /// if上一访视评估为iUPD或iCPD&&靶病灶评估、非靶病灶评估或新病灶评估任一项为iCPD
/// </remarks> /// {
/// <param name="inDto"></param> /// 疗效为 iCPD
/// <returns></returns> /// }
public async Task<string> GetIRECSITTargetLesionEvaluate(ReadingCalculateDto inDto) /// else if (上一访视评估为iUPD或iCPD&&靶病灶评估、非靶病灶评估或新病灶评估任一项从前一访视非iUPD结果评估为当前访视iUPD)
/// {
/// 疗效为 iCPD
/// }
/// else if (靶病灶评估为iUPD || 非靶病灶评估为iUPD || 新病灶评估为iUPD)
/// {
/// 疗效为 iUPD
/// }
/// else if ((靶病灶评估为iCR || 非靶病灶评估为iCR) && 新病灶评估为ND)
/// {
/// 疗效为 iCR
/// }
/// else if (靶病灶评估为iPR && 非靶病灶评估为iCRiNNNE或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 && 非靶病灶评估为iCRiNNNE或ND && 新病灶评估为ND或疑似或NE)
/// {
/// 疗效为 iSD
/// }
/// else if (靶病灶评估为ND && 非靶病灶评估为iNN && 新病灶评估为ND或疑似或NE)
/// {
/// 疗效为 iNN
/// }
/// else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为ND或疑似)
/// {
/// 疗效为 ND
/// }
/// else if (靶病灶评估为NE && 非靶病灶评估为iCRiNNNE或ND && 新病灶评估为ND或疑似或NE)
/// {
/// 疗效为 NE
/// }
/// else if (靶病灶评估为ND && 非靶病灶评估为NE && 新病灶评估为否或疑似或NE)
/// {
/// 疗效为 NE
/// }
/// else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为NE)
/// {
/// 疗效为 NE
/// }
/// </remarks>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> GetIRECSITTargetLesionEvaluate(ReadingCalculateDto inDto)
{ {
var lastVisitTaskId = await GetLastVisitTaskId(inDto); var lastVisitTaskId = await GetLastVisitTaskId(inDto);
@ -2987,54 +3061,54 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#endregion #endregion
//#region 获取新病灶评估 #region 获取新病灶评估
///// <summary> /// <summary>
///// 获取新病灶评估 /// 获取新病灶评估
///// </summary> /// </summary>
///// <param name="inDto"></param> /// <param name="inDto"></param>
///// <returns></returns> /// <returns></returns>
//public async Task<string> GetNewLesionEvaluate(ReadingCalculateDto inDto) public async Task<string> GetNewLesionEvaluate(ReadingCalculateDto inDto)
//{ {
// NewLesionAssessment result = NewLesionAssessment.No; NewLesionAssessment result = NewLesionAssessment.No;
// if (inDto.IsBaseLine) if (inDto.IsBaseLine)
// { {
// return NewLesionAssessment.NA.GetEnumInt(); 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))) if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist)))
// { {
// result = NewLesionAssessment.Yes; result = NewLesionAssessment.Yes;
// } }
// //只要有任何一个新病灶状态为“无法评估” //只要有任何一个新病灶状态为“无法评估”
// else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.UnableEvaluate))) else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.UnableEvaluate)))
// { {
// result = NewLesionAssessment.NE; result = NewLesionAssessment.NE;
// } }
// //当前访视不存在明确新病灶且存在至少一个疑似新病灶 //当前访视不存在明确新病灶且存在至少一个疑似新病灶
// else if (!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist)) && 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)) tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Suspected))
// ) )
// { {
// result = NewLesionAssessment.Suspected; result = NewLesionAssessment.Suspected;
// } }
// else
// {
// result = NewLesionAssessment.No;
// }
// return result.GetEnumInt();
//} else
//#endregion {
result = NewLesionAssessment.No;
}
return result.GetEnumInt();
}
#endregion
#endregion #endregion