AssessmentAlgorithm/Lugano/评估算法/6、CMRI总体评估实现代码.cs

213 lines
17 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

public async Task<string> CTMRIEvaluation(ReadingCalculateDto inDto)
{
if (inDto.IsBaseLine)
{
return CTMRIOverallAssessment.NA.GetEnumInt();
}
// 靶病灶评估
var targetEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.Answer).FirstOrDefault();
// 非靶病灶评估
var noTargetEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NoTargetLesion).Select(x => x.Answer).FirstOrDefault();
// 存在新病灶
var existsNewTarget = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionEvaluation).Select(x => x.Answer).FirstOrDefault();
// 肝脏评估
var liverEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LiverAssessment).Select(x => x.Answer).FirstOrDefault();
// 脾脏评估
var spleenEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicEvaluation).Select(x => x.Answer).FirstOrDefault();
List<CalculationDto> data = new List<CalculationDto>() {
//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<LiverAssessment>() { LiverAssessment.Normal }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Normal }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.ND }),
},
//PD 任一结果 任一结果 任一结果 任一结果 PD
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.PD }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PD }),
},
//任一结果 PD 任一结果 任一结果 任一结果 PD
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.PD }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() {}),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PD }),
},
//任一结果 任一结果 是 任一结果 任一结果 PD
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.Yes }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PD }),
},
//任一结果 任一结果 任一结果 显著增大 任一结果 PD
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { LiverAssessment.Increase }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PD }),
},
//任一结果 任一结果 任一结果 任一结果 显著增大 PD
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() {}),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Increase }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PD }),
},
//CR CR/ND 否 正常 正常 CR
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.No }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { LiverAssessment.Normal }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Normal }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.CR }),
},
//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<LiverAssessment>() { LiverAssessment.Normal }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Normal }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.CR }),
},
//NE 非PD 否/疑似/无法评估 非显著增大 非显著增大 NE
new CalculationDto(){
NotEq=new List<int>(){ 2,4,5},
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.NE }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.PD }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { LiverAssessment.Increase }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Increase }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.NE }),
},
//ND NE 否/疑似/无法评估(不为是) 正常/稳定/无法评估/部分缓解(非显著增大) 正常/稳定/无法评估/部分缓解(非显著增大) NE
new CalculationDto(){
NotEq=new List<int>(){ 3,4,5},
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.ND }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.NE }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.Yes }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { LiverAssessment.Increase }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Increase }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.NE }),
},
//ND ND 无法评估 正常/稳定/无法评估/部分缓解(非显著增大) 正常/稳定/无法评估/部分缓解(非显著增大) NE
new CalculationDto(){
NotEq=new List<int>(){ 4,5},
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<LiverAssessment>() { LiverAssessment.Increase }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Increase }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.NE }),
},
//ND ND 否/疑似 无法评估 正常/稳定/无法评估/部分缓解(非显著增大) NE
new CalculationDto(){
NotEq=new List<int>(){ 5},
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<LiverAssessment>() { LiverAssessment.NotEvaluable }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Increase }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.NE }),
},
// 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.No,NewLesionAssessment.Suspected }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { LiverAssessment.Normal,LiverAssessment.Stabilization }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.NotEvaluable }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.NE }),
},
//PR 非PD 否/疑似/无法评估(不为是) 正常/稳定 正常/部分缓解 PR
new CalculationDto(){
NotEq=new List<int>(){ 2,3},
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.PR }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.PD }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.Yes }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { LiverAssessment.Normal,LiverAssessment.Stabilization}),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Normal,SpleenAssessment.Remission }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PR }),
},
//CR PR/SD或者NE 否/疑似/无法评估(不为是) 正常/部分缓解 正常/部分缓解 PR
new CalculationDto(){
NotEq=new List<int>(){ 3},
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { TargetAssessment.CR }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { NoTargetAssessment.PRSD,NoTargetAssessment.NE }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { NewLesionAssessment.Yes,NewLesionAssessment.Yes }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { LiverAssessment.Normal,LiverAssessment.Stabilization}),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Normal,SpleenAssessment.Remission }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PR }),
},
//CR CR/ND 疑似/无法评估 正常/稳定 正常/部分缓解 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<LiverAssessment>() { LiverAssessment.Normal,LiverAssessment.Stabilization}),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Normal,SpleenAssessment.Remission }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PR }),
},
// ND CR 疑似/无法评估 正常/稳定 正常/部分缓解 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.Suspected, NewLesionAssessment.NE }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { LiverAssessment.Normal,LiverAssessment.Stabilization}),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { SpleenAssessment.Normal,SpleenAssessment.Remission }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PR }),
},
new CalculationDto(){
Column1=ReadingCommon.EnumToString(new List<TargetAssessment>() { }),
Column2=ReadingCommon.EnumToString(new List<NoTargetAssessment>() { }),
Column3=ReadingCommon.EnumToString(new List<NewLesionAssessment>() { }),
Column4=ReadingCommon.EnumToString(new List<LiverAssessment>() { }),
Column5=ReadingCommon.EnumToString(new List<SpleenAssessment>() { }),
Column6=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.SD }),
},
};
var index= data.FindIndex(x =>
(x.NotEq.Contains(1) ? !x.Column1.Contains(targetEvaluation) : x.Column1.Contains(targetEvaluation) || x.Column1.Count() == 0) &&
(x.NotEq.Contains(2) ? !x.Column2.Contains(noTargetEvaluation) : x.Column2.Contains(noTargetEvaluation) || x.Column2.Count() == 0) &&
(x.NotEq.Contains(3) ? !x.Column3.Contains(existsNewTarget) : x.Column3.Contains(existsNewTarget) || x.Column3.Count() == 0) &&
(x.NotEq.Contains(4) ? !x.Column4.Contains(liverEvaluation) : x.Column4.Contains(liverEvaluation) || x.Column4.Count() == 0) &&
(x.NotEq.Contains(5) ? !x.Column5.Contains(spleenEvaluation) : x.Column5.Contains(spleenEvaluation) || x.Column5.Count() == 0))
;
Console.WriteLine(index);
var result = data.Where(x =>
(x.NotEq.Contains(1) ? !x.Column1.Contains(targetEvaluation) : x.Column1.Contains(targetEvaluation) || x.Column1.Count() == 0) &&
(x.NotEq.Contains(2) ? !x.Column2.Contains(noTargetEvaluation) : x.Column2.Contains(noTargetEvaluation) || x.Column2.Count() == 0) &&
(x.NotEq.Contains(3) ? !x.Column3.Contains(existsNewTarget) : x.Column3.Contains(existsNewTarget) || x.Column3.Count() == 0) &&
(x.NotEq.Contains(4) ? !x.Column4.Contains(liverEvaluation) : x.Column4.Contains(liverEvaluation) || x.Column4.Count() == 0) &&
(x.NotEq.Contains(5) ? !x.Column5.Contains(spleenEvaluation) : x.Column5.Contains(spleenEvaluation) || x.Column5.Count() == 0))
.Select(x => x.Column6.FirstOrDefault())
.FirstOrDefault();
return result??string.Empty;
}