代码提交
parent
8924b2ca7a
commit
35f5a362e3
|
@ -454,7 +454,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
{
|
{
|
||||||
|
|
||||||
//垂直径乘积之和(SPD)
|
//垂直径乘积之和(SPD)
|
||||||
//new ReadingCalculateData (){QuestionType=QuestionType.sp,GetDecimalNullFun=GetSODData},
|
new ReadingCalculateData (){QuestionType=QuestionType.SPD,GetDecimalFun=GetSPD},
|
||||||
|
|
||||||
////靶病灶径线之和(SOD)
|
////靶病灶径线之和(SOD)
|
||||||
//new ReadingCalculateData (){QuestionType=QuestionType.SOD,GetDecimalNullFun=GetSODData},
|
//new ReadingCalculateData (){QuestionType=QuestionType.SOD,GetDecimalNullFun=GetSODData},
|
||||||
|
@ -489,11 +489,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
//靶病灶评估
|
//靶病灶评估
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate},
|
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate},
|
||||||
|
|
||||||
////非靶病灶评估
|
//非靶病灶评估
|
||||||
// new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate},
|
new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate},
|
||||||
|
|
||||||
////是否存在新病灶
|
//新病灶评估
|
||||||
// new ReadingCalculateData (){QuestionType=QuestionType.NewLesions,GetStringFun=GetNewLesionEvaluate},
|
new ReadingCalculateData (){QuestionType=QuestionType.NewLesions,GetStringFun=GetNewLesionEvaluate},
|
||||||
|
|
||||||
// //整体肿瘤评估
|
// //整体肿瘤评估
|
||||||
// new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetTumor},
|
// new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetTumor},
|
||||||
|
@ -1453,6 +1453,26 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
|
|
||||||
#region 计算阅片问题 外层问题
|
#region 计算阅片问题 外层问题
|
||||||
|
|
||||||
|
#region 获取SPD
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取SPD
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<decimal> GetSPD(ReadingCalculateDto inDto)
|
||||||
|
{
|
||||||
|
decimal result = 0;
|
||||||
|
var rowInfo = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
|
||||||
|
|
||||||
|
var tableQuestionList = rowInfo.SelectMany(x => x.TableQuestionList).ToList();
|
||||||
|
|
||||||
|
result = tableQuestionList.Where(x => x.QuestionMark == QuestionMark.PPD).Sum(x => x.Answer.IsNullOrEmptyReturn0());
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region 获取靶病灶评估
|
#region 获取靶病灶评估
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取靶病灶评估
|
/// 获取靶病灶评估
|
||||||
|
@ -1466,9 +1486,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
//{
|
//{
|
||||||
// return TargetAssessment.NA.GetEnumInt();
|
// return TargetAssessment.NA.GetEnumInt();
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var tableQuestions = rowInfo.SelectMany(x => x.TableQuestionList).ToList();
|
var tableQuestions = rowInfo.SelectMany(x => x.TableQuestionList).ToList();
|
||||||
|
|
||||||
TargetAssessment result = TargetAssessment.SD;
|
TargetAssessment result = TargetAssessment.SD;
|
||||||
|
@ -1486,16 +1503,41 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
// 基线非淋巴结靶病灶不存在,或者当前访视非淋巴结靶病灶全部消失;
|
// 基线非淋巴结靶病灶不存在,或者当前访视非淋巴结靶病灶全部消失;
|
||||||
eqCR = eqCR && item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.Loss));
|
eqCR = eqCR && item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.Loss));
|
||||||
}
|
}
|
||||||
|
|
||||||
spd += (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.PPD).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
|
spd += (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.PPD).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
|
||||||
|
|
||||||
|
|
||||||
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
|
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
|
||||||
{
|
{
|
||||||
// 当前访视淋巴结靶病灶的状态全部变为“消失”
|
// 当前访视淋巴结靶病灶的状态全部变为“消失”
|
||||||
eqCR = eqCR && item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.Loss));
|
eqCR = eqCR && item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.Loss));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 1、与基线相比SPD变化的百分比 ≥50%,;
|
||||||
|
// 并且 当前访视没有任何一个状态为“疾病进展”的靶病灶
|
||||||
|
var eqPR = false;
|
||||||
|
|
||||||
|
if (inDto.IsBaseLine)
|
||||||
|
{
|
||||||
|
eqPR = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 先找到基线的任务
|
||||||
|
var baseLineTaskId = await _visitTaskRepository.Where(x => x.SubjectId == inDto.SubjectId && x.ReadingCategory == ReadingCategory.Visit
|
||||||
|
&& x.TrialReadingCriterionId == inDto.TrialReadingCriterionId &&
|
||||||
|
x.SourceSubjectVisit.IsBaseLine && x.TaskState == TaskState.Effect &&
|
||||||
|
x.IsAnalysisCreate == inDto.IsAnalysisCreate
|
||||||
|
&& x.DoctorUserId == inDto.DoctorUserId
|
||||||
|
&& x.IsSelfAnalysis == inDto.IsSelfAnalysis && x.ArmEnum == inDto.ArmEnum)
|
||||||
|
.Select(x => x.Id).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
var baseLineSPD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SPD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
|
||||||
|
var presentSPD = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SPD).Select(x => x.Answer).FirstIsNullReturnEmpty().IsNullOrEmptyReturn0();
|
||||||
|
|
||||||
|
if (baseLineSPD > 0)
|
||||||
|
{
|
||||||
|
eqPR = (presentSPD - baseLineSPD) / baseLineSPD > 0.5m && !tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.Equals(TargetState.DiseaseProgression));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//基线未选择靶病灶
|
//基线未选择靶病灶
|
||||||
|
@ -1521,9 +1563,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
}
|
}
|
||||||
// 1、与基线相比SPD变化的百分比 ≥50%,;
|
// 1、与基线相比SPD变化的百分比 ≥50%,;
|
||||||
// 并且 当前访视没有任何一个状态为“疾病进展”的靶病灶
|
// 并且 当前访视没有任何一个状态为“疾病进展”的靶病灶
|
||||||
else if (eqCR)
|
else if (eqPR)
|
||||||
{
|
{
|
||||||
result = TargetAssessment.CR;
|
result = TargetAssessment.PR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1541,51 +1583,42 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
public async Task<string> GetNoTargetLesionEvaluate(ReadingCalculateDto inDto)
|
public async Task<string> GetNoTargetLesionEvaluate(ReadingCalculateDto inDto)
|
||||||
{
|
{
|
||||||
|
|
||||||
NoTargetAssessment result = NoTargetAssessment.NN;
|
NoTargetAssessment result = NoTargetAssessment.PD;
|
||||||
|
|
||||||
if (inDto.IsBaseLine)
|
//if (inDto.IsBaseLine)
|
||||||
{
|
//{
|
||||||
return NoTargetAssessment.NA.GetEnumInt();
|
// return NoTargetAssessment.NA.GetEnumInt();
|
||||||
}
|
//}
|
||||||
|
|
||||||
var tableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NonTargetLesions).SelectMany(x => x.TableRowInfoList).ToList();
|
var tableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NonTargetLesions).SelectMany(x => x.TableRowInfoList).ToList();
|
||||||
|
|
||||||
var tableQuestions = tableRows.SelectMany(x => x.TableQuestionList).ToList();
|
var tableQuestions = tableRows.SelectMany(x => x.TableQuestionList).ToList();
|
||||||
|
|
||||||
//任意单个病灶 / 病灶组评估为“显著增大”
|
//基线未选择非靶病灶
|
||||||
if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Increase)))
|
if (tableQuestions.Count() == 0)
|
||||||
|
{
|
||||||
|
result = NoTargetAssessment.ND;
|
||||||
|
}
|
||||||
|
// 随访至少存在一个状态为“显著增大”的非靶病灶
|
||||||
|
else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Increase)))
|
||||||
{
|
{
|
||||||
result = NoTargetAssessment.PD;
|
result = NoTargetAssessment.PD;
|
||||||
}
|
}
|
||||||
// 任意单个病灶/病灶组评估为“无法评估”并且没有“显著增大”
|
// 1、随访没有任何一个状态为“显著增大”的非靶病灶;
|
||||||
else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.UnableEvaluate)) &&
|
// 2、随访存在至少一个状态为“不可评估”的非靶病灶
|
||||||
!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Increase))
|
else if (!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Increase))
|
||||||
)
|
&& tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.UnableEvaluate)))
|
||||||
{
|
{
|
||||||
result = NoTargetAssessment.NE;
|
result = NoTargetAssessment.NE;
|
||||||
}
|
}
|
||||||
// 所有单个病灶/病灶组评估为”存在”或者有些评估为“消失”有些评估为“存在”,且没有“显著增大”和“无法评估”的病灶
|
|
||||||
else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Exist))
|
|
||||||
&& !tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && (x.Answer.EqEnum(NoTargetState.Increase) || x.Answer.EqEnum(NoTargetState.UnableEvaluate)))
|
|
||||||
|
|
||||||
)
|
|
||||||
{
|
|
||||||
result = NoTargetAssessment.NN;
|
|
||||||
}
|
|
||||||
//所有单个病灶/病灶组状态评估状态为“消失”
|
//所有单个病灶/病灶组状态评估状态为“消失”
|
||||||
else if (tableQuestions.Count(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Loss))== tableQuestions.Count(x=> x.QuestionMark == QuestionMark.State) && tableQuestions.Count(x => x.QuestionMark == QuestionMark.State)>0)
|
else if (tableQuestions.Count(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Loss))== tableQuestions.Count(x=> x.QuestionMark == QuestionMark.State) && tableQuestions.Count(x => x.QuestionMark == QuestionMark.State)>0)
|
||||||
{
|
{
|
||||||
result = NoTargetAssessment.CR;
|
result = NoTargetAssessment.CR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 基线时没有非靶病灶
|
|
||||||
else if (tableQuestions.Count() == 0)
|
|
||||||
{
|
|
||||||
result = NoTargetAssessment.ND;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return string.Empty;
|
result = NoTargetAssessment.PRSD;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result.GetEnumInt();
|
return result.GetEnumInt();
|
||||||
|
@ -1604,10 +1637,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
{
|
{
|
||||||
|
|
||||||
NewLesionAssessment result = NewLesionAssessment.No;
|
NewLesionAssessment result = NewLesionAssessment.No;
|
||||||
if (inDto.IsBaseLine)
|
//if (inDto.IsBaseLine)
|
||||||
{
|
//{
|
||||||
return NewLesionAssessment.NA.GetEnumInt();
|
// return NewLesionAssessment.NA.GetEnumInt();
|
||||||
}
|
//}
|
||||||
|
|
||||||
var tableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewLesions).SelectMany(x => x.TableRowInfoList).ToList();
|
var tableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewLesions).SelectMany(x => x.TableRowInfoList).ToList();
|
||||||
|
|
||||||
|
|
|
@ -944,6 +944,11 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
iUPD = 7,
|
iUPD = 7,
|
||||||
iCPD = 8,
|
iCPD = 8,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// PR/SD
|
||||||
|
/// </summary>
|
||||||
|
PRSD = 9,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1760,7 +1765,65 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
/// </summary>
|
/// </summary>
|
||||||
NewLesionEvaluation = 30,
|
NewLesionEvaluation = 30,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 垂直径乘积之和(SPD)
|
||||||
|
/// </summary>
|
||||||
|
SPD = 31,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 与基线相比SPD变化的百分比
|
||||||
|
/// </summary>
|
||||||
|
SPDChange = 32,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 与基线相比脾肿大增加的百分比
|
||||||
|
/// </summary>
|
||||||
|
SplenoncusChange = 33,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 与最低点相比脾脏垂直径长度的增加值
|
||||||
|
/// </summary>
|
||||||
|
SplenoncusAdd = 34,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 与基线相比脾垂直径变化值
|
||||||
|
/// </summary>
|
||||||
|
SplenoncusDiameterChange = 35,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 脾肿垂直径最低点访视
|
||||||
|
/// </summary>
|
||||||
|
LowestSplenoncusVisit = 36,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 肝脏评估
|
||||||
|
/// </summary>
|
||||||
|
LiverAssessment = 37,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 脾脏评估
|
||||||
|
/// </summary>
|
||||||
|
SplenicEvaluation = 38,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// CT/MRI总体评估
|
||||||
|
/// </summary>
|
||||||
|
CTandMRI = 39,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 前次FDG-PET总体评估
|
||||||
|
/// </summary>
|
||||||
|
LastFDGPET = 40,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// FDG-PET总体评估
|
||||||
|
/// </summary>
|
||||||
|
FDGPET = 41,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 影像学整体肿瘤评估
|
||||||
|
/// </summary>
|
||||||
|
ImgOncology = 42,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否脑转移
|
/// 是否脑转移
|
||||||
|
|
Loading…
Reference in New Issue