@@ -429,6 +429,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
ReadingCalculateDto readingData = await _generalCalculateService . GetReadingCalculateDto ( inDto . VisitTaskId ) ;
readingData . IsChangeOtherTask = inDto . IsChangeOtherTask ;
readingData . ComputationTrigger = inDto . ComputationTrigger ;
await ReadingCalculate ( readingData ) ;
}
@@ -493,16 +494,22 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
new ReadingCalculateData ( ) { QuestionType = QuestionType . NoTargetLesion , GetStringFun = GetNoTargetLesionEvaluate } ,
//新病灶评估
new ReadingCalculateData ( ) { QuestionType = QuestionType . NewLesions , GetStringFun = GetNewLesionEvaluate } ,
new ReadingCalculateData ( ) { QuestionType = QuestionType . NewLesionEvaluation , GetStringFun = GetNewLesionEvaluate } ,
//获取肝脏评估
new ReadingCalculateData ( ) { QuestionType = QuestionType . LiverAssessment , GetStringFun = GetLiverAssessment } ,
// 骨髓中是否存在局灶性 FDG亲和病灶的证据
new ReadingCalculateData ( ) { QuestionType = QuestionType . EvidenceFocalFDG , GetStringFun = GetEvidenceFocalFDG , ComputationTrigger = ComputationTrigger . Lesion } ,
//CT/MRI
new ReadingCalculateData ( ) { QuestionType = QuestionType . CTandMRI , GetStringFun = CTMRIEvaluation } ,
// PET 5PS评分
new ReadingCalculateData ( ) { QuestionType = QuestionType . PET5PS , GetStringFun = GetPET5PS } ,
new ReadingCalculateData ( ) { QuestionType = QuestionType . PET5PS , GetStringFun = GetPET5PS , ComputationTrigger = ComputationTrigger . Lesion } ,
//与基线相比摄取值变化
new ReadingCalculateData ( ) { QuestionType = QuestionType . UptakeChange , GetStringFun = GetUptakeChange } ,
new ReadingCalculateData ( ) { QuestionType = QuestionType . UptakeChange , GetStringFun = GetUptakeChange , ComputationTrigger = ComputationTrigger . Lesion } ,
// FDG-PET 评估结果
new ReadingCalculateData ( ) { QuestionType = QuestionType . FDGPET , GetStringFun = GetFDGPETOverallAssessment } ,
@@ -518,8 +525,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
// SUVmax所在病灶
new ReadingCalculateData ( ) { QuestionType = QuestionType . SUVmaxLesion , GetStringFun = GetSuvMaxFocus } ,
//获取肝脏评估
new ReadingCalculateData ( ) { QuestionType = QuestionType . LiverAssessment , GetStringFun = GetLiverAssessment } ,
////靶病灶径线之和(SOD)
//new ReadingCalculateData (){QuestionType=QuestionType.SOD,GetDecimalNullFun=GetSODData},
@@ -602,6 +610,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
calculateList = calculateList . Where ( x = > calculateType . Contains ( x . QuestionType ) ) . ToList ( ) ;
}
calculateList = calculateList . Where ( x = > x . ComputationTrigger = = null | | x . ComputationTrigger = = inDto . ComputationTrigger ) . ToList ( ) ;
var typeNAList = new List < QuestionType >
{
QuestionType . SODChange ,
@@ -1622,7 +1632,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var presentSpd = inDto . QuestionInfo . Where ( x = > x . QuestionType = = QuestionType . SPD ) . Select ( x = > x . Answer ) . FirstOrDefault ( ) . IsNullOrEmptyReturn0 ( ) ;
if ( baseLineSpd ! = 0 )
{
return ( presentSpd - baseLineSpd ) / baseLineSpd ;
return ( presentSpd - baseLineSpd ) * 100 / baseLineSpd ;
}
else
{
@@ -1913,10 +1923,18 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// <returns></returns>
public async Task < string > GetPET5PS ( ReadingCalculateDto inDto )
{
if ( inDto . IsBaseLine )
//if (inDto.IsBaseLine)
//{
// return SpleenAssessment.Stabilization.GetEnumInt();
//}
if ( inDto . QuestionInfo . Any ( x = > x . QuestionType = = QuestionType . ExistPET & & x . Answer = = ReadingYesOrNo . No . GetEnumInt ( ) ) )
{
return SpleenAssessment . Stabilization . GetEnumInt ( ) ;
return PET5PSScore . NE . GetEnumInt ( ) ;
}
PET5PSScore result = PET5PSScore . X ;
// 最大Suvmax
@@ -1978,6 +1996,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
return SUVChangeVSBaseline . NotEvaluable . GetEnumInt ( ) ;
}
if ( inDto . QuestionInfo . Any ( x = > x . QuestionType = = QuestionType . ExistPET & & x . Answer = = ReadingYesOrNo . No . GetEnumInt ( ) ) )
{
return SUVChangeVSBaseline . NotEvaluable . GetEnumInt ( ) ;
}
var result = SUVChangeVSBaseline . NotEvaluable ;
var baseLineTaskId = await GetBaseLineTaskId ( inDto ) ;
@@ -2081,7 +2104,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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 . YesSustain } ) ,
Column3 = ReadingCommon . EnumToString ( new List < FDGAffinityFociInBM > ( ) { FDGAffinityFociInBM . No , FDGAffinityFociInBM . YesSustain } ) ,
Column4 = ReadingCommon . EnumToString ( new List < FDGPETOverallAssessment > ( ) { FDGPETOverallAssessment . PMR } ) ,
} ,
@@ -2089,7 +2112,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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 . YesSustain } ) ,
Column3 = ReadingCommon . EnumToString ( new List < FDGAffinityFociInBM > ( ) { FDGAffinityFociInBM . No , FDGAffinityFociInBM . YesSustain } ) ,
Column4 = ReadingCommon . EnumToString ( new List < FDGPETOverallAssessment > ( ) { FDGPETOverallAssessment . NMR } ) ,
} ,
} ;
@@ -2105,7 +2128,25 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
#endregion
#region 骨 髓 中 是 否 存 在 局 灶 性 FDG亲和病灶的证据
/// <summary>
/// 骨髓中是否存在局灶性 FDG亲和病灶的证据
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task < string > GetEvidenceFocalFDG ( ReadingCalculateDto inDto )
{
if ( inDto . QuestionInfo . Any ( x = > x . QuestionType = = QuestionType . ExistPET & & x . Answer = = ReadingYesOrNo . No . GetEnumInt ( ) ) )
{
return FDGAffinityFociInBM . NE . GetEnumInt ( ) ;
}
else
{
return inDto . QuestionInfo . Where ( x = > x . QuestionType = = QuestionType . EvidenceFocalFDG ) . Select ( x = > x . Answer ) . FirstOrDefault ( ) ;
}
}
#endregion
#region 肝 脏 评 估
/// <summary>
@@ -2345,11 +2386,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// <returns></returns>
public async Task < string > GetTargetLesionEvaluate ( ReadingCalculateDto inDto )
{
var rowInfo = inDto . QuestionInfo . Where ( x = > x . LesionType = = LesionType . TargetLesion ) . SelectMany ( x = > x . TableRowInfoList ) . ToList ( ) ;
//if (inDto.IsBaseLine)
//{
// return TargetAssessment.NA.GetEnumInt();
//}
if ( inDto . IsBaseLine )
{
return TargetAssessment . NA . GetEnumInt ( ) ;
}
var tableQuestions = rowInfo . SelectMany ( x = > x . TableQuestionList ) . ToList ( ) ;
TargetAssessment result = TargetAssessment . SD ;
@@ -2414,10 +2458,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
result = TargetAssessment . PD ;
}
//在排除PD后,有任一靶病灶为NE状态
else if ( tableQuestions . Any ( x = > x . QuestionMark = = QuestionMark . State & & x . Answer . EqEnum ( TargetState . UnableEvaluate ) ) )
//当前访视没有任何一个状态为“疾病进展”的靶病灶;
//当前访视存在至少一个状态为“不可评估”的靶病灶。
else if (
! tableQuestions . Any ( x = > x . QuestionMark = = QuestionMark . State & & x . Answer . EqEnum ( TargetState . DiseaseProgression ) ) & &
tableQuestions . Any ( x = > x . QuestionMark = = QuestionMark . State & & x . Answer . EqEnum ( TargetState . UnableEvaluate ) ) )
{
result = TargetAssessment . PD ;
result = TargetAssessment . NE ;
}
//1、基线非淋巴结靶病灶不存在,或者当前访视非淋巴结靶病灶全部消失;
//并且 2.当前访视淋巴结靶病灶的状态全部变为“消失”。
@@ -2449,10 +2496,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
NoTargetAssessment result = NoTargetAssessment . PD ;
//if (inDto.IsBaseLine)
//{
// return NoTargetAssessment.NA.GetEnumInt();
//}
if ( inDto . IsBaseLine )
{
return NoTargetAssessment . NA . GetEnumInt ( ) ;
}
var tableRows = inDto . QuestionInfo . Where ( x = > x . LesionType = = LesionType . NonTargetLesions ) . SelectMany ( x = > x . TableRowInfoList ) . ToList ( ) ;
@@ -2550,14 +2597,18 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// <returns></returns>
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 . NETarget ) . 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 . NewTargetLesion ) . 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 ( ) ;
@@ -2571,7 +2622,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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 } ) ,
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 } ) ,
@@ -2595,14 +2646,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
Column5 = ReadingCommon . EnumToString ( new List < SpleenAssessment > ( ) { } ) ,
Column6 = ReadingCommon . EnumToString ( new List < CTMRIOverallAssessment > ( ) { CTMRIOverallAssessment . PD } ) ,
} ,
//PD 任一结果 是 任一结果 任一结果 PD
//任一结果 任一结果 是 任一结果 任一结果 PD
new CalculationDto ( ) {
Column1 = ReadingCommon . EnumToString ( new List < TargetAssessment > ( ) { TargetAssessment . PD } ) ,
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 . ND } ) ,
Column6 = ReadingCommon . EnumToString ( new List < CTMRIOverallAssessment > ( ) { CTMRIOverallAssessment . PD } ) ,
} ,
//任一结果 任一结果 任一结果 显著增大 任一结果 PD
new CalculationDto ( ) {
@@ -2611,7 +2662,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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 . ND } ) ,
Column6 = ReadingCommon . EnumToString ( new List < CTMRIOverallAssessment > ( ) { CTMRIOverallAssessment . PD } ) ,
} ,
//任一结果 任一结果 任一结果 任一结果 显著增大 PD
new CalculationDto ( ) {
@@ -2620,7 +2671,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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 . ND } ) ,
Column6 = ReadingCommon . EnumToString ( new List < CTMRIOverallAssessment > ( ) { CTMRIOverallAssessment . PD } ) ,
} ,
//CR CR/ND 否 正常 正常 CR
new CalculationDto ( ) {
@@ -2640,9 +2691,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
Column5 = ReadingCommon . EnumToString ( new List < SpleenAssessment > ( ) { SpleenAssessment . Normal } ) ,
Column6 = ReadingCommon . EnumToString ( new List < CTMRIOverallAssessment > ( ) { CTMRIOverallAssessment . CR } ) ,
} ,
//NE 非PD 否/疑似/无法评估 显著增大 显著增大 NE
//NE 非PD 否/疑似/无法评估 非 显著增大 非 显著增大 NE
new CalculationDto ( ) {
NotEq = new List < int > ( ) { 2 } ,
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 } ) ,
@@ -2672,7 +2723,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} ,
//ND ND 否/疑似 无法评估 正常/稳定/无法评估/部分缓解(非显著增大) NE
new CalculationDto ( ) {
NotEq = new List < int > ( ) { 4 } ,
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 } ) ,
@@ -2739,6 +2790,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} ,
} ;
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 ) & &