diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 17ca78f84..e6aec8b8e 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -7593,6 +7593,11 @@ 上一次任务的新病灶评估为iUPD + + + 上一次任务的新病灶评估为iCPD + + IRECIST整体肿瘤评估 diff --git a/IRaCIS.Core.Application/Resources/en-US.json b/IRaCIS.Core.Application/Resources/en-US.json index a6b8a6b93..fdae2eea6 100644 --- a/IRaCIS.Core.Application/Resources/en-US.json +++ b/IRaCIS.Core.Application/Resources/en-US.json @@ -18,6 +18,25 @@ "UploadDownLoad_RequestError": "Request error.", "UploadDownLoad_SupportedFormats": "Supports upload of .xlsx, .xls, and .csv formats.", + // ------------------------------------------------------------_MediatR-------------------------------------------------------------------- + //ConsistencyVerificationRequest + "ConsistencyVerification_Tech": "Check technique", + "ConsistencyVerification_Time": "Incorrect time format", + //ConsistencyVerificationHandler + "ConsistencyVerification_Img": "Hello, according to the automatic recognition of this system, the imaging inspection submitted by the subject in the current visit in the IRC system is as follows:", + "ConsistencyVerification_Of": "Of", + "ConsistencyVerification_ImgC": "Imaging inspection", + "ConsistencyVerification_EDCA": "Check EDC data, completely consistent, approved", + "ConsistencyVerification_EDCB": "Check EDC data, completely consistent", + "ConsistencyVerification_Auto": "Automatically verified pass", + "ConsistencyVerification_Prob": "The following problems exist:", + "ConsistencyVerification_EdcL": "Imaging inspection (EDC missing)", + "ConsistencyVerification_IrcL": "Imaging inspection (IRC missing)", + "ConsistencyVerification_Desc": "Description: In order to efficiently solve/handle all the above doubts, please verify the actual imaging inspection accurately. Please note that the imaging date may not be consistent with the actual inspection date, and multiple modalities of imaging inspections (such as PET-CT) may exist at the same time. After accurate verification, please reply with the correct imaging inspection for this visit.", + "ConsistencyVerification_Conf": "According to the imported consistency check data, please confirm the following inconsistent inspection item information of this visit:", + "ConsistencyVerification_Edc": "EDC missing:", + "ConsistencyVerification_IrcLi": "IRC missing:", + //-------------------------------------------------------------------------------------Reading----------------------------------------------------------------- //ClinicalDataSetService "ClinicalDataSet_DupTypeFail": "There are duplicate clinical data of the same type. The operation failed.", diff --git a/IRaCIS.Core.Application/Resources/zh-CN.json b/IRaCIS.Core.Application/Resources/zh-CN.json index ea777ab64..0494bfc44 100644 --- a/IRaCIS.Core.Application/Resources/zh-CN.json +++ b/IRaCIS.Core.Application/Resources/zh-CN.json @@ -18,6 +18,25 @@ "UploadDownLoad_RequestError": "请求异常,请重试!", "UploadDownLoad_SupportedFormats": "支持.xlsx、.xls、.csv格式的文件上传。", + // ------------------------------------------------------------_MediatR-------------------------------------------------------------------- + //ConsistencyVerificationRequest + "ConsistencyVerification_Tech": "检查技术", + "ConsistencyVerification_Time": "时间格式不对", + //ConsistencyVerificationHandler + "ConsistencyVerification_Img": "您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下:", + "ConsistencyVerification_Of": "的", + "ConsistencyVerification_ImgC": "影像检查", + "ConsistencyVerification_EDCA": "核对EDC数据,完全一致, 审核通过", + "ConsistencyVerification_EDCB": "核对EDC数据,完全一致", + "ConsistencyVerification_Auto": "自动核查通过", + "ConsistencyVerification_Prob": "存在问题如下:", + "ConsistencyVerification_EdcL": "影像检查(EDC 缺少)", + "ConsistencyVerification_IrcL": "影像检查(IRC 缺少)", + "ConsistencyVerification_Desc": "说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。", + "ConsistencyVerification_Conf": "根据导入的一致性核查数据,请确认本访视以下不一致检查项信息:", + "ConsistencyVerification_Edc": "EDC 缺少:", + "ConsistencyVerification_IrcLi": "IRC 缺少:", + // ------------------------------------------------------------Reading-------------------------------------------------------------------- //ClinicalDataSetService "ClinicalDataSet_DupTypeFail": "存在同类型的临床数据,操作失败", diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/OrganInfoService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/OrganInfoService.cs index 849b16010..48bb3097b 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/OrganInfoService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/OrganInfoService.cs @@ -466,6 +466,19 @@ namespace IRaCIS.Core.Application.Service TrialCriterionId= readingQuestionCriterionTrial.Id, OrganInfoId = x.Id, TrialId = readingQuestionCriterionTrial.TrialId, + TULAT=x.TULAT, + Classification=x.Classification, + ClassificationEN=x.ClassificationEN, + IsCanEditPosition=x.IsCanEditPosition, + Part=x.Part, + IsLymphNodes=x.IsLymphNodes, + PartEN=x.PartEN, + ShowOrder=x.ShowOrder, + TULATEN=x.TULATEN, + TULOC=x.TULOC, + TULOCEN=x.TULOCEN, + OrganType=x.OrganType, + }).ToListAsync(); organTrialInfoList.ForEach(x => x.Id = NewId.NextGuid()); diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs index ddb33a8a0..281558e0a 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs @@ -276,6 +276,11 @@ namespace IRaCIS.Core.Application.ViewModel /// 上一次任务的新病灶评估为iUPD /// public bool LastTaskNewLesioniUPD { get; set; } + + /// + /// 上一次任务的新病灶评估为iCPD + /// + public bool LastTaskNewLesioniCPD { get; set; } } /// diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs index 6647a84aa..6e0278ddb 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs @@ -1319,7 +1319,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var value = await GetSODData(inDto); - if (value == null || inDto.IsBaseLine) + if (value == null || inDto.IsBaseLine || !inDto.IsConvertedTask||inDto.BeforeConvertedTaskId!=null) { return null; } @@ -1336,6 +1336,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetiSODData(ReadingCalculateDto inDto) { + if (!inDto.IsConvertedTask || inDto.BeforeConvertedTaskId != null) + { + return null; + } + if (iSODData != null) { return iSODData.Value; @@ -1389,7 +1394,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var value = await GetiSODData(inDto); - if (value == null || inDto.IsBaseLine) + if (value == null || inDto.IsBaseLine || !inDto.IsConvertedTask || inDto.BeforeConvertedTaskId != null) { return null; } @@ -2343,6 +2348,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { //上一次任务的新病灶评估为iUPD LastTaskNewLesioniUPD = lastTaskCalculateDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.iUPD)), + + //上一次任务的新病灶评估为iCPD + LastTaskNewLesioniCPD = lastTaskCalculateDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.iCPD)), }; // if(新靶病灶为ND&&新非靶病灶为ND&&其它既往新病灶为ND&&不存在触发iRECIST后新病灶) @@ -2362,7 +2370,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate result = NewLesionAssessment.iCPD; } // else if (前一访视新病灶评估为iCPD && (新靶病灶有存在病灶 || 新非靶病灶有存在状态病灶 || 其它既往新病灶有存在的病灶 || 触发iRECIST后新病灶有存在病灶)) - else if(data.LastTaskNewLesioniUPD&& + else if(data.LastTaskNewLesioniCPD && (inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewTargetLesion).SelectMany(x => x.TableRowInfoList).Count() > 0 || inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewNonTargetLesion).SelectMany(x => x.TableRowInfoList).Count() > 0 || inDto.QuestionInfo.Where(x => x.LesionType == LesionType.OtherPreviousNewLesion).SelectMany(x => x.TableRowInfoList).Count() > 0 @@ -2375,7 +2383,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } // else if (前一访视新病灶评估为iUPD && 新靶病灶上个访视评估为NE,本次访视评估为iUPD) else if(data.LastTaskNewLesioniUPD && - lastTaskCalculateDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + lastTaskCalculateDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewTargetLesionAssessment.NE)) && inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewTargetLesionAssessment.iUPD)) ) { @@ -2589,7 +2597,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate if (data.LastTaskLesioniUPDOriCPD && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.iCPD)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iCPD)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.iCPD)))) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.iCPD)))) { // 疗效为 iCPD result = OverallAssessment.iCPD; @@ -2621,7 +2629,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // else if (靶病灶评估为iUPD || 非靶病灶评估为iUPD || 新病灶评估为iUPD) else if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.iUPD)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iUPD)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.iUPD))) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.iUPD))) { // 疗效为 iUPD result = OverallAssessment.iUPD; @@ -2630,7 +2638,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate else if ( (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.iCR)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iCR))) - && inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.ND)) + && inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.ND)) ) { // 疗效为 iCR @@ -2642,9 +2650,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iNN)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.NE)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.ND)) - ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.ND)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.Suspected)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.ND)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.Suspected)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.NE)) )) { // 疗效为 iPR @@ -2655,9 +2663,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iNN)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.NE)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.ND)) - ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.No)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.Suspected)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.No)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.Suspected)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.NE)) )) { // 疗效为 iPR @@ -2667,8 +2675,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate else if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.iPR)) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iCR)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.ND)) - ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.Suspected)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.Suspected)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.NE)) )) { // 疗效为 iPR @@ -2677,8 +2685,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // else if (靶病灶评估为ND && 非靶病灶评估为iCR && 新病灶评估为疑似或NE) else if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.ND)) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iCR)) - ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.Suspected)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.Suspected)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.NE)) )) { // 疗效为 iPR @@ -2690,8 +2698,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iNN)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.NE)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.ND)) - ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.Suspected)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.Suspected)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.NE)) )) { // 疗效为 iSD @@ -2700,9 +2708,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // else if (靶病灶评估为ND && 非靶病灶评估为iNN && 新病灶评估为ND或疑似或NE) else if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.ND)) && inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iNN)) - && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.ND)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.Suspected)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.ND)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.Suspected)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.NE)) )) { // 疗效为 iNN @@ -2711,8 +2719,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为ND或疑似) else if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.ND)) && inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.ND)) - && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.ND)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.Suspected)) + && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.ND)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.Suspected)) )) { // 疗效为 ND @@ -2724,9 +2732,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.iNN)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.NE)) || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.ND)) - ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.ND)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.Suspected)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.ND)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.Suspected)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.NE)) )) { // 疗效为 NE @@ -2736,9 +2744,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate else if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.ND)) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.NE)) - ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.No)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.Suspected)) - || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + ) && (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.No)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.Suspected)) + || inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.NE)) )) { // 疗效为 NE @@ -2747,7 +2755,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // else if (靶病灶评估为ND && 非靶病灶评估为ND && 新病灶评估为NE) else if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.TargetLesion && x.Answer.EqEnum(TargetAssessment.ND)) && inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NoTargetLesion && x.Answer.EqEnum(NoTargetAssessment.ND)) - && inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewTargetLesion && x.Answer.EqEnum(NewLesionAssessment.NE)) + && inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.NewLesionEvaluation && x.Answer.EqEnum(NewLesionAssessment.NE)) ) { diff --git a/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs b/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs index 9e17b0f90..4fbf71672 100644 --- a/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs +++ b/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs @@ -1,4 +1,5 @@ -using Magicodes.ExporterAndImporter.Core; +using IRaCIS.Core.Domain.Share; +using Magicodes.ExporterAndImporter.Core; using Magicodes.ExporterAndImporter.Core.Filters; using Magicodes.ExporterAndImporter.Core.Models; using Magicodes.ExporterAndImporter.Excel; @@ -44,7 +45,8 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries var index= data.IndexOf(item); if ( DateTime.TryParse(item.StudyDate, out dt) == false) { - importResult.RowErrors.Add(new DataRowErrorInfo() { RowIndex = index, FieldErrors = new Dictionary { { "检查技术", "时间格式不对" } } }); + + importResult.RowErrors.Add(new DataRowErrorInfo() { RowIndex = index, FieldErrors = new Dictionary { { StaticData.International("ConsistencyVerification_Tech") , StaticData.International("ConsistencyVerification_Time") } } }); } } } diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index 927ecf907..46b8e1861 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -112,13 +112,14 @@ namespace IRaCIS.Core.Application.MediatR.Handlers StringBuilder dialogMsg = new StringBuilder(); - dialogMsg.Append("您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下:"); + //---您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下: + dialogMsg.Append(StaticData.International("ConsistencyVerification_Img")); var num = 0; List paramInfoList = new List(); foreach (var item in dbVisitStudyList) { num++; - dialogMsg.AppendLine($"
{num}.{item.StudyDate}的{item.Modality}影像检查"); + dialogMsg.AppendLine($"
{num}.{item.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{item.Modality}{StaticData.International("ConsistencyVerification_ImgC")}"); paramInfoList.Add(new ParamInfoDto() { Modality = item.Modality, @@ -175,15 +176,18 @@ namespace IRaCIS.Core.Application.MediatR.Handlers if (dbExceptExcel.Count() == 0 && excelExceptDB.Count() == 0) { dialogMsg.AppendLine($"
"); - dialogMsg.AppendLine($"核对EDC数据,完全一致, 审核通过"); + //---核对EDC数据,完全一致, 审核通过 + dialogMsg.AppendLine(StaticData.International("ConsistencyVerification_EDCA")); // dialogMsg.AppendLine(@$"
说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。"); dbSV.CheckState = CheckStateEnum.CVPassed; dbSV.CheckUserId = _userInfo.Id; dbSV.CheckPassedTime = DateTime.Now; - dbSV.CheckResult = "核对EDC数据,完全一致"; - dbSV.ManualPassReason = "自动核查通过"; + //---核对EDC数据,完全一致 + dbSV.CheckResult = StaticData.International("ConsistencyVerification_EDCB"); + //---自动核查通过 + dbSV.ManualPassReason = StaticData.International("ConsistencyVerification_Auto"); //维护状态 dbSV.ReadingStatus = ReadingStatusEnum.TaskAllocate; @@ -202,26 +206,30 @@ namespace IRaCIS.Core.Application.MediatR.Handlers else { dialogMsg.AppendLine($"
"); - dialogMsg.AppendLine($"
存在问题如下:"); + //存在问题如下: + dialogMsg.AppendLine($"
{StaticData.International("ConsistencyVerification_Prob")}"); num = 0; foreach (var item in dbExceptExcel) { num++; - dialogMsg.AppendLine($"
{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) "); + //影像检查(EDC 缺少) ConsistencyVerification_EdcL + dialogMsg.AppendLine($"
{num}.{item.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{item.Modality}{StaticData.International("ConsistencyVerification_EdcL")} "); } foreach (var item in excelExceptDB) { num++; - dialogMsg.AppendLine($"
{num}.{item.StudyDate}的{item.Modality}影像检查(IRC 缺少) "); + // 影像检查(IRC 缺少) + dialogMsg.AppendLine($"
{num}.{item.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{item.Modality}{StaticData.International("ConsistencyVerification_IrcL")} "); } dialogMsg.AppendLine($"
"); - dialogMsg.AppendLine(@$"
说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。"); + dialogMsg.AppendLine(@$"
{StaticData.International("ConsistencyVerification_Desc")}"); - dbSV.CheckResult = "根据导入的一致性核查数据,请确认本访视以下不一致检查项信息:" + String.Join(" | ", dbExceptExcel.Select(t => $"EDC 缺少:{t.StudyDate} {t.Modality} ")) + " | " - + String.Join(" | ", excelExceptDB.Select(t => $"IRC 缺少:{t.StudyDate} {t.Modality}")); + //---根据导入的一致性核查数据,请确认本访视以下不一致检查项信息: + dbSV.CheckResult = StaticData.International("ConsistencyVerification_Conf") + String.Join(" | ", dbExceptExcel.Select(t => $"{StaticData.International("ConsistencyVerification_Edc")}{t.StudyDate} {t.Modality} ")) + " | " + + String.Join(" | ", excelExceptDB.Select(t => $"{StaticData.International("ConsistencyVerification_IrcLi")}{t.StudyDate} {t.Modality}")); //新增一致性核查质疑记录 diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterion/OrganInfo.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterion/OrganInfo.cs index 5072b012d..9f5a469b3 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterion/OrganInfo.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterion/OrganInfo.cs @@ -30,33 +30,33 @@ namespace IRaCIS.Core.Domain.Models /// /// 部位 /// - public string Part { get; set; } + public string Part { get; set; } = string.Empty; - /// - /// 部位 英文 - /// - public string PartEN { get; set; } = string.Empty; + /// + /// 部位 英文 + /// + public string PartEN { get; set; } = string.Empty; /// /// TULOC 器官 /// - public string TULOC { get; set; } + public string TULOC { get; set; } = string.Empty; - /// - /// TULOC 器官 英文 - /// - public string TULOCEN { get; set; } = string.Empty; + /// + /// TULOC 器官 英文 + /// + public string TULOCEN { get; set; } = string.Empty; /// /// 位置 /// - public string TULAT { get; set; } + public string TULAT { get; set; } = string.Empty; - /// - /// 位置 英文 - /// - public string TULATEN { get; set; } = string.Empty; + /// + /// 位置 英文 + /// + public string TULATEN { get; set; } = string.Empty; /// /// 备注 diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterion/OrganTrialInfo.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterion/OrganTrialInfo.cs index dfed36cf9..c30c673b5 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterion/OrganTrialInfo.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterion/OrganTrialInfo.cs @@ -49,7 +49,68 @@ namespace IRaCIS.Core.Domain.Models /// public Guid TrialCriterionId { get; set; } - [JsonIgnore] + /// + /// 部位 + /// + public string Part { get; set; } = string.Empty; + + /// + /// 部位 英文 + /// + public string PartEN { get; set; } = string.Empty; + + /// + /// TULOC 器官 + /// + public string TULOC { get; set; } = string.Empty; + + /// + /// TULOC 器官 英文 + /// + public string TULOCEN { get; set; } = string.Empty; + + /// + /// 位置 + /// + public string TULAT { get; set; } = string.Empty; + + + /// + /// 位置 英文 + /// + public string TULATEN { get; set; } = string.Empty; + + /// + /// 是否是淋巴结 + /// + public IsLymph IsLymphNodes { get; set; } + + /// + /// 是否可编辑位置 + /// + public bool IsCanEditPosition { get; set; } + + /// + /// 分类 + /// + public string Classification { get; set; } = string.Empty; + + /// + /// 分类 英文 + /// + public string ClassificationEN { get; set; } = string.Empty; + + /// + /// 序号 + /// + public int ShowOrder { get; set; } = 0; + + /// + /// 器官类型 + /// + public OrganType? OrganType { get; set; } + + [JsonIgnore] [ForeignKey("OrganInfoId")] public OrganInfo OrganInfo { get; set; } diff --git a/IRaCIS.Core.Domain/SQLFile/Test.sql b/IRaCIS.Core.Domain/SQLFile/Test.sql index 0ca488c03..cda90f2e8 100644 --- a/IRaCIS.Core.Domain/SQLFile/Test.sql +++ b/IRaCIS.Core.Domain/SQLFile/Test.sql @@ -1038,4 +1038,23 @@ go update ClinicalDataTrialSet set ClinicalDataTrialSet.ClinicalDataSetEnName=clinicalDataSystemSet.ClinicalDataSetEnName from clinicalDataSystemSet -inner join ClinicalDataTrialSet on ClinicalDataTrialSet.SystemClinicalDataSetId=clinicalDataSystemSet.Id \ No newline at end of file +inner join ClinicalDataTrialSet on ClinicalDataTrialSet.SystemClinicalDataSetId=clinicalDataSystemSet.Id + + + +---------------维护项目器官表 将器官信息在项目表里面存冗余 +update OrganTrialInfo set +OrganTrialInfo.PartEN=OrganInfo.PartEN , +OrganTrialInfo.Part=OrganInfo.Part, +OrganTrialInfo.TULOC=OrganInfo.TULOC, +OrganTrialInfo.TULOCEN=OrganInfo.TULOCEN, +OrganTrialInfo.TULAT=OrganInfo.TULAT, +OrganTrialInfo.TULATEN=OrganInfo.TULATEN, +OrganTrialInfo.IsLymphNodes=OrganInfo.IsLymphNodes, +OrganTrialInfo.IsCanEditPosition=OrganInfo.IsCanEditPosition, +OrganTrialInfo.Classification=OrganInfo.Classification, +OrganTrialInfo.ClassificationEN=OrganInfo.ClassificationEN, +OrganTrialInfo.ShowOrder=OrganInfo.ShowOrder, +OrganTrialInfo.OrganType=OrganInfo.OrganType +from OrganInfo inner join OrganTrialInfo +on OrganInfo.Id=OrganTrialInfo.OrganInfoId where OrganTrialInfo.OrganType is null \ No newline at end of file diff --git a/后端提示语.xlsx b/后端提示语.xlsx index 6b08f7854..d0a608f09 100644 Binary files a/后端提示语.xlsx and b/后端提示语.xlsx differ