算法提交
parent
0bf4eee672
commit
056dcea56a
|
@ -0,0 +1,31 @@
|
|||
|
||||
"默认SD"
|
||||
|
||||
if(当前访视是基线)
|
||||
{
|
||||
"NA";
|
||||
}
|
||||
else if(基线未选择靶病灶)
|
||||
{
|
||||
"ND";
|
||||
}
|
||||
else if(任一单个病灶进展即可)
|
||||
{
|
||||
"PD";
|
||||
}
|
||||
else if(当前访视存在至少一个状态为“不可评估”的靶病灶)
|
||||
{
|
||||
"NE";
|
||||
}
|
||||
else if((当前访视非淋巴结靶病灶全部消失||基线未选非淋巴结靶病灶) && (当前访视淋巴结靶病灶的状态全部变为“消失”||基线为选择淋巴结靶病灶))
|
||||
{
|
||||
"CR";
|
||||
}
|
||||
else if(与基线相比SPD变化的百分比 <=- 50% )
|
||||
{
|
||||
"PR";
|
||||
}
|
||||
|
||||
类似条件:
|
||||
1、(当前访视非淋巴结靶病灶全部消失&&当前访视淋巴结靶病灶的状态全部变为“消失”)||(基线未选非淋巴结靶病灶&&当前访视淋巴结靶病灶的状态全部变为“消失”)||(当前访视非淋巴结靶病灶全部消失&&基线为选择淋巴结靶病灶”)
|
||||
2、当前访视靶病灶状态为消失的数量==靶病灶的数量
|
|
@ -0,0 +1,24 @@
|
|||
if(当前访视是基线)
|
||||
{
|
||||
"NA";
|
||||
}
|
||||
else if(基线未选择非靶病灶)
|
||||
{
|
||||
"ND";
|
||||
}
|
||||
else if(随访至少存在一个状态为“显著增大”的非靶病灶)
|
||||
{
|
||||
"PD";
|
||||
}
|
||||
else if( 随访存在至少一个状态为“不可评估”的非靶病灶)
|
||||
{
|
||||
"NE";
|
||||
}
|
||||
else if(所有单个病灶/病灶组状态评估状态为“消失”) //当前访视非靶病灶状态为消失的数量==非靶病灶的数量
|
||||
{
|
||||
"CR";
|
||||
}
|
||||
else
|
||||
{
|
||||
"PR/SD";
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
if(当前访视是基线)
|
||||
{
|
||||
"NA";
|
||||
}
|
||||
else if(当前访视存在至少一个明确新病灶)
|
||||
{
|
||||
"是";
|
||||
}
|
||||
else if(只要有任何一个新病灶状态为“无法评估”)
|
||||
{
|
||||
"无法评估";
|
||||
}
|
||||
else if(当前访视不存在明确新病灶且存在至少一个疑似新病灶)
|
||||
{
|
||||
"疑似";
|
||||
}
|
||||
else
|
||||
{
|
||||
"否";
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
return "脾脏状态";
|
|
@ -0,0 +1 @@
|
|||
return "肝脏状态";
|
|
@ -0,0 +1,213 @@
|
|||
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;
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
|
@ -0,0 +1,94 @@
|
|||
public async Task<string> GetFDGPETOverallAssessment(ReadingCalculateDto inDto)
|
||||
{
|
||||
|
||||
if (inDto.IsBaseLine)
|
||||
{
|
||||
return FDGPETOverallAssessment.NA.GetEnumInt();
|
||||
}
|
||||
|
||||
var existPET =await GetExistPET(inDto);
|
||||
if (existPET.EqEnum(ReadingYesOrNo.No))
|
||||
{
|
||||
return FDGPETOverallAssessment.NE.GetEnumInt();
|
||||
}
|
||||
|
||||
//FDGPETOverallAssessment result = FDGPETOverallAssessment.NA;
|
||||
|
||||
// PET5PS
|
||||
var PET5PS = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstOrDefault();
|
||||
|
||||
// UptakeChange
|
||||
var UptakeChange = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.UptakeChange).Select(x => x.Answer).FirstOrDefault();
|
||||
|
||||
// EvidenceFocalFDG
|
||||
var EvidenceFocalFDG = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.EvidenceFocalFDG).Select(x => x.Answer).FirstOrDefault();
|
||||
|
||||
|
||||
List<CalculationDto> data = new List<CalculationDto>() {
|
||||
|
||||
//NE NE NE NE
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<PET5PSScore>() { PET5PSScore.NE }),
|
||||
Column2=ReadingCommon.EnumToString(new List<SUVChangeVSBaseline>() { SUVChangeVSBaseline.NotEvaluable }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGAffinityFociInBM>() { FDGAffinityFociInBM.NE}),
|
||||
Column4=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE }),
|
||||
},
|
||||
|
||||
//NE/5分/4分/3分/2分/1分/X NE/增大/减少/无明显变化 是,存在新的/复发的FDG高亲和性病灶 PMD
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<PET5PSScore>() { PET5PSScore.NE,PET5PSScore.Five,PET5PSScore.Four,PET5PSScore.Three,PET5PSScore.Two,PET5PSScore.One,PET5PSScore.X, }),
|
||||
Column2=ReadingCommon.EnumToString(new List<SUVChangeVSBaseline>() { SUVChangeVSBaseline.NotEvaluable,SUVChangeVSBaseline.Increase,SUVChangeVSBaseline.Decrease,SUVChangeVSBaseline.DidNotChange, }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGAffinityFociInBM>() { FDGAffinityFociInBM.YesHaveNew,}),
|
||||
Column4=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMD }),
|
||||
},
|
||||
|
||||
//5分/4分 增大 NE/(是,存在新的/复发的FDG高亲和性病灶)/(是,存在持续的局灶性变化)/否 PMD
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<PET5PSScore>() { PET5PSScore.Five,PET5PSScore.Four, }),
|
||||
Column2=ReadingCommon.EnumToString(new List<SUVChangeVSBaseline>() { SUVChangeVSBaseline.Increase }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGAffinityFociInBM>() { FDGAffinityFociInBM.NE, FDGAffinityFociInBM.YesHaveNew, FDGAffinityFociInBM.YesSustain, FDGAffinityFociInBM.No}),
|
||||
Column4=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMD }),
|
||||
},
|
||||
|
||||
//3分/2分/1分/X NE/增大/减少/无明显变化 否 CMR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<PET5PSScore>() { PET5PSScore.Three,PET5PSScore.Two,PET5PSScore.One,PET5PSScore.X, }),
|
||||
Column2=ReadingCommon.EnumToString(new List<SUVChangeVSBaseline>() { SUVChangeVSBaseline.NotEvaluable,SUVChangeVSBaseline.Increase,SUVChangeVSBaseline.Decrease,SUVChangeVSBaseline.DidNotChange, }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGAffinityFociInBM>() { FDGAffinityFociInBM.No}),
|
||||
Column4=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.CMR }),
|
||||
},
|
||||
|
||||
//3分/2分/1分/X NE/增大/减少/无明显变化 是,存在持续的局灶性变化 PMR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<PET5PSScore>() { PET5PSScore.Three,PET5PSScore.Two,PET5PSScore.One,PET5PSScore.X, }),
|
||||
Column2=ReadingCommon.EnumToString(new List<SUVChangeVSBaseline>() { SUVChangeVSBaseline.NotEvaluable,SUVChangeVSBaseline.Increase,SUVChangeVSBaseline.Decrease,SUVChangeVSBaseline.DidNotChange, }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGAffinityFociInBM>() { FDGAffinityFociInBM.YesSustain }),
|
||||
Column4=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMR }),
|
||||
},
|
||||
|
||||
//5分/4分 减少 否/是,存在持续的局灶性变化 PMR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<PET5PSScore>() { PET5PSScore.Five,PET5PSScore.Four }),
|
||||
Column2=ReadingCommon.EnumToString(new List<SUVChangeVSBaseline>() { SUVChangeVSBaseline.Decrease }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGAffinityFociInBM>() { FDGAffinityFociInBM.No, FDGAffinityFociInBM.YesSustain}),
|
||||
Column4=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMR }),
|
||||
},
|
||||
|
||||
//5分/4分 无明显变化 否/是,存在持续的局灶性变化 NMR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<PET5PSScore>() { PET5PSScore.Five,PET5PSScore.Four }),
|
||||
Column2=ReadingCommon.EnumToString(new List<SUVChangeVSBaseline>() { SUVChangeVSBaseline.DidNotChange }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGAffinityFociInBM>() { FDGAffinityFociInBM.No, FDGAffinityFociInBM.YesSustain}),
|
||||
Column4=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NMR }),
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
var resultdata = data.Where(x =>
|
||||
(x.NotEq.Contains(1) ? !x.Column1.Contains(PET5PS) : x.Column1.Contains(PET5PS) || x.Column1.Count() == 0) &&
|
||||
(x.NotEq.Contains(2) ? !x.Column2.Contains(UptakeChange) : x.Column2.Contains(UptakeChange) || x.Column2.Count() == 0) &&
|
||||
(x.NotEq.Contains(3) ? !x.Column3.Contains(EvidenceFocalFDG) : x.Column3.Contains(EvidenceFocalFDG) || x.Column3.Count() == 0))
|
||||
.Select(x => x.Column4.FirstOrDefault())
|
||||
.FirstOrDefault();
|
||||
return resultdata ?? string.Empty;
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
|
@ -0,0 +1,139 @@
|
|||
public async Task<string> GetImgOncology(ReadingCalculateDto inDto)
|
||||
{
|
||||
if (inDto.IsBaseLine)
|
||||
{
|
||||
return ImagingOverallAssessment_Lugano.NA.GetEnumInt();
|
||||
}
|
||||
|
||||
//var imageQualityEvaluation = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.ImageQualityAssessment&&x.Answer.EqEnum(ImageQualityEvaluation.Abnormal)).FirstOrDefault();
|
||||
//if (imageQualityEvaluation != null)
|
||||
//{
|
||||
// return ImagingOverallAssessment_Lugano.NE.GetEnumInt();
|
||||
//}
|
||||
|
||||
// CTandMRI
|
||||
var CTandMRIData = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.CTandMRI).Select(x => x.Answer).FirstOrDefault();
|
||||
|
||||
// FDGPET
|
||||
var FDGPETData = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.FDGPET).Select(x => x.Answer).FirstOrDefault();
|
||||
|
||||
var baseLineTaskId = await GetBaseLineTaskId(inDto);
|
||||
// lastFDGPET
|
||||
var lastFDGPETData = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LastFDGPET).Select(x => x.Answer).FirstOrDefault();
|
||||
|
||||
List<CalculationDto> data = new List<CalculationDto>() {
|
||||
|
||||
//1、ND NE NE/NA ND
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.ND }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA}),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.ND }),
|
||||
},
|
||||
//2、ND/PD/CR/NE/PR/SD PMD PMD/CMR/PMR/NMR/NE/NA PMD/PD
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.ND, CTMRIOverallAssessment.PD,CTMRIOverallAssessment.CR,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD}),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMD, }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() {FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA }),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.PMDPD }),
|
||||
},
|
||||
//3、ND/PD/CR/NE/PR/SD NE PMD PMD/PD
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.ND, CTMRIOverallAssessment.PD,CTMRIOverallAssessment.CR,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD}),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() {FDGPETOverallAssessment.NE }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMD, }),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.PMDPD }),
|
||||
},
|
||||
//4、PD NE CMR/PMR/NMR/NE/NA PMD/PD
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PD}),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE, }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA }),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.PMDPD }),
|
||||
},
|
||||
//5、NE NE NE/NA NE
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.NE }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA }),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.NE }),
|
||||
},
|
||||
|
||||
//6、CR/PR/SD/NE/ND/PD CMR CMR/PMR/NMR/PMD/NE/NA CMR/CR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.CR,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.ND,CTMRIOverallAssessment.PD }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.CMR }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA }),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.CMRCR }),
|
||||
},
|
||||
//7、CR NE NE/NA CMR/CR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.CR }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA,}),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.CMRCR }),
|
||||
},
|
||||
|
||||
//8、 CR、PR、SD、NE、ND NE CMR CMR/CR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.CR,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.ND }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.CMR,}),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.CMRCR }),
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
//9、ND/PD/CR/NE/PR/SD PMR PMD/CMR/PMR/NMR/NE/NA PMR/PR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.ND, CTMRIOverallAssessment.PD,CTMRIOverallAssessment.CR,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMR }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.CMR,FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE,FDGPETOverallAssessment.NA, }),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.PMRPR }),
|
||||
},
|
||||
//10、PR NE NE/NA PMR/PR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.PR }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA,}),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.PMRPR }),
|
||||
},
|
||||
//11、CR/PR/SD/NE/ND NE PMR PMR/PR
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.CR,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.ND }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMR}),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.PMRPR }),
|
||||
},
|
||||
//12、ND/PD/CR/NE/PR/SD NMR PMD/CMR/PMR/NMR/NE/NA NMR/SD
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.ND,CTMRIOverallAssessment.PD,CTMRIOverallAssessment.CR,CTMRIOverallAssessment.NE,CTMRIOverallAssessment.PR,CTMRIOverallAssessment.SD }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NMR }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.PMD, FDGPETOverallAssessment.CMR, FDGPETOverallAssessment.PMR, FDGPETOverallAssessment.NMR, FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA,}),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.NMRSD }),
|
||||
},
|
||||
//13、CR/PR/SD/ND/NE NE NMR NMR/SD
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.CR, CTMRIOverallAssessment.PR, CTMRIOverallAssessment.SD, CTMRIOverallAssessment.ND, CTMRIOverallAssessment.NE }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NMR}),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.NMRSD }),
|
||||
},
|
||||
//14、SD NE NE/NA NMR/SD
|
||||
new CalculationDto(){
|
||||
Column1=ReadingCommon.EnumToString(new List<CTMRIOverallAssessment>() { CTMRIOverallAssessment.SD }),
|
||||
Column2=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE }),
|
||||
Column3=ReadingCommon.EnumToString(new List<FDGPETOverallAssessment>() { FDGPETOverallAssessment.NE, FDGPETOverallAssessment.NA,}),
|
||||
Column4=ReadingCommon.EnumToString(new List<ImagingOverallAssessment_Lugano>() { ImagingOverallAssessment_Lugano.NMRSD }),
|
||||
},
|
||||
};
|
||||
|
||||
var resultdata = data.Where(x =>
|
||||
(x.NotEq.Contains(1) ? !x.Column1.Contains(CTandMRIData) : x.Column1.Contains(CTandMRIData) || x.Column1.Count() == 0) &&
|
||||
(x.NotEq.Contains(2) ? !x.Column2.Contains(FDGPETData) : x.Column2.Contains(FDGPETData) || x.Column2.Count() == 0) &&
|
||||
(x.NotEq.Contains(3) ? !x.Column3.Contains(lastFDGPETData) : x.Column3.Contains(lastFDGPETData) || x.Column3.Count() == 0))
|
||||
.Select(x => x.Column4.FirstOrDefault())
|
||||
.FirstOrDefault();
|
||||
return resultdata ?? string.Empty;
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
if(如果没有PET)
|
||||
{
|
||||
"NE";
|
||||
}
|
||||
else if(本访视病灶的 max SUVmax(所有病灶中最大的)> 2 * 肝脏血池SUVmax)
|
||||
{
|
||||
"5";
|
||||
}
|
||||
else if(本访视病灶的SUVmax(所有病灶中最大的)>肝脏血池SUVmax)
|
||||
{
|
||||
"4";
|
||||
}
|
||||
else if(纵隔血池SUVmax<本访视点病灶的max SUVmax(所有病灶中最大的)≤1*肝脏血池SUVmax)
|
||||
{
|
||||
"3";
|
||||
}
|
||||
else if(本访视点病灶的SUVmax(所有病灶中最大的)<纵隔血池SUVmax)
|
||||
{
|
||||
"2";
|
||||
}
|
||||
else
|
||||
{
|
||||
"";//原来是1这里改为空
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
if(本访视无PET图像)
|
||||
{
|
||||
"NE";
|
||||
}
|
||||
else if(本访视PET评分 > 基线PET评分)
|
||||
{
|
||||
"增大";
|
||||
}
|
||||
else if(本访视PET评分 < 基线PET评分)
|
||||
{
|
||||
"减小";
|
||||
}
|
||||
else if(访视PET评分 = 基线PET评分)
|
||||
{
|
||||
"无明显变化";
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
// LDi LDi= 当前病灶的长径
|
||||
// LDi LDi= 当前病灶的短径
|
||||
// PPD PPD= 当前病灶的PPD
|
||||
|
||||
if( 15mm < 当前靶病灶LDi ≤20mm && 相比最低点PPD增加百分比 ≥50% && (相比PPD最低点LDi增加值 ≥5 mm || 相比PPD最低点SDi增加值≥5 mm) )
|
||||
{
|
||||
// 疾病进展
|
||||
}
|
||||
else if( 当前靶病灶LDi>20 mm && 相比最低点PPD增加百分比 ≥50% (相比PPD最低点LDi增加值 ≥10 mm || 相比PPD最低点SDi增加值Sdi ≥10 mm))
|
||||
{
|
||||
// 疾病进展
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
if(当前垂直径 ==0)
|
||||
{
|
||||
"无法评估"
|
||||
}else if(当前垂直径≤130mm)
|
||||
{
|
||||
"正常";
|
||||
}
|
||||
else if(当前访视是基线)
|
||||
{
|
||||
"肿大"
|
||||
}else
|
||||
{
|
||||
if(基线 垂直径> 130 mm && 与基线相比脾垂直径变化值≥10 mm && 与基线相比脾肿大增加的百分比 > 50%)
|
||||
{
|
||||
"显著增大";
|
||||
}
|
||||
else if(基线 垂直径> 130 mm
|
||||
&& 当前访视的前面访视中 存在垂直径≤130mm
|
||||
&& 与最低点相比脾脏垂直径的增加值≥20 mm
|
||||
&& 当前垂直径 > 130 mm)
|
||||
{
|
||||
"显著增大";
|
||||
}
|
||||
else if(基线垂直径≤130mm && 与基线相比脾垂直径变化值≥20 mm && 当前垂直径 > 130 mm)
|
||||
{
|
||||
"显著增大";
|
||||
}
|
||||
else if(基线期 状态为“肿大”
|
||||
&& 与基线相比脾肿大增加的百分比 < -50%)
|
||||
{
|
||||
"部分缓解";
|
||||
}
|
||||
else
|
||||
{
|
||||
"稳定";
|
||||
}
|
||||
}
|
||||
|
||||
注:
|
||||
1、与基线相比脾肿大增加的百分比的计算方式:
|
||||
(1)当前垂直径大于130,且基线垂直径大于130时,=[(当前垂直径-130)-(基线垂直径-130)]/(基线垂直径-130);
|
||||
(2)当前垂直径小于等于130,或者基线垂直径小于等于130时,赋值NA
|
||||
|
||||
2、与基线相比脾垂直径变化值的计算方式:当前访视脾脏垂直径-基线脾脏垂直径
|
|
@ -0,0 +1,13 @@
|
|||
// LDi LDi= 当前病灶的长径
|
||||
// LDi LDi= 当前病灶的短径
|
||||
// PPD PPD= 当前病灶的PPD
|
||||
|
||||
if( 15mm < 当前靶病灶LDi && 相比最低点PPD增加百分比 ≥50% )
|
||||
{
|
||||
// 疾病进展
|
||||
}
|
||||
else
|
||||
{
|
||||
// 清空状态
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
// LDi LDi= 主病灶加分裂病灶的长径之和
|
||||
// LDi LDi= 主病灶加分裂病灶的短径之和
|
||||
// PPD PPD= 主病灶加分裂病灶的PPD之和
|
||||
|
||||
if( 15mm < 当前靶病灶LDi≤20mm && 相比最低点PPD增加百分比 ≥50% && (相比PPD最低点LDi增加值 ≥5 mm || 相比PPD最低点SDi增加值≥5 mm) )
|
||||
{
|
||||
// 疾病进展
|
||||
}
|
||||
else if( 当前靶病灶LDi>20 mm && 相比最低点PPD增加百分比 ≥50% (相比PPD最低点LDi增加值 ≥10 mm || 相比PPD最低点SDi增加值Sdi ≥10 mm))
|
||||
{
|
||||
// 疾病进展
|
||||
}
|
||||
else if
|
||||
(
|
||||
if(之前是疾病进展)
|
||||
{
|
||||
// 改为存在
|
||||
}
|
||||
)
|
|
@ -0,0 +1,19 @@
|
|||
// LDi LDi= 当前病灶的长径
|
||||
// LDi LDi= 当前病灶的短径
|
||||
// PPD PPD= 当前病灶的PPD
|
||||
|
||||
if( 15mm < 当前靶病灶LDi≤20mm && 相比最低点PPD增加百分比 ≥50% && (相比PPD最低点LDi增加值 ≥5 mm || 相比PPD最低点SDi增加值≥5 mm) )
|
||||
{
|
||||
// 疾病进展
|
||||
}
|
||||
else if( 当前靶病灶LDi>20 mm && 相比最低点PPD增加百分比 ≥50% (相比PPD最低点LDi增加值 ≥10 mm || 相比PPD最低点SDi增加值Sdi ≥10 mm))
|
||||
{
|
||||
// 疾病进展
|
||||
}
|
||||
else if
|
||||
(
|
||||
if(之前是疾病进展)
|
||||
{
|
||||
// 改为存在
|
||||
}
|
||||
)
|
|
@ -0,0 +1,8 @@
|
|||
if(不存在PET)
|
||||
{
|
||||
"NE"
|
||||
}
|
||||
else
|
||||
{
|
||||
"取骨髓中是否存在局灶性 FDG亲和病灶的证据 的结果"
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,51 @@
|
|||
靶病灶疗效评估算法-20230306确认版本:
|
||||
if(基线没有靶病灶)
|
||||
{
|
||||
靶病灶疗效为 ND
|
||||
}else
|
||||
{
|
||||
初始化靶病灶疗效为 SD
|
||||
|
||||
if (与基线期SOD相比减小≥30 %)
|
||||
{
|
||||
靶病灶疗效为 PR
|
||||
}
|
||||
|
||||
if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10且淋巴结非靶病灶全部消失)
|
||||
{
|
||||
靶病灶疗效为 CR
|
||||
}
|
||||
|
||||
if (有被评估为NE的单个靶病灶)
|
||||
{
|
||||
靶病灶疗效为 NE
|
||||
}
|
||||
|
||||
if (最低点SOD > 0)
|
||||
{
|
||||
if(比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
{
|
||||
靶病灶疗效为 PD
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//进入该分支最低点SOD=0
|
||||
if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
{
|
||||
靶病灶疗效为PD
|
||||
}
|
||||
}
|
||||
|
||||
if(上次访视点评估是CR)
|
||||
{
|
||||
if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
|
||||
{
|
||||
靶病灶疗效为 PD
|
||||
}
|
||||
if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||
{
|
||||
靶病灶疗效为 PD
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
|
@ -0,0 +1,23 @@
|
|||
if(所有新非靶病灶消失或一直不存在任何新非靶病灶时评估为该结果)
|
||||
{
|
||||
新非靶病灶疗效为 ND
|
||||
}
|
||||
else if (上一访视新非靶病灶评估为“iUPD” && 满足任一新非靶病灶状态为“增大”)
|
||||
{
|
||||
新非靶病灶疗效为 iCPD
|
||||
}
|
||||
else if (上一访视新非靶病灶评估为“iCPD”&& 有"存在"状态的新非靶病灶)
|
||||
{
|
||||
新非靶病灶疗效为 iCPD
|
||||
}
|
||||
else if (当有存在状态的新非靶病灶)
|
||||
{
|
||||
新非靶病灶疗效为 iUPD
|
||||
}
|
||||
else if (至少有一个新非靶病无法评估)
|
||||
{
|
||||
新非靶病灶疗效为 NE
|
||||
}else
|
||||
{
|
||||
//错误级别日志:项目、标准、受试者、阅片人、任务。当前新非靶病灶的病灶数据输出:
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
if(所有新靶病灶消失或一直不存在任何新靶病灶)
|
||||
{
|
||||
新靶病灶疗效为 ND
|
||||
}
|
||||
else if (上一访视新靶病灶评估为“iUPD” && iSOD的增加值>=5mm) //与最近一次新靶病灶评估为iUPD的访视相比本次访视iSOD增加不小于5mm
|
||||
{
|
||||
新靶病灶疗效为 iCPD
|
||||
}
|
||||
else if (上一访视新靶病灶评估为“iCPD”&& (当有“存在”状态的淋巴结新靶病灶||当有“存在”或“太小”状态的非淋巴结新靶病灶))//区分了淋巴结新靶病灶和非淋巴结新靶病灶
|
||||
{
|
||||
新靶病灶疗效为 iCPD
|
||||
}
|
||||
else if (当有“存在”状态的淋巴结新靶病灶||当有“存在”或“太小”状态的非淋巴结新靶病灶)//区分了淋巴结新靶病灶和非淋巴结新靶病灶
|
||||
{
|
||||
新靶病灶疗效为 iUPD
|
||||
}
|
||||
else if (至少有一个新靶病无法评估)
|
||||
{
|
||||
新靶病灶疗效为 NE
|
||||
}else
|
||||
{
|
||||
//错误级别日志:项目、标准、受试者、阅片人、任务。输出新靶病灶数据:
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
if(基线没有非靶病灶)
|
||||
{
|
||||
非靶病灶疗效为 ND
|
||||
}
|
||||
else if (上次非靶病灶评估结果为iUPD && (任一非靶病灶状态评估为“进一步增大(iCPD)||出现至少1个上一访视未评估为“显著增大(iUPD)”的病灶本次访视评估为“显著增大(iUPD)”))
|
||||
{
|
||||
非靶病灶疗效为 iCPD
|
||||
}
|
||||
else if (上次非靶病灶评估结果为iCPD && 任一非靶病灶状态评估为“进一步增大(iCPD)”或“显著增大(iUPD)”)
|
||||
{
|
||||
非靶病灶疗效为 iCPD
|
||||
}
|
||||
else if (本次访视非靶病灶满足RECIST1.1的PD条件)//请注意RECIST1.1中PD条件为:任一非靶病灶本次访视评估为“显著增大”,iRECIST中,应修改为任一非靶病灶本次访视评估为“显著增大(iUPD)”
|
||||
{
|
||||
非靶病灶疗效为 iUPD
|
||||
}
|
||||
else if (有任一非靶病灶为NE状态)
|
||||
{
|
||||
非靶病灶疗效为 NE
|
||||
}
|
||||
else if (全部非靶病灶均为“消失”状态)
|
||||
{
|
||||
非靶病灶疗效为 iCR
|
||||
}
|
||||
else
|
||||
{
|
||||
非靶病灶疗效为 iNN
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
iUPD连续时,与最近一次靶病灶评估为iUPD的访视相比本次访视SOD增加值 = NA;
|
||||
SOD增加值>=5mm
|
||||
|
||||
|
||||
if(基线没有靶病灶)
|
||||
{
|
||||
靶病灶疗效为 ND
|
||||
}
|
||||
else if (上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)
|
||||
{
|
||||
靶病灶疗效为 ICPD
|
||||
}
|
||||
else if (上一访视评估为iUPD&& SOD增加值>=5mm)//修改条件为:与最近一次靶病灶评估为iUPD的访视相比本次访视SOD增加不小于5mm
|
||||
{
|
||||
靶病灶疗效为 ICPD
|
||||
iupd连续时,与最近一次靶病灶评估为iUPD的访视相比本次访视SOD增加值 =SOD增加值;
|
||||
}
|
||||
else if (本次访靶病灶视满足RECIST1.1的PD条件)
|
||||
{
|
||||
靶病灶疗效为 iUPD
|
||||
} else if (有任一靶病灶为NE状态)
|
||||
{
|
||||
靶病灶疗效为 NE
|
||||
}
|
||||
else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm&&非靶病灶中淋巴结病灶全部消失)//增加条件为:非靶病灶中淋巴结病灶全部消失
|
||||
{
|
||||
靶病灶疗效为 iCR
|
||||
}
|
||||
else if (与基线期SOD相比减小≥30 % ||(所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm&&非靶病灶中有淋巴结病灶为非消失))//增加排除iCR条件:所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm&&非靶病灶中有淋巴结病灶为非消失
|
||||
{
|
||||
靶病灶疗效为 iPR
|
||||
}
|
||||
else
|
||||
{
|
||||
靶病灶疗效为 iSD
|
||||
}
|
||||
|
||||
更新:
|
||||
if(基线没有靶病灶)
|
||||
{
|
||||
靶病灶疗效为 ND
|
||||
}
|
||||
else if (上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)
|
||||
{
|
||||
靶病灶疗效为 ICPD
|
||||
} else if (本次访靶病灶视满足RECIST1.1的PD条件)
|
||||
{
|
||||
靶病灶疗效为 iUPD
|
||||
if (上一访视评估为iUPD&& SOD增加值>=5mm)//修改条件为:与最近一次靶病灶评估为iUPD的访视相比本次访视SOD增加不小于5mm
|
||||
{
|
||||
靶病灶疗效为 ICPD
|
||||
}
|
||||
} else if (有任一靶病灶为NE状态)
|
||||
{
|
||||
靶病灶疗效为 NE
|
||||
}
|
||||
else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm&&非靶病灶中淋巴结病灶全部消失)//增加条件为:非靶病灶中淋巴结病灶全部消失
|
||||
{
|
||||
靶病灶疗效为 iCR
|
||||
}
|
||||
else if (与基线期SOD相比减小≥30 % ||(所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm&&非靶病灶中有淋巴结病灶为非消失))//增加排除iCR条件:所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm&&非靶病灶中有淋巴结病灶为非消失
|
||||
{
|
||||
靶病灶疗效为 iPR
|
||||
}
|
||||
else
|
||||
{
|
||||
靶病灶疗效为 iSD
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
if(所有其它既往新病灶消失或一直不存在任何其它既往新病灶)
|
||||
{
|
||||
其它既往新病灶疗效为 ND
|
||||
}
|
||||
else if (存在状态为“明确”的其它既往新病灶)
|
||||
{
|
||||
其它既往新病灶疗效为 iUPD
|
||||
}
|
||||
else if (至少有一个其它既往新病灶无法评估)
|
||||
{
|
||||
其它既往新病灶疗效为 NE
|
||||
}
|
||||
else if (至少有一个其它既往新病灶为疑似状态)
|
||||
{
|
||||
其它既往新病灶疗效为 疑似
|
||||
}else
|
||||
{
|
||||
//错误级别日志:项目、标准、受试者、阅片人、任务。输出其它既往新病灶数据:
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
if(上个访视整体肿瘤评估结果为iCPD&&当前访视靶病灶评估、非靶病灶评估、新病灶整体肿瘤评估任一项为iUPD或iCPD) //条件更新
|
||||
{
|
||||
疗效为 iCPD
|
||||
}
|
||||
else if (上个访视整体肿瘤评估结果为iUPD&&(靶病灶评估、非靶病灶评估和新病灶整体评估从上个访视的评估结果iUPD变成本次访视的评估结果iCPD||靶病灶评估、非靶病灶评估和新病灶整体评估从上个访视的评估结果非iUPD变成本次访视的评估结果iUPD))//条件更新
|
||||
{
|
||||
疗效为 iCPD
|
||||
}
|
||||
else if (靶病灶评估为iUPD || 非靶病灶评估为iUPD || 新病灶评估为iUPD)
|
||||
{
|
||||
疗效为 iUPD
|
||||
}
|
||||
else if ((靶病灶评估为iCR && 非靶病灶评估为iCR && 新病灶评估为ND)|| (靶病灶评估为ND && 非靶病灶评估为iCR && 新病灶评估为ND) || (靶病灶评估为iCR && 非靶病灶评估为ND && 新病灶评估为ND))
|
||||
{
|
||||
疗效为 iCR
|
||||
}
|
||||
else if (靶病灶评估为iPR && 非靶病灶评估为iCR,iNN,NE或ND && 新病灶评估为ND或疑似或NE)
|
||||
{
|
||||
疗效为 iPR
|
||||
}
|
||||
else if (靶病灶评估为iCR && 非靶病灶评估为iNN或NE && 新病灶评估为ND或疑似或NE)
|
||||
{
|
||||
疗效为 iPR
|
||||
}
|
||||
else if (靶病灶评估为iCR && 非靶病灶评估为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 && 新病灶评估为ND或疑似或NE)
|
||||
{
|
||||
疗效为 NE
|
||||
}
|
||||
else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为NE)
|
||||
{
|
||||
疗效为 NE
|
||||
}else
|
||||
{
|
||||
//错误级别日志:项目、标准、受试者、阅片人、任务。输出靶病灶、非靶病灶、新病灶的评估结果:
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
if(新靶病灶为ND&&新非靶病灶为ND&&其它既往新病灶为ND&&不存在触发iRECIST后新病灶)
|
||||
{
|
||||
疗效为 ND
|
||||
}
|
||||
else if (新靶病灶为iCPD||新非靶病灶为iCPD)
|
||||
{
|
||||
疗效为 iCPD
|
||||
}
|
||||
else if (前一访视新病灶评估为iCPD && (新靶病灶有存在病灶 || 新非靶病灶有存在状态病灶 || 其它既往新病灶有明确的病灶 || 触发iRECIST后新病灶有明确病灶))
|
||||
{
|
||||
疗效为 iCPD
|
||||
}
|
||||
else if (前一访视新病灶评估为iUPD && 新靶病灶上个访视评估为NE,本次访视评估为iUPD)
|
||||
{
|
||||
疗效为 iCPD
|
||||
}
|
||||
else if (前一访视新病灶评估为iUPD && 新非靶病灶上个访视评估为NE,本次访视评估为iUPD)
|
||||
{
|
||||
疗效为 iCPD
|
||||
}
|
||||
else if (前一访视新病灶评估为iUPD && 其它既往新病灶上个访视评估为NE或疑似,本次访视评估为iUPD)
|
||||
{
|
||||
疗效为 iCPD
|
||||
}
|
||||
else if (前一访视新病灶评估为iUPD && 触发iRECIST后新病灶评估上个访视评估为NE或否或疑似,本次访视评估为是)
|
||||
{
|
||||
疗效为 iCPD
|
||||
}
|
||||
else if (新靶病灶评估为iUPD || 新非靶病灶评估为iUPD || 其它既往新病灶评估为iUPD || 触发iRECIST后新病灶评估上个访视评估为是)
|
||||
{
|
||||
疗效为 iUPD
|
||||
}
|
||||
else if (新靶病灶、新非靶病灶、其它既往新病灶、触发iRECIST后的新病灶任一项评估为NE)
|
||||
{
|
||||
疗效为 NE
|
||||
}
|
||||
else if (其它既往新病灶或触发iRECIST后新病灶评估为“疑似”)
|
||||
{
|
||||
疗效为 疑似
|
||||
}else
|
||||
{
|
||||
//错误级别日志:项目、标准、受试者、阅片人、任务。输出新病灶数据:
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
if(出现至少1个“明确”状态的触发iRECIST后新病灶)
|
||||
{
|
||||
触发iRECIST后新病灶疗效为 是
|
||||
}
|
||||
else if (只要有一个触发iRECIST后新病灶评估为NE)
|
||||
{
|
||||
触发iRECIST后新病灶疗效为 NE
|
||||
}
|
||||
else if (只要有一个触发iRECIST后新病灶评估为疑似)
|
||||
{
|
||||
触发iRECIST后新病灶疗效为 疑似
|
||||
}
|
||||
else
|
||||
{
|
||||
触发iRECIST后新病灶疗效为 否
|
||||
}
|
Loading…
Reference in New Issue