修改lugano rs导表肿瘤学

Test_IRC_Net8
hang 2025-12-02 15:35:13 +08:00
parent 53b2b9156f
commit 5d33bd03a7
4 changed files with 123 additions and 21 deletions

View File

@ -121,7 +121,23 @@ public class TumorExportBaseModel : TU_TR_RSBaseModel
public string VisitNote { get; set; } public string VisitNote { get; set; }
#endregion #endregion
#region 肿瘤学结果
public List<OncologyExportInfo> OncologyResultList { get; set; }
//public string OncologyUserName { get; set; }
#endregion
}
public class OncologyExportInfo
{
public decimal? VisitTaskNum { get; set; }
public string VisitName { get; set; }
public string OncologyResult { get; set; } = string.Empty;
public string OncologyReason { get; set; } = string.Empty;
} }

View File

@ -240,7 +240,7 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
var query = _visitTaskRepository.Where(t => t.TrialId == inQuery.TrialId && t.IsAnalysisCreate == false && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)) var query = _visitTaskRepository.Where(t => t.TrialId == inQuery.TrialId && t.IsAnalysisCreate == false && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze))
//访视和全局查询已签名完成的,裁判可以是未签名,未完成的 //访视和全局查询已签名完成的,裁判可以是未签名,未完成的
.Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global)) || t.ReadingCategory == ReadingCategory.Judge) .Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global || t.ReadingCategory == ReadingCategory.Oncology)) || t.ReadingCategory == ReadingCategory.Judge)
.WhereIf(inQuery.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) .WhereIf(inQuery.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
.WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId) .WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId)
@ -335,7 +335,18 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
}).ToList(), }).ToList(),
}).ToList() }).ToList(),
OncologyResultList = t.ReadingCategory == ReadingCategory.Oncology ? t.OncologyResultList.Select(t => new OncologyExportInfo()
{
VisitName = t.VisitTask.TaskName,
VisitTaskNum = t.VisitTask.VisitTaskNum,
OncologyReason = t.EvaluationReason,
OncologyResult = t.EvaluationResult
}).ToList() : new List<OncologyExportInfo>()
}); });
@ -386,7 +397,7 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
var dicNameList = taskList.SelectMany(t => t.QuestionAnswerList).Select(t => t.TranslateDicName) var dicNameList = taskList.SelectMany(t => t.QuestionAnswerList).Select(t => t.TranslateDicName)
.Union(taskList.SelectMany(t => t.LesionList).SelectMany(t => t.LessionAnswerList).Where(t => t.TranslateDicName.IsNotNullOrEmpty()).Select(c => c.TranslateDicName)) .Union(taskList.SelectMany(t => t.LesionList).SelectMany(t => t.LessionAnswerList).Where(t => t.TranslateDicName.IsNotNullOrEmpty()).Select(c => c.TranslateDicName))
.Union(new List<string>() { "ArmEnum", "ValueUnit", "GlobalAssessType", "ImageQualityIssues" }) .Union(new List<string>() { "ArmEnum", "ValueUnit", "GlobalAssessType", "ImageQualityIssues", "OncologyAssessType" })
.Distinct().ToArray(); .Distinct().ToArray();
var trialOrganDic = _trialOrganRepository.Where(t => t.TrialCriterionId == criterion.Id).Select(t => new { t.OrganInfoId, t.Part, t.PartEN }).ToDictionary( var trialOrganDic = _trialOrganRepository.Where(t => t.TrialCriterionId == criterion.Id).Select(t => new { t.OrganInfoId, t.Part, t.PartEN }).ToDictionary(
@ -484,6 +495,78 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
} }
continue;
}
//lungano 单独处理
if (task.ReadingCategory == ReadingCategory.Oncology)
{
//取最后一次肿瘤学结果
if (task.VisitTaskId !=
taskList.Where(t => t.SubjectCode == task.SubjectCode && t.ReadingCategory == ReadingCategory.Oncology)
.OrderByDescending(c => c.VisitTaskNum).First().VisitTaskId)
{
continue;
}
foreach (var OncologyResult in task.OncologyResultList)
{
if (OncologyResult.OncologyReason.IsNotNullOrEmpty())
{
var co = CreatNewCOExport(task, coList.Count + 1);
co.RemarksQuote = $"{OncologyResult?.VisitName}_ONCOLOGY_COMMENTS";
co.VisitNum = OncologyResult?.VisitTaskNum;
co.VisitName = OncologyResult?.VisitName;
co.Remarks = OncologyResult.OncologyReason;
co.CODTC = task.SignTime?.ToString("yyyy-MM-dd");
coList.Add(co);
}
if (OncologyResult.OncologyResult.IsNotNullOrEmpty())
{
var visitTask = taskList.Where(t => t.VisitNum == OncologyResult?.VisitTaskNum && t.SubjectCode==task.SubjectCode).FirstOrDefault();
var rs = CreatNewRSExport(task, rs_subjectIndexNoDic);
rs.ARM_VisitName = $"{task.ArmEnumStr}_{OncologyResult?.VisitName}";
rs.VisitNum = OncologyResult?.VisitTaskNum;
rs.VisitName = OncologyResult?.VisitName;
rs.LatestScanDate = visitTask?.LatestScanDate;
rs.EarliestScanDate = visitTask?.EarliestScanDate;
Fill_RS_IndexValue(rs, 9, Lugano_RSFixed.RSValueList);
rs.RespondEfficacyAssessment = translateDataList["OncologyAssessType"].Where(t => t.Code.ToLower() == OncologyResult.OncologyResult?.ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; ;
var findTask = reReadingList.FirstOrDefault(t => t.UserName == rs.UserName && t.ArmEnum == rs.ArmEnum && t.VisitTaskNum == rs.VisitNum);
if (findTask != null)
{
rs.ReAssessmentReason = findTask.RequestReReadingReason;
}
rsList.Add(rs);
}
}
continue; continue;
} }
@ -707,7 +790,7 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
if (rsValueTypeIndex != -1) if (rsValueTypeIndex != -1)
{ {
var rs = CreatNewRSExport(task, questionAnswer, rs_subjectIndexNoDic, translateDataList, isEn_Us); var rs = CreatNewRSExport(task, rs_subjectIndexNoDic);
Fill_RS_IndexValue(rs, rsValueTypeIndex, rsValueList); Fill_RS_IndexValue(rs, rsValueTypeIndex, rsValueList);
@ -721,9 +804,9 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
rs.RespondEfficacyAssessment = questionAnswer.QuestionValue; rs.RespondEfficacyAssessment = questionAnswer.QuestionValue;
} }
if ((questionAnswer.QuestionType == QuestionType.Tumor && criterion.CriterionType == CriterionType.RECIST1Point1)|| if ((questionAnswer.QuestionType == QuestionType.Tumor && criterion.CriterionType == CriterionType.RECIST1Point1) ||
(questionAnswer.QuestionType == QuestionType.ImgOncology && criterion.CriterionType == CriterionType.Lugano2014)) (questionAnswer.QuestionType == QuestionType.ImgOncology && criterion.CriterionType == CriterionType.Lugano2014))
{ {
rs.AssessmentReason = task.VisitNote; rs.AssessmentReason = task.VisitNote;
@ -753,6 +836,8 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
rsList.Add(rs); rsList.Add(rs);
} }
} }
#endregion #endregion
@ -835,22 +920,17 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
} }
//if (task.IsTrigerJudge == true && task.IsJudgeSelect == true && task.JudgeNote.IsNotNullOrEmpty())
//{
// var co = CreatNewCOExport(task, coList.Count + 1);
// co.RemarksQuote = $"{co.VisitName}_ADJUDICATION_COMMENTS";
// co.Remarks = task.JudgeNote;
// co.CODTC = task.JudgeSignTime?.ToString("yyyy-MM-dd");
// coList.Add(co);
//}
#endregion #endregion
} }
#region 全局更新数据--rs 全局更新原因 #region 全局更新数据--rs 全局更新原因
//var globalList = taskList.Where(t => t.ReadingCategory == ReadingCategory.Global).GroupBy(t => new { t.SubjectCode, t.ArmEnum }).Select(g => g.OrderByDescending(t => t.VisitNum).FirstOrDefault()).ToList(); //var globalList = taskList.Where(t => t.ReadingCategory == ReadingCategory.Global).GroupBy(t => new { t.SubjectCode, t.ArmEnum }).Select(g => g.OrderByDescending(t => t.VisitNum).FirstOrDefault()).ToList();
//RS表 整体肿瘤评估了,其他病灶评估输出的也是最早的日期 //RS表 整体肿瘤评估了,其他病灶评估输出的也是最早的日期
@ -940,7 +1020,7 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
return co; return co;
} }
private RS_Export CreatNewRSExport(TumorExportBaseModel task, TumorCommonQustionInfo questionAnswer, Dictionary<string, int> subjectIndexNoDic, Dictionary<string, List<BasicDicSelectCopy>> translateDataList, bool isEn_Us) private RS_Export CreatNewRSExport(TumorExportBaseModel task, Dictionary<string, int> subjectIndexNoDic)
{ {
subjectIndexNoDic[task.SubjectCode]++; subjectIndexNoDic[task.SubjectCode]++;
@ -1309,9 +1389,6 @@ public class Tumor_CDISC_ExportService(IRepository<ReadingQuestionCriterionTrial
rsValueTypeIndex = 8; rsValueTypeIndex = 8;
break; break;
case QuestionType.Tumor:
rsValueTypeIndex = 9;
break;
} }

View File

@ -9,6 +9,12 @@ namespace IRaCIS.Core.Domain.Models;
public class VisitTask : BaseFullAuditEntity public class VisitTask : BaseFullAuditEntity
{ {
#region 导航属性 #region 导航属性
//针对肿瘤学任务的 导航属性,关联肿瘤学结果
[JsonIgnore]
public List<ReadingOncologyTaskInfo> OncologyResultList { get; set; }
[JsonIgnore] [JsonIgnore]
public List<ReadingNoneDicomMark> ReadingNoneDicomMarkList { get; set; } public List<ReadingNoneDicomMark> ReadingNoneDicomMarkList { get; set; }

View File

@ -26,6 +26,9 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
builder.HasMany(t => t.LesionList).WithOne(s => s.VisitTask).HasForeignKey(t => t.VisitTaskId); builder.HasMany(t => t.LesionList).WithOne(s => s.VisitTask).HasForeignKey(t => t.VisitTaskId);
//肿瘤学任务存在重阅
builder.HasMany(t => t.OncologyResultList).WithOne(s => s.OncologyVisitTask).HasForeignKey(t => t.OncologyTaskId);
} }
} }