From 01783f9a7f6bf7954e69da2036511ea0e60a7170 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 27 Nov 2025 17:31:56 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4ivus=E5=AF=BC=E8=A1=A8?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/Export/CDISCExportBaseModel.cs | 513 ++++++++++++++++++ .../{ => Export}/IVUS_OCTExportService.cs | 0 2 files changed, 513 insertions(+) create mode 100644 IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs rename IRaCIS.Core.Application/Service/Common/{ => Export}/IVUS_OCTExportService.cs (100%) diff --git a/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs b/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs new file mode 100644 index 000000000..0bf2ef489 --- /dev/null +++ b/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs @@ -0,0 +1,513 @@ +using IRaCIS.Core.Application.Contracts; +using IRaCIS.Core.Application.Helper; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Application.Service.Common; + +public class TumorCommonQustionInfo +{ + //问题标识,肿瘤评估用于区分是什么问题 + public QuestionType? QuestionType { get; set; } + + public Guid QuestionId { get; set; } + public string QuestionName { get; set; } + + public string QuestionValue { get; set; } + + public string TranslateDicName { get; set; } + + public ValueUnit? Unit { get; set; } + + public ValueOfType? ValueType { get; set; } +} + +public class TumorLessionInfo +{ + public Guid Id { get; set; } + + public Guid? OrganInfoId { get; set; } + //病灶编号 + public string LessionCode { get; set; } + + public LesionType? LessionType { get; set; } + + public Guid? SplitRowId { get; set; } + + public string? DicomModality { get; set; } + + public string? NoneDicomModality { get; set; } + + //病灶答案 + public List LessionAnswerList { get; set; } +} + +public class TumorLessionAnswerInfo +{ + public QuestionMark? QuestionMark { get; set; } + + //病灶Id + public Guid RowId { get; set; } + + //如果是4 就取CustomUnit 否则就是字典翻译 + [Comment("单位")] + public ValueUnit? Unit { get; set; } + + + public int ShowOrder { get; set; } + + public Guid TableQuesionId { get; set; } + + public string QuestionName { get; set; } + + public string QuestionValue { get; set; } + + public string TranslateDicName { get; set; } +} + +public class TumorGlobalQuestionAnserInfo +{ + [Comment("原任务ID")] + public Guid TaskId { get; set; } + + public GlobalAnswerType GlobalAnswerType { get; set; } + + [Comment("问题答案")] + public string Answer { get; set; } = string.Empty; +} + +public class TumorExportBaseModel : TU_TR_RSBaseModel +{ + public List LesionList { get; set; } = new List(); + + public List QuestionAnswerList { get; set; } + + public List GlobalResultList { get; set; } + + #region 后续处理额外添加字段 + + + + public DateTime? JudgeSignTime { get; set; } + + public Guid? SourceSubjectVisitId { get; set; } + + public List SubjectCriterionReadingPeriodVisitNumList { get; set; } + + public decimal VisitTaskNum { get; set; } + + public ReadingTaskState ReadingTaskState { get; set; } + + public ReadingCategory ReadingCategory { get; set; } + + //裁判结果选择的访视或者全局任务Id + public Arm? JudgeArmEnum { get; set; } + + + + + //在当前访视触发裁判,或者在截止日期小于等于当前访视的阅片期触发裁判 + [DictionaryTranslateAttribute("YesOrNoAudit")] + public bool? IsTrigerJudge { get; set; } + + //(如果是访视点裁判,则仅在所选阅片人对应访视 显示;如果是阅片期裁判,则在所选阅片人 阅片期内的所有访视 显示此原因) + public string JudgeNote { get; set; } = string.Empty; + + public string VisitNote { get; set; } + #endregion + + +} + + +public class TU_TR_RSBaseModel +{ + /// + /// 方案编号 STUDYID + /// + public string ResearchProgramNo { get; set; } + + + + /// + /// 域 DOMAIN TU TR RS + /// + public string Domain { get; set; } + + + /// + /// 取值类型 TUSPID TRSPID RSSPID + /// + public string ValueType { get; set; } + + + /// + /// 受试者编号 USUBJID 实际展示TrialSiteSubjectCode + /// + + public string SubjectCode { get; set; } + + + /// + /// 供应商 TUNAM (Extensive Imaging) + /// + public string Vendor { get; set; } = "Extensive Imaging"; + + + /// + /// 阅片人 TUEVAL TREVAL RSEVAL + /// + public string UserName { get; set; } + + /// + /// 阅片人标识 TUEVALID TREVALID RSEVALID + /// + public Arm ArmEnum { get; set; } + + /// + /// 访视编号 VISITNUM + /// + public decimal? VisitNum { get; set; } + + /// + /// 访视名称 VISIT + /// + public string? VisitName { get; set; } + + /// + /// 拍片日期 TUDTC TRDTC RSDTC + /// + public DateTime? LatestScanDate { get; set; } + + public DateTime? EarliestScanDate { get; set; } + + /// + /// eCRF标识 TUREFID TRREFID RSREFID + /// + public Guid VisitTaskId { get; set; } + + + #region 移动位置 + + /// + /// RSCAT 阅片标准 + /// + public string CriterionName { get; set; } + + /// + /// RSACPTFL 裁定标记 TUACPTFL + /// + //裁判选择标记 + //根据裁判的任务结果 设置访视任务的这个字段 该字段表示 裁判认同该任务的结果 + public bool? IsJudgeSelect { get; set; } + + #endregion + + public DateTime? SignTime { get; set; } + + public string TaskName { get; set; } + + #region 额外翻译字段 + + + + public string IsJudgeSelectStr => IsJudgeSelect == true ? "Y" : ""; + + public bool IsTargetPD { get; set; } = false; + + public bool IsOverallResponsePD { get; set; } = false; + + //TR表 靶病灶PD了,访视层级的都是最早拍片日期 RS表 整体肿瘤评估PD了,那么疗效评估的拍片日期都给最早的 + public bool IsPD => Domain == "TR" ? IsTargetPD : IsOverallResponsePD; + + public string ArmEnumStr { get; set; } + public string LatestScanDateStr + { + get + { + var date = IsPD ? EarliestScanDate : LatestScanDate; + return date?.ToString("yyyy-MM-dd") ?? ""; + } + } + public string TrialSiteSubjectCode => ResearchProgramNo + SubjectCode; + #endregion +} + + +public class TU_Export : TU_TR_RSBaseModel +{ + + ///// + ///// 取值类型 TUSPID + ///// + //public string TUValueType { get; set; } + + + /// + /// 序号 TUSEQ (同一个访视,所有阅片人选择病灶给个顺序号) + /// + public int No { get; set; } + + + + /// + /// 链接ID TULNKID (阅片人角色_病灶编号)不同访视可以重复 + /// + public string ARM_TumorNo { get; set; } + + /// + /// 肿瘤识别简称 TUTESTCD + /// + public string TumorIdentificationSimple { get; set; } + + /// + /// 肿瘤识别全称 TUTEST + /// + public string TumorIdentificationFullName { get; set; } + + /// + /// 肿瘤鉴定结果 TUORRES + /// + public string TumorIdentificationResult { get; set; } + + /// + /// 肿瘤识别结果类型 TUSTRESC + /// + public string TumorIdentificationResultType { get; set; } + + + /// + /// 部位 TULOC (对应病灶表的部位,需要国际化) + /// + public string BodyPart { get; set; } + + /// + /// 鉴定方法 TUMETHOD (Modality?) + /// + public string IdentificationMethod { get; set; } + + + + ///// + ///// 裁定标记 TUACPTFL + ///// + //public bool? IsJudgeSelect { get; set; } + + + + /// + /// 部位描述 LOCTEXT + /// + public string BodyPartDes { get; set; } + + +} + + +public class TR_Export : TU_TR_RSBaseModel +{ + + ///// + ///// 取值类型 TRSPID + ///// + //public string TRValueType { get; set; } + + + /// + /// 每个subject 按照顺序编号 TRSEQ + /// + public int TRSEQ { get; set; } + + + /// + ///TRGRPID 组ID 对应TU表肿瘤鉴定结果 TumorIdentificationResult + /// + public string TRGRPID { get; set; } + + /// + /// TRLNKID 链接ID 对应TU表的链接ID TumorNo(阅片人角色_病灶编号) + /// + public string ARM_TumorNo { get; set; } + + /// + ///TRLNKGRP 链接组 ARM-任务名(访视名) 对应RS的链接组 + /// + public string ARM_VisitName { get; set; } + + + /// + /// 肿瘤评估简称 TRTESTCD + /// + public string TumorAssessmentSimpleName { get; set; } + + /// + /// 肿瘤评估全称 TRTEST + /// + public string TumorAssessmentFullName { get; set; } + + + /// + /// 原始测量 TRORRES + /// + public string OriginalMeasurements { get; set; } + + /// + /// 原始单位 TRORRESU + /// + public string OriginalUnit { get; set; } + + /// + /// 标准结果(字符) TRSTRESC + /// + public string StandardResult_Character => OriginalMeasurements; + + /// + /// 标准结果(数值) TRORRESU + /// + public string StandardResult_Numeric => double.TryParse(OriginalMeasurements, out _) || + (OriginalMeasurements?.EndsWith("%") == true && + double.TryParse(OriginalMeasurements.TrimEnd('%'), out _)) + ? OriginalMeasurements + : ""; + + /// + /// 标准单位 TRSTRESU + /// + public string StandardUnit => OriginalUnit; + + + /// + /// 完成状态 TRSTAT + /// + public string CompletionStatus { get; set; } + + + /// + /// 完成状态 TRMETHOD + /// + public string IdentificationMethod { get; set; } + + + /// + /// 无法测量原因 TRREASND + /// + public string NotMeasuredReason { get; set; } + + + +} + + +public class RS_Export : TU_TR_RSBaseModel +{ + /// + /// RSSEQ 按照subject 的数据顺序编号 + /// + public int RSSEQ { get; set; } + + /// + /// RSLNKGRP 链接组 ARM_任务名(访视名) + /// + public string ARM_VisitName { get; set; } + + /// + /// RSTESTCD 疗效评估简称 + /// + public string EfficacyEvaluationSimpleName { get; set; } + + /// + /// RSTEST 疗效评估全称 + /// + public string EfficacyEvaluationName { get; set; } + + /// + /// RSORRES 响应评估原始结果 + /// + public string RespondEfficacyAssessment { get; set; } + /// + /// RSSTRESC 标准疗效评估 + /// + public string StandardEfficacyAssessment => RespondEfficacyAssessment; + + /// + /// RSSTAT 完成状态 + /// + public string CompletionStatus { get; set; } + /// + /// RSREASND 无法评估原因 + /// + public string NotAssessmentReason { get; set; } + + + + ///// + ///// 裁定标记 RSACPTFL + ///// + //public bool? IsJudgeSelect { get; set; } + + /// + /// REASASM 评估原因 + /// + public string AssessmentReason { get; set; } + /// + /// REASOVR 重新评估原因 + /// + public string ReAssessmentReason { get; set; } + + /// + /// REASUPD 更新评估原因 + /// + public string UpdateAssessmentReason { get; set; } + + + [JsonIgnore] + public bool? IsOveralResponse { get; set; } + +} + + +public class CO_Export : TU_TR_RSBaseModel +{ + /// + /// 关联域 RS:(访视点备注) 空:裁判选择原因 + /// + public string RDOMAIN { get; set; } + + /// + /// COSEQ 序号 + /// + public int COSEQ { get; set; } + + /// + /// IDVAR 标识变量 RSSEQ 空:裁判选择原因 + /// + public string IdentificationVariable { get; set; } + + /// + /// 标识 IDVARVAL RSSEQ具体的值 空:裁判选择原因 + /// + public string Identification { get; set; } + + /// + /// COREF 备注引用 + /// + public string RemarksQuote { get; set; } + + /// + /// 备注 COVAL + /// + public string Remarks { get; set; } + + /// + /// 裁决日期 CODTC + /// + public string CODTC { get; set; } + + + +} diff --git a/IRaCIS.Core.Application/Service/Common/IVUS_OCTExportService.cs b/IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs similarity index 100% rename from IRaCIS.Core.Application/Service/Common/IVUS_OCTExportService.cs rename to IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs