补充RECIST1.1、PCWG3、RECIST1.1 BM、iRECSIT、Lugano 2014标准的报告表单、评估问题以及算法
parent
504b5fb2de
commit
41fdde39bf
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,30 @@
|
|||
|
||||
"默认SD"
|
||||
|
||||
if(当前访视是基线)
|
||||
{
|
||||
"NA";
|
||||
}
|
||||
else if(基线未选择靶病灶)
|
||||
{
|
||||
"ND";
|
||||
}
|
||||
else if(任一单个病灶进展即可)
|
||||
{
|
||||
"PD";
|
||||
}
|
||||
else if(当前访视存在至少一个状态为“不可评估”的靶病灶)
|
||||
{
|
||||
"NE";
|
||||
}
|
||||
else if(当前访视非淋巴结靶病灶全部消失 && (当前访视淋巴结靶病灶的状态全部变为“消失” 或者 "太小" ))
|
||||
{
|
||||
"CR";
|
||||
}
|
||||
else if(与基线相比SPD变化的百分比 <=- 50% )
|
||||
{
|
||||
"PR";
|
||||
}
|
||||
|
||||
类似条件:
|
||||
1、(当前访视非淋巴结靶病灶全部消失&&当前访视淋巴结靶病灶的状态全部变为“消失”)||(基线未选非淋巴结靶病灶&&当前访视淋巴结靶病灶的状态全部变为“消失”)||(当前访视非淋巴结靶病灶全部消失&&基线为选择淋巴结靶病灶”)
|
|
@ -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,9 @@
|
|||
// LDi LDi= 当前病灶的长径
|
||||
// LDi LDi= 当前病灶的短径
|
||||
// PPD PPD= 当前病灶的PPD
|
||||
|
||||
if( 15mm < 当前靶病灶LDi && 相比最低点PPD增加百分比 ≥50% )
|
||||
{
|
||||
// 疾病进展
|
||||
}
|
||||
|
|
@ -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 @@
|
|||
// LDi LDi= 当前病灶的长径
|
||||
// LDi LDi= 当前病灶的短径
|
||||
// PPD PPD= 当前病灶的PPD
|
||||
|
||||
if( 15mm < 当前靶病灶LDi && 相比最低点PPD增加百分比 ≥50% )
|
||||
{
|
||||
// 疾病进展
|
||||
}
|
|
@ -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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,47 @@
|
|||
靶病灶疗效评估算法-20230314确认版本:
|
||||
if(基线没有靶病灶)
|
||||
{
|
||||
靶病灶疗效为 ND
|
||||
}else
|
||||
{
|
||||
初始化靶病灶疗效为 SD
|
||||
|
||||
if (与基线期SOD相比减小≥30 %)
|
||||
{
|
||||
靶病灶疗效为 PR
|
||||
}
|
||||
|
||||
if (非淋巴结靶病灶长径之和 == 0)
|
||||
{
|
||||
靶病灶疗效为 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 (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||
{
|
||||
靶病灶疗效为 PD
|
||||
}
|
||||
}
|
||||
}
|
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.
Binary file not shown.
Binary file not shown.
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