代码提交
							parent
							
								
									8924b2ca7a
								
							
						
					
					
						commit
						35f5a362e3
					
				| 
						 | 
				
			
			@ -454,7 +454,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
            {
 | 
			
		||||
 | 
			
		||||
                //垂直径乘积之和(SPD)
 | 
			
		||||
				//new ReadingCalculateData (){QuestionType=QuestionType.sp,GetDecimalNullFun=GetSODData},
 | 
			
		||||
				new ReadingCalculateData (){QuestionType=QuestionType.SPD,GetDecimalFun=GetSPD},
 | 
			
		||||
 | 
			
		||||
				////靶病灶径线之和(SOD)
 | 
			
		||||
				//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.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},
 | 
			
		||||
| 
						 | 
				
			
			@ -1453,6 +1453,26 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
 | 
			
		||||
        #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 获取靶病灶评估
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 获取靶病灶评估
 | 
			
		||||
| 
						 | 
				
			
			@ -1466,9 +1486,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
            //{
 | 
			
		||||
            //    return TargetAssessment.NA.GetEnumInt();
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
            var tableQuestions = rowInfo.SelectMany(x => x.TableQuestionList).ToList();
 | 
			
		||||
 | 
			
		||||
            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));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                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)))
 | 
			
		||||
                {
 | 
			
		||||
                    // 当前访视淋巴结靶病灶的状态全部变为“消失”
 | 
			
		||||
                    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%,;
 | 
			
		||||
            // 并且 当前访视没有任何一个状态为“疾病进展”的靶病灶
 | 
			
		||||
            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)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            NoTargetAssessment result = NoTargetAssessment.NN;
 | 
			
		||||
            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();
 | 
			
		||||
 | 
			
		||||
            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;
 | 
			
		||||
            }
 | 
			
		||||
            // 任意单个病灶/病灶组评估为“无法评估”并且没有“显著增大”
 | 
			
		||||
            else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.UnableEvaluate)) &&
 | 
			
		||||
                !tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Increase))
 | 
			
		||||
                )
 | 
			
		||||
            // 1、随访没有任何一个状态为“显著增大”的非靶病灶;
 | 
			
		||||
            // 2、随访存在至少一个状态为“不可评估”的非靶病灶
 | 
			
		||||
            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;
 | 
			
		||||
            }
 | 
			
		||||
            // 所有单个病灶/病灶组评估为”存在”或者有些评估为“消失”有些评估为“存在”,且没有“显著增大”和“无法评估”的病灶
 | 
			
		||||
            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)
 | 
			
		||||
            {
 | 
			
		||||
                result = NoTargetAssessment.CR;
 | 
			
		||||
            }
 | 
			
		||||
           
 | 
			
		||||
            // 基线时没有非靶病灶
 | 
			
		||||
            else if (tableQuestions.Count() == 0)
 | 
			
		||||
            {
 | 
			
		||||
                result = NoTargetAssessment.ND;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return string.Empty;
 | 
			
		||||
                result = NoTargetAssessment.PRSD;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return result.GetEnumInt();
 | 
			
		||||
| 
						 | 
				
			
			@ -1604,10 +1637,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
        {
 | 
			
		||||
 | 
			
		||||
            NewLesionAssessment result = NewLesionAssessment.No;
 | 
			
		||||
            if (inDto.IsBaseLine)
 | 
			
		||||
            {
 | 
			
		||||
                return NewLesionAssessment.NA.GetEnumInt();
 | 
			
		||||
            }
 | 
			
		||||
            //if (inDto.IsBaseLine)
 | 
			
		||||
            //{
 | 
			
		||||
            //    return NewLesionAssessment.NA.GetEnumInt();
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            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,
 | 
			
		||||
        iCPD = 8,
 | 
			
		||||
 | 
			
		||||
       /// <summary>
 | 
			
		||||
       /// PR/SD
 | 
			
		||||
       /// </summary>
 | 
			
		||||
       PRSD = 9,
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -1760,7 +1765,65 @@ namespace IRaCIS.Core.Domain.Share
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        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>
 | 
			
		||||
        /// 是否脑转移
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue