整体肿瘤评估 计算修改

This commit is contained in:
he
2025-03-31 11:09:22 +08:00
parent 58e8c2392f
commit d6d0965467
2 changed files with 442 additions and 6 deletions
@@ -1117,12 +1117,177 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var targetLesion = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.Answer).FirstOrDefault();
var noTargetLesion = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NoTargetLesion).Select(x => x.Answer).FirstOrDefault();
var newLesions = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesions).Select(x => x.Answer).FirstOrDefault();
var result = await _tumorAssessmentRepository.Where(x =>
x.TargetLesion == (TargetAssessment)int.Parse(targetLesion.IsNullOrEmpty() ? TargetAssessment.NA.GetEnumInt() : targetLesion) &&
x.NonTargetLesions == (NoTargetAssessment)int.Parse(noTargetLesion.IsNullOrEmpty() ? NoTargetAssessment.NA.GetEnumInt() : noTargetLesion) &&
x.NewLesion == (NewLesionAssessment)int.Parse(newLesions.IsNullOrEmpty() ? NewLesionAssessment.NA.GetEnumInt() : newLesions)).Select(x => x.OverallEfficacy).ToListAsync();
return CalculationGetImgOncology(targetLesion, noTargetLesion, newLesions);
}
return result.Count == 0 ? OverallAssessment.NE.GetEnumInt() : result[0].GetEnumInt();
/// <summary>
/// 计算整体肿瘤评估 【测试】
/// </summary>
/// <param name="targetLesion">靶病灶</param>
/// <param name="noTargetLesion"> 非靶病灶</param>
/// <param name="newLesions">新病灶</param>
/// <remarks>
/// 靶病灶 非靶病灶 存在新病灶 整体肿瘤评估
/// 1. CR CR 否 CR
/// 2. CR ND 否 CR
/// 3. ND CR 否 CR
/// 4. CR NN/NE 否/疑似/NE PR
/// 5. CR CR/ND 疑似/NE PR
/// 6. PR CR/ND/NN/NE 否/疑似/NE PR
/// 7. ND CR 疑似/NE PR
/// 8. SD CR/ND/NN/NE 否/疑似/NE SD
/// 9. ND NN 否/疑似/NE NN
/// 10.NE CR/ND/NN/NE 否/疑似/NE NE
/// 11.ND NE 否/疑似/NE NE
/// 12.ND ND NE NE
/// 13.ND ND 否/疑似 ND
/// 14.PD CR/NN/PD/ND/NE 是/否/疑似/NE PD
/// 15.CR/PR/SD/PD/ND/NE PD 是/否/疑似/NE PD
/// 16.CR/PR/SD/PD/ND/NE CR/NN/PD/ND/NE 是 PD
/// </remarks>
/// <returns></returns>
public string CalculationGetImgOncology(string? targetLesion, string? noTargetLesion, string? newLesions)
{
List<CalculationDto> data = new List<CalculationDto>() {
//1. CR CR 否 CR
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.CR }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.CR }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.CR }),
},
// 2. CR ND 否 CR
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.CR }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.ND }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.CR }),
},
// 3. ND CR 否 CR
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.ND }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.CR }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.CR }),
},
// 4. CR NN/NE 否/疑似/NE PR
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.CR }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.NN, NoTargetAssessment.NE }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.PR }),
},
// 5. CR CR/ND 疑似/NE PR
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.CR }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.CR, NoTargetAssessment.ND }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.PR }),
},
// 6. PR CR/ND/NN/NE 否/疑似/NE PR
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.PR }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.CR, NoTargetAssessment.ND, NoTargetAssessment.NN, NoTargetAssessment.NE }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.PR }),
},
//7. ND CR 疑似/NE PR
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.ND }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.CR }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.PR }),
},
// 8. SD CR/ND/NN/NE 否/疑似/NE SD
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.SD }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.CR, NoTargetAssessment.ND, NoTargetAssessment.NN , NoTargetAssessment.NE }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.SD }),
},
// 9. ND NN 否/疑似/NE NN
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.ND }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.NN}),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.NN }),
},
// 10.NE CR/ND/NN/NE 否/疑似/NE NE
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.NE }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.CR, NoTargetAssessment.ND, NoTargetAssessment.NN,, NoTargetAssessment.NE, }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.NE }),
},
// 11.ND NE 否/疑似/NE NE
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.ND }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.NE }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.NE }),
},
// 12.ND ND NE NE
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.ND }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.ND }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.NE }),
},
// 13.ND ND 否/疑似 ND
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.ND }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.ND }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No,NewLesionAssessment.Suspected}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.ND }),
},
// 14.PD CR/NN/PD/ND/NE 是/否/疑似/NE PD
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.PD }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.CR, NoTargetAssessment.NN,NoTargetAssessment.PD, NoTargetAssessment.ND,NoTargetAssessment.NE }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() {NewLesionAssessment.Yes, NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.PD }),
},
// 15.CR/PR/SD/PD/ND/NE PD 是/否/疑似/NE PD
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.CR, TargetAssessment.PR, TargetAssessment.SD, TargetAssessment.PD, TargetAssessment.ND, TargetAssessment.NE }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.PD }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.Yes, NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.PD }),
},
// 16.CR/PR/SD/PD/ND/NE CR/NN/PD/ND/NE 是 PD
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.CR, TargetAssessment.PR, TargetAssessment.SD, TargetAssessment.PD, TargetAssessment.ND, TargetAssessment.NE }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.CR,NoTargetAssessment.NN,NoTargetAssessment.PD,NoTargetAssessment.ND,NoTargetAssessment.NE }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.Yes}),
Column4=ReadingCommon.EnumToString(new List<OverallAssessment>() { OverallAssessment.PD }),
},
};
var resultdata = data.Where(x =>
(x.NotEq.Contains(1) ? !x.Column1.Contains(targetLesion) : x.Column1.Contains(targetLesion) || x.Column1.Count() == 0) &&
(x.NotEq.Contains(2) ? !x.Column2.Contains(noTargetLesion) : x.Column2.Contains(noTargetLesion) || x.Column2.Count() == 0) &&
(x.NotEq.Contains(3) ? !x.Column3.Contains(newLesions) : x.Column3.Contains(newLesions) || x.Column3.Count() == 0))
.Select(x => x.Column4.FirstOrDefault())
.FirstOrDefault();
return resultdata ?? string.Empty;
}
#endregion