diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 0e8a47a03..5a13336ec 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -273,6 +273,7 @@ namespace IRaCIS.Core.API.Controllers public List UploadedFileList { get; set; } = new List(); + public bool? IsImageSegmentLabel { get; set; } public class OSSFileDTO { @@ -521,7 +522,17 @@ namespace IRaCIS.Core.API.Controllers } else { - await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId.Value, FileType = item.FileType, FileSize = item.FileFize }); + if (incommand.IsImageSegmentLabel == true) + { + await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, ImageLabelNoneDicomStudyId = noneDicomStudyId.Value, FileType = item.FileType, FileSize = item.FileFize }); + + } + else + { + await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId.Value, FileType = item.FileType, FileSize = item.FileFize }); + + } + } diff --git a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs index a9a32d2eb..580154c9c 100644 --- a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs +++ b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs @@ -13,6 +13,8 @@ namespace IRaCIS.Core.Application.Helper public class StudyDIRInfo { + public bool IsTaskStudy { get; set; } + public Guid SubjectVisitId { get; set; } // Study public Guid DicomStudyId { get; set; } diff --git a/IRaCIS.Core.Application/Helper/FileDocProcess/Attribute/DictionaryTranslateAttribute.cs b/IRaCIS.Core.Application/Helper/FileDocProcess/Attribute/DictionaryTranslateAttribute.cs index 051b72909..e54a72747 100644 --- a/IRaCIS.Core.Application/Helper/FileDocProcess/Attribute/DictionaryTranslateAttribute.cs +++ b/IRaCIS.Core.Application/Helper/FileDocProcess/Attribute/DictionaryTranslateAttribute.cs @@ -60,4 +60,16 @@ namespace IRaCIS.Core.Application.Helper } } + + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)] + public class DateTimeTranaslateAttribute : Attribute + { + public string Formart { get; set; } + + public DateTimeTranaslateAttribute(string formart) + { + Formart = formart; + + } + } } diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 872d7361e..004baa736 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -985,6 +985,398 @@ + + + 方案编号 STUDYID + + + + + 域 DOMAIN TU TR RS + + + + + 取值类型 TUSPID TRSPID RSSPID + + + + + 受试者编号 USUBJID 实际展示TrialSiteSubjectCode + + + + + 供应商 TUNAM (Extensive Imaging) + + + + + 阅片人 TUEVAL TREVAL RSEVAL + + + + + 阅片人标识 TUEVALID TREVALID RSEVALID + + + + + 访视编号 VISITNUM + + + + + 访视名称 VISIT + + + + + 拍片日期 TUDTC TRDTC RSDTC + + + + + eCRF标识 TUREFID TRREFID RSREFID + + + + + RSCAT 阅片标准 + + + + + RSACPTFL 裁定标记 TUACPTFL + + + + + 序号 TUSEQ (同一个访视,所有阅片人选择病灶给个顺序号) + + + + + 链接ID TULNKID (阅片人角色_病灶编号)不同访视可以重复 + + + + + 肿瘤识别简称 TUTESTCD + + + + + 肿瘤识别全称 TUTEST + + + + + 肿瘤鉴定结果 TUORRES + + + + + 肿瘤识别结果类型 TUSTRESC + + + + + 部位 TULOC (对应病灶表的部位,需要国际化) + + + + + 鉴定方法 TUMETHOD (Modality?) + + + + + 部位描述 LOCTEXT + + + + + 每个subject 按照顺序编号 TRSEQ + + + + + TRGRPID 组ID 对应TU表肿瘤鉴定结果 TumorIdentificationResult + + + + + TRLNKID 链接ID 对应TU表的链接ID TumorNo(阅片人角色_病灶编号) + + + + + TRLNKGRP 链接组 ARM-任务名(访视名) 对应RS的链接组 + + + + + 肿瘤评估简称 TRTESTCD + + + + + 肿瘤评估全称 TRTEST + + + + + 原始测量 TRORRES + + + + + 原始单位 TRORRESU + + + + + 标准结果(字符) TRSTRESC + + + + + 标准结果(数值) TRORRESU + + + + + 标准单位 TRSTRESU + + + + + 完成状态 TRSTAT + + + + + 完成状态 TRMETHOD + + + + + 无法测量原因 TRREASND + + + + + RSSEQ 按照subject 的数据顺序编号 + + + + + RSLNKGRP 链接组 ARM_任务名(访视名) + + + + + RSTESTCD 疗效评估简称 + + + + + RSTEST 疗效评估全称 + + + + + RSORRES 响应评估原始结果 + + + + + RSSTRESC 标准疗效评估 + + + + + RSSTAT 完成状态 + + + + + RSREASND 无法评估原因 + + + + + REASASM 评估原因 + + + + + REASOVR 重新评估原因 + + + + + REASUPD 更新评估原因 + + + + + 关联域 RS:(访视点备注) 空:裁判选择原因 + + + + + COSEQ 序号 + + + + + IDVAR 标识变量 RSSEQ 空:裁判选择原因 + + + + + 标识 IDVARVAL RSSEQ具体的值 空:裁判选择原因 + + + + + COREF 备注引用 + + + + + 备注 COVAL + + + + + 裁决日期 CODTC + + + + + 公共影像导表基类(IVUS / OCT 通用) + + + + 研究标识符 + + + 中心编号 + + + 受试者标识符 + + + 受试者唯一标识 + + + 访视名称 + + + 阅片人角色 + + + 拍片日期 + + + 阅片完成时间 + + + + 访视编号 VISITNUM + + + + 访视点备注 + + + + IVUS 导表模型 + + + + 靶段 + + + 斑块编号 + + + 外弹力膜面积 + + + 管腔面积 + + + 外弹力膜与管腔面积差值 + + + 回撤中的图像帧数 + + + 分析图像帧数 + + + 总外弹力膜面积 (如无可不填) + + + 总 PA (如无可不填) + + + PAV (如无可不填) + + + + OCT 导表模型 + + + + 靶段 + + + 斑块编号 + + + 测量标识 + + + 测量参数名称 + + + 测量参数值 + + + 测量值单位 + + + 斑块类型 + + + 最小纤维帽厚度 + + + 平均纤维帽厚度 + + + 脂质角度平均值 + + + 脂质角度最大值 + + + 巨噬细胞浸润 + + + 巨噬细胞浸润角度 + + + 微通道 + + + 胆固醇结晶 + ExploreRecommendService @@ -1116,14 +1508,6 @@ - - - - 下载已经删除的影像 - - - - 读取该项目的数据,进行维护 @@ -1525,6 +1909,14 @@ + + + GPT 移动子树代码--适合一次提交事务 + + + + + 插入闭包表关系 @@ -2219,6 +2611,12 @@ + + + 获取受试者级别 访视标注列表 + + + 受试者级别所有的影像 @@ -13047,7 +13445,7 @@ - 新增修改想想项目表格问题 + 新增修改项目表格问题 diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index 69cc6719f..4965a065e 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -490,6 +490,8 @@ namespace IRaCIS.Core.Application.ViewModel public int? RandomOrder { get; set; } public bool? IsRandomOrderList { get; set; } + + public CriterionType? CriterionType { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 17dd8b18f..fc880f9fb 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -1027,8 +1027,8 @@ public class VisitTaskService(IRepository _visitTaskRepository, //满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang //但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活 //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)) - .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => (t.Subject.Code.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate)); - + .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => (t.Subject.Code.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate)) + ; var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }); @@ -1171,7 +1171,9 @@ public class VisitTaskService(IRepository _visitTaskRepository, var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.UserRoleId && x.TaskState == TaskState.Effect) .WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId) - .WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate)); + .WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate)) + .WhereIf(critrion.CriterionType == CriterionType.OCT, t => t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(t => t.ImageLabelNoneDicomFileList).Any() : true) + .WhereIf(critrion.CriterionType == CriterionType.IVUS, t => t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.TaskStudyList.Any() : true); var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }); diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index f2e60d207..3701839bc 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2344,6 +2344,11 @@ namespace IRaCIS.Core.Application.Service.Common if (criterion.CriterionType == CriterionType.OCT) { list.Add(new ExportDocumentDes() { Code = StaticData.Export.OCT_ReadingLession_Export, ExportCatogory = ExportResult.OCT_ReadingLession_Export }); + list.Add(new ExportDocumentDes() { Code = StaticData.Export.OCT_CDISC_Export, ExportCatogory = ExportResult.OCT_CDISC_Export }); + } + if (criterion.CriterionType == CriterionType.IVUS) + { + list.Add(new ExportDocumentDes() { Code = StaticData.Export.IVUS_CDISC_Export, ExportCatogory = ExportResult.IVUS_CDISC_Export }); } //else if (criterion.CriterionType == CriterionType.SelfDefine) { 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/Export/IVUS_OCTExportService.cs b/IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs new file mode 100644 index 000000000..5d46e7704 --- /dev/null +++ b/IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs @@ -0,0 +1,1034 @@ +using IRaCIS.Application.Contracts; +using IRaCIS.Application.Interfaces; +using IRaCIS.Core.Application.Helper; +using IRaCIS.Core.Application.ViewModel; +using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infra.EFCore.Common; +using IRaCIS.Core.Infrastructure.Extention; +using MassTransit; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using MiniExcelLibs; +using MiniExcelLibs.OpenXml; +using NPOI.SS.Formula.Functions; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Application.Service.Common; + +#region 模型 + +/// +/// 公共影像导表基类(IVUS / OCT 通用) +/// +public class IVUS_OCTBaseDto +{ + /// 研究标识符 + public string ResearchProgramNo { get; set; } + + /// 中心编号 + public string TrialSiteCode { get; set; } + + /// 受试者标识符 + public string SubjectCode { get; set; } + + /// 受试者唯一标识 + public string USUBJID => ResearchProgramNo + "_" + SubjectCode; + + /// 访视名称 + public string? VisitName { get; set; } + + /// 阅片人角色 + [DictionaryTranslateAttribute("ArmEnum")] + public Arm ArmEnum { get; set; } + + /// 拍片日期 + [DateTimeTranaslateAttribute("yyyy-MM-dd")] + public DateTime? LatestScanDate { get; set; } + + [DateTimeTranaslateAttribute("yyyy-MM-dd")] + public DateTime? EarliestScanDate { get; set; } + + /// 阅片完成时间 + [DateTimeTranaslateAttribute("yyyy-MM-dd")] + public DateTime? SignTime { get; set; } + + /// + /// 访视编号 VISITNUM + /// + public decimal? VisitNum { get; set; } + + public string TaskName { get; set; } + + public string UserName { get; set; } + + public Guid VisitTaskId { get; set; } + + public string CriterionName { get; set; } + #region 查询 导出 + public List LesionList { get; set; } = new List(); + + public List QuestionAnswerList { get; set; } + + public List GlobalResultList { get; set; } + + + 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 + [DictionaryTranslateAttribute("ArmEnum")] + public Arm? JudgeArmEnum { get; set; } + [DictionaryTranslate("YesOrNo")] + public bool? IsJudgeSelect { get; set; } + //在当前访视触发裁判,或者在截止日期小于等于当前访视的阅片期触发裁判 + [DictionaryTranslate("YesOrNo")] + public bool? IsTrigerJudge { get; set; } + + //裁判选择原因(如果是访视点裁判,则仅在所选阅片人对应访视 显示;如果是阅片期裁判,则在所选阅片人 阅片期内的所有访视 显示此原因) + public string JudgeNote { get; set; } = string.Empty; + /// 访视点备注 + public string VisitNote { get; set; } + + #endregion + + +} + + +/// +/// IVUS 导表模型 +/// +public class IvusExportDto : IVUS_OCTBaseDto +{ + /// 靶段 + public string TARGETV { get; set; } + + /// 斑块编号 + public string PLAQUE { get; set; } + + /// 外弹力膜面积 + public string EEM { get; set; } + + /// 管腔面积 + public string LUMEN { get; set; } + + /// 外弹力膜与管腔面积差值 + public string PA { get; set; } + + /// 回撤中的图像帧数 + public string PFC { get; set; } + + /// 分析图像帧数 + public string FC { get; set; } + + /// 总外弹力膜面积 (如无可不填) + public string TOTALEEM { get; set; } + + /// 总 PA (如无可不填) + public string TOTALPA { get; set; } + + /// PAV (如无可不填) + public string PAV { get; set; } +} + +/// +/// OCT 导表模型 +/// +public class OctExportDto : IVUS_OCTBaseDto +{ + /// 靶段 + public string TARGETV { get; set; } + + /// 斑块编号 + public string PLAQUE { get; set; } + + /// 测量标识 + public string TestID { get; set; } + + /// 测量参数名称 + public string TESTCD { get; set; } + + /// 测量参数值 + public string ORRES { get; set; } + + /// 测量值单位 + public string ORRESU { get; set; } + + /// 斑块类型 + public string PLATYPE { get; set; } + + /// 最小纤维帽厚度 + public string MINFCT { get; set; } + + /// 平均纤维帽厚度 + public string AVGMFCT { get; set; } + + /// 脂质角度平均值 + public string LAMEAN { get; set; } + + /// 脂质角度最大值 + public string LAMAX { get; set; } + + /// 巨噬细胞浸润 + public string MACRI { get; set; } + + /// 巨噬细胞浸润角度 + public string MIARC { get; set; } + + /// 微通道 + public string MC { get; set; } + + /// 胆固醇结晶 + public string CCS { get; set; } +} + + + +#endregion + +[ApiExplorerSettings(GroupName = "Common")] +public class IVUS_OCTExportService(IRepository _readingQuestionCriterionTrialRepository, IRepository _visitTaskRepository, + IRepository _subjectVisitTaskRepository, + IMapper _mapper, IUserInfo _userInfo, IRepository _commonDocumentRepository, IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment) : BaseService +{ + + private IQueryable GetCIDSCQueryable(VisitTaskQuery inQuery, ArbitrationRule arbitrationRule, Guid trialReadingCriterionId) + { + var isEn_Us = _userInfo.IsEn_Us; + + + 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) + .WhereIf(inQuery.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) + .WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId) + + .WhereIf(inQuery.ArmEnum != null, t => t.ArmEnum == inQuery.ArmEnum) + .WhereIf(!string.IsNullOrEmpty(inQuery.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(inQuery.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode!) && t.IsAnalysisCreate == false)) + .WhereIf(!string.IsNullOrEmpty(inQuery.TaskName), t => t.TaskName.Contains(inQuery.TaskName) || t.TaskBlindName.Contains(inQuery.TaskName)) + .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => t.Subject.Code.Contains(inQuery.SubjectCode)) + .Select(t => new IVUS_OCTBaseDto() + { + ResearchProgramNo = t.Trial.ResearchProgramNo, + SubjectCode = t.Subject.Code, + UserName = t.DoctorUser.UserName, + ArmEnum = t.ArmEnum, + + TaskName = t.TaskName, + SignTime = t.SignTime, + JudgeSignTime = t.ReadingCategory == ReadingCategory.Judge ? t.SignTime : null, + SourceSubjectVisitId = t.SourceSubjectVisitId, + VisitTaskNum = t.VisitTaskNum, + VisitNum = t.VisitTaskNum, + VisitName = t.SourceSubjectVisit.VisitName, + EarliestScanDate = t.SourceSubjectVisit.EarliestScanDate, + LatestScanDate = t.SourceSubjectVisit.LatestScanDate, + VisitTaskId = t.Id, + CriterionName = t.TrialReadingCriterion.CriterionName, + + + + ReadingCategory = t.ReadingCategory, + ReadingTaskState = t.ReadingTaskState, + + + //以最后为准,没法直接获取(涉及到全局,裁判) + SubjectCriterionReadingPeriodVisitNumList = t.Subject.ReadModuleList.Where(u => u.TrialReadingCriterionId == trialReadingCriterionId && u.ReadingSetType == ReadingSetType.ImageReading).Select(c => c.SubjectVisit.VisitNum).ToList(), + + IsJudgeSelect = null, + + JudgeArmEnum = t.JudgeResultTask.ArmEnum, + + IsTrigerJudge = arbitrationRule == ArbitrationRule.Visit ? t.JudgeVisitTaskId != null : + (arbitrationRule == ArbitrationRule.Reading ? + t.Subject.SubjectVisitTaskList.Any(c => c.TaskState == TaskState.Effect && c.IsAnalysisCreate == false && c.ReadingCategory == ReadingCategory.Judge && c.TrialReadingCriterionId == trialReadingCriterionId && t.VisitTaskNum < c.VisitTaskNum) : + false), + JudgeNote = t.ReadingCategory == ReadingCategory.Judge ? t.JudgeResultRemark : "", + + //全局 访视上修改会要求填写 + VisitNote = t.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.AdjustReason).FirstOrDefault()!.Answer, + + GlobalResultList = t.GlobalVisitResultList.Where(t => t.GlobalAnswerType == GlobalAnswerType.Reason || t.GlobalAnswerType == GlobalAnswerType.UpdateType).Select(t => new TumorGlobalQuestionAnserInfo() + { + TaskId = t.TaskId, + GlobalAnswerType = t.GlobalAnswerType, + Answer = t.Answer + }).ToList(), + + + + QuestionAnswerList = t.ReadingTaskQuestionAnswerList + .OrderBy(u => u.ReadingQuestionTrial.ShowOrder) + .Select(c => new TumorCommonQustionInfo() + { + QuestionType = c.ReadingQuestionTrial.QuestionType, + QuestionId = c.ReadingQuestionTrial.Id, + QuestionName = isEn_Us ? c.ReadingQuestionTrial.QuestionEnName : c.ReadingQuestionTrial.QuestionName, + QuestionValue = c.IsGlobalChange ? c.GlobalChangeAnswer : c.Answer, + TranslateDicName = c.ReadingQuestionTrial.DictionaryCode, + ValueType = c.ReadingQuestionTrial.ValueType, + Unit = c.ReadingQuestionTrial.Unit + }).ToList(), + + LesionList = t.LesionList.OrderBy(t => t.RowMark).Select(c => new TumorLessionInfo() + { + Id = c.Id, + OrganInfoId = c.OrganInfoId, + LessionType = c.ReadingQuestionTrial.LesionType, + LessionCode = c.RowMark, + SplitRowId = c.SplitRowId, + DicomModality = c.DicomSeries.DicomStudy.ModalityForEdit, + NoneDicomModality = c.NoneDicomStudy.Modality, + + LessionAnswerList = c.LesionAnswerList.Select(k => new TumorLessionAnswerInfo() + { + + RowId = k.RowId, + TranslateDicName = k.ReadingTableQuestionTrial.DictionaryCode, + QuestionMark = k.ReadingTableQuestionTrial.QuestionMark, + TableQuesionId = k.ReadingTableQuestionTrial.Id, + QuestionName = isEn_Us ? k.ReadingTableQuestionTrial.QuestionEnName : k.ReadingTableQuestionTrial.QuestionName, + QuestionValue = k.Answer, + ShowOrder = k.ReadingTableQuestionTrial.ShowOrder, + Unit = k.ReadingTableQuestionTrial.Unit + + }).ToList(), + + }).ToList() + + }); + + return query; + } + + + [HttpPost] + public async Task GetTumor_CDISC_Export(VisitTaskQuery inQuery, + [FromServices] IRepository _visitTaskReReadingRepository, + [FromServices] IDictionaryService _dictionaryService, + [FromServices] IRepository _trialOrganRepository, + [FromServices] IRepository _trialReadingQuestionRepository, + [FromServices] IRepository _trialReadingTableQuestionRepository, + [FromServices] IRepository _trialRepository) + { + //每次查询必须是单标准的 + var criterion = await _readingQuestionCriterionTrialRepository + .WhereIf(inQuery.TrialReadingCriterionId != null, t => t.Id == inQuery.TrialReadingCriterionId) + .WhereIf(inQuery.CriterionType != null, t => t.CriterionType == inQuery.CriterionType) + .Select(t => new { t.Id, t.CriterionType, t.CriterionGroup, t.IsGlobalReading, t.IsArbitrationReading, t.IsOncologyReading, t.CriterionName, t.ArbitrationRule }).FirstNotNullAsync(); + + var arbitrationRule = criterion.ArbitrationRule; + + var isEn_Us = _userInfo.IsEn_Us; + + var query = GetCIDSCQueryable(inQuery, arbitrationRule, criterion.Id); + + //任务排序 + var taskList = await query.OrderBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ThenBy(t => t.ArmEnum).ToListAsync(); + + //重阅信息 + var reReadingList = _visitTaskReReadingRepository.Where(t => t.TrialId == inQuery.TrialId && t.RequestReReadingType == RequestReReadingType.DocotorApply).Select(t => new + { + t.OriginalReReadingTask.VisitTaskNum, + t.OriginalReReadingTask.ArmEnum, + t.OriginalReReadingTask.DoctorUser.UserName, + t.RequestReReadingReason + }).ToList(); + + //处理裁判标记 + taskList = DealJudgeMark(criterion.ArbitrationRule, criterion.IsGlobalReading, taskList); + + + + #region 字典和各个表的数组准备 + + var dicNameList = new List() { "ArmEnum", "ValueUnit" } + .Distinct().ToArray(); + + //翻译字典 + var translateDataList = await _dictionaryService.GetBasicDataSelect(dicNameList); + + var ivusList = new List(); + + var octList = new List(); + + var exportCode = string.Empty; + + var data = new object(); + + #endregion + + + foreach (var task in taskList) + { + + if (task.ReadingCategory == ReadingCategory.Judge || task.ReadingCategory == ReadingCategory.Global) + { + continue; + } + + if (criterion.CriterionType == CriterionType.IVUS) + { + //一个斑块一条记录 + foreach (var lesion in task.LesionList.Where(t => t.LessionType == LesionType.MatchValues)) + { + var ivus = _mapper.Map(task); + + + //靶段 + ivus.TARGETV = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegment).FirstOrDefault()?.QuestionValue ?? string.Empty; + + + var marks = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegmentRemarks).FirstOrDefault()?.QuestionValue ?? string.Empty; + + if (marks.IsNotNullOrEmpty()) + { + ivus.TARGETV = ivus.TARGETV + "_" + marks; + } + + //斑块编号 + ivus.PLAQUE = lesion.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.PlaqueNumber).FirstOrDefault()?.QuestionValue ?? string.Empty; + + //外弹力膜面积 + ivus.EEM = lesion.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.ElasticArea).FirstOrDefault()?.QuestionValue ?? string.Empty; + //管腔面积 + ivus.LUMEN = lesion.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.LumenArea).FirstOrDefault()?.QuestionValue ?? string.Empty; + + //外弹力膜与管腔面积差值 + ivus.PA = lesion.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.ElasticAreaDiffValue).FirstOrDefault()?.QuestionValue ?? string.Empty; + + + //回撤中的图像帧数 + ivus.PFC = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.PullbackFrameCount).FirstOrDefault()?.QuestionValue ?? string.Empty; + + //分析图像帧数 + ivus.FC = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.AnalysisFrameCount).FirstOrDefault()?.QuestionValue ?? string.Empty; + + var findStatLession = task.LesionList.FirstOrDefault(t => t.LessionType == LesionType.PatchDataStatistics && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == ivus.PLAQUE)); + var findPAVLession = task.LesionList.FirstOrDefault(t => t.LessionType == LesionType.PAV && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == ivus.PLAQUE)); + + + //EEM求和 + ivus.TOTALEEM = findStatLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.EEMSum).FirstOrDefault()?.QuestionValue ?? string.Empty; + + //(EEM-Lumen)求和 + ivus.TOTALPA = findStatLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.EEMSubtractLumenSum).FirstOrDefault()?.QuestionValue ?? string.Empty; + //冠状动脉粥样硬化体积百分比(PAV) + + ivus.TOTALPA = findPAVLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.PAV).FirstOrDefault()?.QuestionValue ?? string.Empty; + + ivusList.Add(ivus); + + } + + + + } + else if (criterion.CriterionType == CriterionType.OCT) + { + //找到所有的斑块编号 排序 + + var noList = task.LesionList.Where(t => t.LessionType == LesionType.FCT).SelectMany(t => t.LessionAnswerList.Where(a => a.QuestionMark == QuestionMark.PlaqueNumber) + .Select(a => a.QuestionValue)).Where(v => !string.IsNullOrEmpty(v)).Distinct() + .OrderBy(v => int.Parse(v)) // 按数字排序 + .ToList(); // 最终是字符串列表 + + + foreach (var pNo in noList) + { + var pNoIndex = 0; + //一个斑块 一次测量(FCT 脂质角度)一条记录 + foreach (var fctLesion in task.LesionList.Where(t => t.LessionType == LesionType.FCT + && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == pNo))) + { + pNoIndex++; + + var findFct1 = fctLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.FirstFCT).FirstOrDefault(); + + if (findFct1 != null) + { + var oct = CreatOCT(task, pNo); + + // 测量标识 + + oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_L_{pNoIndex}"; + + // 测量参数名称 + + oct.TESTCD = "FCTMV1"; + + // 测量参数值 + oct.ORRES = findFct1?.QuestionValue ?? string.Empty; + + // 测量值单位 + oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)findFct1.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + + octList.Add(oct); + } + + var findFct2 = fctLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.SecondFCT).FirstOrDefault(); + + if (findFct2 != null) + { + var oct = CreatOCT(task, pNo); + + // 测量标识 + + oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_L_{pNoIndex}"; + + // 测量参数名称 + + oct.TESTCD = "FCTMV2"; + + // 测量参数值 + oct.ORRES = findFct2?.QuestionValue ?? string.Empty; + + // 测量值单位 + oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)findFct2.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + + octList.Add(oct); + } + + var findFct3 = fctLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.ThirdFCT).FirstOrDefault(); + + if (findFct3 != null) + { + var oct = CreatOCT(task, pNo); + + // 测量标识 + + oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_L_{pNoIndex}"; + + // 测量参数名称 + + oct.TESTCD = "FCTMV3"; + + // 测量参数值 + oct.ORRES = findFct3?.QuestionValue ?? string.Empty; + + // 测量值单位 + oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)findFct3.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + + octList.Add(oct); + } + + + var avgFct = fctLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.AvgFCT).FirstOrDefault(); + + if (avgFct != null) + { + var oct = CreatOCT(task, pNo); + + // 测量标识 + + oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_L_{pNoIndex}"; + + // 测量参数名称 + + oct.TESTCD = "AVGFCT"; + + // 测量参数值 + oct.ORRES = avgFct?.QuestionValue ?? string.Empty; + + // 测量值单位 + oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)avgFct.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + + octList.Add(oct); + } + + } + + var lNoIndex = 0; + //纸质角度 + foreach (var liLesion in task.LesionList.Where(t => t.LessionType == LesionType.LipidAngle + && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == pNo))) + { + lNoIndex++; + + var findAngle = liLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.LipidAngle).FirstOrDefault(); + + if (findAngle != null) + { + var oct = CreatOCT(task, pNo); + + // 测量标识 + + oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_A_{lNoIndex}"; + + // 测量参数名称 + + oct.TESTCD = "LIPIDA"; + + // 测量参数值 + oct.ORRES = findAngle?.QuestionValue ?? string.Empty; + + // 测量值单位 + oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)findAngle.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + + octList.Add(oct); + } + } + } + + + + + } + + + + } + + + + var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException(); + exportInfo.CriterionName = criterion.CriterionName; + + + + + if (criterion.CriterionType == CriterionType.IVUS) + { + exportCode = StaticData.Export.IVUS_CDISC_Export; + + data = ivusList; + + data = await TranslateDataList(new { List = data }, _dictionaryService, typeof(IvusExportDto)); + } + else if (criterion.CriterionType == CriterionType.OCT) + { + exportCode = StaticData.Export.OCT_CDISC_Export; + + data = octList; + + data = await TranslateDataList(new { List = data }, _dictionaryService, typeof(OctExportDto)); + } + + var (physicalPath, fileName) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, exportCode); + + var exportFileNamePrefix = $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}"; + + var fileDownloadName = $"{(string.IsNullOrEmpty(exportFileNamePrefix) ? "" : exportFileNamePrefix + "_")}{Path.GetFileNameWithoutExtension(fileName)}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"; + + return await DataExportAsync(data, fileDownloadName, physicalPath); + + + + + } + + private OctExportDto CreatOCT(IVUS_OCTBaseDto task, string pNo) + { + var oct = _mapper.Map(task); + + + + //靶段 + //靶段 + oct.TARGETV = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegment).FirstOrDefault()?.QuestionValue ?? string.Empty; + + + var marks = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegmentRemarks).FirstOrDefault()?.QuestionValue ?? string.Empty; + + if (marks.IsNotNullOrEmpty()) + { + oct.TARGETV = oct.TARGETV + "_" + marks; + } + + //斑块编号 + oct.PLAQUE = pNo; + + var findLession = task.LesionList.Where(t => t.LessionType == LesionType.PatchDataStatistics + && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == pNo)).FirstOrDefault(); + + // 斑块类型 + oct.PLATYPE = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.Undetermined).FirstOrDefault()?.QuestionValue ?? string.Empty; + // 匹配动脉段最小FCT + oct.MINFCT = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MiniMumFCT).FirstOrDefault()?.QuestionValue ?? string.Empty; + // 平均最小FCT + oct.AVGMFCT = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.AvgMinFCT).FirstOrDefault()?.QuestionValue ?? string.Empty; + // 脂质角度平均值 + oct.LAMEAN = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.AvgLipidAngle).FirstOrDefault()?.QuestionValue ?? string.Empty; + // 脂质角度最大值 + oct.LAMAX = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MaxAvgLipidAngle).FirstOrDefault()?.QuestionValue ?? string.Empty; + // 巨噬细胞浸润 + oct.MACRI = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MacrophageInfiltration).FirstOrDefault()?.QuestionValue ?? string.Empty; + // 巨噬细胞浸润角度 + oct.MIARC = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MacrophageExtensionAngle).FirstOrDefault()?.QuestionValue ?? string.Empty; + // 微通道 + oct.MC = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.Microchannels).FirstOrDefault()?.QuestionValue ?? string.Empty; + // 胆固醇结晶 + oct.CCS = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.CholesterolCrystallization).FirstOrDefault()?.QuestionValue ?? string.Empty; + + return oct; + } + + public static async Task TranslateDataList(object data, IDictionaryService _dictionaryService, Type translateType, CriterionType? criterionType = null) + { + var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; + + var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true)) + .SelectMany(c => + c.GetCustomAttributes(typeof(DictionaryTranslateAttribute), false).Select(f => (DictionaryTranslateAttribute?)f).Where(t => t?.CriterionType == criterionType || t?.CriterionType == null) + .Select(k => new { c.Name, k.DicParentCode, k.IsTranslateDenpendOtherProperty, k.DependPropertyName, k.DependPropertyValueStr }) + ).ToList(); + + var needFormartPropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DateTimeTranaslateAttribute), true)) + .SelectMany(c => + c.GetCustomAttributes(typeof(DateTimeTranaslateAttribute), false).Select(f => (DateTimeTranaslateAttribute?)f) + .Select(k => new { c.Name, k.Formart }) + ).ToList(); + + var dic = data.ConvertToDictionary(); + + //翻译字典 + var translateDataList = await _dictionaryService.GetBasicDataSelect(needTranslatePropertyList.Select(t => t.DicParentCode).Distinct().ToArray()); + + foreach (var key in dic.Keys) + { + //是数组 那么找到对应的属性 进行翻译 + if (dic[key] != null && dic[key].GetType().GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IList<>))) + { + + var newObjList = new List(); + var no = 1; + + foreach (var item in dic[key] as IList) + { + var itemDic = item.ConvertToDictionary(); + + + foreach (var needTranslateProperty in needTranslatePropertyList) + { + if (itemDic.Keys.Any(t => t == needTranslateProperty.Name)) + { + //翻译的属性依赖其他属性 + if (needTranslateProperty.IsTranslateDenpendOtherProperty) + { + if (itemDic[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower()) + { + var beforeValue = itemDic[needTranslateProperty.Name]?.ToString(); + + itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => isEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + } + } + //普通翻译 或者某一标准翻译 + else + { + var beforeValue = itemDic[needTranslateProperty.Name]?.ToString(); + + + itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => isEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + } + } + } + + //根据设置翻译时间 + foreach (var needFormartProperty in needFormartPropertyList) + { + if (itemDic.Keys.Any(t => t == needFormartProperty.Name)) + { + var value = itemDic[needFormartProperty.Name]; + if (value != null && DateTime.TryParse(value.ToString(), out var dt)) + { + itemDic[needFormartProperty.Name] = dt.ToString(needFormartProperty.Formart); + } + } + } + + itemDic.Add("No", no++); + + + newObjList.Add(itemDic); + } + + dic[key] = newObjList; + + } + + } + + return dic; + } + + + public static async Task DataExportAsync(object data, string fileDownloadName, string physicalPath) + { + + //模板路径 + var tplPath = physicalPath; + + + var memoryStream = new MemoryStream(); + + var config = new OpenXmlConfiguration() + { + IgnoreTemplateParameterMissing = true, + }; + + await MiniExcel.SaveAsByTemplateAsync(memoryStream, tplPath, data, config); + + memoryStream.Seek(0, SeekOrigin.Begin); + + + return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") + { + FileDownloadName = fileDownloadName + }; + } + + + private List DealJudgeMark(ArbitrationRule arbitrationRule, bool isGlobalReading, IEnumerable list) where T : IVUS_OCTBaseDto + { + //处理访视任务的裁判标记 + var resultExceptJudgeList = list.Where(t => t.ReadingCategory != ReadingCategory.Judge).ToList(); + + var judegeList = list.Where(t => t.ReadingCategory == ReadingCategory.Judge).ToList(); + + if (arbitrationRule == ArbitrationRule.Visit) + { + + foreach (var item in resultExceptJudgeList) + { + var findJudge = judegeList.FirstOrDefault(t => t.SubjectCode == item.SubjectCode + && (t.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Judge]) == item.VisitTaskNum); + + if (findJudge != null) + { + if (findJudge.ReadingTaskState == ReadingTaskState.HaveSigned) + { + item.IsJudgeSelect = findJudge.JudgeArmEnum == item.ArmEnum ? true : false; + + item.JudgeNote = findJudge.JudgeArmEnum == item.ArmEnum ? findJudge.JudgeNote : string.Empty; + + item.JudgeSignTime = findJudge.JudgeArmEnum == item.ArmEnum ? findJudge.JudgeSignTime : null; + } + else + { + //默认也是null 其实不用赋值 + item.IsJudgeSelect = null; + } + } + else + { + + //两个人都做了 + if (resultExceptJudgeList.Where(t => t.VisitTaskNum == item.VisitTaskNum && t.SubjectCode == item.SubjectCode).Select(t => t.ArmEnum).Distinct().Count() == 2) + { + //如果没有产生裁判,默认选择R1 + if (item.ArmEnum == Arm.DoubleReadingArm1) + { + item.IsJudgeSelect = true; + } + else + { + item.IsJudgeSelect = false; + } + } + else + { + item.IsJudgeSelect = null; + item.IsTrigerJudge = null; + } + + + + } + } + + } + else if (arbitrationRule == ArbitrationRule.Reading) + { + //处理访视裁判标记 + foreach (var visitItem in resultExceptJudgeList.Where(t => t.ReadingCategory == ReadingCategory.Visit)) + { + ////默认设置为false 只处理为true 和 空的情况 + //visitItem.IsJudgeSelect = false; + + var subjectJudgeList = judegeList.Where(t => t.SubjectCode == visitItem.SubjectCode).ToList(); + + //阅片期访视号 + var subjectReadingPeriondVisitNumList = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode).FirstOrDefault()?.SubjectCriterionReadingPeriodVisitNumList; + + //两个人完成最大得任务号(访视+全局) + var subjectMaxFinishedTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode) + .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max(); + + var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0; + + var finishedGlobalCount = 0; + + //没有配置阅片期 + if (subjectReadingPeriondVisitNumList == null) + { + finishedGlobalCount = 0; + } + else + { + //已完成的全局数量 + finishedGlobalCount = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && subjectReadingPeriondVisitNumList.Any(c => (c + addReadingPeriodNum) == t.VisitTaskNum) + /*&& t.ReadingCategory == ReadingCategory.Global*/) + .Select(t => new { t.VisitTaskNum, t.ArmEnum }).Distinct() + .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).Count(); + } + + + visitItem.IsJudgeSelect = null; + visitItem.IsTrigerJudge = null; + + if (finishedGlobalCount != 0) + { + //最大的全局是否产生裁判 + + var subjectMaxFinishedGlobalTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && subjectReadingPeriondVisitNumList.Any(c => (c + addReadingPeriodNum) == t.VisitTaskNum) + /*&& t.ReadingCategory == ReadingCategory.Global*/) + .Select(t => new { t.VisitTaskNum, t.ArmEnum }).Distinct() + .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max(); + + //最大的完成的全局是否产生裁判 + if (subjectJudgeList.Any(t => t.VisitTaskNum == (subjectMaxFinishedGlobalTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge]))) + { + + var maxJudge = subjectJudgeList.FirstOrDefault(t => t.VisitTaskNum == (subjectMaxFinishedGlobalTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge])); + + //最大裁判完成了 + if (maxJudge.ReadingTaskState == ReadingTaskState.HaveSigned) + { + if (visitItem.VisitTaskNum < maxJudge.VisitTaskNum) + { + //触发裁判 + visitItem.IsTrigerJudge = true; + + if (visitItem.ArmEnum == maxJudge.JudgeArmEnum) + { + visitItem.IsJudgeSelect = true; + visitItem.JudgeNote = maxJudge.JudgeNote; + + visitItem.JudgeSignTime = maxJudge.JudgeSignTime; + } + //裁判没选择的人设置为false + else + { + visitItem.IsJudgeSelect = false; + } + } + else + { + //后续访视 未知 默认都是null + + } + } + else + { + //找到当前未阅最大裁判之前的已完成的最大裁判任务 + var maxFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); + + if (maxFinishedJudge == null) + { + // 为空 裁判选择标记默认就是null 不用处理 + + if (visitItem.VisitTaskNum < maxJudge.VisitTaskNum) + { + visitItem.IsTrigerJudge = true; + } + + } + else + { + if (visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum) + { + visitItem.IsTrigerJudge = true; + + if (visitItem.ArmEnum == maxFinishedJudge.JudgeArmEnum) + { + visitItem.IsJudgeSelect = true; + visitItem.JudgeNote = maxFinishedJudge.JudgeNote; + visitItem.JudgeSignTime = maxFinishedJudge.JudgeSignTime; + } + //裁判没选择的人设置为false + else + { + visitItem.IsJudgeSelect = false; + } + } + else if (visitItem.VisitTaskNum > maxFinishedJudge.VisitTaskNum && visitItem.VisitTaskNum < maxJudge.VisitTaskNum) + { + //完成裁判 和未完成裁判之间的 裁判选择标记默认是null + + visitItem.IsTrigerJudge = true; + } + else + { + //在未完成全局裁判之后的访视 未知 默认都是null + + + } + + } + + } + + + } + else + { + //最大的完成的全局未产生裁判 + + if (visitItem.VisitTaskNum <= subjectMaxFinishedGlobalTaskNum) + { + visitItem.IsTrigerJudge = false; + + if (visitItem.ArmEnum == Arm.DoubleReadingArm1) + { + visitItem.IsJudgeSelect = true; + + } + else + { + visitItem.IsJudgeSelect = false; + } + } + else + { + //未产生裁判的全局之后的访视 两个标记都是null (后续可能还有全局,但是全局两个人没做完) + } + + + } + + + } + + + + } + } + else + { + foreach (var visitItem in resultExceptJudgeList.Where(t => t.ReadingCategory == ReadingCategory.Visit)) + { + visitItem.IsJudgeSelect = null; + visitItem.IsTrigerJudge = null; + } + + } + return resultExceptJudgeList.Union(judegeList).OrderBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ThenBy(t => t.ArmEnum).ToList(); + } + +} diff --git a/IRaCIS.Core.Application/Service/Common/_MapConfig.cs b/IRaCIS.Core.Application/Service/Common/_MapConfig.cs index a1ae89f86..f86a835c4 100644 --- a/IRaCIS.Core.Application/Service/Common/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Common/_MapConfig.cs @@ -2,6 +2,7 @@ using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Helper; +using IRaCIS.Core.Application.Service.Common; using IRaCIS.Core.Application.ViewModel; namespace IRaCIS.Core.Application.Service @@ -104,6 +105,14 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.Subject.TrialSite.TrialSiteCode)); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + + CreateMap(); + CreateMap(); + } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs index 6e5748018..08f4681a6 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs @@ -1,4 +1,5 @@ using IRaCIS.Core.Domain.Share; +using Newtonsoft.Json; namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO { @@ -27,6 +28,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO public List UploadStudyList { get; set; } + [JsonIgnore] + public List OriginalTaskStudyList { get; set; } + } @@ -116,6 +120,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO public int ReadingSeriesCount { get; set; } public int ReadingInstanceCount { get; set; } + + public Guid? SubjectVisitId { get; set; } } public class NoneDicomStudyBasicInfo @@ -140,5 +146,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO public int ReadingFileCount { get; set; } } + + public class ImageMarkNoneDicomStudyBasicInfo: NoneDicomStudyBasicInfo + { + public Guid SubjectVisitId { get; set; } + } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 7babf13b4..24252c2d2 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -188,6 +188,7 @@ namespace IRaCIS.Core.Application.Contracts public Guid SubjectVisitId { get; set; } public int FileCount { get; set; } + } public class PreArchiveDicomStudyCommand @@ -237,6 +238,9 @@ namespace IRaCIS.Core.Application.Contracts public Guid? VisitTaskId { get; set; } + + public bool? IsImageSegmentLabel { get; set; } + } public class TaskStudyArchiveConfirmResult @@ -265,8 +269,9 @@ namespace IRaCIS.Core.Application.Contracts public AddOrUpdateStudyDto Study { get; set; } - [NotDefault] - public Guid VisitTaskId { get; set; } + public Guid? VisitTaskId { get; set; } + + public bool? IsImageSegmentLabel { get; set; } } public class NewArchiveStudyCommand @@ -440,12 +445,17 @@ namespace IRaCIS.Core.Application.Contracts public string? SubjectCode { get; set; } public Guid? VisitTaskId { get; set; } + + public bool? IsImageSegmentLabel { get; set; } + + public Guid? SubjectVisitId { get; set; } } public class IRTaskUploadedDicomStudyQuery { - [NotDefault] - public Guid VisitTaskId { get; set; } + public Guid? VisitTaskId { get; set; } + + public Guid? SubjectVisitId { get; set; } } public class IRUploadTaskDicomStudyDto : DicomStudyBasicInfo @@ -519,6 +529,8 @@ namespace IRaCIS.Core.Application.Contracts public string TaskBlindName { get; set; } public string TaskName { get; set; } + + public string VisitName { get; set; } public Guid? SourceSubjectVisitId { get; set; } public ReadingTaskState ReadingTaskState { get; set; } @@ -540,7 +552,11 @@ namespace IRaCIS.Core.Application.Contracts public Guid VisitId { get; set; } public List StudyList { get; set; } - public List NoneDicomStudyList { get; set; } + + [JsonIgnore] + public List TaskStudyList { get; set; } + + public List NoneDicomStudyList { get; set; } } public class DownloadDicomStudyDto @@ -609,6 +625,8 @@ namespace IRaCIS.Core.Application.Contracts public string? SubjectCode { get; set; } public Guid? VisitTaskId { get; set; } + + public bool? IsImageSegmentLabel { get; set; } } @@ -629,6 +647,8 @@ namespace IRaCIS.Core.Application.Contracts public List NoneDicomStudyIdList { get; set; } + public bool? IsImageSegmentLabel { get; set; } + } public class TrialKeyImageExportDTO @@ -878,4 +898,88 @@ namespace IRaCIS.Core.Application.Contracts public Guid TaskId { get; set; } } + + + public class SubjectVisitMarkQuery:PageInput + { + public Guid TrialId { get; set; } + + public Guid? SubjectId { get; set; } + + public Guid? TrialReadingCriterionId { get; set; } + + public string? SubjectCode { get; set; } + + public bool? IsUrgent { get; set; } + + + } + + public class SubjectVisitMarkDTO + { + public Guid TrialId { get; set; } + + public Guid SubjectId { get; set; } + + public bool IsUrgent { get; set; } + + + public string SubjectCode { get; set; } + + public int? VisitCount { get; set; } + + + public int? MarkVisitCount { get; set; } + + + public int? DicomStudyCount { get; set; } + + public int? MarkDicomStudyCount { get; set; } + + public int? NoneDicomStudyCount { get; set; } + + public int? MarkNoneDicomStudyCount { get; set; } + } + + public class SubjectVisitMarkStudyDto + { + public bool IsDicom => DicomStudyList.Count() > 0; + + public Guid VisitTaskId { get; set; } + + public Guid SubjectId { get; set; } + + public string SubjectCode { get; set; } + + public string VisitName { get; set; } + + public Guid SourceSubjectVisitId { get; set; } + + + public List DicomStudyList { get; set; } = new List(); + + public List NoneDicomStudyList { get; set; } + } + + + public class SubjectVisitMarkUploadDto + { + public Guid SubjectVisitId { get; set; } + public Guid TrialSiteId { get; set; } + + public Guid SubejctId { get; set; } + + public string SubjectCode { get; set; } + + public string VisitName { get; set; } + + public Guid? SourceSubjectVisitId => SubjectVisitId; + + //防止前端null 故意返回 + public Guid VisitTaskId { get; set; } + + public List OrginalStudyList { get; set; } + + public List UploadStudyList { get; set; } + } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index ff33f0b44..1b07f0daa 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -13,6 +13,7 @@ using IRaCIS.Core.Infra.EFCore.Common; using IRaCIS.Core.Infrastructure; using MassTransit; using MassTransit.Initializers; +using MathNet.Numerics; using Medallion.Threading; using Microsoft.AspNetCore.Mvc; using NetTopologySuite.Mathematics; @@ -21,6 +22,7 @@ using NPOI.SS.Formula.Functions; using System.Data; using System.IO; using System.IO.Compression; +using System.Linq; using System.Text; using System.Web; using ZiggyCreatures.Caching.Fusion; @@ -118,12 +120,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// /// [HttpPost] - public async Task>> GetSubjectImageUploadList(IRUploadStudyQuery inQuery) + public async Task GetSubjectImageUploadList(IRUploadStudyQuery inQuery) { //要根据标准阅片顺序,确定是否查询单个任务的,还是查询所有的 var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) - .Select(t => new { t.IsReadingTaskViewInOrder, t.Trial.Modalitys }).FirstNotNullAsync(); + .Select(t => new { t.IsReadingTaskViewInOrder, t.Trial.Modalitys, t.IsImageFilter, t.CriterionModalitys }).FirstNotNullAsync(); var subjectCode = string.Empty; var subjectId = inQuery.SubjectId; @@ -154,85 +156,188 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc subjectCode = inQuery.SubjectCode; } - await SubejctRandomReadingTaskNameDeal((Guid)subjectId, inQuery.TrialReadingCriterionId); + + if (inQuery.IsImageSegmentLabel == true) + { + var querySV = _subjectVisitRepository.WhereIf(inQuery.SubjectVisitId != null, t => t.Id == inQuery.SubjectVisitId) + .WhereIf(inQuery.SubjectId != null, t => t.SubjectId == inQuery.SubjectId) + .Select(u => new SubjectVisitMarkUploadDto() + { + + SubejctId = u.SubjectId, + TrialSiteId = u.TrialSiteId, + SubjectVisitId = u.Id, + SubjectCode = u.Subject.Code, + VisitName = u.VisitName, + + OrginalStudyList = u.StudyList + .Select(t => new StudyBasicInfo() + { + Id = t.Id, + SubjectVisitId = t.SubjectVisitId, + + StudyInstanceUid = t.StudyInstanceUid, + ModalityForEdit = t.ModalityForEdit, + BodyPartExamined = t.BodyPartExamined, + BodyPartForEdit = t.BodyPartForEdit, + BodyPartForEditOther = t.BodyPartForEditOther, + + StudyCode = t.StudyCode, + StudyTime = t.StudyTime, + Description = t.Description, + InstanceCount = t.InstanceCount, + Modalities = t.Modalities, + SeriesCount = t.SeriesCount, + + ReadingInstanceCount = t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading).Count(), + ReadingSeriesCount = t.SeriesList.Where(t => t.IsReading).Count(), + }).ToList(), + + UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo() + { + Id = t.Id, + SubjectVisitId = t.SubjectVisitId, + StudyInstanceUid = t.StudyInstanceUid, + ModalityForEdit = t.ModalityForEdit, + BodyPartExamined = t.BodyPartExamined, + BodyPartForEdit = t.BodyPartForEdit, + BodyPartForEditOther = t.BodyPartForEditOther, + + StudyCode = t.StudyCode, + StudyTime = t.StudyTime, + Description = t.Description, + InstanceCount = t.InstanceCount, + Modalities = t.Modalities, + SeriesCount = t.SeriesCount, + + SopInstanceUidList = t.InstanceList.Select(t => t.SopInstanceUid).ToList(), + + ReadingInstanceCount = t.InstanceCount, + ReadingSeriesCount = t.SeriesCount, + + }).ToList() + }) + ; + + var SVlist = await querySV.ToListAsync(); + + return ResponseOutput.Ok(SVlist, new { TrialModality = criterionInfo.Modalitys }); + + } + else + { + await SubejctRandomReadingTaskNameDeal((Guid)subjectId, inQuery.TrialReadingCriterionId); - var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SourceSubjectVisitId != null - && t.DoctorUserId == _userInfo.UserRoleId && t.TaskState == TaskState.Effect) - //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 - .WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) - .Select(u => new SubjectImageUploadDTO() + var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SourceSubjectVisitId != null + && t.DoctorUserId == _userInfo.UserRoleId && t.TaskState == TaskState.Effect) + //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 + .WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) + .Select(u => new SubjectImageUploadDTO() + { + VisitTaskId = u.Id, + + SubejctId = u.SubjectId, + + TrialSiteId = u.Subject.TrialSiteId, + + IsImageFilter = u.TrialReadingCriterion.IsImageFilter, + + CriterionModalitys = u.TrialReadingCriterion.CriterionModalitys, + + SubjectCode = u.IsAnalysisCreate == true ? u.BlindSubjectCode : u.Subject.Code, + TaskBlindName = u.TaskBlindName, + TaskName = u.TaskName, + ReadingTaskState = u.ReadingTaskState, + + SourceSubjectVisitId = u.SourceSubjectVisitId, + + OrginalStudyList = u.SourceSubjectVisit.StudyList + .Where(t => u.TrialReadingCriterion.IsImageFilter ? ("|" + u.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true) + .Select(t => new StudyBasicInfo() + { + Id = t.Id, + StudyInstanceUid = t.StudyInstanceUid, + ModalityForEdit = t.ModalityForEdit, + BodyPartExamined = t.BodyPartExamined, + BodyPartForEdit = t.BodyPartForEdit, + BodyPartForEditOther = t.BodyPartForEditOther, + + StudyCode = t.StudyCode, + StudyTime = t.StudyTime, + Description = t.Description, + InstanceCount = t.InstanceCount, + Modalities = t.Modalities, + SeriesCount = t.SeriesCount, + + ReadingInstanceCount = t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading).Count(), + ReadingSeriesCount = t.SeriesList.Where(t => t.IsReading).Count(), + }).ToList(), + + OriginalTaskStudyList = inQuery.IsImageSegmentLabel == false ? u.SourceSubjectVisit.TaskStudyList.Select(t => new StudyBasicInfo() + { + Id = t.Id, + StudyInstanceUid = t.StudyInstanceUid, + ModalityForEdit = t.ModalityForEdit, + BodyPartExamined = t.BodyPartExamined, + BodyPartForEdit = t.BodyPartForEdit, + BodyPartForEditOther = t.BodyPartForEditOther, + + StudyCode = t.StudyCode, + StudyTime = t.StudyTime, + Description = t.Description, + InstanceCount = t.InstanceCount, + Modalities = t.Modalities, + SeriesCount = t.SeriesCount, + + ReadingInstanceCount = t.InstanceList.Count(), + ReadingSeriesCount = t.SeriesList.Count(), + }).ToList() : new List(), + + UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo() + { + Id = t.Id, + StudyInstanceUid = t.StudyInstanceUid, + ModalityForEdit = t.ModalityForEdit, + BodyPartExamined = t.BodyPartExamined, + BodyPartForEdit = t.BodyPartForEdit, + BodyPartForEditOther = t.BodyPartForEditOther, + + StudyCode = t.StudyCode, + StudyTime = t.StudyTime, + Description = t.Description, + InstanceCount = t.InstanceCount, + Modalities = t.Modalities, + SeriesCount = t.SeriesCount, + + SopInstanceUidList = t.InstanceList.Select(t => t.SopInstanceUid).ToList(), + + ReadingInstanceCount = t.InstanceCount, + ReadingSeriesCount = t.SeriesCount, + + }).ToList() + }) + ; + + var list = await query.Where(t => t.SubjectCode == subjectCode).ToListAsync(); + + + //靶段标注,阅片IR上传需要将原始DSA 和初次后处理的影像合并 作为原始检查影像 + if (inQuery.IsImageSegmentLabel == false) { - VisitTaskId = u.Id, - - SubejctId = u.SubjectId, - - TrialSiteId = u.Subject.TrialSiteId, - - IsImageFilter = u.TrialReadingCriterion.IsImageFilter, - - CriterionModalitys = u.TrialReadingCriterion.CriterionModalitys, - - SubjectCode = u.IsAnalysisCreate == true ? u.BlindSubjectCode : u.Subject.Code, - TaskBlindName = u.TaskBlindName, - TaskName = u.TaskName, - ReadingTaskState = u.ReadingTaskState, - - SourceSubjectVisitId = u.SourceSubjectVisitId, - - OrginalStudyList = u.SourceSubjectVisit.StudyList - .Where(t => u.TrialReadingCriterion.IsImageFilter ? ("|" + u.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) - .Select(t => new StudyBasicInfo() + foreach (var item in list) { - Id = t.Id, - StudyInstanceUid = t.StudyInstanceUid, - ModalityForEdit = t.ModalityForEdit, - BodyPartExamined = t.BodyPartExamined, - BodyPartForEdit = t.BodyPartForEdit, - BodyPartForEditOther = t.BodyPartForEditOther, - - StudyCode = t.StudyCode, - StudyTime = t.StudyTime, - Description = t.Description, - InstanceCount = t.InstanceCount, - Modalities = t.Modalities, - SeriesCount = t.SeriesCount, - - ReadingInstanceCount = t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading).Count(), - ReadingSeriesCount = t.SeriesList.Where(t => t.IsReading).Count(), - }).ToList(), - - UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo() - { - Id = t.Id, - StudyInstanceUid = t.StudyInstanceUid, - ModalityForEdit = t.ModalityForEdit, - BodyPartExamined = t.BodyPartExamined, - BodyPartForEdit = t.BodyPartForEdit, - BodyPartForEditOther = t.BodyPartForEditOther, - - StudyCode = t.StudyCode, - StudyTime = t.StudyTime, - Description = t.Description, - InstanceCount = t.InstanceCount, - Modalities = t.Modalities, - SeriesCount = t.SeriesCount, - - SopInstanceUidList = t.InstanceList.Select(t => t.SopInstanceUid).ToList(), - - ReadingInstanceCount = t.InstanceCount, - ReadingSeriesCount = t.SeriesCount, - - }).ToList() - }) - ; - //var test = await query.ToListAsync(); - - var list = await query.Where(t => t.SubjectCode == subjectCode).ToListAsync(); + item.OrginalStudyList.AddRange(item.OriginalTaskStudyList.WhereIf(criterionInfo.IsImageFilter, t => ("|" + criterionInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))); + } + } + + + return ResponseOutput.Ok(list, new { TrialModality = criterionInfo.Modalitys }); + } - return ResponseOutput.Ok(list, new { TrialModality = criterionInfo.Modalitys }); } private void SpecialArchiveStudyDeal(TaskStudy study) @@ -303,54 +408,34 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// public async Task> VerifyIRStudyAllowUpload(TaskStudyAchivePreConfirmCommand inCommand, [FromServices] IRepository _dicomStudyRepository) { - - var currentUploadSubjectVisitId = inCommand.VisitTaskId == null ? null : _visitTaskRepository.Where(t => t.Id == inCommand.VisitTaskId).Select(t => t.SourceSubjectVisitId).FirstOrDefault(); - - //重阅任务排除 - var notAllowedUidList1 = _taskStudyRepository.Where(t => t.TrialId == inCommand.TrialId && t.VisitTask.TaskState == TaskState.Effect && inCommand.StudyInstanceUidList.Contains(t.StudyInstanceUid)).Select(t => new - { - t.StudyInstanceUid, - t.SubjectId, - SubjectVisitId = t.VisitTask.SourceSubjectVisitId, - SubejectCode = t.VisitTask.IsAnalysisCreate ? t.VisitTask.BlindSubjectCode : t.Subject.Code, - VisitTaskId = (Guid?)t.VisitTaskId - }).ToList(); - - var notAllowedUidList2 = _dicomStudyRepository.Where(t => t.TrialId == inCommand.TrialId && inCommand.StudyInstanceUidList.Contains(t.StudyInstanceUid)).Select(t => new - { - t.StudyInstanceUid, - t.SubjectId, - SubjectVisitId = (Guid?)t.SubjectVisitId, - SubejectCode = t.Subject.Code, - VisitTaskId = (Guid?)null - }).ToList(); - - var notAllowedUidList = notAllowedUidList1.Union(notAllowedUidList2); - var result = new List(); - - foreach (var studyUid in inCommand.StudyInstanceUidList) + if (inCommand.IsImageSegmentLabel == true) { - var findStudy = notAllowedUidList.Where(t => t.StudyInstanceUid == studyUid).FirstOrDefault(); - if (findStudy != null) + var notAllowedUidList = _dicomStudyRepository.Where(t => t.TrialId == inCommand.TrialId && inCommand.StudyInstanceUidList.Contains(t.StudyInstanceUid)).Select(t => new { + t.StudyInstanceUid, + t.SubjectId, + SubjectVisitId = (Guid?)t.SubjectVisitId, + SubejectCode = t.Subject.Code, + VisitTaskId = (Guid?)null + }).ToList(); - //同一个subject 同一份影响 - if (findStudy.SubejectCode == inCommand.SubjectCode && findStudy.SubjectId == inCommand.SubjectId) + foreach (var studyUid in inCommand.StudyInstanceUidList) + { + var findStudy = notAllowedUidList.Where(t => t.StudyInstanceUid == studyUid).FirstOrDefault(); + + if (findStudy != null) { - //上传给后处理其他访视了 - if (inCommand.VisitTaskId != null && findStudy.VisitTaskId != null && findStudy.VisitTaskId != inCommand.VisitTaskId && findStudy.SubjectVisitId != currentUploadSubjectVisitId) + //同一个subject 同一份影响 + if (findStudy.SubejectCode == inCommand.SubjectCode && findStudy.SubjectId == inCommand.SubjectId) { - result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false }); - } - //在原始crc 里面上传了,并且不是当前访视 - else if (inCommand.VisitTaskId != null && findStudy.VisitTaskId == null && findStudy.SubjectVisitId != currentUploadSubjectVisitId) - { - result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false }); + + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowUpload = true, IsAllowReUpload = true }); + } else { - result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = true }); + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false }); } } else @@ -358,12 +443,72 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false }); } } - else - { - //说明没上传 不用管 - result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowUpload = true }); - } } + else + { + var currentUploadSubjectVisitId = inCommand.VisitTaskId == null ? null : _visitTaskRepository.Where(t => t.Id == inCommand.VisitTaskId).Select(t => t.SourceSubjectVisitId).FirstOrDefault(); + + //重阅任务排除 + var notAllowedUidList1 = _taskStudyRepository.Where(t => t.TrialId == inCommand.TrialId && t.VisitTask.TaskState == TaskState.Effect && inCommand.StudyInstanceUidList.Contains(t.StudyInstanceUid)).Select(t => new + { + t.StudyInstanceUid, + t.SubjectId, + SubjectVisitId = t.VisitTask.SourceSubjectVisitId, + SubejectCode = t.VisitTask.IsAnalysisCreate ? t.VisitTask.BlindSubjectCode : t.Subject.Code, + VisitTaskId = (Guid?)t.VisitTaskId + }).ToList(); + + var notAllowedUidList2 = _dicomStudyRepository.Where(t => t.TrialId == inCommand.TrialId && inCommand.StudyInstanceUidList.Contains(t.StudyInstanceUid)).Select(t => new + { + t.StudyInstanceUid, + t.SubjectId, + SubjectVisitId = (Guid?)t.SubjectVisitId, + SubejectCode = t.Subject.Code, + VisitTaskId = (Guid?)null + }).ToList(); + + var notAllowedUidList = notAllowedUidList1.Union(notAllowedUidList2); + + + + foreach (var studyUid in inCommand.StudyInstanceUidList) + { + var findStudy = notAllowedUidList.Where(t => t.StudyInstanceUid == studyUid).FirstOrDefault(); + if (findStudy != null) + { + + //同一个subject 同一份影响 + if (findStudy.SubejectCode == inCommand.SubjectCode && findStudy.SubjectId == inCommand.SubjectId) + { + //上传给后处理其他访视了 + if (inCommand.VisitTaskId != null && findStudy.VisitTaskId != null && findStudy.VisitTaskId != inCommand.VisitTaskId && findStudy.SubjectVisitId != currentUploadSubjectVisitId) + { + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false }); + } + //在原始crc 里面上传了,并且不是当前访视 + else if (inCommand.VisitTaskId != null && findStudy.VisitTaskId == null && findStudy.SubjectVisitId != currentUploadSubjectVisitId) + { + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false }); + } + else + { + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = true }); + } + } + else + { + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false }); + } + } + else + { + //说明没上传 不用管 + result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowUpload = true }); + } + } + + } + return result; @@ -406,9 +551,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var @uploadLock = _distributedLockProvider.CreateLock($"UploadTaskDicom"); + var visiTaskId = incommand.VisitTaskId ?? Guid.Empty; + using (await @uploadLock.AcquireAsync()) { - if (_fusionCache.GetOrDefault(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty) + if (_fusionCache.GetOrDefault(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty) { //---当前已有人正在上传和归档该检查! return ResponseOutput.NotOk(I18n.T("UploadDownLoad_ArchiveInProgress")); @@ -416,11 +563,18 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc else { //在事务未完成前 防止前端重复提交 - await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid), _userInfo.UserRoleId, TimeSpan.FromMinutes(1)); + await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid), _userInfo.UserRoleId, TimeSpan.FromMinutes(1)); } } - var visiTaskId = incommand.VisitTaskId; + + Guid? svId = null; + + if (incommand.IsImageSegmentLabel == true) + { + svId = _dicomStudyRepository.Where(t => t.TrialId == incommand.TrialId && t.StudyInstanceUid == incommand.Study.StudyInstanceUid).Select(t => t.SubjectVisitId).FirstOrDefault(); + } + var modalitys = string.Empty; @@ -477,6 +631,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc study.TrialId = incommand.TrialId; study.SubjectId = incommand.SubjectId; study.VisitTaskId = visiTaskId; + study.SubjectVisitId = svId; //study.SubjectVisitId = incommand.SubjectVisitId; @@ -502,6 +657,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc series.SubjectId = incommand.SubjectId; //series.SubjectVisitId = incommand.SubjectVisitId; series.VisitTaskId = visiTaskId; + series.SubjectVisitId = svId; //前端传递的数量不准,上传的时候,把失败的也加进来了,以实际数组的数字为准 series.InstanceCount = seriesItem.InstanceList.Count; @@ -522,6 +678,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc isntance.SubjectId = incommand.SubjectId; //isntance.SubjectVisitId = incommand.SubjectVisitId; isntance.VisitTaskId = visiTaskId; + isntance.SubjectVisitId = svId; await _taskInstanceRepository.AddAsync(isntance); } @@ -652,8 +809,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } finally { - await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)); - await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidUploading(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)); + await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid)); + await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidUploading(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid)); } @@ -667,39 +824,68 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc [HttpDelete] - public async Task DeleteTaskStudy(Guid visitTaskId, bool isDicom, Guid? dicomStudyId, Guid? noneDicomStudyId) + public async Task DeleteTaskStudy(Guid visitTaskId, Guid? subjectVisitId, bool isDicom, Guid? dicomStudyId, Guid? noneDicomStudyId) { if (isDicom) { - if (dicomStudyId == null) + //靶段标注删除访视影像 + if (visitTaskId == Guid.Empty && subjectVisitId != null && subjectVisitId != Guid.Empty) { - var deleteStudyPathList = await _taskInstanceRepository.Where(t => t.VisitTaskId == visitTaskId).GroupBy(t => t.StudyId).Select(g => g.First().Path).ToListAsync(); - - foreach (var fisrtPath in deleteStudyPathList) - { - var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); - await _oSSService.DeleteFromPrefix(prefix, true); - } - - - await _taskStudyRepository.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId); - await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); - await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); - } - else - { - var fisrtPath = await _taskInstanceRepository.Where(t => t.VisitTaskId == visitTaskId && t.StudyId == dicomStudyId).Select(t => t.Path).FirstOrDefaultAsync(); + var fisrtPath = await _taskInstanceRepository.Where(t => t.SubjectVisitId == subjectVisitId).Select(t => t.Path).FirstOrDefaultAsync(); var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); await _oSSService.DeleteFromPrefix(prefix, true); - await _taskStudyRepository.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); - await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); - await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); + await _taskStudyRepository.DeleteFromQueryAsync(t => t.SubjectVisitId == subjectVisitId); + await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId); + await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId); } + + if (visitTaskId != Guid.Empty) + { + if (dicomStudyId == null) + { + var deleteStudyPathList = await _taskInstanceRepository.Where(t => t.VisitTaskId == visitTaskId).GroupBy(t => t.StudyId).Select(g => g.First().Path).ToListAsync(); + + foreach (var fisrtPath in deleteStudyPathList) + { + var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); + await _oSSService.DeleteFromPrefix(prefix, true); + } + + + await _taskStudyRepository.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId); + await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); + await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); + } + else + { + var fisrtPath = await _taskInstanceRepository.Where(t => t.VisitTaskId == visitTaskId && t.StudyId == dicomStudyId).Select(t => t.Path).FirstOrDefaultAsync(); + var prefix = fisrtPath.Substring(1, fisrtPath.LastIndexOf('/') - 1); + await _oSSService.DeleteFromPrefix(prefix, true); + + await _taskStudyRepository.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); + await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); + await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); + } + } + } else { - await _noneDicomStudyFileReposiotry.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId && t.OriginNoneDicomStudyId == noneDicomStudyId); + if (visitTaskId == Guid.Empty) + { + + //删除靶段标注非dicom + await _noneDicomStudyFileReposiotry.DeleteFromQueryAsync(t => t.ImageLabelNoneDicomStudyId == noneDicomStudyId); + + } + else + { + //删除后处理非dicom + await _noneDicomStudyFileReposiotry.DeleteFromQueryAsync(t => t.VisitTaskId == visitTaskId && t.OriginNoneDicomStudyId == noneDicomStudyId); + + } + } await _noneDicomStudyFileReposiotry.SaveChangesAsync(); @@ -715,7 +901,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// /// [HttpPost] - public async Task> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery) + public async Task>> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery) { var subjectCode = inQuery.SubjectCode; var subjectId = inQuery.SubjectId; @@ -742,69 +928,138 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) .Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); - var query = from u in _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId - && t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect) - //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 - .WhereIf(info.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) - join ns in _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId).WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) - on u.SourceSubjectVisitId equals ns.SubjectVisitId - - select new TaskNoneDicomStudyDTO() - { - SubjectId = u.SubjectId, - SubjectCode = u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code, - TaskBlindName = u.TaskBlindName, - TaskName = u.TaskName, - ReadingTaskState = u.ReadingTaskState, - SourceSubjectVisitId = u.SourceSubjectVisitId, - VisitTaskId = u.Id, - - Id = ns.Id, - Description = ns.Description, - ImageDate = ns.ImageDate, - BodyPart = ns.BodyPart, - BodyPartForEditOther=ns.BodyPartForEditOther, - FileCount = ns.FileCount, - Modality = ns.Modality, - StudyCode = ns.StudyCode, - - FileList = ns.NoneDicomFileList.Select(t => new NoneDicomFileInfo() - { - FileType = t.FileType, - FileName = t.FileName, - FileSize = t.FileSize, - Path = t.Path - }).ToList(), - - ReadingFileCount = ns.FileCount, - - }; - - var list = await query.Where(t => t.SubjectCode == subjectCode).SortToListAsync(inQuery); - - var noneDicomStudyTaskIdList = list.Select(t => t.VisitTaskId).ToList(); + var config = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName }).FirstOrDefaultAsync(); - var taskNoneDicomStudyList = _visitTaskRepository.Where(t => noneDicomStudyTaskIdList.Contains(t.Id)) - .SelectMany(t => t.TaskNoneDicomStudyFileList).Where(t => noneDicomStudyTaskIdList.Contains((Guid)t.VisitTaskId)) - .Select(u => new NoneDicomFileInfo - { - OriginNoneDicomStudyId = u.OriginNoneDicomStudyId, - - FileType = u.FileType, - FileName = u.FileName, - FileSize = u.FileSize, - Path = u.Path - }) - .ToList(); - - foreach (var item in list) + //靶段标注上传,查看访视级别,上传绑定访视级别 + if (inQuery.IsImageSegmentLabel == true) { - item.UploadedFileCount = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).Count(); - item.UploadedFileList = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList(); + var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId) + .WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId) + //.WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) + .Select(u => new TaskNoneDicomStudyDTO() + { + SubjectId = u.SubjectId, + SubjectCode = u.Subject.Code, + VisitName = u.SubjectVisit.VisitName, + SourceSubjectVisitId = u.SubjectVisitId, + + Id = u.Id, + Description = u.Description, + ImageDate = u.ImageDate, + BodyPart = u.BodyPart, + BodyPartForEditOther = u.BodyPartForEditOther, + FileCount = u.FileCount, + Modality = u.Modality, + StudyCode = u.StudyCode, + + FileList = u.NoneDicomFileList.Select(t => new NoneDicomFileInfo() + { + FileType = t.FileType, + FileName = t.FileName, + FileSize = t.FileSize, + Path = t.Path + }).ToList(), + + ReadingFileCount = u.NoneDicomFileList.Where(t => t.IsReading).Count(), + + }).ToList(); + + var noneDicomStudyIdList = list.Select(t => t.Id).ToList(); + + + var noneDicomStudyList = _noneDicomStudyFileReposiotry.Where(t => t.ImageLabelNoneDicomStudyId != null) + .Where(t => noneDicomStudyIdList.Contains((Guid)t.ImageLabelNoneDicomStudyId!)) + .Select(u => new NoneDicomFileInfo + { + OriginNoneDicomStudyId = u.ImageLabelNoneDicomStudyId, + + FileType = u.FileType, + FileName = u.FileName, + FileSize = u.FileSize, + Path = u.Path + }) + .ToList(); + + foreach (var item in list) + { + item.UploadedFileCount = noneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).Count(); + item.UploadedFileList = noneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList(); + } + + return ResponseOutput.Ok(list, config); + } + else + { + var query = from u in _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId + && t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect) + //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 + .WhereIf(info.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) + join ns in _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId).WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) + on u.SourceSubjectVisitId equals ns.SubjectVisitId + + select new TaskNoneDicomStudyDTO() + { + SubjectId = u.SubjectId, + SubjectCode = u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code, + TaskBlindName = u.TaskBlindName, + TaskName = u.TaskName, + ReadingTaskState = u.ReadingTaskState, + SourceSubjectVisitId = u.SourceSubjectVisitId, + VisitTaskId = u.Id, + + Id = ns.Id, + Description = ns.Description, + ImageDate = ns.ImageDate, + BodyPart = ns.BodyPart, + BodyPartForEditOther = ns.BodyPartForEditOther, + + Modality = ns.Modality, + StudyCode = ns.StudyCode, + + //靶段标注 阅片IR 上传时IsImageSegmentLabel == false ,正常后处理上传IsImageSegmentLabel 该字段为空 + FileList = (inQuery.IsImageSegmentLabel == false ? ns.ImageLabelNoneDicomFileList : ns.NoneDicomFileList) + .Select(t => new NoneDicomFileInfo() + { + FileType = t.FileType, + FileName = t.FileName, + FileSize = t.FileSize, + Path = t.Path + }).ToList(), + + FileCount = (inQuery.IsImageSegmentLabel == false ? ns.ImageLabelNoneDicomFileList : ns.NoneDicomFileList).Count(), + ReadingFileCount = (inQuery.IsImageSegmentLabel == false ? ns.ImageLabelNoneDicomFileList : ns.NoneDicomFileList).Where(t => t.IsReading).Count(), + + }; + + var list = await query.Where(t => t.SubjectCode == subjectCode).SortToListAsync(inQuery); + + var noneDicomStudyTaskIdList = list.Select(t => t.VisitTaskId).ToList(); + + + var taskNoneDicomStudyList = _visitTaskRepository.Where(t => noneDicomStudyTaskIdList.Contains(t.Id)) + .SelectMany(t => t.TaskNoneDicomStudyFileList).Where(t => noneDicomStudyTaskIdList.Contains((Guid)t.VisitTaskId)) + .Select(u => new NoneDicomFileInfo + { + OriginNoneDicomStudyId = u.OriginNoneDicomStudyId, + + FileType = u.FileType, + FileName = u.FileName, + FileSize = u.FileSize, + Path = u.Path + }) + .ToList(); + + foreach (var item in list) + { + item.UploadedFileCount = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).Count(); + item.UploadedFileList = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList(); + } + + return ResponseOutput.Ok(list, config); } - return list; + } @@ -984,7 +1239,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// /// [HttpPost] - public async Task> GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery) + public async Task GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery) { var doctorUserId = _userInfo.UserRoleId; @@ -1016,99 +1271,175 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc subjectCode = inQuery.SubjectCode; } - //下载这里查看也需要维护编号,维护的时候不会处理一致性分析任务 - if (inQuery.SubjectId != null && inQuery.TrialReadingCriterionId != null) + + if (inQuery.IsImageSegmentLabel == true) { - await SubejctRandomReadingTaskNameDeal((Guid)subjectId, inQuery.TrialReadingCriterionId); + var list = await _subjectVisitRepository + .WhereIf(inQuery.SubjectId != null, t => t.SubjectId == inQuery.SubjectId) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + + #region 将任务级别转为检查级别 + + var result = new List(); + + var dicomStudyList = list.Where(item => item.DicomStudyList.Count > 0) + .Select(item => new SubjectVisitMarkStudyDto + { + SourceSubjectVisitId = item.SourceSubjectVisitId, + VisitTaskId = item.VisitTaskId, + SubjectId = item.SubjectId, + SubjectCode = item.SubjectCode, + VisitName = item.VisitName, + + //取dicom + DicomStudyList = item.DicomStudyList, + }).ToList(); + + var noneStudyList = list.Where(item => item.NoneDicomStudyList.Count > 0) + .Select(item => new SubjectVisitMarkStudyDto + { + SourceSubjectVisitId = item.SourceSubjectVisitId, + VisitTaskId = item.VisitTaskId, + SubjectId = item.SubjectId, + SubjectCode = item.SubjectCode, + VisitName = item.VisitName, + + //非dicom + NoneDicomStudyList = item.NoneDicomStudyList, + }).ToList(); + + + result.AddRange(dicomStudyList); + result.AddRange(noneStudyList); + #endregion + + return ResponseOutput.Ok(result); } - - - TaskState? taskState = null; - if (inQuery.VisitTaskId != null) + else { - //考虑到一致性分析,必须要这个编号进行过滤 - //医学审核查看下载按钮,这个时候需要知道医生 - - var taskInfo = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => new + //下载这里查看也需要维护编号,维护的时候不会处理一致性分析任务 + if (inQuery.SubjectId != null && inQuery.TrialReadingCriterionId != null) { - SubjectCode = t.IsAnalysisCreate ? t.BlindSubjectCode : t.Subject.Code, - SubjectId = t.SubjectId, - t.DoctorUserId, - t.IsAnalysisCreate, - t.TaskState - }).FirstNotNullAsync(); - - subjectId = taskInfo.SubjectId; - subjectCode = taskInfo.SubjectCode; - doctorUserId = (Guid)taskInfo.DoctorUserId!; - isAnalysisCreate = taskInfo.IsAnalysisCreate; - - taskState = taskInfo.TaskState; - } - - var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId - && t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId) - //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 - .WhereIf(inQuery.VisitTaskId == null, t => t.TaskState == TaskState.Effect)//从待阅列表进入,要筛选出有效的,任务可能重阅了,也要看到该任务的 - .WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) - .WhereIf(taskState == TaskState.Effect || taskState == TaskState.Freeze, t => t.TaskState == TaskState.Effect)//subject 随机可能当前阅片人有退回任务,此时传递了任务Id,但是要看整个subject得,要只留生效的 - .WhereIf(taskState != null && taskState != TaskState.Effect && taskState != TaskState.Freeze, t => t.Id == inQuery.VisitTaskId) //非生效只查当前任务 - .ProjectTo(_mapper.ConfigurationProvider); - - //这里过滤是否是一致性分析的 - var list = await query.Where(t => t.SubjectCode == subjectCode).ToListAsync(); - - foreach (var item in list) - { - if (item.IsImageFilter) - { - item.DicomStudyList = item.DicomStudyList.Where(t => ("|" + item.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")).ToList(); - item.NoneDicomStudyList = item.NoneDicomStudyList.Where(t => ("|" + item.CriterionModalitys + "|").Contains("|" + t.Modality + "|")).ToList(); + await SubejctRandomReadingTaskNameDeal((Guid)subjectId, inQuery.TrialReadingCriterionId); } + + + TaskState? taskState = null; + if (inQuery.VisitTaskId != null) + { + //考虑到一致性分析,必须要这个编号进行过滤 + //医学审核查看下载按钮,这个时候需要知道医生 + + var taskInfo = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => new + { + SubjectCode = t.IsAnalysisCreate ? t.BlindSubjectCode : t.Subject.Code, + SubjectId = t.SubjectId, + t.DoctorUserId, + t.IsAnalysisCreate, + t.TaskState + }).FirstNotNullAsync(); + + subjectId = taskInfo.SubjectId; + subjectCode = taskInfo.SubjectCode; + doctorUserId = (Guid)taskInfo.DoctorUserId!; + isAnalysisCreate = taskInfo.IsAnalysisCreate; + + taskState = taskInfo.TaskState; + } + + var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId + && t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId) + //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 + .WhereIf(inQuery.VisitTaskId == null, t => t.TaskState == TaskState.Effect)//从待阅列表进入,要筛选出有效的,任务可能重阅了,也要看到该任务的 + .WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) + .WhereIf(taskState == TaskState.Effect || taskState == TaskState.Freeze, t => t.TaskState == TaskState.Effect)//subject 随机可能当前阅片人有退回任务,此时传递了任务Id,但是要看整个subject得,要只留生效的 + .WhereIf(taskState != null && taskState != TaskState.Effect && taskState != TaskState.Freeze, t => t.Id == inQuery.VisitTaskId) //非生效只查当前任务 + .ProjectTo(_mapper.ConfigurationProvider/*, new { IsImageSegmentLabel = inQuery.IsImageSegmentLabel }*/); + + + + //这里过滤是否是一致性分析的 + var list = await query.Where(t => t.SubjectCode == subjectCode).ToListAsync(); + + + if (inQuery.IsImageSegmentLabel == false) + { + var subjectVisitIdList = list.Select(t => t.SourceSubjectVisitId).Distinct().ToList(); + + var preDicomStudyList = _subjectVisitRepository.Where(t => subjectVisitIdList.Contains(t.Id)).SelectMany(t => t.TaskStudyList) + .ProjectTo(_mapper.ConfigurationProvider).ToList(); + + var preNoneDicomStudyList = _subjectVisitRepository.Where(t => subjectVisitIdList.Contains(t.Id)) + .SelectMany(t => t.NoneDicomStudyList) + .ProjectTo(_mapper.ConfigurationProvider).ToList(); + + foreach (var item in list) + { + var dicomList = item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true).ToList(); + + dicomList.AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList()); + + item.DicomStudyList = dicomList; + + item.NoneDicomStudyList = _mapper.Map>(preNoneDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList()); + } + } + + foreach (var item in list) + { + if (item.IsImageFilter) + { + item.DicomStudyList = item.DicomStudyList.Where(t => ("|" + item.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")).ToList(); + item.NoneDicomStudyList = item.NoneDicomStudyList.Where(t => ("|" + item.CriterionModalitys + "|").Contains("|" + t.Modality + "|")).ToList(); + } + } + + + #region 将任务级别转为检查级别 + + var result = new List(); + + var dicomStudyList = list.Where(item => item.DicomStudyList.Count > 0) + .Select(item => new SubjectCRCImageUploadedStudyDto + { + VisitTaskId = item.VisitTaskId, + SubjectId = item.SubjectId, + SubjectCode = item.SubjectCode, + TaskBlindName = item.TaskBlindName, + TaskName = item.TaskName, + IsImageFilter = item.IsImageFilter, + CriterionModalitys = item.CriterionModalitys, + SourceSubjectVisitId = item.SourceSubjectVisitId, + //取dicom + DicomStudyList = item.DicomStudyList, + }).ToList(); + + var noneStudyList = list.Where(item => item.NoneDicomStudyList.Count > 0) + .Select(item => new SubjectCRCImageUploadedStudyDto + { + VisitTaskId = item.VisitTaskId, + SubjectId = item.SubjectId, + SubjectCode = item.SubjectCode, + TaskBlindName = item.TaskBlindName, + TaskName = item.TaskName, + IsImageFilter = item.IsImageFilter, + CriterionModalitys = item.CriterionModalitys, + SourceSubjectVisitId = item.SourceSubjectVisitId, + //非dicom + NoneDicomStudyList = item.NoneDicomStudyList, + }).ToList(); + + + result.AddRange(dicomStudyList); + result.AddRange(noneStudyList); + #endregion + + + return ResponseOutput.Ok(result); } - #region 将任务级别转为检查级别 - - var result = new List(); - - var dicomStudyList = list.Where(item => item.DicomStudyList.Count > 0) - .Select(item => new SubjectCRCImageUploadedStudyDto - { - VisitTaskId = item.VisitTaskId, - SubjectId = item.SubjectId, - SubjectCode = item.SubjectCode, - TaskBlindName = item.TaskBlindName, - TaskName = item.TaskName, - IsImageFilter = item.IsImageFilter, - CriterionModalitys = item.CriterionModalitys, - SourceSubjectVisitId = item.SourceSubjectVisitId, - //取dicom - DicomStudyList = item.DicomStudyList, - }).ToList(); - - var noneStudyList = list.Where(item => item.NoneDicomStudyList.Count > 0) - .Select(item => new SubjectCRCImageUploadedStudyDto - { - VisitTaskId = item.VisitTaskId, - SubjectId = item.SubjectId, - SubjectCode = item.SubjectCode, - TaskBlindName = item.TaskBlindName, - TaskName = item.TaskName, - IsImageFilter = item.IsImageFilter, - CriterionModalitys = item.CriterionModalitys, - SourceSubjectVisitId = item.SourceSubjectVisitId, - //非dicom - NoneDicomStudyList = item.NoneDicomStudyList, - }).ToList(); - - - result.AddRange(dicomStudyList); - result.AddRange(noneStudyList); - #endregion - - - return result; } @@ -1129,13 +1460,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var imageType = (isQueryDicom && isQueryNoneDicom) ? ImageType.DicomAndNoneDicom : (isQueryDicom ? ImageType.Dicom : ImageType.NoneDicom); - var taskIdList = inQuery.SubjectVisitTaskList.Select(t => t.TaskId).ToList(); + var taskIdList = inQuery.SubjectVisitTaskList.Select(t => t.TaskId).Distinct().ToList(); - var subjectVisitIdList = inQuery.SubjectVisitTaskList.Select(t => t.SubjectVisitId).ToList(); + var subjectVisitIdList = inQuery.SubjectVisitTaskList.Select(t => t.SubjectVisitId).Distinct().ToList(); var trialSiteCode = _visitTaskRepository.Where(t => t.Id == taskIdList.FirstOrDefault()).Select(t => t.IsAnalysisCreate ? t.BlindTrialSiteCode : t.Subject.TrialSite.TrialSiteCode).FirstOrDefault() ?? string.Empty; var dirDic = new Dictionary(); + #region 在下载前先处理DIR文件 //有传输语法值的导出 才生成DIR @@ -1144,6 +1476,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var dirInfolist = _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))).SelectMany(t => t.StudyList) .Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true) .SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading)) .Select(t => new StudyDIRInfo() { @@ -1181,12 +1514,57 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }).ToList(); + if (inQuery.IsImageSegmentLabel == false) + { + var taskDirInfolist = _taskInstanceRepository.Where(t => t.SubjectVisitId != null) + .Where(t => subjectVisitIdList.Contains((Guid)t.SubjectVisitId)).Select(t => new StudyDIRInfo() + { + IsTaskStudy = true, + SubjectVisitId = (Guid)t.SubjectVisitId, + + DicomStudyId = t.TaskStudy.Id, + + PatientId = t.TaskStudy.PatientId, + PatientName = t.TaskStudy.PatientName, + PatientBirthDate = t.TaskStudy.PatientBirthDate, + PatientSex = t.TaskStudy.PatientSex, + + StudyInstanceUid = t.StudyInstanceUid, + StudyId = t.TaskStudy.StudyId, + DicomStudyDate = t.TaskStudy.DicomStudyDate, + DicomStudyTime = t.TaskStudy.DicomStudyTime, + AccessionNumber = t.TaskStudy.AccessionNumber, + + StudyDescription = t.TaskStudy.Description, + + SeriesInstanceUid = t.TaskSeries.SeriesInstanceUid, + Modality = t.TaskSeries.Modality, + DicomSeriesDate = t.TaskSeries.DicomSeriesDate, + DicomSeriesTime = t.TaskSeries.DicomSeriesTime, + SeriesNumber = t.TaskSeries.SeriesNumber, + SeriesDescription = t.TaskSeries.Description, + + InstanceId = t.Id, + SopInstanceUid = t.SopInstanceUid, + SOPClassUID = t.SOPClassUID, + InstanceNumber = t.InstanceNumber, + MediaStorageSOPClassUID = t.MediaStorageSOPClassUID, + MediaStorageSOPInstanceUID = t.MediaStorageSOPInstanceUID, + TransferSytaxUID = t.TransferSytaxUID, + + }).ToList(); + + dirInfolist.AddRange(taskDirInfolist); + } + var pathInfo = await _subjectRepository.Where(t => t.Id == inQuery.SubjectId).Select(t => new { t.TrialId, SubjectId = t.Id }).FirstNotNullAsync(); foreach (var item in dirInfolist.GroupBy(t => new { t.StudyInstanceUid, t.DicomStudyId })) { var visitId = item.First().SubjectVisitId; + var isTaskStudy = item.First().IsTaskStudy; + var ossFolder = $"{pathInfo.TrialId}/Image/{pathInfo.SubjectId}/{visitId}/{item.Key.StudyInstanceUid}"; var isSucess = await SafeBussinessHelper.RunAsync(async () => await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), dirDic, ossFolder, _oSSService)); @@ -1194,7 +1572,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc if (isSucess) { - await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + if (isTaskStudy) + { + await _taskStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new TaskStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + } + else + { + await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + } } } @@ -1204,16 +1589,21 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))) //一致性分析,导致查询出来两条数据 - join visitTask in _visitTaskRepository.Where(t => taskIdList.Contains(t.Id)) - - on sv.Id equals visitTask.SourceSubjectVisitId + join visitTask in _visitTaskRepository.Where(t => taskIdList.Contains(t.Id)) on sv.Id equals visitTask.SourceSubjectVisitId into cc + from leftVisitTask in cc.DefaultIfEmpty() select new ImageDownloadDto() { + TrialId = sv.TrialId, + SubjectId = sv.SubjectId, + TrialSiteCode = sv.TrialSite.TrialSiteCode, + VisitId = sv.Id, + SubjectCode = inQuery.SubjectCode, VisitName = sv.VisitName, - TaskBlindName = visitTask.TaskBlindName, + TaskBlindName = leftVisitTask.TaskBlindName, StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true) .Select(u => new DownloadDicomStudyDto() { PatientId = u.PatientId, @@ -1237,7 +1627,34 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }).ToList() }).ToList(), - NoneDicomStudyList = sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) + TaskStudyList = + sv.TaskStudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) + //.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + .Select(u => new DownloadDicomStudyDto() + { + PatientId = u.PatientId, + StudyTime = u.StudyTime, + StudyCode = u.StudyCode, + StudyInstanceUid = u.StudyInstanceUid, + StudyDIRPath = u.StudyDIRPath, + + SeriesList = u.SeriesList.Select(z => new DownloadDicomSeriesDto() + { + Modality = z.Modality, + + InstanceList = z.InstanceList.Select(k => new DownloadDicomInstanceDto() + { + IsEncapsulated = k.IsEncapsulated, + InstanceId = k.Id, + FileName = string.Empty, + Path = k.Path, + FileSize = k.FileSize + }).ToList() + }).ToList() + }).ToList() + , + + NoneDicomStudyList = inQuery.IsImageSegmentLabel != false ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) .Where(t => t.IsReading) .Select(nd => new DownloadNoneDicomStudyDto() @@ -1253,6 +1670,23 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc FileType = file.FileType, FileSize = file.FileSize }).ToList() + }).ToList() : + sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) + //.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) + .Where(t => t.IsReading) + .Select(nd => new DownloadNoneDicomStudyDto() + { + Modality = nd.Modality, + StudyCode = nd.StudyCode, + ImageDate = nd.ImageDate, + + FileList = nd.ImageLabelNoneDicomFileList.Where(t => t.IsReading).Select(file => new DownloadNoneDicomFileDto() + { + FileName = file.FileName, + Path = file.Path, + FileType = file.FileType, + FileSize = file.FileSize + }).ToList() }).ToList() }; @@ -1262,6 +1696,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc foreach (var result in list) { + //靶段标注处理 + if (inQuery.IsImageSegmentLabel == false) + { + result.StudyList.AddRange(result.TaskStudyList); + } + foreach (var item in result.StudyList.SelectMany(t => t.SeriesList).SelectMany(t => t.InstanceList)) { var key = item.InstanceId.ToString(); @@ -1307,11 +1747,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc [HttpPost] public async Task GetTaskUploadedDicomStudyList(IRTaskUploadedDicomStudyQuery inQuery) { - var info = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId) + var info = await _visitTaskRepository + .WhereIf(inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)//正常后处理 .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); - var query = _taskStudyRepository.Where(t => t.VisitTaskId == inQuery.VisitTaskId) - .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + var query = _taskStudyRepository + .WhereIf(inQuery.VisitTaskId != null, t => t.VisitTaskId == inQuery.VisitTaskId)//正常后处理 + .WhereIf(inQuery.VisitTaskId == null && inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId)//靶段标注处理的影像 + .WhereIf(info.IsImageFilter && inQuery.VisitTaskId != null, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) .Select(t => new { StudyId = t.Id, @@ -1804,6 +2247,40 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc #endregion + #region 第三人预处理影响上传下载 + + /// + /// 获取受试者级别 访视标注列表 + /// + /// + [HttpPost] + public async Task>> GetTrialSubjectVisitMarkList(SubjectVisitMarkQuery inQuery) + { + var list = await _subjectRepository.Where(t => t.TrialId == inQuery.TrialId && t.SubjectDoctorList.Any()) + .WhereIf(inQuery.SubjectCode.IsNotNullOrEmpty(), t => t.Code.Contains(inQuery.SubjectCode)) + .WhereIf(inQuery.IsUrgent != null, t => t.IsUrgent == inQuery.IsUrgent) + .Select(t => new SubjectVisitMarkDTO() + { + TrialId = t.TrialId, + SubjectId = t.Id, + SubjectCode = t.Code, + IsUrgent = t.IsUrgent, + VisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(), + MarkVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(t => t.TaskStudyList.Any()), + + DicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.StudyList).Count(), + MarkDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.TaskStudyList).Count(), + + NoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Count(), + MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Where(t => t.ImageLabelNoneDicomFileList.Any()).Count(), + }).ToPagedListAsync(inQuery); + + return ResponseOutput.Ok(list); + } + + + + #endregion #region 之前后端下载废弃 diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs index 8f7d4b85e..bf23ed095 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs @@ -4,6 +4,7 @@ // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 //-------------------------------------------------------------------- using IRaCIS.Core.Application.Filter; +using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using Medallion.Threading; @@ -34,7 +35,8 @@ namespace IRaCIS.Core.Application.Contracts [FromQuery] Guid? nonedicomStudyId, [FromQuery] bool isFilterZip, [FromQuery] Guid? visitTaskId, - [FromQuery] bool isReading) + [FromQuery] bool isReading, + [FromQuery] bool? isImageSegmentLabel) { var qcAuditState = await _subjectVisitRepository.Where(s => s.Id == subjectVisitId).Select(t => t.AuditState).FirstOrDefaultAsync(); @@ -45,26 +47,53 @@ namespace IRaCIS.Core.Application.Contracts var isViewDelete = !isQCFinished; IQueryable noneDicomStudyQueryable = default; - if (visitTaskId == null) + if (visitTaskId == null || visitTaskId == Guid.Empty) { - //质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才 - noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete) - .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) - .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + if (visitTaskId == null) + { + + //质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才 + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete) + .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) + .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading }); + } + else + { + //靶段标注上传后查看影像 + + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete) + .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) + .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading }); + + } - .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading }); } else { - var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); + var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionType, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); + + if ((taskinfo.CriterionType == CriterionType.IVUS || taskinfo.CriterionType == CriterionType.OCT) && isImageSegmentLabel == false) + { + //后处理原始影像预览 + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete) + .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) + .Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) + .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading }); + } + else + { + noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.TaskNoneDicomFileList.Any(t => t.VisitTaskId == visitTaskId), ignoreQueryFilters: isViewDelete) + .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) + .Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) + .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) + .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading }); + } - noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.TaskNoneDicomFileList.Any(t => t.VisitTaskId == visitTaskId), ignoreQueryFilters: isViewDelete) - .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false) - .Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) - .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId) - .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading }); } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs index fccb8fb3c..4b271380f 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs @@ -91,7 +91,7 @@ namespace IRaCIS.Core.Application.Service CreateMap(); CreateMap() .ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.SubjectVisit.Subject.Code)) - .ForMember(o => o.VisitName, t => t.MapFrom(u => u.SubjectVisit.VisitName)); + .ForMember(o => o.VisitName, t => t.MapFrom(u => u.SubjectVisit.VisitName)); CreateMap(); @@ -136,6 +136,11 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.ReadingSeriesCount, u => u.MapFrom(s => s.SeriesList.Where(t => t.IsReading).Count())) .ForMember(d => d.ReadingInstanceCount, u => u.MapFrom(s => s.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading).Count())); + CreateMap() + //.ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.SubjectVisitId)) + .ForMember(d => d.ReadingSeriesCount, u => u.MapFrom(s => s.SeriesCount)) + .ForMember(d => d.ReadingInstanceCount, u => u.MapFrom(s => s.InstanceCount)); + CreateMap() .ForMember(d => d.ReadingFileCount, u => u.MapFrom(s => s.NoneDicomFileList.Where(t => t.IsReading).Count())); @@ -145,7 +150,7 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.CriterionModalitys, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionModalitys)) .ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.IsAnalysisCreate == true ? u.BlindSubjectCode : u.Subject.Code)) .ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.StudyList)) - .ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.NoneDicomStudyList.Where(t => t.IsReading))); + .ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.NoneDicomStudyList.Where(t => t.IsReading))); CreateMap() .ForMember(d => d.UserFullName, u => u.MapFrom(s => s.CreateUserRole.FullName)) @@ -158,7 +163,25 @@ namespace IRaCIS.Core.Application.Service CreateMap(); CreateMap(); - + + + CreateMap() + .ForMember(d => d.SourceSubjectVisitId, u => u.MapFrom(u => u.Id)) + .ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.Subject.Code)) + .ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.StudyList)) + .ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.NoneDicomStudyList.Where(t => t.IsReading))); + + + + CreateMap() + .ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.SubjectVisitId)) + .ForMember(d => d.FileCount, u => u.MapFrom(s => s.ImageLabelNoneDicomFileList.Count())) + .ForMember(d => d.ReadingFileCount, u => u.MapFrom(s => s.ImageLabelNoneDicomFileList.Count())); + + CreateMap(); + + + } } diff --git a/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs index bce0b65c3..1a673eb78 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs @@ -31,6 +31,11 @@ namespace IRaCIS.Core.Application.Contracts { } + public class ImageLabelNoneDicomStudyView : NoneDicomStudyView + { + + } + ///NoneDicomStudyQuery 列表查询参数模型 public class NoneDicomStudyQuery { @@ -55,6 +60,8 @@ namespace IRaCIS.Core.Application.Contracts public string Modality { get; set; } = string.Empty; public DateTime ImageDate { get; set; } public string ModifyReason { get; set; } + + public string BodyPartForEditOther { get; set; } } /// NoneDicomStudyAddOrEdit 列表查询参数模型 diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs index 396b6213d..897dca627 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs @@ -21,6 +21,8 @@ namespace IRaCIS.Core.Application.Contracts.DTO public string BodyPart { get; set; } = String.Empty; public string ModifyReason { get; set; } + + public string BodyPartForEditOther { get; set; } } diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs index a756d131b..4a44ee0e1 100644 --- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs @@ -755,6 +755,13 @@ namespace IRaCIS.Core.Application.Service .OrderBy(t => t.CreateTime).ThenBy(t => t.FileName))) .ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode)); + CreateMap() + .ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s => + s.ImageLabelNoneDicomFileList.Where(t => isFilterZip ? !t.FileType.Contains(StaticData.FileType.Zip) : true) + .Where(t => isReading ? t.IsReading && t.IsDeleted == false : true) + .OrderBy(t => t.CreateTime).ThenBy(t => t.FileName))) + .ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode)); + CreateMap() .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code)) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 51acf5bb5..f2663d7ec 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -6,9 +6,11 @@ using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; +using IRaCIS.Core.Infrastructure.Extention; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; +using Org.BouncyCastle.Asn1.Tsp; namespace IRaCIS.Core.Application.Services { @@ -19,7 +21,7 @@ namespace IRaCIS.Core.Application.Services IRepository _noneDicomStudyRepository, IRepository _visitTaskRepository, IRepository _readingTableAnswerRowInfoRepository, - //IRepository _readingCustomTagRepository, + //IRepository _readingCustomTagRepository, IRepository _readingTaskQuestionMark, IRepository _noneDicomStudyFileRepository, IRepository _subjectRepository, @@ -222,27 +224,42 @@ namespace IRaCIS.Core.Application.Services var isImageFilter = false; var criterionModalitys = ""; - if (visitTaskId != null) + var criterionType = CriterionType.NoCriterion; + + var isVisitTask = false; + + bool? isImageSegmentLabel = null; + if (visitTaskId != null && visitTaskId != Guid.Empty) { + isVisitTask = true; var info = await _visitTaskRepository.Where(t => t.Id == visitTaskId) - .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); + .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys, t.TrialReadingCriterion.CriterionType }).FirstNotNullAsync(); isImageFilter = info.IsImageFilter; criterionModalitys = info.CriterionModalitys; + + criterionType = info.CriterionType; + + if (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS) + { + isImageSegmentLabel = true; + } } var studyList = await _dicomStudyRepository.Where(t => t.TrialId == trialId && t.SubjectVisitId == sujectVisitId).IgnoreQueryFilters() - .Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) - .WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false) - .Select(k => new VisitStudyDTO() - { - InstanceCount = k.InstanceCount, - Modalities = k.Modalities, - //SeriesCount = k.SeriesCount, - StudyCode = k.StudyCode, - StudyId = k.Id - }).ToListAsync(); + .Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + .WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false) + //预览靶段标注上传的影像 影像后处理 上传了新的影像 还要原始dsa + .WhereIf(isImageSegmentLabel == true && isVisitTask && (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT") + .Select(k => new VisitStudyDTO() + { + InstanceCount = k.InstanceCount, + Modalities = k.Modalities, + //SeriesCount = k.SeriesCount, + StudyCode = k.StudyCode, + StudyId = k.Id + }).ToListAsync(); var studyIds = studyList.Select(t => t.StudyId).ToList(); @@ -285,12 +302,29 @@ namespace IRaCIS.Core.Application.Services t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count(); } + //预览靶段标注上传的影像 + if (isImageSegmentLabel == true && isVisitTask) + { + var taskStudyList = await _taskStudyRepository.Where(t => t.SubjectVisitId == sujectVisitId) + .WhereIf(isImageFilter, t => ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + foreach (var study in taskStudyList) + { + study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList(); + + study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count(); + } + + studyList.AddRange(taskStudyList); + } - return studyList.Where(x=>x.SeriesList.Count()>0).ToList(); + return studyList.Where(x => x.SeriesList.Count() > 0).ToList(); + + - //return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList()); } @@ -468,62 +502,75 @@ namespace IRaCIS.Core.Application.Services var studyList = new List(); - var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).Select(t => new { t.TrialReadingCriterionId, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys, t.ReadingTaskState, TaskStudyCount = t.TaskStudyList.Count }).FirstNotNullAsync(); - - //影像后处理 上传了新的影像 - if (taskInfo.TaskStudyCount > 0) + var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).Select(t => new { + t.TrialReadingCriterionId, + t.TrialReadingCriterion.CriterionType, + t.TrialReadingCriterion.IsImageFilter, + t.TrialReadingCriterion.CriterionModalitys, + t.ReadingTaskState, - var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId && t.VisitTaskId == indto.VisitTaskId) - .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) - .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + //是否有了后处理的dicom检查 + IsHaveTaskStudy = t.TaskStudyList.Any(), + //是否有了后处理的NoneDicom检查 + IsHaveTaskNoneDicomStudyFile = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.TaskNoneDicomFileList.Where(t => t.VisitTaskId == indto.VisitTaskId)).Any(), + //是否有了标注的dicom检查 + IsMarkDicomStudy = t.SourceSubjectVisit.TaskStudyList.Any(), + //是否有了标注的NoneDicom检查 + IsMarkNoneDicomStudy = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.ImageLabelNoneDicomFileList).Any() - foreach (var study in taskStudyList) + }).FirstNotNullAsync(); + + + + #region dicom 检查查询 + + //如果是手动生成的标准,需要过滤检查和序列数据 + + var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false); + + var dicomStudyList = await _dicomStudyRepository.Where(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId) + .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) + .WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading)) + //影像后处理 上传了新的影像 还要原始dsa + .WhereIf(taskInfo.IsHaveTaskStudy + && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), + t => t.ModalityForEdit == "XA") + + .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy && taskInfo.CriterionType == CriterionType.IVUS, + t => t.ModalityForEdit == "XA" ) + + .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy && taskInfo.CriterionType == CriterionType.OCT, + t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT") + + .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy == false + && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), + t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" || t.ModalityForEdit == "IVUS") + + //其他 不应该看原始影像 + .WhereIf(taskInfo.IsHaveTaskStudy && (taskInfo.CriterionType != CriterionType.OCT && taskInfo.CriterionType != CriterionType.IVUS), t => false) + .Select(k => new VisitStudyDTO() { - study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList(); + InstanceCount = k.InstanceCount, + StudyName = k.StudyName, + Modalities = k.Modalities, + //SeriesCount = k.SeriesCount, + StudyCode = k.StudyCode, + StudyId = k.Id, - //foreach (var series in study.SeriesList) - //{ - // series.WindowCenter = series.InstanceInfoList.FirstOrDefault()!.WindowCenter; - // series.WindowWidth = series.InstanceInfoList.FirstOrDefault()!.WindowWidth; - //} - //study.SeriesCount = study.SeriesList.Count; + BodyPartForEdit = k.BodyPartForEdit, + BodyPartForEditOther = k.BodyPartForEditOther - study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count(); - } - studyList.AddRange(taskStudyList); + }).ToListAsync(); - } - else + + var studyIds = dicomStudyList.Select(t => t.StudyId).ToList(); + + if (studyIds.Count > 0) { - #region dicom 检查查询 - - //如果是手动生成的标准,需要过滤检查和序列数据 - - var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false); - - var dicomStudyList = await _dicomStudyRepository.Where(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId) - .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) - .WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading)) - .Select(k => new VisitStudyDTO() - { - InstanceCount = k.InstanceCount, - StudyName = k.StudyName, - Modalities = k.Modalities, - //SeriesCount = k.SeriesCount, - StudyCode = k.StudyCode, - StudyId = k.Id, - - BodyPartForEdit=k.BodyPartForEdit, - BodyPartForEditOther=k.BodyPartForEditOther - - - }).ToListAsync(); - var studyIds = dicomStudyList.Select(t => t.StudyId).ToList(); - var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId) && t.IsReading) - .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath, t.IsReading, t.FileSize }).ToListAsync(); + .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath, t.IsReading, t.FileSize }).ToListAsync(); List seriesLists = await _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId)) .WhereIf(isManualGenerate == false, t => t.IsReading) @@ -561,155 +608,176 @@ namespace IRaCIS.Core.Application.Services } studyList.AddRange(dicomStudyList); + } - #endregion + //影像后处理 上传了新的影像 + if (taskInfo.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy) + { - #region dicom 关键序列处理 + var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId) + .WhereIf(taskInfo.IsHaveTaskStudy, t => t.VisitTaskId == indto.VisitTaskId) + .WhereIf(taskInfo.IsHaveTaskStudy == false && (taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy), t => t.SubjectVisitId == indto.SujectVisitId) + .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - //已经签名的任务,加关键序列 - if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned) + foreach (var study in taskStudyList) { - var rowInfoList = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).OrderBy(x => x.ReadingQuestionTrial.ShowOrder).ThenBy(x => x.RowIndex).Select(x => new StudyInstanceInfo() + study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList(); + + study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count(); + } + + studyList.AddRange(taskStudyList); + } + + #endregion + + #region dicom 关键序列处理 + + //已经签名的任务,加关键序列 + if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned) + { + var rowInfoList = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).OrderBy(x => x.ReadingQuestionTrial.ShowOrder).ThenBy(x => x.RowIndex).Select(x => new StudyInstanceInfo() + { + ShowOrder = x.ReadingQuestionTrial.ShowOrder, + RowIndex = x.RowIndex, + SeriesId = x.SeriesId, + StudyId = x.StudyId, + InstanceId = x.InstanceId, + NumberOfFrames = x.NumberOfFrames, + CreateTime = x.CreateTime, + + }).ToListAsync(); + + + // 这个表的数据已经移动到 _readingTaskQuestionMark 了 + //var customoList = await _readingCustomTagRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo() + //{ + // ShowOrder = 0, + // RowIndex = 0m, + // SeriesId = x.SeriesId, + // StudyId = x.StudyId, + // InstanceId = x.InstanceId, + // NumberOfFrames = x.NumberOfFrames, + // CreateTime = x.CreateTime, + //}).ToListAsync(); + //rowInfoList.AddRange(customoList); + + var questionMarkList = await _readingTaskQuestionMark.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo() + { + ShowOrder = x.ReadingQuestionTrial == null ? 0 : x.ReadingQuestionTrial.ShowOrder, + RowIndex = 0m, + SeriesId = x.SeriesId, + StudyId = x.StudyId, + InstanceId = x.InstanceId, + NumberOfFrames = x.NumberOfFrames, + CreateTime = x.CreateTime, + }).ToListAsync(); + rowInfoList.AddRange(questionMarkList); + + var thisStudyIds = rowInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.StudyId).Distinct().ToList(); + var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList(); + if (rowInfoList.Count > 0) + { + var thisVisitTaskStudy = await _dicomStudyRepository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO() { - ShowOrder = x.ReadingQuestionTrial.ShowOrder, - RowIndex = x.RowIndex, - SeriesId = x.SeriesId, - StudyId = x.StudyId, - InstanceId = x.InstanceId, - NumberOfFrames = x.NumberOfFrames, - CreateTime=x.CreateTime, - - }).ToListAsync(); + InstanceCount = k.InstanceCount, + //SeriesCount = k.SeriesCount, - // 这个表的数据已经移动到 _readingTaskQuestionMark 了 - //var customoList = await _readingCustomTagRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo() - //{ - // ShowOrder = 0, - // RowIndex = 0m, - // SeriesId = x.SeriesId, - // StudyId = x.StudyId, - // InstanceId = x.InstanceId, - // NumberOfFrames = x.NumberOfFrames, - // CreateTime = x.CreateTime, - //}).ToListAsync(); - //rowInfoList.AddRange(customoList); + StudyId = k.Id, + IsCriticalSequence = true, - var questionMarkList = await _readingTaskQuestionMark.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo() + }).FirstOrDefaultAsync(); + + if (thisVisitTaskStudy != null) { - ShowOrder = x.ReadingQuestionTrial==null?0: x.ReadingQuestionTrial.ShowOrder, - RowIndex = 0m, - SeriesId = x.SeriesId, - StudyId = x.StudyId, - InstanceId = x.InstanceId, - NumberOfFrames = x.NumberOfFrames, - CreateTime = x.CreateTime, - }).ToListAsync(); - rowInfoList.AddRange(questionMarkList); + thisVisitTaskStudy.StudyId = default(Guid); + var item = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber). + ThenBy(s => s.SeriesTime) + .ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); - var thisStudyIds = rowInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.StudyId).Distinct().ToList(); - var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList(); - if (rowInfoList.Count > 0) - { - var thisVisitTaskStudy = await _dicomStudyRepository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO() + if (item != null) { - InstanceCount = k.InstanceCount, + item.SeriesInstanceUid = string.Empty; - //SeriesCount = k.SeriesCount, + var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList(); - StudyId = k.Id, - IsCriticalSequence = true, + item.InstanceInfoList = await _dicomInstanceRepository.Where(t => markInstanceIdList.Contains(t.Id)).OrderBy(s => s.DicomSerie.SeriesNumber).ThenBy(s => s.DicomSerie.SeriesTime).ThenBy(x => x.InstanceTime).Select(k => + new InstanceBasicInfo() + { + Id = k.Id, + NumberOfFrames = k.NumberOfFrames, + HtmlPath = k.HtmlPath, + Path = k.Path, + InstanceNumber = k.InstanceNumber, + StudyId = k.StudyId, + SeriesId = k.SeriesId, + FileSize = k.FileSize + }).ToListAsync(); - }).FirstOrDefaultAsync(); - - if (thisVisitTaskStudy != null) - { - thisVisitTaskStudy.StudyId = default(Guid); - var item = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber). - ThenBy(s => s.SeriesTime) - .ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); - - if (item != null) + item.InstanceInfoList.ForEach(x => { - item.SeriesInstanceUid = string.Empty; + x.RowDate = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id)?.CreateTime ?? DateTime.Now; + var keyFramesList = rowInfoList.Where(y => y.InstanceId == x.Id && y.NumberOfFrames != 0 && y.NumberOfFrames != null).Select(y => y.NumberOfFrames).Distinct().ToList(); - var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList(); - - item.InstanceInfoList = await _dicomInstanceRepository.Where(t => markInstanceIdList.Contains(t.Id)).OrderBy(s => s.DicomSerie.SeriesNumber).ThenBy(s => s.DicomSerie.SeriesTime).ThenBy(x => x.InstanceTime).Select(k => - new InstanceBasicInfo() - { - Id = k.Id, - NumberOfFrames = k.NumberOfFrames, - HtmlPath = k.HtmlPath, - Path = k.Path, - InstanceNumber = k.InstanceNumber, - StudyId = k.StudyId, - SeriesId = k.SeriesId, - FileSize = k.FileSize - }).ToListAsync(); - - item.InstanceInfoList.ForEach(x => + if (keyFramesList.Count() > 0) { - x.RowDate = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id)?.CreateTime ?? DateTime.Now; - var keyFramesList = rowInfoList.Where(y => y.InstanceId == x.Id && y.NumberOfFrames != 0 && y.NumberOfFrames != null).Select(y => y.NumberOfFrames).Distinct().ToList(); + x.KeyFramesList = keyFramesList; + } - if (keyFramesList.Count() > 0) - { - x.KeyFramesList = keyFramesList; - } + var item = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id); + if (item != null) + { + x.ShowOrder = item.ShowOrder; + x.RowIndex = item.RowIndex; + } - var item = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id); - if (item != null) - { - x.ShowOrder = item.ShowOrder; - x.RowIndex = item.RowIndex; - } + }); - }); - - item.InstanceInfoList = item.InstanceInfoList.OrderBy(x => x.ShowOrder).ThenBy(x=>x.RowIndex).ThenBy(x=>x.RowDate).ToList(); + item.InstanceInfoList = item.InstanceInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).ThenBy(x => x.RowDate).ToList(); - item.InstanceCount = item.InstanceInfoList.Count; + item.InstanceCount = item.InstanceInfoList.Count; - item.Description = "Key Series"; - - var modalityList = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ; - item.Modality = string.Join(",", modalityList); - thisVisitTaskStudy.SeriesList.Add(item); - //thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count; - } - - - - studyList.Insert(0, thisVisitTaskStudy); + item.Description = "Key Series"; + var modalityList = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ; + item.Modality = string.Join(",", modalityList); + thisVisitTaskStudy.SeriesList.Add(item); + //thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count; } + studyList.Insert(0, thisVisitTaskStudy); + } - studyList.ForEach(x => - { - x.SeriesList.ForEach(y => - { - y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.Id); - }); - }); + } + studyList.ForEach(x => + { + x.SeriesList.ForEach(y => + { + y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.Id); + }); - #endregion + }); } + #endregion + + #region 非Dicom 检查查询 var noDicomList = await _noneDicomStudyRepository.Where(x => x.TrialId == indto.TrialId && x.SubjectVisitId == indto.SujectVisitId && x.NoneDicomFileList.Any(t => !t.FileType.Contains(StaticData.FileType.Zip))) - .Where(t => t.IsReading) - .WhereIf(taskInfo.IsImageFilter == true, t => taskInfo.CriterionModalitys.Contains(t.Modality)).ToListAsync(); + .Where(t => t.IsReading) + .WhereIf(taskInfo.IsImageFilter, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) + .ToListAsync(); List noDicomStudyList = noDicomList.Select(x => new VisitStudyDTO() @@ -722,20 +790,22 @@ namespace IRaCIS.Core.Application.Services StudyCode = x.StudyCode, IsDicom = false, - BodyPartForEdit=x.BodyPart, - BodyPartForEditOther=x.BodyPartForEditOther + BodyPartForEdit = x.BodyPart, + BodyPartForEditOther = x.BodyPartForEditOther }).ToList(); - var isExistTaskNoneDicomFile = _noneDicomStudyFileRepository.Any(t => t.VisitTaskId == indto.VisitTaskId); + //var isExistTaskNoneDicomFile = _noneDicomStudyFileRepository.Any(t => t.VisitTaskId == indto.VisitTaskId); foreach (var item in noDicomStudyList) { var nodicom = noDicomList.Where(x => x.Id == item.StudyId).First(); var instanceCount = await _noneDicomStudyFileRepository.Where(t => t.IsReading) - .WhereIf(isExistTaskNoneDicomFile, x => x.OriginNoneDicomStudyId == item.StudyId) - .WhereIf(isExistTaskNoneDicomFile == false, x => x.NoneDicomStudyId == item.StudyId).CountAsync(); + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == true, x => x.ImageLabelNoneDicomStudyId == item.StudyId) + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile && taskInfo.IsMarkNoneDicomStudy, x => x.OriginNoneDicomStudyId == item.StudyId) + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == false, x => x.NoneDicomStudyId == item.StudyId) + .CountAsync(); if (instanceCount == 0) { @@ -756,8 +826,10 @@ namespace IRaCIS.Core.Application.Services SubjectVisitId=nodicom.SubjectVisitId, SubjectId=nodicom.SubjectId, SeriesNumber=1, - NoneDicomFileFirstFile=await _noneDicomStudyFileRepository.WhereIf(isExistTaskNoneDicomFile,x=>x.OriginNoneDicomStudyId== item.StudyId) - .WhereIf(isExistTaskNoneDicomFile==false, x=>x.NoneDicomStudyId == item.StudyId) + NoneDicomFileFirstFile=await _noneDicomStudyFileRepository + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == true, x => x.ImageLabelNoneDicomStudyId == item.StudyId) + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile && taskInfo.IsMarkNoneDicomStudy, x => x.OriginNoneDicomStudyId == item.StudyId) + .WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == false, x => x.NoneDicomStudyId == item.StudyId) .Where(x=> !x.FileType.Contains(StaticData.FileType.Zip)).Select(x=>x.Path).FirstOrDefaultAsync(), } diff --git a/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs b/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs index 82fc94f01..68307f231 100644 --- a/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs @@ -125,7 +125,9 @@ namespace IRaCIS.Core.Application.Service CreateMap(); CreateMap(); - + CreateMap() + .ForMember(d => d.StudyId, u => u.MapFrom(s => s.Id)) + .ForMember(d => d.SeriesList, u => u.MapFrom(s => s.SeriesList)); } } diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 886a86981..3f67b2ca0 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -61,24 +61,24 @@ namespace IRaCIS.Core.Domain.Share /// 裁判匹配类型 /// public enum JudgeDifferenceType - { - /// - /// > - /// - Greater = 0, + { + /// + /// > + /// + Greater = 0, - /// - /// ≥ - /// - AboveOrEqual = 1, + /// + /// ≥ + /// + AboveOrEqual = 1, - } + } - /// - /// GetClinicalType - /// - public enum GetClinicalType + /// + /// GetClinicalType + /// + public enum GetClinicalType { /// @@ -130,11 +130,11 @@ namespace IRaCIS.Core.Domain.Share /// public enum GroupClassify { - /// - /// 质量问题 - /// - QualityProblem = 1, - + /// + /// 质量问题 + /// + QualityProblem = 1, + } /// @@ -142,7 +142,7 @@ namespace IRaCIS.Core.Domain.Share /// public enum ClinicalTableQuestionMark { - Test=1, + Test = 1, } /// @@ -182,12 +182,12 @@ namespace IRaCIS.Core.Domain.Share /// public enum ClinicalCalculateMark { - None = -1, + None = -1, - /// - /// + - /// - Add = 1, + /// + /// + + /// + Add = 1, /// /// - @@ -325,23 +325,23 @@ namespace IRaCIS.Core.Domain.Share /// 语言类型 /// public enum LanguageType - { + { - /// - /// 中文 - /// - Chinese = 0, + /// + /// 中文 + /// + Chinese = 0, - /// - /// 英文 - /// - English = 1 - } + /// + /// 英文 + /// + English = 1 + } - /// - /// 标准字典分类 - /// - public enum CrterionDictionaryGroup + /// + /// 标准字典分类 + /// + public enum CrterionDictionaryGroup { /// @@ -525,6 +525,12 @@ namespace IRaCIS.Core.Domain.Share //阅片期一致率 ReadingPeriodJudgeRatio_Export = 18, + TumorCDISC_Export = 20, + + IVUS_CDISC_Export = 21, + + OCT_CDISC_Export = 22, + } @@ -581,67 +587,67 @@ namespace IRaCIS.Core.Domain.Share Min = 9 } - /// - /// 数值单位 - /// - public enum ValueUnit - { - /// - /// 无 - /// - none = 0, + /// + /// 数值单位 + /// + public enum ValueUnit + { + /// + /// 无 + /// + none = 0, - /// - /// mm - /// - mm = 1, + /// + /// mm + /// + mm = 1, - /// - /// cm - /// - cm = 2, + /// + /// cm + /// + cm = 2, - /// - /// 个 - /// - individual = 3, + /// + /// 个 + /// + individual = 3, - /// - /// 自定义 - /// - Custom = 4, + /// + /// 自定义 + /// + Custom = 4, - /// - /// mm2 - /// - mm2 = 5, + /// + /// mm2 + /// + mm2 = 5, - /// - /// mm3 - /// - mm3 = 6, + /// + /// mm3 + /// + mm3 = 6, - /// - /// SUV - /// - SUV = 7, + /// + /// SUV + /// + SUV = 7, - /// - /// HU - /// - HU = 8, + /// + /// HU + /// + HU = 8, - /// - /// % - /// - percentage = 9, - } + /// + /// % + /// + percentage = 9, + } - /// - /// 数值类型 - /// - public enum ValueOfType + /// + /// 数值类型 + /// + public enum ValueOfType { /// @@ -668,7 +674,7 @@ namespace IRaCIS.Core.Domain.Share /// /// 分组 /// - Group=0, + Group = 0, /// /// 问题 @@ -751,7 +757,7 @@ namespace IRaCIS.Core.Domain.Share /// RECIST1Point1 = 1, - + /// /// Lugano 2014 @@ -878,46 +884,46 @@ namespace IRaCIS.Core.Domain.Share } - /// - /// 病灶分裂或合并 - /// - public enum SplitOrMergeType - { - /// - /// 分裂 - /// - Split = 0, + /// + /// 病灶分裂或合并 + /// + public enum SplitOrMergeType + { + /// + /// 分裂 + /// + Split = 0, - /// - /// 融合 - /// - Merge = 1, + /// + /// 融合 + /// + Merge = 1, - /// - /// 分裂主病灶 - /// - SplitMain = 2, + /// + /// 分裂主病灶 + /// + SplitMain = 2, /// /// 融合过 再之前任务融合了 /// - Merged=3, + Merged = 3, - /// - /// 融合主病灶 - /// - MergeMain = 4, + /// + /// 融合主病灶 + /// + MergeMain = 4, - /// - /// 融合过的主病灶 - /// - MergeMained = 5, - } + /// + /// 融合过的主病灶 + /// + MergeMained = 5, + } - /// - /// 是否存在或者NA - /// - public enum ExistOrNA + /// + /// 是否存在或者NA + /// + public enum ExistOrNA { /// /// NA @@ -934,7 +940,7 @@ namespace IRaCIS.Core.Domain.Share /// Exist = 1, - + } /// @@ -958,7 +964,7 @@ namespace IRaCIS.Core.Domain.Share /// Yes = 1, - + } /// @@ -1032,17 +1038,17 @@ namespace IRaCIS.Core.Domain.Share /// /// 存在 /// - Exist=1, + Exist = 1, /// /// 疑似 /// - Equivocal=2, - + Equivocal = 2, + /// /// 消失 /// - Loss =3, + Loss = 3, /// /// 无法评估 @@ -1277,48 +1283,48 @@ namespace IRaCIS.Core.Domain.Share /// public enum FDGPETOverallAssessment { - /// - /// NA - /// - NA=-1, - - /// - /// CMR - /// - CMR=1, - - /// - /// PMR - /// - PMR=2, - - /// - /// NMR - /// - NMR=3, - - /// - /// PMD - /// - PMD=4, - - /// - /// NE - /// - NE=5, - - /// - /// ND - /// - ND=6, - - } + /// + /// NA + /// + NA = -1, + + /// + /// CMR + /// + CMR = 1, + + /// + /// PMR + /// + PMR = 2, + + /// + /// NMR + /// + NMR = 3, + + /// + /// PMD + /// + PMD = 4, + + /// + /// NE + /// + NE = 5, + + /// + /// ND + /// + ND = 6, + + } -/// -/// 与基线相比摄取值变化 -/// -public enum SUVChangeVSBaseline + /// + /// 与基线相比摄取值变化 + /// + public enum SUVChangeVSBaseline { /// /// 增大 @@ -1340,7 +1346,7 @@ public enum SUVChangeVSBaseline /// NotEvaluable = 4, - NA=5, + NA = 5, } /// @@ -1552,10 +1558,10 @@ public enum SUVChangeVSBaseline iUPD = 7, iCPD = 8, - /// - /// PR/SD - /// - PRSD = 9, + /// + /// PR/SD + /// + PRSD = 9, } @@ -1599,17 +1605,17 @@ public enum SUVChangeVSBaseline /// ND = 5, - iCR=6, + iCR = 6, - iPR=7, + iPR = 7, - iSD=8, + iSD = 8, - iUPD=9, + iUPD = 9, + + iCPD = 10, - iCPD=10, - } @@ -1747,29 +1753,29 @@ public enum SUVChangeVSBaseline } - /// - /// 转化显示类型 - /// - public enum ConvertShowType - { + /// + /// 转化显示类型 + /// + public enum ConvertShowType + { - /// - /// 全都显示 - /// - All = 0, + /// + /// 全都显示 + /// + All = 0, - /// - /// 转化前显示 - /// - BeforeShow = 1, + /// + /// 转化前显示 + /// + BeforeShow = 1, - /// - /// 转化后显示 - /// - AfterShow = 2 - } + /// + /// 转化后显示 + /// + AfterShow = 2 + } - public enum ReadingSetType + public enum ReadingSetType { /// /// 影像阅片 @@ -1822,7 +1828,7 @@ public enum SUVChangeVSBaseline /// /// 不显示 /// - NotShow =3, + NotShow = 3, } @@ -1881,12 +1887,12 @@ public enum SUVChangeVSBaseline [Display(Name = "PDF")] PDF = 1, - /// - /// 结构化录入 - /// - Structuring = 2, + /// + /// 结构化录入 + /// + Structuring = 2, - } + } /// /// 数据类型 @@ -1934,7 +1940,7 @@ public enum SUVChangeVSBaseline /// /// 基线病灶 /// - BaselineLesions=4, + BaselineLesions = 4, /// /// 新靶病灶 @@ -1974,7 +1980,7 @@ public enum SUVChangeVSBaseline /// /// 脂质角度 /// - LipidAngle =111, + LipidAngle = 111, /// /// FCT @@ -2045,8 +2051,8 @@ public enum SUVChangeVSBaseline /// /// 检查 /// - Study=4, - } + Study = 4, + } /// /// 全局答案类型 @@ -2083,22 +2089,22 @@ public enum SUVChangeVSBaseline /// /// 存在 /// - Exist=1, + Exist = 1, /// /// 消失 /// - Loss=2, + Loss = 2, /// /// 无法评估 /// - NotEvaluable=3, + NotEvaluable = 3, /// /// 太小 /// - TooSmall=4, + TooSmall = 4, } /// @@ -2198,7 +2204,7 @@ public enum SUVChangeVSBaseline /// /// 病灶数量 /// - LesionNumber =11, + LesionNumber = 11, /// /// PPD @@ -2320,11 +2326,11 @@ public enum SUVChangeVSBaseline /// 匹配动脉段最小FCT /// MiniMumFCT = 1017, - - /// - /// 平均最小FCT - /// - AvgMinFCT=1018, + + /// + /// 平均最小FCT + /// + AvgMinFCT = 1018, /// /// 脂质角度平均值 @@ -2337,7 +2343,7 @@ public enum SUVChangeVSBaseline MaxAvgLipidAngle = 1020, /// - /// 待定指标 + /// 斑块类型 /// Undetermined = 1021, @@ -2450,22 +2456,22 @@ public enum SUVChangeVSBaseline /// /// 0级 /// - Level0=1, + Level0 = 1, /// /// 1级 /// - Level1=2, + Level1 = 2, /// /// 2级 /// - Level2=3, + Level2 = 3, /// /// 3级 /// - Level3=4, + Level3 = 4, } @@ -2474,44 +2480,44 @@ public enum SUVChangeVSBaseline /// 影像质量问题 /// public enum ImageQualityIssues - { - /// - /// 解剖不完整 - /// - IncompleteAnatomy = 1, + { + /// + /// 解剖不完整 + /// + IncompleteAnatomy = 1, - /// - /// 扫描断层丢失 - /// - MissingScanSlice=2, + /// + /// 扫描断层丢失 + /// + MissingScanSlice = 2, - /// - /// 存在运动伪影 - /// - MotionArtifactsPresent = 3, + /// + /// 存在运动伪影 + /// + MotionArtifactsPresent = 3, - /// - /// 关键解剖部位缺失 - /// - KeyAnatomyOutOfFieldOfView = 4, + /// + /// 关键解剖部位缺失 + /// + KeyAnatomyOutOfFieldOfView = 4, - /// - /// 其它(需要备注) - /// - OtherIssuesCommentsRequired=5, + /// + /// 其它(需要备注) + /// + OtherIssuesCommentsRequired = 5, - /// - /// PET-CT影像无法融合 - /// - PETCTFailureFuse = 6, + /// + /// PET-CT影像无法融合 + /// + PETCTFailureFuse = 6, - } + } - /// - /// 问题类型 这里序号关系着计算顺序 请勿修改 - /// - public enum QuestionType + /// + /// 问题类型 这里序号关系着计算顺序 请勿修改 + /// + public enum QuestionType { /// /// 靶病灶径线之和(SOD) @@ -2616,7 +2622,7 @@ public enum SUVChangeVSBaseline /// /// 疗效评估分组 /// - TherapeuticEffectEvaluationGroup=20, + TherapeuticEffectEvaluationGroup = 20, /// /// 访视点肿瘤评估 @@ -2731,12 +2737,12 @@ public enum SUVChangeVSBaseline /// /// 是否脑转移 /// - IsBrainMetastasis =43, + IsBrainMetastasis = 43, /// /// 影像质量评估 /// - ImageQualityAssessment=44, + ImageQualityAssessment = 44, /// /// Forrest出血部位 @@ -2753,10 +2759,10 @@ public enum SUVChangeVSBaseline /// LiverState = 47, - /// - /// 脾脏垂直径 - /// - SpleenLength = 48, + /// + /// 脾脏垂直径 + /// + SpleenLength = 48, /// /// 脾脏状态 @@ -2803,30 +2809,30 @@ public enum SUVChangeVSBaseline /// EvidenceFocalFDG = 57, - /// - /// 修改脾脏状态备注 - /// - SplenicStatusRemarks = 58, + /// + /// 修改脾脏状态备注 + /// + SplenicStatusRemarks = 58, - /// - /// 修改PET 5PS评分备注 - /// - PSScoreRemarks = 59, + /// + /// 修改PET 5PS评分备注 + /// + PSScoreRemarks = 59, - /// - /// 脾尖位置 - /// - SplenicTopPosition = 60, + /// + /// 脾尖位置 + /// + SplenicTopPosition = 60, - /// - /// 脾底位置 - /// - SplenicBottomPosition = 61, + /// + /// 脾底位置 + /// + SplenicBottomPosition = 61, - /// - /// 影像质量问题 - /// - ImageQualityProblem = 67, + /// + /// 影像质量问题 + /// + ImageQualityProblem = 67, /// /// 斑块1-PAV @@ -2858,6 +2864,26 @@ public enum SUVChangeVSBaseline /// Plaque3MinFCT = 1008, + /// + /// 靶段 + /// + TargetSegment = 1009, + + /// + /// 回撤中的图像帧数 + /// + PullbackFrameCount = 1010, + + /// + /// 分析图像帧数 + /// + AnalysisFrameCount = 1011, + + /// + /// 靶段 备注 + /// + TargetSegmentRemarks = 1012, + /// /// 脂肪分数总平均值 /// @@ -2871,10 +2897,10 @@ public enum SUVChangeVSBaseline -/// -/// PET 5PS 评分 -/// -public enum PET5PSScore + /// + /// PET 5PS 评分 + /// + public enum PET5PSScore { /// /// 5分 @@ -2913,85 +2939,85 @@ public enum PET5PSScore } - /// - /// 计算触发 // 用的是SaveQuestionType 这个字典 - /// - public enum ComputationTrigger //SaveQuestionType - { - /// - /// 分裂病灶 - /// - SplitLesions = -6, + /// + /// 计算触发 // 用的是SaveQuestionType 这个字典 + /// + public enum ComputationTrigger //SaveQuestionType + { + /// + /// 分裂病灶 + /// + SplitLesions = -6, - /// - /// 融合病灶 - /// - MergeLesion = -5, + /// + /// 融合病灶 + /// + MergeLesion = -5, - /// - /// 删除病灶 - /// - RemoveLesion = -4, + /// + /// 删除病灶 + /// + RemoveLesion = -4, - /// - /// 融合保存病灶 - /// - MergeSave = -3, + /// + /// 融合保存病灶 + /// + MergeSave = -3, - /// - /// CT保存病灶 - /// - CTSave = -2, + /// + /// CT保存病灶 + /// + CTSave = -2, - /// - /// 初始计算 - /// - InitialCalculation = -1, + /// + /// 初始计算 + /// + InitialCalculation = -1, - /// - /// 保存影像质量 - /// - ImageQuality = 0, + /// + /// 保存影像质量 + /// + ImageQuality = 0, - /// - /// 保存PDG-PET - /// - PDGPET = 1, + /// + /// 保存PDG-PET + /// + PDGPET = 1, - /// - /// 测量肝脏血池 - /// - LiverBloodPool = 2, + /// + /// 测量肝脏血池 + /// + LiverBloodPool = 2, - /// - /// 测量纵膈血池 - /// - MediastinalPool = 3, + /// + /// 测量纵膈血池 + /// + MediastinalPool = 3, - /// - /// 标注脾尖位置 - /// - SplenicApexPosition = 4, + /// + /// 标注脾尖位置 + /// + SplenicApexPosition = 4, - /// - /// 标注脾底位置 - /// - PositionSpleenFloor = 5, + /// + /// 标注脾底位置 + /// + PositionSpleenFloor = 5, - /// - /// 保存肝脏状态 - /// - LiverStatus = 6, + /// + /// 保存肝脏状态 + /// + LiverStatus = 6, - /// - /// 保存脾脏评估 - /// - SplenicEvaluation = 7, + /// + /// 保存脾脏评估 + /// + SplenicEvaluation = 7, /// /// 测量值 /// - MeasuredValue =8, + MeasuredValue = 8, /// /// 斑块数据统计 @@ -3011,7 +3037,7 @@ public enum PET5PSScore /// /// 保存eCRF /// - SaveEICRFQuestions=12, + SaveEICRFQuestions = 12, } /// @@ -3104,39 +3130,39 @@ public enum PET5PSScore /// AnswerCombination = 3, - /// - /// 相差绝对值 - /// - DifferenceAbsoluteValue = 4, + /// + /// 相差绝对值 + /// + DifferenceAbsoluteValue = 4, - /// - /// 相差百分比 - /// - PercentageDifference = 5, + /// + /// 相差百分比 + /// + PercentageDifference = 5, - } + } - /// - /// 显示限制 - /// - public enum LimitShow - { - /// - /// 全都显示 - /// - AllShow = 0, + /// + /// 显示限制 + /// + public enum LimitShow + { + /// + /// 全都显示 + /// + AllShow = 0, - /// - /// 基线显示 - /// - BaseLineShow = 1, + /// + /// 基线显示 + /// + BaseLineShow = 1, - /// - /// 随访显示 - /// - FollowShow = 2, + /// + /// 随访显示 + /// + FollowShow = 2, /// @@ -3147,10 +3173,10 @@ public enum PET5PSScore } - /// - /// 限制编辑 - /// - public enum LimitEdit + /// + /// 限制编辑 + /// + public enum LimitEdit { /// @@ -3273,7 +3299,7 @@ public enum PET5PSScore /// ReadCompleted = 5, - + } diff --git a/IRaCIS.Core.Domain/Image/NoneDicomStudy.cs b/IRaCIS.Core.Domain/Image/NoneDicomStudy.cs index ed3411ac7..e47f78062 100644 --- a/IRaCIS.Core.Domain/Image/NoneDicomStudy.cs +++ b/IRaCIS.Core.Domain/Image/NoneDicomStudy.cs @@ -11,6 +11,11 @@ public class NoneDicomStudy : BaseFullDeleteAuditEntity [JsonIgnore] public List TaskNoneDicomFileList { get; set; } + + [JsonIgnore] + public List ImageLabelNoneDicomFileList { get; set; } + + [JsonIgnore] public SubjectVisit SubjectVisit { get; set; } [JsonIgnore] diff --git a/IRaCIS.Core.Domain/Image/NoneDicomStudyFile.cs b/IRaCIS.Core.Domain/Image/NoneDicomStudyFile.cs index 6a6af41d7..ef9a9a0d2 100644 --- a/IRaCIS.Core.Domain/Image/NoneDicomStudyFile.cs +++ b/IRaCIS.Core.Domain/Image/NoneDicomStudyFile.cs @@ -14,6 +14,16 @@ public class NoneDicomStudyFile : BaseAddDeleteAuditEntity [ForeignKey("OriginNoneDicomStudyId")] [JsonIgnore] public NoneDicomStudy OriginNoneDicomStudy { get; set; } + + + [ForeignKey("ImageLabelNoneDicomStudyId")] + [JsonIgnore] + public NoneDicomStudy ImageMarkNoneDicomStudy { get; set; } + + + //[ForeignKey("ImageMarkSubjectVisitId")] + //[JsonIgnore] + //public SubjectVisit ImageMarkSubjectVisit { get; set; } #endregion public Guid NoneDicomStudyId { get; set; } @@ -33,5 +43,13 @@ public class NoneDicomStudyFile : BaseAddDeleteAuditEntity [Comment("为了不影响原始检查,跟任务绑定的 NoneDicomStudyId 为guid空 这个字段记录跟原始检查绑")] public Guid? OriginNoneDicomStudyId { get; set; } #endregion + + + #region 影像预处理访视Id NoneDicomStudyId 为guid空 + + //public Guid? ImageMarkSubjectVisitId { get; set; } + + public Guid? ImageLabelNoneDicomStudyId { get; set; } + #endregion } diff --git a/IRaCIS.Core.Domain/Image/TaskInstance.cs b/IRaCIS.Core.Domain/Image/TaskInstance.cs index 30ea8c974..4764eba92 100644 --- a/IRaCIS.Core.Domain/Image/TaskInstance.cs +++ b/IRaCIS.Core.Domain/Image/TaskInstance.cs @@ -12,6 +12,11 @@ public class TaskInstance : BaseFullAuditEntity, IEntitySeqId [JsonIgnore] [ForeignKey("StudyId")] public TaskStudy TaskStudy { get; set; } + + + [JsonIgnore] + [ForeignKey("SubjectVisitId")] + public SubjectVisit SubjectVisit { get; set; } #endregion public Guid SeqId { get; set; } @@ -37,6 +42,8 @@ public class TaskInstance : BaseFullAuditEntity, IEntitySeqId public Guid TrialId { get; set; } public Guid SubjectId { get; set; } + + public Guid? SubjectVisitId { get; set; } public Guid VisitTaskId { get; set; } public bool Anonymize { get; set; } public string Path { get; set; } = string.Empty; diff --git a/IRaCIS.Core.Domain/Image/TaskSeries.cs b/IRaCIS.Core.Domain/Image/TaskSeries.cs index e9bba7bb5..3476d085f 100644 --- a/IRaCIS.Core.Domain/Image/TaskSeries.cs +++ b/IRaCIS.Core.Domain/Image/TaskSeries.cs @@ -11,9 +11,16 @@ public class TaskSeries : BaseFullDeleteAuditEntity, IEntitySeqId [JsonIgnore] public List InstanceList { get; set; } + + + [JsonIgnore] + [ForeignKey("SubjectVisitId")] + public SubjectVisit SubjectVisit { get; set; } #endregion public Guid TrialId { get; set; } public Guid SubjectId { get; set; } + + public Guid? SubjectVisitId { get; set; } public Guid VisitTaskId { get; set; } public Guid SeqId { get; set; } public Guid StudyId { get; set; } diff --git a/IRaCIS.Core.Domain/Image/TaskStudy.cs b/IRaCIS.Core.Domain/Image/TaskStudy.cs index 2ec72d69a..16ea328ca 100644 --- a/IRaCIS.Core.Domain/Image/TaskStudy.cs +++ b/IRaCIS.Core.Domain/Image/TaskStudy.cs @@ -19,11 +19,18 @@ public class TaskStudy : BaseFullDeleteAuditEntity, IEntitySeqId [JsonIgnore] [ForeignKey("SubjectId")] public Subject Subject { get; set; } + + [JsonIgnore] + [ForeignKey("SubjectVisitId")] + public SubjectVisit SubjectVisit { get; set; } #endregion public Guid SeqId { get; set; } public Guid TrialId { get; set; } public Guid SubjectId { get; set; } + + public Guid? SubjectVisitId { get; set; } + public Guid VisitTaskId { get; set; } public int Code { get; set; } = 0; diff --git a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTableAnswerRowInfo.cs b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTableAnswerRowInfo.cs index 2bdaaa87d..efd7e54ed 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTableAnswerRowInfo.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTableAnswerRowInfo.cs @@ -11,6 +11,18 @@ public class ReadingTableAnswerRowInfo : BaseFullDeleteAuditEntity [ForeignKey("InstanceId")] public DicomInstance Instance { get; set; } + + [JsonIgnore] + [ForeignKey("SeriesId")] + public DicomSeries DicomSeries { get; set; } + + /// + /// studyId 关联 dicom 和非dicom ,这里为了查询方便,默认查询非dicom dicom 通过序列查询 + /// + [JsonIgnore] + [ForeignKey("StudyId")] + public NoneDicomStudy NoneDicomStudy { get; set; } + [JsonIgnore] [ForeignKey("OrganInfoId")] public OrganInfo OrganInfo { get; set; } diff --git a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs index 5d0f5616a..07764140b 100644 --- a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs +++ b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs @@ -6,6 +6,10 @@ namespace IRaCIS.Core.Domain.Models; public class SubjectVisit : BaseFullDeleteAuditEntity { #region 导航属性 + + [JsonIgnore] + public List TaskStudyList { get; set; } + [JsonIgnore] public List TrialQCQuestionAnswerList { get; set; } diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index 7c31e3e0e..c6a9e41d5 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -262,7 +262,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common var entity = item.Entity as ReadingImportFile; - var visitTaskInfo = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Include(x=>x.DoctorUser).FirstOrDefaultAsync(); + var visitTaskInfo = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Include(x => x.DoctorUser).FirstOrDefaultAsync(); await InsertInspection(entity, type, x => new InspectionConvertDTO() { @@ -2533,20 +2533,35 @@ namespace IRaCIS.Core.Infra.EFCore.Common var extraIdentification = string.Empty; - Arm armEnum = Arm.SingleReadingArm; + + Guid? subjectVisitId = null; + + Arm? armEnum = Arm.SingleReadingArm; if (entity.VisitTaskId != null) { extraIdentification = "/VisitTask"; - armEnum = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Select(x => x.ArmEnum).FirstOrDefaultAsync(); + var obj = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Select(x => new { x.ArmEnum, x.SourceSubjectVisitId }).FirstOrDefaultAsync(); + armEnum = obj?.ArmEnum; + subjectVisitId = obj.SourceSubjectVisitId; } + else if (entity.ImageLabelNoneDicomStudyId != null) + { + //默认R0 + extraIdentification = "/VisitTask"; - //var noneDicomStudy = await _dbContext.NoneDicomStudy.FindAsync(entity.NoneDicomStudyId); + subjectVisitId = await _dbContext.NoneDicomStudy.Where(x => x.Id == entity.ImageLabelNoneDicomStudyId).Select(t => t.SubjectVisitId).FirstOrDefaultAsync(); + } + else + { + subjectVisitId = (await _dbContext.NoneDicomStudy.FindAsync(entity.NoneDicomStudyId))?.SubjectVisitId; + } await InsertInspection(item.Entity as NoneDicomStudyFile, type, x => new InspectionConvertDTO() { - //SubjectVisitId = noneDicomStudy.SubjectVisitId, + SubjectVisitId = subjectVisitId, //SubjectId = noneDicomStudy.SubjectId, - ObjectRelationParentId = x.VisitTaskId, + VisitTaskId= x.VisitTaskId, + ObjectRelationParentId = subjectVisitId, ObjectRelationParentId2 = x.NoneDicomStudyId, ObjectRelationParentId3 = x.OriginNoneDicomStudyId, ExtraIndentification = extraIdentification @@ -3696,7 +3711,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common string questionName = string.Empty; string questionAnswer = string.Empty; - if (thisQuestinonAnswer != null&& question!=null) + if (thisQuestinonAnswer != null && question != null) { questionName = _userInfo.IsEn_Us ? question.QuestionEnName : question.QuestionName; questionAnswer = Translationunit(question.Type, question.Unit, question.CustomUnit, unitDataList, thisQuestinonAnswer.Answer); @@ -3857,7 +3872,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common entity.OrderMark = await _dbContext.ReadingQuestionTrial.Where(x => x.Id == entity.QuestionId).Select(x => x.OrderMark).FirstOrDefaultAsync(); - entity.RowMark = entity.OrderMark+ entity.RowIndex.GetLesionMark(); + entity.RowMark = entity.OrderMark + entity.RowIndex.GetLesionMark(); string extraIdentification = string.Empty; @@ -3867,7 +3882,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common { extraIdentification = "/Nontumorous"; } - + if (readingQuestion.ReadingQuestionCriterionTrial.CriterionType == CriterionType.SelfDefine) { extraIdentification = "/SelfDefine"; @@ -4121,7 +4136,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common #endregion - + diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ImageConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ImageConfigration.cs index f2e4ef204..9b4bb4e26 100644 --- a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ImageConfigration.cs +++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ImageConfigration.cs @@ -32,7 +32,7 @@ public class DicomSeriesConfigration : IEntityTypeConfiguration builder.HasMany(s => s.DicomInstanceList).WithOne(di => di.DicomSerie).HasForeignKey(t => t.SeriesId).HasPrincipalKey(se => se.Id); builder.HasMany(s => s.SubjectCriteriaEvaluationVisitStudyFilterList).WithOne(di => di.Series).HasForeignKey(t => t.SeriesId).HasPrincipalKey(se => se.Id); - + } } @@ -42,10 +42,10 @@ public class DicomInstanceConfigration : IEntityTypeConfiguration { builder.HasKey(e => e.SeqId); - builder.HasOne(e => e.DicomStudy).WithMany(c=>c.InstanceList).HasForeignKey(t=>t.StudyId).HasPrincipalKey(st => st.Id); + builder.HasOne(e => e.DicomStudy).WithMany(c => c.InstanceList).HasForeignKey(t => t.StudyId).HasPrincipalKey(st => st.Id); builder.HasMany(s => s.ReadingTableAnswerRowInfoList).WithOne(di => di.Instance).HasForeignKey(t => t.InstanceId).HasPrincipalKey(se => se.Id); - + } } @@ -76,7 +76,7 @@ public class TaskInstanceConfigration : IEntityTypeConfiguration { builder.HasKey(e => e.SeqId); - builder.HasOne(e => e.TaskStudy).WithMany(t=>t.InstanceList).HasForeignKey(t => t.StudyId).HasPrincipalKey(st => st.Id); + builder.HasOne(e => e.TaskStudy).WithMany(t => t.InstanceList).HasForeignKey(t => t.StudyId).HasPrincipalKey(st => st.Id); } } @@ -112,6 +112,18 @@ public class SCPInstanceConfigration : IEntityTypeConfiguration } +public class ReadingTableAnswerRowInfoConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + + + builder.HasOne(e => e.DicomSeries).WithMany().HasForeignKey(t => t.SeriesId).HasPrincipalKey(st => st.Id); + + //builder.HasOne(e => e.Instance).WithMany().HasForeignKey(t => t.InstanceId).HasPrincipalKey(st => st.Id); + } +} + diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs index 75e8cff45..ddf83a475 100644 --- a/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs +++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs @@ -31,6 +31,10 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration //同样一个实体 有两个相同的类型的导航属性,需要手动配置 builder.HasMany(t => t.NoneDicomFileList).WithOne(s => s.NoneDicomStudy).HasForeignKey(t => t.NoneDicomStudyId); builder.HasMany(t => t.TaskNoneDicomFileList).WithOne(s => s.OriginNoneDicomStudy).HasForeignKey(t => t.OriginNoneDicomStudyId); + + builder.HasMany(t => t.ImageLabelNoneDicomFileList).WithOne(s => s.ImageMarkNoneDicomStudy).HasForeignKey(t => t.ImageLabelNoneDicomStudyId); + + } } diff --git a/IRaCIS.Core.Infra.EFCore/Migrations/20251119020403_oct-add.Designer.cs b/IRaCIS.Core.Infra.EFCore/Migrations/20251119020403_oct-add.Designer.cs new file mode 100644 index 000000000..3b2faf788 --- /dev/null +++ b/IRaCIS.Core.Infra.EFCore/Migrations/20251119020403_oct-add.Designer.cs @@ -0,0 +1,21253 @@ +// +using System; +using IRaCIS.Core.Infra.EFCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace IRaCIS.Core.Infra.EFCore.Migrations +{ + [DbContext(typeof(IRaCISDBContext))] + [Migration("20251119020403_oct-add")] + partial class octadd + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.19") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Attachment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("编码"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExpiryDate") + .HasColumnType("datetime2") + .HasComment("过期时间"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsAuthorizedView") + .HasColumnType("bit"); + + b.Property("IsOfficial") + .HasColumnType("bit") + .HasComment("是否正式简历"); + + b.Property("Language") + .HasColumnType("int") + .HasComment("1 中文 2为英文"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("文件类型名"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DoctorId"); + + b.ToTable("Attachment", t => + { + t.HasComment("医生 - 简历|证书 文档表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditDocument", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditDocumentTypeEnum") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileFormat") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("FileSize") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("IsAuthorization") + .HasColumnType("bit"); + + b.Property("MainFileId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("MainFileId"); + + b.ToTable("AuditDocument", t => + { + t.HasComment("稽查文档管理"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditDocumentClosure", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AncestorId") + .HasColumnType("uniqueidentifier") + .HasComment("祖先"); + + b.Property("Depth") + .HasColumnType("int"); + + b.Property("DescendantId") + .HasColumnType("uniqueidentifier") + .HasComment("后代"); + + b.HasKey("Id"); + + b.HasIndex("AncestorId"); + + b.HasIndex("DescendantId"); + + b.ToTable("AuditDocumentClosure"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditContent") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AuditState") + .HasColumnType("int") + .HasComment("稽查状态"); + + b.Property("AuditTime") + .HasColumnType("date") + .HasComment("稽查日期"); + + b.Property("AuditType") + .HasColumnType("int") + .HasComment("稽查形式"); + + b.Property("BeginTime") + .HasColumnType("datetime2"); + + b.Property("CompanyName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("IsViewTrainingRecord") + .HasColumnType("bit"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("AuditRecord"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecordIdentityUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditRecordId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IdentityUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditRecordId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("IdentityUserId"); + + b.ToTable("AuditRecordIdentityUser"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecordPermission", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditDocumentId") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditRecordId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditDocumentId"); + + b.HasIndex("AuditRecordId"); + + b.HasIndex("CreateUserId"); + + b.ToTable("AuditRecordPermission"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CRO", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CROCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CROName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CRONameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsTrialLevel") + .HasColumnType("bit") + .HasComment("是否是项目级别"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("CROCompany", t => + { + t.HasComment("机构 - CRO"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CheckChallengeDialog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsCRCNeedReply") + .HasColumnType("bit") + .HasComment("CRC是否需要回复 前端使用"); + + b.Property("ParamInfo") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasComment("核查的检查信息Json"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TalkContent") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserTypeEnum") + .HasColumnType("int") + .HasComment("核查过程中的操作用户类型"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("CheckChallengeDialog", t => + { + t.HasComment("一致性核查 - 对话记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalAnswerRowInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalFormId") + .HasColumnType("uniqueidentifier") + .HasComment("表单Id"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("问题Id"); + + b.Property("RowIndex") + .HasColumnType("int"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier") + .HasComment("受试者Id"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ClinicalAnswerRowInfo", t => + { + t.HasComment("受试者 - 临床表单表格问题行记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalDataSystemSet", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalDataLevel") + .HasColumnType("int"); + + b.Property("ClinicalDataSetEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ClinicalDataSetEnum") + .HasColumnType("int") + .HasComment("枚举(字典里面取的)"); + + b.Property("ClinicalDataSetName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ClinicalUploadType") + .HasColumnType("int") + .HasComment("上传方式"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionEnumListStr") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("EnFileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EnPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsApply") + .HasColumnType("bit") + .HasComment("是否应用"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UploadRole") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ClinicalDataSystemSet", t => + { + t.HasComment("系统 - 临床数据配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalDataLevel") + .HasColumnType("int") + .HasComment("临床级别"); + + b.Property("ClinicalDataSetEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ClinicalDataSetName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ClinicalUploadType") + .HasColumnType("int") + .HasComment("上传方式"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionEnumListStr") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("EnFileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EnPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsApply") + .HasColumnType("bit") + .HasComment("是否应用"); + + b.Property("IsConfirm") + .HasColumnType("bit"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("SystemClinicalDataSetId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UploadRole") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SystemClinicalDataSetId"); + + b.HasIndex("TrialId"); + + b.ToTable("ClinicalDataTrialSet", t => + { + t.HasComment("项目 - 临床数据适应标准配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalForm", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CheckDate") + .HasColumnType("datetime2") + .HasComment("检查日期"); + + b.Property("ClinicalDataTrialSetId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("PicturePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasComment("截图地址"); + + b.Property("ReadingId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier") + .HasComment("受试者Id"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ClinicalDataTrialSetId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadingId"); + + b.HasIndex("SubjectId"); + + b.ToTable("ClinicalForm", t => + { + t.HasComment("受试者 - 临床表单"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalQuestionAnswer", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Answer") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ClinicalDataTrialSetId") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalFormId") + .HasColumnType("uniqueidentifier") + .HasComment("表单Id"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("问题Id"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier") + .HasComment("受试者Id"); + + b.HasKey("Id"); + + b.HasIndex("ClinicalFormId"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ClinicalQuestionAnswer", t => + { + t.HasComment("受试者 - 临床表单问题答案"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalTableAnswer", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Answer") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasComment("答案"); + + b.Property("ClinicalFormId") + .HasColumnType("uniqueidentifier") + .HasComment("表单Id"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("问题Id"); + + b.Property("RowId") + .HasColumnType("uniqueidentifier") + .HasComment("答案行的Id"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier") + .HasComment("受试者Id"); + + b.Property("TableQuestionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("RowId"); + + b.ToTable("ClinicalTableAnswer", t => + { + t.HasComment("受试者 - 临床表单表格问题答案"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CommonDocument", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BusinessScenarioEnum") + .HasColumnType("int") + .HasComment("业务场景"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionTypeEnum") + .HasColumnType("int") + .HasComment("系统标准枚举"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileTypeEnum") + .HasColumnType("int") + .HasComment("类型-上传|导出|邮件附件"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("CommonDocument", t => + { + t.HasComment("数据上传 | 数据导出 | 邮件附件 文件记录表 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CriterionKeyFileRead", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IdentityUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("CriterionKeyFileRead", t => + { + t.HasComment("标准阅读关键点"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CriterionNidusSystem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsSystemCriterion") + .HasColumnType("bit"); + + b.Property("LesionType") + .HasColumnType("int") + .HasComment("病灶类型"); + + b.Property("OrganType") + .HasColumnType("int") + .HasComment("器官类型"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("CriterionId"); + + b.ToTable("CriterionNidusSystem", t => + { + t.HasComment("系统标准 - 病灶器官表 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CriterionNidusTrial", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("LesionType") + .HasColumnType("int"); + + b.Property("OrganType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("CriterionNidusTrial", t => + { + t.HasComment("项目标准 - 病灶器官表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DataInspection", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BatchId") + .HasColumnType("uniqueidentifier") + .HasComment("批次Id"); + + b.Property("ChildrenTypeId") + .HasColumnType("uniqueidentifier") + .HasComment("子类"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateUserName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("创建人姓名"); + + b.Property("CreateUserRealName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DoctorUserId") + .HasColumnType("uniqueidentifier") + .HasComment("阅片医生"); + + b.Property("EntityName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("被稽查实体名"); + + b.Property("GeneralId") + .HasColumnType("uniqueidentifier") + .HasComment("要稽查对象Id"); + + b.Property("IP") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Identification") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("标识"); + + b.Property("IsFrontAdd") + .HasColumnType("bit") + .HasComment("是否是前端添加"); + + b.Property("IsSign") + .HasColumnType("bit"); + + b.Property("JsonDetail") + .HasColumnType("nvarchar(max)"); + + b.Property("LastJsonDetail") + .HasColumnType("nvarchar(max)") + .HasComment("上一条json"); + + b.Property("ModuleTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ObjectRelationParentId") + .HasColumnType("uniqueidentifier") + .HasComment("被稽查对象外键1"); + + b.Property("ObjectRelationParentId2") + .HasColumnType("uniqueidentifier"); + + b.Property("ObjectRelationParentId3") + .HasColumnType("uniqueidentifier"); + + b.Property("ObjectTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("OptTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasComment("父ID"); + + b.Property("Reason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("角色名称"); + + b.Property("SignId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitStageId") + .HasColumnType("uniqueidentifier") + .HasComment("访视计划ID"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("DataInspection", t => + { + t.HasComment("稽查 - 记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomInstance", b => + { + b.Property("SeqId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Anonymize") + .HasColumnType("bit"); + + b.Property("BitsAllocated") + .HasColumnType("int"); + + b.Property("CPIStatus") + .HasColumnType("bit"); + + b.Property("CorrectedImage") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DecayCorrection") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("EncapsulatedDocument") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("FrameOfReferenceUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FrameTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("HtmlPath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ImageColumns") + .HasColumnType("int"); + + b.Property("ImageOrientationPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImagePositionPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageRows") + .HasColumnType("int"); + + b.Property("ImagerPixelSpacing") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("InstanceNumber") + .HasColumnType("int"); + + b.Property("InstanceTime") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEncapsulated") + .HasColumnType("bit"); + + b.Property("IsReading") + .HasColumnType("bit"); + + b.Property("MediaStorageSOPClassUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MediaStorageSOPInstanceUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NumberOfFrames") + .HasColumnType("int"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("PhotometricInterpretation") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PixelRepresentation") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PixelSpacing") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RescaleIntercept") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RescaleSlope") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SOPClassUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SequenceOfUltrasoundRegions") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesId") + .HasColumnType("uniqueidentifier"); + + b.Property("SeriesInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SliceLocation") + .HasColumnType("int"); + + b.Property("SliceThickness") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SopInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TransferSytaxUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("Units") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("WindowCenter") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("WindowWidth") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("SeqId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SeriesId"); + + b.HasIndex("StudyId"); + + b.ToTable("DicomInstance", t => + { + t.HasComment("归档 - Instance表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomSeries", b => + { + b.Property("SeqId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AcquisitionDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartExamined") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEdit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomSeriesDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomSeriesTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ImageOrientationPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImagePositionPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageResizePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ImagerPixelSpacing") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("InstanceCount") + .HasColumnType("int"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsReading") + .HasColumnType("bit"); + + b.Property("Modality") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ProtocolName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RadiopharmaceuticalInformationSequence") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SequenceName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesNumber") + .HasColumnType("int"); + + b.Property("SeriesTime") + .HasColumnType("datetime2"); + + b.Property("SliceThickness") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TriggerTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("SeqId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("StudyId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("DicomSeries", t => + { + t.HasComment("归档 - 序列表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomStudy", b => + { + b.Property("SeqId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier") + .HasComment("序列Id 避免内存移动"); + + b.Property("AccessionNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartExamined") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEdit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEditOther") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DeviceSerialNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DeviceUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomStudyDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomStudyTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("InstanceCount") + .HasColumnType("int"); + + b.Property("InstitutionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsDoubleReview") + .HasColumnType("bit"); + + b.Property("IsFromPACS") + .HasColumnType("bit"); + + b.Property("Manufacturer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ManufacturerModelName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Modalities") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ModalityForEdit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ModifyReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientAge") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientBirthDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientId") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientSex") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientWeight") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesCount") + .HasColumnType("int"); + + b.Property("SoftwareVersions") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyDIRPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("DicomTag.StudyID"); + + b.Property("StudyInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyTime") + .HasColumnType("datetime2"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TriggerTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UploadedTime") + .HasColumnType("datetime2") + .HasComment("上传时间"); + + b.Property("Uploader") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("SeqId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("TrialId"); + + b.ToTable("DicomStudy"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Dictionary", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ChildGroup") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ConfigTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DataTypeEnum") + .HasColumnType("int") + .HasComment("字典类型- 枚举|bool|下拉框"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsConfig") + .HasColumnType("bit") + .HasComment("是否字典类型配置"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ValueCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("ConfigTypeId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ParentId"); + + b.ToTable("Dictionary", t => + { + t.HasComment("后台 - 字典表(需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Doctor", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AcceptingNewTrial") + .HasColumnType("bit"); + + b.Property("ActivelyReading") + .HasColumnType("bit"); + + b.Property("AdminComment") + .HasColumnType("nvarchar(max)"); + + b.Property("AuditTime") + .HasColumnType("datetime2"); + + b.Property("AuditUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("BankName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("BankNum") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BankPhoneNum") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BlindName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BlindNameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BlindPublications") + .HasColumnType("nvarchar(max)"); + + b.Property("ChineseName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("City") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CityCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("CooperateStatus") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DepartmentId") + .HasColumnType("uniqueidentifier"); + + b.Property("DepartmentOther") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DepartmentOtherCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("EMail") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("GCP") + .HasColumnType("int"); + + b.Property("GCPAgencies") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GCPId") + .HasColumnType("uniqueidentifier"); + + b.Property("GCPTime") + .HasColumnType("datetime2"); + + b.Property("HospitalId") + .HasColumnType("uniqueidentifier"); + + b.Property("HospitalName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("HospitalNameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("HospitalOther") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("HospitalOtherCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IdCard") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Introduction") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsVirtual") + .HasColumnType("bit"); + + b.Property("LastLoginTime") + .HasColumnType("datetime2"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Nation") + .HasColumnType("int"); + + b.Property("OpeningBank") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OrganizationId") + .HasColumnType("uniqueidentifier"); + + b.Property("OtherClinicalExperience") + .HasColumnType("nvarchar(max)"); + + b.Property("OtherClinicalExperienceCN") + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Phone") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PhotoPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Physician") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PhysicianCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PhysicianId") + .HasColumnType("uniqueidentifier"); + + b.Property("PositionId") + .HasColumnType("uniqueidentifier"); + + b.Property("PositionOther") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PositionOtherCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RankId") + .HasColumnType("uniqueidentifier"); + + b.Property("RankOther") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RankOtherCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ReadingTypeOther") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ReadingTypeOtherCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ResumePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ResumeStatus") + .HasColumnType("int"); + + b.Property("ReviewStatus") + .HasColumnType("int"); + + b.Property("ReviewerCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Sex") + .HasColumnType("int"); + + b.Property("SpecialityId") + .HasColumnType("uniqueidentifier"); + + b.Property("SpecialityOther") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SpecialityOtherCN") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubspecialityOther") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubspecialityOtherCN") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Summarize") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SummarizeEn") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UniversityAffiliated") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UniversityAffiliatedCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("WeChat") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("WorkPartTime") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("WorkPartTimeEn") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DepartmentId"); + + b.HasIndex("HospitalId"); + + b.HasIndex("PositionId"); + + b.HasIndex("RankId"); + + b.HasIndex("SpecialityId"); + + b.ToTable("Doctor", t => + { + t.HasComment("医生 - 基础信息表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DoctorCriterionFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CriterionType") + .HasColumnType("int") + .HasComment("标准类型"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("FileType") + .HasColumnType("int"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsIRUpload") + .HasColumnType("bit") + .HasComment("是否是IR上传"); + + b.Property("Remark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DoctorId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("DoctorCriterionFile", t => + { + t.HasComment("医生 - 项目标准签名文档"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DoctorDictionary", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DictionaryId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("KeyName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("DictionaryId"); + + b.HasIndex("DoctorId"); + + b.ToTable("DoctorDictionary", t => + { + t.HasComment("医生 - 医生字典关联表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DoctorSummarize", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Indication") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IndicationEn") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsMain") + .HasColumnType("bit"); + + b.Property("Summarize") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SummarizeEn") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("DoctorSummarize", t => + { + t.HasComment("医生 - 概述"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Education", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BeginDate") + .HasColumnType("date"); + + b.Property("City") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CityCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Country") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CountryCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Degree") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DegreeCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndDate") + .HasColumnType("date"); + + b.Property("Major") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MajorCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Organization") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OrganizationCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Province") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ProvinceCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("Education", t => + { + t.HasComment("医生 - 教育信息"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailAttachmentLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AttachmentName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AttachmentPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EmailLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("EmailLogId"); + + b.ToTable("EmailAttachmentLog", t => + { + t.HasComment("邮件附件日志"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EmailDate") + .HasColumnType("datetime2"); + + b.Property("EmailStateEnum") + .HasColumnType("int"); + + b.Property("EmailSubject") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ErrorInfo") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MessageId") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SenderAddress") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SenderName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UniqueId") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("EmailLog", t => + { + t.HasComment("邮件日志"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailNoticeConfig", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AttachCNPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AttachName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AttachNameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AttachPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BusinessLevelEnum") + .HasColumnType("int") + .HasComment("业务级别"); + + b.Property("BusinessModuleEnum") + .HasColumnType("int") + .HasComment("业务模块"); + + b.Property("BusinessScenarioEnum") + .HasColumnType("int") + .HasComment("业务场景"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionTypeList") + .HasColumnType("nvarchar(max)") + .HasComment("邮件配置的多个标准"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EmailCron") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("发送周期"); + + b.Property("EmailDelaySeconds") + .HasColumnType("int") + .HasComment("邮件延时秒数,比如一个事件触发,延迟多少s后才发邮件"); + + b.Property("EmailHtmlContent") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EmailHtmlContentCN") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EmailTopic") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EmailTopicCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EmailUrgentEnum") + .HasColumnType("int") + .HasComment("加急枚举"); + + b.Property("IsAutoSend") + .HasColumnType("bit") + .HasComment("是否自动发送"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsDistinguishCriteria") + .HasColumnType("bit") + .HasComment("是否区分标准"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsReturnRequired") + .HasColumnType("bit") + .HasComment("是否需要回执"); + + b.Property("SystemLevel") + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("EmailNoticeConfig", t => + { + t.HasComment("后台 - 邮件配置表表(需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailNoticeUserType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("EmailNoticeConfigId") + .HasColumnType("uniqueidentifier"); + + b.Property("EmailUserType") + .HasColumnType("int"); + + b.Property("UserType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("EmailNoticeConfigId"); + + b.ToTable("EmailNoticeUserType", t => + { + t.HasComment("后台 - 邮件配置用户类型表(需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailRecipientLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EmailLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("RecipientAddress") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RecipientName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RecipientTypeEnum") + .HasColumnType("int"); + + b.Property("Sort") + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("EmailLogId"); + + b.ToTable("EmailRecipientLog", t => + { + t.HasComment("邮件收件人"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Enroll", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Adjudication") + .HasColumnType("int"); + + b.Property("Adjudication24H") + .HasColumnType("int"); + + b.Property("Adjudication48H") + .HasColumnType("int"); + + b.Property("AdjustmentMultiple") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("AttachmentId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorUserId") + .HasColumnType("uniqueidentifier") + .HasComment("生成账号 加入到项目中后 赋值"); + + b.Property("Downtime") + .HasColumnType("int"); + + b.Property("EnrollStatus") + .HasColumnType("int"); + + b.Property("EnrollTime") + .HasColumnType("datetime2"); + + b.Property("Global") + .HasColumnType("int"); + + b.Property("Memo") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OutEnrollTime") + .HasColumnType("datetime2"); + + b.Property("RefresherTraining") + .HasColumnType("int"); + + b.Property("ReviewerReadingType") + .HasColumnType("int"); + + b.Property("Timepoint") + .HasColumnType("int"); + + b.Property("Timepoint24H") + .HasColumnType("int"); + + b.Property("Timepoint48H") + .HasColumnType("int"); + + b.Property("Training") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DoctorId"); + + b.HasIndex("DoctorUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("Enroll", t => + { + t.HasComment("医生 - 入组项目中间记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EnrollDetail", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("EnrollId") + .HasColumnType("uniqueidentifier"); + + b.Property("EnrollStatus") + .HasColumnType("int"); + + b.Property("Memo") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OptUserType") + .HasColumnType("int"); + + b.Property("TrialDetailId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DoctorId"); + + b.HasIndex("TrialDetailId"); + + b.ToTable("EnrollDetail", t => + { + t.HasComment("医生 - 入组项目流程记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EnrollReadingCategory", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EnrollId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReadingCategory") + .HasColumnType("int"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("EnrollId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("EnrollReadingCategory", t => + { + t.HasComment("医生 - 项目阅片标准阅片类型配置表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EnrollReadingCriterion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EnrollId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsJoinAnalysis") + .HasColumnType("bit"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("EnrollId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("EnrollReadingCriterion", t => + { + t.HasComment("医生 - 项目阅片标准参与一致性分析配置表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EventStoreRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EventState") + .HasColumnType("int"); + + b.Property("EventType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("完整的事件类型名"); + + b.Property("EventTypeName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("简单的事件类型名"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("EventStoreRecord", t => + { + t.HasComment("记录触发的事件,以及状态,从而方便重试操作"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ExchangeRate", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rate") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("YearMonth") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ExchangeRate", t => + { + t.HasComment("医生计费 - 汇率"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ExploreRecommend", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("DownloadUrl") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ExploreType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ExploreRecommend", t => + { + t.HasComment("后台 - 浏览器推荐 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.FrontAuditConfig", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplyCriterionList") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ChildDataEnLabel") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ChildDataLabel") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("前端渲染数组 数组名 和数组值"); + + b.Property("ChildDataValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("子数据Value"); + + b.Property("ChildrenTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("翻译的字段名 这里有可能是一个数组名 那么具体的翻译字段名就不是这个了"); + + b.Property("CodeEn") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ConfigType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("前端使用 C M"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DataType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("前端展示类型 Router, Array,Table"); + + b.Property("DateType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("日期格式"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DescriptionCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("翻译的字典名(单个字段翻译的时候)"); + + b.Property("DictionaryKey") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("字典名称-待废弃核查"); + + b.Property("DictionaryType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("枚举字典Type"); + + b.Property("EnumType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("后端翻译的类型 对应前端界面 Dictionary Date"); + + b.Property("ForeignKeyEnText") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ForeignKeyTableName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("外键表"); + + b.Property("ForeignKeyText") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("外键Text"); + + b.Property("ForeignKeyValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("外键Value"); + + b.Property("Identification") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("标识"); + + b.Property("InterfaceName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("接口名"); + + b.Property("IsBeforeModifyView") + .HasColumnType("bit"); + + b.Property("IsConfig") + .HasColumnType("bit") + .HasComment("未知是否有用-废弃核查"); + + b.Property("IsDefaultChoice") + .HasColumnType("bit"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsFinish") + .HasColumnType("bit") + .HasComment("是否完成"); + + b.Property("IsHaveReason") + .HasColumnType("bit") + .HasComment("是否有原因"); + + b.Property("IsHaveSign") + .HasColumnType("bit") + .HasComment("是否有签名"); + + b.Property("IsJoinPlan") + .HasColumnType("bit") + .HasComment("是否加入计划"); + + b.Property("IsShowByTrialConfig") + .HasColumnType("bit") + .HasComment("待废弃核查"); + + b.Property("IsShowParent") + .HasColumnType("int"); + + b.Property("IsSpecialType") + .HasColumnType("bit") + .HasComment("是否为特殊类型"); + + b.Property("ModuleTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ObjectTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("OptTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Sort") + .HasColumnType("int"); + + b.Property("TableConfigJsonStr") + .HasColumnType("nvarchar(max)"); + + b.Property("TrialConfigRelyFieldName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("待废弃核查"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UrlConfigJsonStr") + .HasColumnType("nvarchar(max)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ValueCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("FrontAuditConfig", t => + { + t.HasComment("稽查 - 配置表 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Hospital", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("City") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CityCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Country") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CountryCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("HospitalName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("HospitalNameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Province") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ProvinceCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SiteId") + .HasColumnType("uniqueidentifier") + .HasComment("中心Id"); + + b.Property("UniversityAffiliated") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UniversityAffiliatedCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SiteId"); + + b.ToTable("Hospital", t => + { + t.HasComment("机构 - 医院"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AutoCutNextTask") + .HasColumnType("bit") + .HasComment("这个字段废除,放在用户角色上面,后续删除"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DepartmentName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EMail") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EmailToken") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsFirstAdd") + .HasColumnType("bit") + .HasComment("首次登录需要修改密码"); + + b.Property("IsTestUser") + .HasColumnType("bit"); + + b.Property("IsZhiZhun") + .HasColumnType("bit") + .HasComment("内部用户 外部用户"); + + b.Property("LastChangePassWordTime") + .HasColumnType("datetime2") + .HasComment("上一次修改密码的时间"); + + b.Property("LastLoginIP") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("LastLoginTime") + .HasColumnType("datetime2"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OrganizationName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PasswordChanged") + .HasColumnType("bit"); + + b.Property("Phone") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PositionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PrivacyPolicyId") + .HasColumnType("uniqueidentifier"); + + b.Property("Sex") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserAgreementId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserCeateSource") + .HasColumnType("int"); + + b.Property("UserCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("IdentityUser", t => + { + t.HasComment("后台 - 系统真实账户表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ImageShare", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ExpireTime") + .HasColumnType("datetime2"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("ImageShare", t => + { + t.HasComment("影像 - 影像分享记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.InspectionFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CheckState") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RelativePath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ResultPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("InspectionFile", t => + { + t.HasComment("一致性核查文件"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Internationalization", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FrontType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("InternationalizationType") + .HasColumnType("int"); + + b.Property("Module") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PublishLogId") + .HasColumnType("uniqueidentifier") + .HasComment("关联版本历史记录表Id"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("State") + .HasColumnType("int") + .HasComment("0 1 2 预翻译 已确认 废除"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ValueCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("PublishLogId"); + + b.ToTable("Internationalization", t => + { + t.HasComment("后台 - 国际化配置表 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Menu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApiPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("Api 接口地址"); + + b.Property("Component") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("组件路径"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsCache") + .HasColumnType("bit"); + + b.Property("IsDisplay") + .HasColumnType("bit"); + + b.Property("IsEnable") + .HasColumnType("bit") + .HasComment("启用 禁用"); + + b.Property("IsExternalLink") + .HasColumnType("bit"); + + b.Property("IsInTabDisplay") + .HasColumnType("bit"); + + b.Property("LanguageMark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MenuIcon") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MenuName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MenuType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("类型(M目录 C菜单 F按钮 L链接)"); + + b.Property("Meta") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasComment("上级菜单"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("路由地址"); + + b.Property("PermissionStr") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("权限点"); + + b.Property("Redirect") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("Menu", t => + { + t.HasComment("后台 - 系统菜单 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.NoneDicomStudy", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BodyPart") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEditOther") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileCount") + .HasColumnType("int"); + + b.Property("ImageDate") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsReading") + .HasColumnType("bit"); + + b.Property("Modality") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ModifyReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UploadVideoTime") + .HasColumnType("datetime2"); + + b.Property("VideoName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("VideoObjectName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("VideoUrl") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("TrialId"); + + b.ToTable("NoneDicomStudy", t => + { + t.HasComment("影像 - 非dicom检查"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.NoneDicomStudyFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("FileType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageLabelNoneDicomStudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsReading") + .HasColumnType("bit"); + + b.Property("NoneDicomStudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("OriginNoneDicomStudyId") + .HasColumnType("uniqueidentifier") + .HasComment("为了不影响原始检查,跟任务绑定的 NoneDicomStudyId 为guid空 这个字段记录跟原始检查绑"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ImageLabelNoneDicomStudyId"); + + b.HasIndex("NoneDicomStudyId"); + + b.HasIndex("OriginNoneDicomStudyId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("NoneDicomStudyFile", t => + { + t.HasComment("影像 - 非dicom检查关联文件表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.OrganInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Classification") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分类"); + + b.Property("ClassificationEN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分类 英文"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsCanEditPosition") + .HasColumnType("bit") + .HasComment("是否可编辑位置"); + + b.Property("IsLymphNodes") + .HasColumnType("int") + .HasComment("是否是淋巴结"); + + b.Property("OrganType") + .HasColumnType("int") + .HasComment("器官类型"); + + b.Property("Part") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("部位"); + + b.Property("PartEN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("部位 英文"); + + b.Property("Remark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("备注"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("序号"); + + b.Property("SystemCriterionId") + .HasColumnType("uniqueidentifier") + .HasComment("标准Id"); + + b.Property("TULAT") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("位置"); + + b.Property("TULATEN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("位置 英文"); + + b.Property("TULOC") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("TULOC 器官"); + + b.Property("TULOCEN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("TULOC 器官 英文"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("OrganInfo", t => + { + t.HasComment("后台 - 系统标准器官 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.OrganTrialInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Classification") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分类"); + + b.Property("ClassificationEN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分类 英文"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsCanEditPosition") + .HasColumnType("bit") + .HasComment("是否可编辑位置"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsLymphNodes") + .HasColumnType("int") + .HasComment("是否是淋巴结"); + + b.Property("OrganInfoId") + .HasColumnType("uniqueidentifier") + .HasComment("器官Id"); + + b.Property("OrganType") + .HasColumnType("int") + .HasComment("器官类型"); + + b.Property("Part") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("部位"); + + b.Property("PartEN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("部位 英文"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("序号"); + + b.Property("TULAT") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("位置"); + + b.Property("TULATEN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("位置 英文"); + + b.Property("TULOC") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("TULOC 器官"); + + b.Property("TULOCEN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("TULOC 器官 英文"); + + b.Property("TrialCriterionId") + .HasColumnType("uniqueidentifier") + .HasComment("标准Id"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目Id"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("OrganInfoId"); + + b.ToTable("OrganTrialInfo", t => + { + t.HasComment("项目标准 - 器官"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Payment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AdjustmentCNY") + .HasPrecision(18, 4) + .HasColumnType("decimal(18,4)"); + + b.Property("AdjustmentUSD") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("CalculateTime") + .HasColumnType("datetime2"); + + b.Property("CalculateUser") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExchangeRate") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("IsLock") + .HasColumnType("bit"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PaymentCNY") + .HasPrecision(18, 4) + .HasColumnType("decimal(18,4)"); + + b.Property("PaymentUSD") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("YearMonth") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("YearMonthDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("Payment", t => + { + t.HasComment("医生计费 - 每月支付记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PaymentAdjustment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AdjustmentCNY") + .HasPrecision(18, 4) + .HasColumnType("decimal(18,4)"); + + b.Property("AdjustmentUSD") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExchangeRate") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("IsLock") + .HasColumnType("bit"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ReviewerId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("YearMonth") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("YearMonthDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("PaymentAdjustment", t => + { + t.HasComment("医生计费 - 每月支付记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PaymentDetail", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BasePrice") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExchangeRate") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("PaymentCNY") + .HasPrecision(18, 4) + .HasColumnType("decimal(18,4)"); + + b.Property("PaymentId") + .HasColumnType("uniqueidentifier"); + + b.Property("PaymentType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PaymentUSD") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("PersonalAdditional") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("ShowCodeOrder") + .HasColumnType("int"); + + b.Property("ShowTypeOrder") + .HasColumnType("int"); + + b.Property("TrialAdditional") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("TrialCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("YearMonth") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("PaymentDetail", t => + { + t.HasComment("医生计费 - 每月支付详情表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Postgraduate", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BeginDate") + .HasColumnType("date"); + + b.Property("City") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CityCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Country") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CountryCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndDate") + .HasColumnType("date"); + + b.Property("Hospital") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("HospitalCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("HospitalId") + .HasColumnType("uniqueidentifier"); + + b.Property("Major") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MajorCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Province") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ProvinceCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("School") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SchoolCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Training") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrainingCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("HospitalId"); + + b.ToTable("Postgraduate", t => + { + t.HasComment("医生 - 继续教育经历"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PreviousHistory", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalDataTrialSetId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsPD") + .HasColumnType("int"); + + b.Property("IsSubjectLevel") + .HasColumnType("bit"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Position") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StartTime") + .HasColumnType("datetime2"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ClinicalDataTrialSetId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("PreviousHistory", t => + { + t.HasComment("受试者访视 - 既往放疗史"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PreviousOther", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalDataTrialSetId") + .HasColumnType("uniqueidentifier") + .HasComment("临床数据类型Id"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsPD") + .HasColumnType("bit"); + + b.Property("IsSubjectLevel") + .HasColumnType("bit"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StartTime") + .HasColumnType("datetime2"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TreatmentType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("ClinicalDataTrialSetId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("PreviousOther", t => + { + t.HasComment("受试者访视 - 既往其他治疗史"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PreviousPDF", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalLevel") + .HasColumnType("int") + .HasComment("临床级别"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DataType") + .HasColumnType("int") + .HasComment("数据类型"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsVisist") + .HasColumnType("bit"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UploadType") + .HasColumnType("int") + .HasComment("上传方式"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("PreviousPDF", t => + { + t.HasComment("受试者访视 - 临床数据配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PreviousSurgery", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalDataTrialSetId") + .HasColumnType("uniqueidentifier") + .HasComment("临床数据类型Id"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsSubjectLevel") + .HasColumnType("bit"); + + b.Property("OperationName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OperationTime") + .HasColumnType("datetime2"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ClinicalDataTrialSetId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("PreviousSurgery", t => + { + t.HasComment("受试者访视 - 既往手术史"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PublishLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsCurrentVersion") + .HasColumnType("bit"); + + b.Property("PublishTime") + .HasColumnType("datetime2"); + + b.Property("State") + .HasColumnType("int") + .HasComment("0 开发中 ,已发布"); + + b.Property("UpdateContent") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Version_US") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("PublishLog", t => + { + t.HasComment("后台 - 系统发布日志 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.QCChallenge", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActionContent") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ChallengeCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ChallengeType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CloseResonEnum") + .HasColumnType("int"); + + b.Property("ClosedTime") + .HasColumnType("datetime2"); + + b.Property("ClosedUser") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1200) + .HasColumnType("nvarchar(1200)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CurrentQCEnum") + .HasColumnType("int"); + + b.Property("DeadlineTime") + .HasColumnType("datetime2"); + + b.Property("IsClosed") + .HasColumnType("bit"); + + b.Property("LatestMsgTime") + .HasColumnType("datetime2"); + + b.Property("LatestReplyUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("QCProcessEnum") + .HasColumnType("int"); + + b.Property("ReUploadUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReUploadedTime") + .HasColumnType("datetime2"); + + b.Property("ReUploader") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ReuploadEnum") + .HasColumnType("int"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserTypeEnum") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("LatestReplyUserId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("QCChallenge", t => + { + t.HasComment("受试者访视 - QC质疑"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.QCChallengeDialog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("QCChallengeId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TalkContent") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UserTypeEnum") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("QCChallengeId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("QCChallengeDialog", t => + { + t.HasComment("受试者访视 - QC质疑对话"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.QCQuestion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsRequired") + .HasColumnType("bit"); + + b.Property("LanguageType") + .HasColumnType("int") + .HasComment("语言类型"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("下拉框、文本、单选、多选"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ParentId"); + + b.ToTable("QCQuestion", t => + { + t.HasComment("后台 - QC质控问题(需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.RankPrice", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Adjudication") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("AdjudicationIn24H") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("AdjudicationIn48H") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Downtime") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("Global") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("RankName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RefresherTraining") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("Timepoint") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("TimepointIn24H") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("TimepointIn48H") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("Training") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("RankPrice", t => + { + t.HasComment("医生计费 - 不同时间点价格设置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadModule", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("IsCRCApplicationRevoke") + .HasColumnType("bit") + .HasComment("CRC是否正在申请撤回"); + + b.Property("IsCRCConfirm") + .HasColumnType("bit"); + + b.Property("IsClinicalDataBlind") + .HasColumnType("bit") + .HasComment("临床数据是否盲化"); + + b.Property("IsClinicalDataComplete") + .HasColumnType("bit") + .HasComment("临床数据是否完整"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsNotNeedPMConfirm") + .HasColumnType("bit"); + + b.Property("IsPMConfirm") + .HasColumnType("bit"); + + b.Property("IsUrgent") + .HasColumnType("bit") + .HasComment("是否加急"); + + b.Property("ModuleName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("模块名称"); + + b.Property("ModuleType") + .HasColumnType("int") + .HasComment("模块类型"); + + b.Property("ReadModuleAddTypeEnum") + .HasColumnType("int"); + + b.Property("ReadingPeriodPlanId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReadingPeriodSetId") + .HasColumnType("uniqueidentifier") + .HasComment("阅片计划ID"); + + b.Property("ReadingSetType") + .HasColumnType("int") + .HasComment("阅片配置的类型"); + + b.Property("ReadingStatus") + .HasColumnType("int"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadingPeriodSetId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("ReadModule", t => + { + t.HasComment("读片模块"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadModuleCriterionFrom", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalFormId") + .HasColumnType("uniqueidentifier") + .HasComment("表单Id"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReadModuleId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ClinicalFormId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadModuleId"); + + b.ToTable("ReadModuleCriterionFrom", t => + { + t.HasComment("受试者 - 阅片模块临床表单"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingClinicalData", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalDataTrialSetId") + .HasColumnType("uniqueidentifier") + .HasComment("临床数据类型Id"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileCount") + .HasColumnType("int"); + + b.Property("IsBlind") + .HasColumnType("bit") + .HasComment("是否盲化"); + + b.Property("IsComplete") + .HasColumnType("bit") + .HasComment("是否完整"); + + b.Property("IsSign") + .HasColumnType("bit") + .HasComment("是否签名"); + + b.Property("IsVisit") + .HasColumnType("bit") + .HasComment("是否为访视"); + + b.Property("ReadingClinicalDataState") + .HasColumnType("int") + .HasComment("临床数据状态"); + + b.Property("ReadingId") + .HasColumnType("uniqueidentifier") + .HasComment("访视Id 或者模块Id"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ClinicalDataTrialSetId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadingId"); + + b.HasIndex("StudyId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("TrialId"); + + b.ToTable("ReadingClinicalData", t => + { + t.HasComment("项目的临床数据"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingClinicalDataPDF", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ReadingClinicalDataId") + .HasColumnType("uniqueidentifier") + .HasComment("阅片临床数据ID"); + + b.Property("Size") + .HasColumnType("int"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadingClinicalDataId"); + + b.ToTable("ReadingClinicalDataPDF", t => + { + t.HasComment("项目的临床数据"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingConsistentClinicalData", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalDataTrialSetId") + .HasColumnType("uniqueidentifier") + .HasComment("临床数据类型Id"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileCount") + .HasColumnType("int"); + + b.Property("IsBlind") + .HasColumnType("bit") + .HasComment("是否盲化"); + + b.Property("IsComplete") + .HasColumnType("bit") + .HasComment("是否完整"); + + b.Property("IsSign") + .HasColumnType("bit") + .HasComment("是否签名"); + + b.Property("IsVisit") + .HasColumnType("bit") + .HasComment("是否为访视"); + + b.Property("ReadingClinicalDataState") + .HasColumnType("int") + .HasComment("临床数据状态"); + + b.Property("ReadingId") + .HasColumnType("uniqueidentifier") + .HasComment("访视Id 或者模块Id"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier") + .HasComment("受试者ID"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目ID"); + + b.HasKey("Id"); + + b.HasIndex("ClinicalDataTrialSetId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadingId"); + + b.HasIndex("StudyId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("TrialId"); + + b.ToTable("ReadingConsistentClinicalData", t => + { + t.HasComment("一致性分析临床数据"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingConsistentClinicalDataPDF", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ReadingConsistentClinicalDataId") + .HasColumnType("uniqueidentifier") + .HasComment("阅片临床数据ID"); + + b.Property("Size") + .HasColumnType("int"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("文件类型"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadingConsistentClinicalDataId"); + + b.ToTable("ReadingConsistentClinicalDataPDF", t => + { + t.HasComment("一致性分析临床数据"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingCriterionPage", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsEnable") + .HasColumnType("bit") + .HasComment("是否启用"); + + b.Property("IsPublicPage") + .HasColumnType("bit") + .HasComment("是否公共分页"); + + b.Property("PageName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分页名称"); + + b.Property("ReadingQuestionCriterionTrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目ID"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ReadingCriterionPage", t => + { + t.HasComment("阅片标准分页"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingCustomTag", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("InstanceId") + .HasColumnType("uniqueidentifier"); + + b.Property("MeasureData") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NumberOfFrames") + .HasColumnType("int"); + + b.Property("SeriesId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ReadingCustomTag", t => + { + t.HasComment("项目阅片 - 自定义标记"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingGlobalTaskInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Answer") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasComment("问题答案"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("GlobalAnswerType") + .HasColumnType("int") + .HasComment("全局答案类型"); + + b.Property("GlobalTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("全局任务Id"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("问题ID"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TaskId") + .HasColumnType("uniqueidentifier") + .HasComment("原任务ID"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("GlobalTaskId"); + + b.HasIndex("QuestionId"); + + b.HasIndex("TaskId"); + + b.ToTable("ReadingGlobalTaskInfo", t => + { + t.HasComment("阅片全局任务信息"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingImportFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TableName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ReadingImportFile", t => + { + t.HasComment("阅片导入表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingJudgeInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("JudgeTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("裁判任务ID"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TaskIdOne") + .HasColumnType("uniqueidentifier") + .HasComment("第一个任务ID"); + + b.Property("TaskIdTwo") + .HasColumnType("uniqueidentifier") + .HasComment("第二个任务ID"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ReadingJudgeInfo", t => + { + t.HasComment("阅片裁判信息"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingMedicalReviewDialog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditAdviceEnum") + .HasColumnType("int") + .HasComment("审核建议"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasComment("对话内容"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DisagreeReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("不同意重阅原因"); + + b.Property("DoctorUserIdeaEnum") + .HasColumnType("int") + .HasComment("阅片人是否认同"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("文件名称"); + + b.Property("ImagePath") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasComment("图片路径"); + + b.Property("IsApplyHeavyReading") + .HasColumnType("bit") + .HasComment("是否申请重阅"); + + b.Property("IsHaveQuestion") + .HasColumnType("bit") + .HasComment("是否有问题"); + + b.Property("MedicalDialogCloseEnum") + .HasColumnType("int") + .HasComment("医学审核对话关闭原因"); + + b.Property("Questioning") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("质询问题"); + + b.Property("TaskMedicalReviewId") + .HasColumnType("uniqueidentifier") + .HasComment("医学审核Id"); + + b.Property("UserTypeEnumInt") + .HasColumnType("int") + .HasComment("用户角色枚举"); + + b.Property("UserTypeShortName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("用户角色"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("任务Id"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TaskMedicalReviewId"); + + b.ToTable("ReadingMedicalReviewDialog", t => + { + t.HasComment("阅片医学审核对话"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingMedicineQuestionAnswer", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Answer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReadingMedicineQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("医学审核问题Id"); + + b.Property("TaskMedicalReviewId") + .HasColumnType("uniqueidentifier") + .HasComment("医学审核Id"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TaskMedicalReviewId"); + + b.ToTable("ReadingMedicineQuestionAnswer", t => + { + t.HasComment("阅片医学问题答案"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingMedicineSystemQuestion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionTypeEnum") + .HasColumnType("int"); + + b.Property("IsEnable") + .HasColumnType("bit") + .HasComment("是否启用"); + + b.Property("IsGeneral") + .HasColumnType("bit"); + + b.Property("IsRequired") + .HasColumnType("bit") + .HasComment("是否是必须"); + + b.Property("LanguageType") + .HasColumnType("int") + .HasComment("语言类型"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasComment("父问题ID"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("父问题触发"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题名称"); + + b.Property("ReadingCategory") + .HasColumnType("int") + .HasComment("任务类型"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("类型"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("类型值"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ParentId"); + + b.ToTable("ReadingMedicineSystemQuestion", t => + { + t.HasComment("阅片医学审核系统问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingMedicineTrialQuestion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsConfirm") + .HasColumnType("bit") + .HasComment("是否确认"); + + b.Property("IsEnable") + .HasColumnType("bit") + .HasComment("是否启用"); + + b.Property("IsRequired") + .HasColumnType("bit") + .HasComment("是否必须"); + + b.Property("LanguageType") + .HasColumnType("int") + .HasComment("语言类型"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasComment("父问题"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("父问题触发值"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题名称"); + + b.Property("ReadingCategory") + .HasColumnType("int") + .HasComment("任务类型"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("SystemQuestionId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目ID"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier") + .HasComment("项目标准"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("类型"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("类型值"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ParentId"); + + b.ToTable("ReadingMedicineTrialQuestion", t => + { + t.HasComment("阅片医学审核项目问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingNoneDicomMark", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("MarkId") + .HasColumnType("uniqueidentifier"); + + b.Property("MarkTool") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MeasureData") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NoneDicomFileId") + .HasColumnType("uniqueidentifier"); + + b.Property("OrderMarkName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("PicturePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("StudyId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("ReadingNoneDicomMark", t => + { + t.HasComment("项目阅片 - 非Dicom标记"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingNoneDicomMarkBinding", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("MarkId") + .HasColumnType("uniqueidentifier"); + + b.Property("NoneDicomMarkId") + .HasColumnType("uniqueidentifier"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier"); + + b.Property("RowId") + .HasColumnType("uniqueidentifier"); + + b.Property("TableQuestionId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("NoneDicomMarkId"); + + b.ToTable("ReadingNoneDicomMarkBinding", t => + { + t.HasComment("项目阅片 - 非Dicom标记绑定"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingOncologyTaskInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EvaluationReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("原因"); + + b.Property("EvaluationResult") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasComment("结果"); + + b.Property("OncologyTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("肿瘤学 阅片任务ID"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier") + .HasComment("受试者Id"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目Id"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("产生肿瘤学阅片任务的 访视类型的阅片任务Id"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("OncologyTaskId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("ReadingOncologyTaskInfo", t => + { + t.HasComment("阅片肿瘤学 针对访视任务 添加了一个结果"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingPeriodPlan", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("GeneratedTime") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsGenerate") + .HasColumnType("bit"); + + b.Property("ReadingPeriodSetId") + .HasColumnType("uniqueidentifier") + .HasComment("阅片期配置ID"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier") + .HasComment("访视"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadingPeriodSetId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("ReadingPeriodPlan", t => + { + t.HasComment("阅片计划"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingPeriodSet", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("EffectOfTime") + .HasColumnType("datetime2") + .HasComment("生效时间"); + + b.Property("ExpirationDate") + .HasColumnType("datetime2") + .HasComment("截止日期"); + + b.Property("ExpirationVisitNum") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasComment("截止访视"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsGlobal") + .HasColumnType("bit") + .HasComment("是否为全局阅片"); + + b.Property("IsTakeEffect") + .HasColumnType("int") + .HasComment("是否生效"); + + b.Property("ReadingPeriodName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("阅片期名称"); + + b.Property("ReadingScope") + .HasColumnType("int") + .HasComment("阅片范围"); + + b.Property("ReadingSetType") + .HasColumnType("int") + .HasComment("阅片配置的类型"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitStageId") + .HasColumnType("uniqueidentifier") + .HasComment("访视计划ID"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("VisitStageId"); + + b.ToTable("ReadingPeriodSet", t => + { + t.HasComment("阅片期设置 只会设计到所有人 或者某个Site 针对全局"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingPeriodSite", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReadingPeriodSetId") + .HasColumnType("uniqueidentifier") + .HasComment("阅片期配置ID"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadingPeriodSetId"); + + b.HasIndex("TrialSiteId"); + + b.ToTable("ReadingPeriodSite", t => + { + t.HasComment("阅片期和中心关联"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionSystem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConfirmTime") + .HasColumnType("datetime2") + .HasComment("确认时间"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionGroup") + .HasColumnType("int"); + + b.Property("CriterionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("标准"); + + b.Property("CriterionType") + .HasColumnType("int") + .HasComment("标准类型"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("描述"); + + b.Property("IsCompleteConfig") + .HasColumnType("bit") + .HasComment("是否完成配置"); + + b.Property("IsEnable") + .HasColumnType("bit") + .HasComment("是否启用"); + + b.Property("IsMustGlobalReading") + .HasColumnType("bit") + .HasComment("是否必须全局阅片"); + + b.Property("IsOncologyReading") + .HasColumnType("bit") + .HasComment("肿瘤学阅片"); + + b.Property("IseCRFShowInDicomReading") + .HasColumnType("bit") + .HasComment("eCRF报告是否显示在图像页面"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ReadingQuestionCriterionSystem", t => + { + t.HasComment("系统阅片标准"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ArbitrationRule") + .HasColumnType("int") + .HasComment("仲裁对象"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionGroup") + .HasColumnType("int"); + + b.Property("CriterionModalitys") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CriterionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("标准"); + + b.Property("CriterionType") + .HasColumnType("int") + .HasComment("标准类型"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("描述"); + + b.Property("DigitPlaces") + .HasColumnType("int") + .HasComment("修约小数点"); + + b.Property("EvaluationReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("评估原因"); + + b.Property("EvaluationResult") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("评估结果"); + + b.Property("FollowGlobalVisitAutoAssignDefaultState") + .HasColumnType("int") + .HasComment("后续全局自动分配默认状态"); + + b.Property("FollowJudgeTaskAutoAssignDefaultState") + .HasColumnType("int"); + + b.Property("FollowVisitAutoAssignDefaultState") + .HasColumnType("int") + .HasComment("后续访视自动分配默认状态"); + + b.Property("FormType") + .HasColumnType("int") + .HasComment("表单类型"); + + b.Property("GlobalUpdateType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("全局阅片评估更新类型"); + + b.Property("ImageDownloadEnum") + .HasColumnType("int") + .HasComment("阅片过程下载影像"); + + b.Property("ImagePlatform") + .HasColumnType("int") + .HasComment("阅片平台"); + + b.Property("ImageUploadEnum") + .HasColumnType("int") + .HasComment("阅片过程上传影像"); + + b.Property("IsAdditionalAssessment") + .HasColumnType("bit") + .HasComment("是否附加评估"); + + b.Property("IsArbitrationReading") + .HasColumnType("bit") + .HasComment("仲裁阅片"); + + b.Property("IsAutoCreate") + .HasColumnType("bit") + .HasComment("自动 手动生成任务"); + + b.Property("IsCompleteConfig") + .HasColumnType("bit") + .HasComment("是否完成配置"); + + b.Property("IsConfirm") + .HasColumnType("bit") + .HasComment("是否确认"); + + b.Property("IsConfirmMedicineQuestion") + .HasColumnType("bit") + .HasComment("是确认医学审核问题"); + + b.Property("IsEnable") + .HasColumnType("bit") + .HasComment("是否启用"); + + b.Property("IsFollowGlobalVisitAutoAssign") + .HasColumnType("bit") + .HasComment("后续全局自动分配"); + + b.Property("IsFollowJudgeTaskAutoAssign") + .HasColumnType("bit"); + + b.Property("IsFollowVisitAutoAssign") + .HasColumnType("bit") + .HasComment("后续访视任务自动分配"); + + b.Property("IsGlobalReading") + .HasColumnType("bit") + .HasComment("是否生成全局阅片任务"); + + b.Property("IsImageFilter") + .HasColumnType("bit") + .HasComment("是否影像筛选"); + + b.Property("IsMustGlobalReading") + .HasColumnType("bit") + .HasComment("是否必须全局阅片"); + + b.Property("IsOncologyReading") + .HasColumnType("bit") + .HasComment("肿瘤学阅片 原字段 IsClinicalReading"); + + b.Property("IsReadingPeriod") + .HasColumnType("bit") + .HasComment("存在阅片期"); + + b.Property("IsReadingShowPreviousResults") + .HasColumnType("bit") + .HasComment("IR阅片页面是否可以查看既往任务结果"); + + b.Property("IsReadingShowSubjectInfo") + .HasColumnType("bit") + .HasComment("阅片是否显示受试者信息"); + + b.Property("IsReadingTaskViewInOrder") + .HasColumnType("int") + .HasComment("任务展示访视 读片任务显示是否顺序"); + + b.Property("IsShowDetail") + .HasColumnType("bit") + .HasComment("是否显示详情"); + + b.Property("IsSigned") + .HasColumnType("bit") + .HasComment("是否签名"); + + b.Property("IsSystemSetOncology") + .HasColumnType("bit") + .HasComment("是否系统设置了 肿瘤学"); + + b.Property("IsUrgent") + .HasColumnType("bit") + .HasComment("是否加急"); + + b.Property("IseCRFShowInDicomReading") + .HasColumnType("bit") + .HasComment("eCRF报告是否显示在图像页面"); + + b.Property("ReadingInfoSignTime") + .HasColumnType("datetime2") + .HasComment("阅片信息签名时间"); + + b.Property("ReadingQuestionCriterionSystemId") + .HasColumnType("uniqueidentifier") + .HasComment("系统标准ID"); + + b.Property("ReadingTaskViewEnum") + .HasColumnType("int") + .HasComment("任务组织级别"); + + b.Property("ReadingTool") + .HasColumnType("int") + .HasComment("阅片工具"); + + b.Property("ReadingToolList") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReadingType") + .HasColumnType("int") + .HasComment("阅片模式"); + + b.Property("ReadingVersionEnum") + .HasColumnType("int"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("SynchronizeOriginalTime") + .HasColumnType("datetime2") + .HasComment("同步器官时间"); + + b.Property("SynchronizeTime") + .HasColumnType("datetime2") + .HasComment("同步时间"); + + b.Property("TaskAllocateObjEnum") + .HasColumnType("int") + .HasComment("任务分配对象"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目Id"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("ReadingQuestionCriterionTrial", t => + { + t.HasComment("项目阅片标准"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionSystem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClassifyAlgorithms") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分类算法"); + + b.Property("ClassifyEditType") + .HasColumnType("int"); + + b.Property("ClassifyQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("分类问题Id"); + + b.Property("ClassifyShowType") + .HasColumnType("int"); + + b.Property("ClassifyType") + .HasColumnType("int") + .HasComment("分类类型"); + + b.Property("ConvertShowType") + .HasColumnType("int") + .HasComment("转化显示类型"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DataSource") + .HasColumnType("int") + .HasComment("数据来源"); + + b.Property("DefaultValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("默认值"); + + b.Property("DictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("字典code"); + + b.Property("ExportResultStr") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("导出结果"); + + b.Property("FileType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("文件类型"); + + b.Property("GlobalReadingShowType") + .HasColumnType("int") + .HasComment("全局阅片显示类型"); + + b.Property("GroupClassify") + .HasColumnType("int") + .HasComment("分组分类"); + + b.Property("GroupEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文分组"); + + b.Property("GroupId") + .HasColumnType("uniqueidentifier") + .HasComment("分组ID"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分组"); + + b.Property("HighlightAnswer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("高亮问题的答案"); + + b.Property("ImageCount") + .HasColumnType("int") + .HasComment("图片数量"); + + b.Property("IsEnable") + .HasColumnType("bit") + .HasComment("是否启用"); + + b.Property("IsJudgeQuestion") + .HasColumnType("bit") + .HasComment("是否是裁判问题"); + + b.Property("IsRequired") + .HasColumnType("int") + .HasComment("是否是必须"); + + b.Property("IsShowInDicom") + .HasColumnType("bit") + .HasComment("是否显示在Dicom阅片中"); + + b.Property("LesionType") + .HasColumnType("int") + .HasComment("病灶类型"); + + b.Property("LimitEdit") + .HasColumnType("int") + .HasComment("限制编辑"); + + b.Property("LimitShow") + .HasColumnType("int") + .HasComment("限制显示"); + + b.Property("MaxAnswerLength") + .HasColumnType("int") + .HasComment("最大答案长度"); + + b.Property("MaxQuestionCount") + .HasColumnType("int") + .HasComment("最大问题数"); + + b.Property("OrderMark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("序号标记"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasComment("父问题ID"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("父问题触发"); + + b.Property("QuestionClassify") + .HasColumnType("int") + .HasComment("问题分类"); + + b.Property("QuestionEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文名称"); + + b.Property("QuestionGenre") + .HasColumnType("int") + .HasComment("问题类型"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题名称"); + + b.Property("QuestionType") + .HasColumnType("int") + .HasComment("问题类型"); + + b.Property("ReadingQuestionCriterionSystemId") + .HasColumnType("uniqueidentifier") + .HasComment("系统标准Id"); + + b.Property("RelevanceId") + .HasColumnType("uniqueidentifier") + .HasComment("关联ID"); + + b.Property("RelevanceValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("关联Value"); + + b.Property("Remark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("备注"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("ShowQuestion") + .HasColumnType("int") + .HasComment("是否显示"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("类型"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("类型值"); + + b.Property("Unit") + .HasColumnType("int") + .HasComment("单位"); + + b.Property("ValueType") + .HasColumnType("int") + .HasComment("数值类型"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("GroupId"); + + b.HasIndex("ParentId"); + + b.HasIndex("ReadingQuestionCriterionSystemId"); + + b.HasIndex("RelevanceId"); + + b.ToTable("ReadingQuestionSystem", t => + { + t.HasComment("系统阅片问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AnswerCombination") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasComment("答案组合"); + + b.Property("AnswerGroup") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("答案分组"); + + b.Property("CDISCCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CalculateQuestions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasComment("自定义计算标记"); + + b.Property("ClassifyAlgorithms") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分类算法"); + + b.Property("ClassifyEditType") + .HasColumnType("int"); + + b.Property("ClassifyQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("分类问题Id"); + + b.Property("ClassifyShowType") + .HasColumnType("int"); + + b.Property("ClassifyType") + .HasColumnType("int") + .HasComment("分类类型"); + + b.Property("ConvertShowType") + .HasColumnType("int") + .HasComment("转化显示类型"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CustomCalculateMark") + .HasColumnType("int") + .HasComment("自定义计算标记"); + + b.Property("CustomUnit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("自定义单位"); + + b.Property("DataSource") + .HasColumnType("int") + .HasComment("数据来源"); + + b.Property("DefaultValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("默认值"); + + b.Property("DictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("字典code"); + + b.Property("ExcludeShowVisitList") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ExportResultStr") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("导出结果"); + + b.Property("FileType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("文件类型"); + + b.Property("GlobalReadingShowType") + .HasColumnType("int") + .HasComment("全局阅片显示类型"); + + b.Property("GroupClassify") + .HasColumnType("int") + .HasComment("分组分类"); + + b.Property("GroupEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文分组"); + + b.Property("GroupId") + .HasColumnType("uniqueidentifier") + .HasComment("分组ID"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分组"); + + b.Property("HighlightAnswer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("高亮问题的答案"); + + b.Property("ImageCount") + .HasColumnType("int") + .HasComment("图片数量"); + + b.Property("ImageMarkEnum") + .HasColumnType("int"); + + b.Property("ImageTool") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageToolAttribute") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsAdditional") + .HasColumnType("bit"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsJudgeQuestion") + .HasColumnType("bit") + .HasComment("是否是裁判问题"); + + b.Property("IsRequired") + .HasColumnType("int") + .HasComment("是否是必须"); + + b.Property("IsShowInDicom") + .HasColumnType("bit") + .HasComment("是否显示在Dicom阅片中"); + + b.Property("JudgeDifferenceType") + .HasColumnType("int") + .HasComment("裁判百分比或绝对值的相差值匹配规则"); + + b.Property("JudgeDifferenceValue") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasComment("裁判百分比或绝对值的相差值"); + + b.Property("JudgeType") + .HasColumnType("int") + .HasComment("裁判类型"); + + b.Property("LesionType") + .HasColumnType("int") + .HasComment("病灶类型"); + + b.Property("LimitEdit") + .HasColumnType("int") + .HasComment("限制编辑"); + + b.Property("LimitShow") + .HasColumnType("int") + .HasComment("限制显示"); + + b.Property("MaxAnswerLength") + .HasColumnType("int") + .HasComment("最大答案长度"); + + b.Property("MaxQuestionCount") + .HasColumnType("int") + .HasComment("最大问题数"); + + b.Property("OrderMark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("序号标记"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasComment("父问题ID"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("父问题触发"); + + b.Property("QuestionClassify") + .HasColumnType("int") + .HasComment("问题分类"); + + b.Property("QuestionEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文名称"); + + b.Property("QuestionGenre") + .HasColumnType("int") + .HasComment("问题类型"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题名称"); + + b.Property("QuestionType") + .HasColumnType("int") + .HasComment("问题类型"); + + b.Property("ReadingCriterionPageId") + .HasColumnType("uniqueidentifier") + .HasComment("标准分页Id"); + + b.Property("ReadingQuestionCriterionTrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目标准Id"); + + b.Property("ReadingQuestionSystemId") + .HasColumnType("uniqueidentifier") + .HasComment("系统问题ID"); + + b.Property("RelevanceId") + .HasColumnType("uniqueidentifier") + .HasComment("关联ID"); + + b.Property("RelevanceValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("关联Value"); + + b.Property("Remark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("备注"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("ShowQuestion") + .HasColumnType("int") + .HasComment("是否显示"); + + b.Property("SystemParentId") + .HasColumnType("uniqueidentifier") + .HasComment("系统标准的ParentId"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目Id"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("类型"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("类型值"); + + b.Property("Unit") + .HasColumnType("int") + .HasComment("单位"); + + b.Property("ValueType") + .HasColumnType("int") + .HasComment("数值类型"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("GroupId"); + + b.HasIndex("ParentId"); + + b.HasIndex("ReadingCriterionPageId"); + + b.HasIndex("ReadingQuestionCriterionTrialId"); + + b.HasIndex("RelevanceId"); + + b.ToTable("ReadingQuestionTrial", t => + { + t.HasComment("项目阅片问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingSystemCriterionDictionary", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("CrterionDictionaryGroup") + .HasColumnType("int") + .HasComment("标准字典分组"); + + b.Property("DictionaryId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsBaseLineUse") + .HasColumnType("bit"); + + b.Property("IsFollowVisitUse") + .HasColumnType("bit"); + + b.Property("IsSystemCriterion") + .HasColumnType("bit"); + + b.Property("ParentCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DictionaryId"); + + b.ToTable("ReadingSystemCriterionDictionary", t => + { + t.HasComment("系统标准 - 全局配置 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BlindName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CTSeriesId") + .HasColumnType("uniqueidentifier") + .HasComment("融合的CTSeriesId"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("FristAddTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("首次添加任务ID"); + + b.Property("FromMark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("来自于哪个标记"); + + b.Property("InstanceId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsCanEditPosition") + .HasColumnType("bit"); + + b.Property("IsCurrentTaskAdd") + .HasColumnType("bit") + .HasComment("是否是当前任务添加"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsDicomReading") + .HasColumnType("bit") + .HasComment("是Dicom阅片"); + + b.Property("MarkTool") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("标记工具"); + + b.Property("MeasureData") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MergeRowId") + .HasColumnType("uniqueidentifier"); + + b.Property("NumberOfFrames") + .HasColumnType("int"); + + b.Property("OrderMark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OrganInfoId") + .HasColumnType("uniqueidentifier") + .HasComment("器官Id"); + + b.Property("OtherInstanceId") + .HasColumnType("uniqueidentifier"); + + b.Property("OtherMarkTool") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OtherMeasureData") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OtherNumberOfFrames") + .HasColumnType("int"); + + b.Property("OtherPicturePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("OtherSeriesId") + .HasColumnType("uniqueidentifier"); + + b.Property("OtherStudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("PTSeriesId") + .HasColumnType("uniqueidentifier") + .HasComment("融合的PTSeriesId"); + + b.Property("PicturePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasComment("截图地址"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReportMark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("报告页面显示来自于哪个标记"); + + b.Property("RowIndex") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("RowMark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("病灶编号"); + + b.Property("SeriesId") + .HasColumnType("uniqueidentifier"); + + b.Property("SplitOrMergeType") + .HasColumnType("int"); + + b.Property("SplitRowId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.Property("WL") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasComment("窗位WL"); + + b.Property("WW") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasComment("窗宽WW"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("FristAddTaskId"); + + b.HasIndex("InstanceId"); + + b.HasIndex("MergeRowId"); + + b.HasIndex("OrganInfoId"); + + b.HasIndex("QuestionId"); + + b.HasIndex("SeriesId"); + + b.HasIndex("SplitRowId"); + + b.HasIndex("StudyId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("ReadingTableAnswerRowInfo", t => + { + t.HasComment("表格问题答案行数据"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTableQuestionAnswer", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Answer") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier"); + + b.Property("RowId") + .HasColumnType("uniqueidentifier"); + + b.Property("RowIndex") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("TableQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("表格问题Id"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("QuestionId"); + + b.HasIndex("RowId"); + + b.HasIndex("TableQuestionId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("ReadingTableQuestionAnswer", t => + { + t.HasComment("项目阅片 - 表格问题行记录子项答案"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTableQuestionSystem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClassifyAlgorithms") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分类算法"); + + b.Property("ClassifyEditType") + .HasColumnType("int"); + + b.Property("ClassifyShowType") + .HasColumnType("int"); + + b.Property("ClassifyTableQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("分类问题表格Id"); + + b.Property("ClassifyType") + .HasColumnType("int") + .HasComment("分类类型"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DataSource") + .HasColumnType("int") + .HasComment("数据来源"); + + b.Property("DataTableColumn") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("数据列"); + + b.Property("DataTableName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("数据表名称"); + + b.Property("DefaultValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("默认值"); + + b.Property("DependParentId") + .HasColumnType("uniqueidentifier") + .HasComment("关联父问题"); + + b.Property("DictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("字典code"); + + b.Property("ExportResultStr") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("导出结果"); + + b.Property("FileType") + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("文件类型"); + + b.Property("ImageCount") + .HasColumnType("int") + .HasComment("图片数量"); + + b.Property("IsCopy") + .HasColumnType("bit") + .HasComment("复制病灶的时候 是否复制这个问题"); + + b.Property("IsDepend") + .HasColumnType("int") + .HasComment("是否关联"); + + b.Property("IsEnable") + .HasColumnType("bit") + .HasComment("是否启用"); + + b.Property("IsPreinstall") + .HasColumnType("bit"); + + b.Property("IsRequired") + .HasColumnType("int"); + + b.Property("LimitEdit") + .HasColumnType("int") + .HasComment("限制编辑"); + + b.Property("MaxAnswerLength") + .HasColumnType("int") + .HasComment("最大答案长度"); + + b.Property("MaxRowCount") + .HasColumnType("int") + .HasComment("最大问题数"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("父问题触发值"); + + b.Property("QuestionClassify") + .HasColumnType("int") + .HasComment("问题分类"); + + b.Property("QuestionEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文名称"); + + b.Property("QuestionMark") + .HasColumnType("int") + .HasComment("问题标识"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题名称"); + + b.Property("ReadingQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("系统表的问题Id ReadingQuestionSystem的Id"); + + b.Property("RelevanceId") + .HasColumnType("uniqueidentifier") + .HasComment("显示父问题"); + + b.Property("RelevanceValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("显示父问题的值"); + + b.Property("Remark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("备注"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序号"); + + b.Property("ShowQuestion") + .HasColumnType("int") + .HasComment("是否显示"); + + b.Property("SystemCriterionId") + .HasColumnType("uniqueidentifier") + .HasComment("系统标准Id"); + + b.Property("TableQuestionType") + .HasColumnType("int") + .HasComment("表格问题类型"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("值"); + + b.Property("Unit") + .HasColumnType("int") + .HasComment("单位"); + + b.Property("ValueType") + .HasColumnType("int") + .HasComment("数值类型"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DependParentId"); + + b.HasIndex("ReadingQuestionId"); + + b.ToTable("ReadingTableQuestionSystem", t => + { + t.HasComment("系统表格问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CDISCCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CalculateQuestions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasComment("自定义计算标记"); + + b.Property("ClassifyAlgorithms") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("分类算法"); + + b.Property("ClassifyEditType") + .HasColumnType("int"); + + b.Property("ClassifyShowType") + .HasColumnType("int"); + + b.Property("ClassifyTableQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("分类问题表格Id"); + + b.Property("ClassifyType") + .HasColumnType("int") + .HasComment("分类类型"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CustomCalculateMark") + .HasColumnType("int") + .HasComment("自定义计算标记"); + + b.Property("CustomUnit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("自定义单位"); + + b.Property("DataSource") + .HasColumnType("int") + .HasComment("数据来源"); + + b.Property("DataTableColumn") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DataTableName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DefaultValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("默认值"); + + b.Property("DependParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("DictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("字典code"); + + b.Property("ExportResultStr") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("导出结果"); + + b.Property("FileType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("文件类型"); + + b.Property("ImageCount") + .HasColumnType("int") + .HasComment("图片数量"); + + b.Property("ImageMarkEnum") + .HasColumnType("int"); + + b.Property("ImageTool") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageToolAttribute") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsCopy") + .HasColumnType("bit") + .HasComment("复制病灶的时候 是否复制这个问题"); + + b.Property("IsDepend") + .HasColumnType("int"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsPreinstall") + .HasColumnType("bit"); + + b.Property("IsRequired") + .HasColumnType("int"); + + b.Property("LimitEdit") + .HasColumnType("int") + .HasComment("限制编辑"); + + b.Property("MaxAnswerLength") + .HasColumnType("int") + .HasComment("最大答案长度"); + + b.Property("MaxRowCount") + .HasColumnType("int"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("QuestionClassify") + .HasColumnType("int") + .HasComment("问题分类"); + + b.Property("QuestionEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文名称"); + + b.Property("QuestionMark") + .HasColumnType("int") + .HasComment("问题标识"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ReadingQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("项目问题的Id ReadingQuestionTrial的id"); + + b.Property("RelevanceId") + .HasColumnType("uniqueidentifier"); + + b.Property("RelevanceValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Remark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("注释"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("ShowQuestion") + .HasColumnType("int"); + + b.Property("SystemTableQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("系统表格问题Id"); + + b.Property("TableQuestionType") + .HasColumnType("int"); + + b.Property("TrialCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Unit") + .HasColumnType("int") + .HasComment("单位"); + + b.Property("ValueType") + .HasColumnType("int") + .HasComment("数值类型"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DependParentId"); + + b.HasIndex("ReadingQuestionId"); + + b.ToTable("ReadingTableQuestionTrial", t => + { + t.HasComment("项目阅片问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Answer") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasComment("答案"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("GlobalChangeAnswer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("全局阅片修改的答案"); + + b.Property("IsGlobalChange") + .HasColumnType("bit") + .HasComment("全局阅片是否修改"); + + b.Property("PCWGInterimAnswer") + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ReadingQuestionCriterionTrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目问题标准Id"); + + b.Property("ReadingQuestionTrialId") + .HasColumnType("uniqueidentifier") + .HasComment("项目问题Id"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ReadingQuestionTrialId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("ReadingTaskQuestionAnswer", t => + { + t.HasComment("阅片任务答案"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTaskQuestionMark", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CustomTagId") + .HasColumnType("uniqueidentifier"); + + b.Property("FristAddTaskId") + .HasColumnType("uniqueidentifier"); + + b.Property("InstanceId") + .HasColumnType("uniqueidentifier"); + + b.Property("MarkId") + .HasColumnType("uniqueidentifier"); + + b.Property("MarkTool") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MeasureData") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NumberOfFrames") + .HasColumnType("int"); + + b.Property("OrderMarkName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OtherInstanceId") + .HasColumnType("uniqueidentifier"); + + b.Property("OtherMarkTool") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OtherMeasureData") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OtherNumberOfFrames") + .HasColumnType("int"); + + b.Property("OtherPicturePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("OtherSeriesId") + .HasColumnType("uniqueidentifier"); + + b.Property("OtherStudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("PicturePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier"); + + b.Property("QuestionType") + .HasColumnType("int"); + + b.Property("RowId") + .HasColumnType("uniqueidentifier"); + + b.Property("RowIndex") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("SeriesId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("TableQuestionId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("QuestionId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("ReadingTaskQuestionMark", t => + { + t.HasComment("项目阅片 - 任务问题标记"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTaskRelation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RelevanceTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("关联的任务ID"); + + b.Property("RelevanceType") + .HasColumnType("int") + .HasComment("类型具体解释 看枚举"); + + b.Property("TaskId") + .HasColumnType("uniqueidentifier") + .HasComment("任务ID"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TaskId"); + + b.ToTable("ReadingTaskRelation", t => + { + t.HasComment("任务关系表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTrialCriterionDictionary", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("CrterionDictionaryGroup") + .HasColumnType("int"); + + b.Property("DictionaryId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsBaseLineUse") + .HasColumnType("bit"); + + b.Property("IsFollowVisitUse") + .HasColumnType("bit"); + + b.Property("ParentCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("CriterionId"); + + b.HasIndex("DictionaryId"); + + b.ToTable("ReadingTrialCriterionDictionary", t => + { + t.HasComment("项目阅片标准 - 全局配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ResearchPublication", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AwardsHonors") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("AwardsHonorsCN") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Grants") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GrantsCN") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Publications") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PublicationsCN") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Research") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ResearchCN") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ResearchPublication", t => + { + t.HasComment("医生 - 科研学术记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReviewerPayInformation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Additional") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("BankCardNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BankName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorNameInBank") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IDCard") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RankId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("DoctorPayInformation", t => + { + t.HasComment("医生计费 - 支付信息表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPImageUpload", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CalledAE") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CallingAE") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CallingAEIP") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("FileCount") + .HasColumnType("int"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("StartTime") + .HasColumnType("datetime2"); + + b.Property("StudyCount") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("UploadJsonStr") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialSiteId"); + + b.ToTable("SCPImageUpload", t => + { + t.HasComment("项目中心 - 影像推送记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPInstance", b => + { + b.Property("SeqId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Anonymize") + .HasColumnType("bit"); + + b.Property("BitsAllocated") + .HasColumnType("int"); + + b.Property("CPIStatus") + .HasColumnType("bit"); + + b.Property("CorrectedImage") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DecayCorrection") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EncapsulatedDocument") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("FrameOfReferenceUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FrameTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ImageColumns") + .HasColumnType("int"); + + b.Property("ImageOrientationPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImagePositionPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageRows") + .HasColumnType("int"); + + b.Property("ImagerPixelSpacing") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("InstanceNumber") + .HasColumnType("int"); + + b.Property("InstanceTime") + .HasColumnType("datetime2"); + + b.Property("IsEncapsulated") + .HasColumnType("bit"); + + b.Property("MediaStorageSOPClassUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MediaStorageSOPInstanceUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NumberOfFrames") + .HasColumnType("int"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("PhotometricInterpretation") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PixelRepresentation") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PixelSpacing") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RescaleIntercept") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RescaleSlope") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SOPClassUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SequenceOfUltrasoundRegions") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesId") + .HasColumnType("uniqueidentifier"); + + b.Property("SeriesInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SliceLocation") + .HasColumnType("int"); + + b.Property("SliceThickness") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SopInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TransferSytaxUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Units") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("WindowCenter") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("WindowWidth") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("SeqId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SeriesId"); + + b.HasIndex("StudyId"); + + b.ToTable("SCPInstance", t => + { + t.HasComment("项目中心 - 推送Instance"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPPatient", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EarliestStudyTime") + .HasColumnType("datetime2"); + + b.Property("LatestPushTime") + .HasColumnType("datetime2"); + + b.Property("LatestStudyTime") + .HasColumnType("datetime2"); + + b.Property("PatientAge") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientBirthDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientIdStr") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientSex") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialSiteId"); + + b.ToTable("SCPPatient", t => + { + t.HasComment("项目中心 - 推送检查患者"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPSeries", b => + { + b.Property("SeqId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AcquisitionDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartExamined") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEdit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomSeriesDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomSeriesTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ImageOrientationPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImagePositionPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageResizePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ImagerPixelSpacing") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("InstanceCount") + .HasColumnType("int"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("Modality") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ProtocolName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RadiopharmaceuticalInformationSequence") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SequenceName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesNumber") + .HasColumnType("int"); + + b.Property("SeriesTime") + .HasColumnType("datetime2"); + + b.Property("SliceThickness") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TriggerTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("SeqId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("StudyId"); + + b.ToTable("SCPSeries", t => + { + t.HasComment("项目中心 - 推送序列"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPStudy", b => + { + b.Property("SeqId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessionNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartExamined") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEdit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEditOther") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CalledAE") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CallingAE") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DeviceSerialNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DeviceUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomStudyDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomStudyTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("InstanceCount") + .HasColumnType("int"); + + b.Property("InstitutionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsUploadFinished") + .HasColumnType("bit"); + + b.Property("Manufacturer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ManufacturerModelName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Modalities") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ModalityForEdit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientAge") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientBirthDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientId") + .HasColumnType("uniqueidentifier"); + + b.Property("PatientIdStr") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientSex") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientWeight") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesCount") + .HasColumnType("int"); + + b.Property("SoftwareVersions") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyDIRPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyTime") + .HasColumnType("datetime2"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("TriggerTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("SeqId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("PatientId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialSiteId"); + + b.ToTable("SCPStudy", t => + { + t.HasComment("项目中心 - 推送检查"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ShortcutKey", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AltKey") + .HasColumnType("bit"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CtrlKey") + .HasColumnType("bit"); + + b.Property("ImageToolType") + .HasColumnType("int") + .HasComment("影像工具类型"); + + b.Property("Keyboardkey") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("对应的键盘按键"); + + b.Property("MetaKey") + .HasColumnType("bit"); + + b.Property("ShiftKey") + .HasColumnType("bit"); + + b.Property("ShortcutKeyEnum") + .HasColumnType("int") + .HasComment("按键枚举"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("ShortcutKey", t => + { + t.HasComment("用户配置 - 快捷键"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Site", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Address") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AliasName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("City") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("ContactName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ContactPhone") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Country") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DirectorName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DirectorPhone") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("HospitalId") + .HasColumnType("uniqueidentifier"); + + b.Property("Province") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SiteCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SiteName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SiteNameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("UniqueCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("HospitalId"); + + b.ToTable("Site", t => + { + t.HasComment("机构 - Site"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Sponsor", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsTrialLevel") + .HasColumnType("bit"); + + b.Property("SponsorCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SponsorName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SponsorNameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("Sponsor", t => + { + t.HasComment("机构 - Sponsor"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.StudyMonitor", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ArchiveFinishedTime") + .HasColumnType("datetime2"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FailedFileCount") + .HasColumnType("int"); + + b.Property("FileCount") + .HasColumnType("int"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("IP") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsDicom") + .HasColumnType("bit"); + + b.Property("IsDicomReUpload") + .HasColumnType("bit"); + + b.Property("IsSuccess") + .HasColumnType("bit"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RecordPath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("StudyCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier") + .HasComment("Dicom/非Dicom"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UploadFinishedTime") + .HasColumnType("datetime2"); + + b.Property("UploadStartTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("StudyId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("TrialId"); + + b.ToTable("StudyMonitor", t => + { + t.HasComment("项目 - 影像上传监控"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Subject", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Age") + .HasColumnType("int"); + + b.Property("BirthDate") + .HasColumnType("datetime2"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("FinalSubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("FirstGiveMedicineTime") + .HasColumnType("datetime2"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Height") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEnrollment") + .HasColumnType("bit"); + + b.Property("IsReReadingOrBackInfluenceAnalysis") + .HasColumnType("bit") + .HasComment("重阅或者退回影响一致性分析"); + + b.Property("IsSubjectQuit") + .HasColumnType("bit") + .HasComment("受试者退出"); + + b.Property("IsUrgent") + .HasColumnType("bit"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("LatestSubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("MedicalNo") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OutEnrollmentTime") + .HasColumnType("datetime2"); + + b.Property("Reason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Sex") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ShortName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SignDate") + .HasColumnType("datetime2") + .HasComment("知情同意书签署日期"); + + b.Property("Status") + .HasColumnType("int") + .HasComment("1 访视中,2 出组 3 访视结束"); + + b.Property("SuspendReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("访视中止原因"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitOverTime") + .HasColumnType("datetime2"); + + b.Property("Weight") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("FinalSubjectVisitId"); + + b.HasIndex("LatestSubjectVisitId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialSiteId"); + + b.ToTable("Subject", t => + { + t.HasComment("项目 - 受试者"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectAdditionalEvaluationResult", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Answer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FinalAnswer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("最终结果"); + + b.Property("FinalTranslateDictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("最终结果翻字典"); + + b.Property("IsFinalResult") + .HasColumnType("bit") + .HasComment("是否是最终结果"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TranslateDictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("附加评估答案翻译字典"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingQuestionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("TrialReadingQuestionId"); + + b.ToTable("SubjectAdditionalEvaluationResult", t => + { + t.HasComment("受试者 - 附加评估标准结果"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectCanceDoctor", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.ToTable("SubjectCanceDoctor", t => + { + t.HasComment("受试者 - 阅片标准取消分配医生记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectCriteriaEvaluation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsJoinEvaluation") + .HasColumnType("bit") + .HasComment("是否参与评估"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("SubjectCriteriaEvaluation", t => + { + t.HasComment("受试者 - 参与附加评估标准配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectCriteriaEvaluationVisitFilter", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ImageDeterminationResultState") + .HasColumnType("int") + .HasComment("影像判断结果"); + + b.Property("ImageFilterState") + .HasColumnType("int") + .HasComment("影像筛选状态"); + + b.Property("IsGeneratedTask") + .HasColumnType("bit") + .HasComment("是否已生成任务"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("SubjectCriteriaEvaluationVisitFilter", t => + { + t.HasComment("受试者 - 附加评估标准影像筛选"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectCriteriaEvaluationVisitStudyFilter", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsConfirmed") + .HasColumnType("bit"); + + b.Property("IsReading") + .HasColumnType("bit"); + + b.Property("SeriesId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SeriesId"); + + b.HasIndex("StudyId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("SubjectCriteriaEvaluationVisitStudyFilter", t => + { + t.HasComment("受试者 - 附加评估标准影像筛选检查"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ArmEnum") + .HasColumnType("int"); + + b.Property("AssignTime") + .HasColumnType("datetime2"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsConfirmed") + .HasColumnType("bit"); + + b.Property("ReplacedSubjectUserId") + .HasColumnType("uniqueidentifier") + .HasComment("该属性有值 说明该医生被替换了 分配的时候 要过滤掉"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DoctorUserId"); + + b.HasIndex("ReplacedSubjectUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("TrialId"); + + b.ToTable("SubjectUser"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectVisit", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditState") + .HasColumnType("int") + .HasComment("审核状态"); + + b.Property("Auditor") + .HasColumnType("uniqueidentifier"); + + b.Property("BlindName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ChallengeState") + .HasColumnType("int"); + + b.Property("CheckBackTime") + .HasColumnType("datetime2"); + + b.Property("CheckChallengeState") + .HasColumnType("int"); + + b.Property("CheckPassedTime") + .HasColumnType("datetime2"); + + b.Property("CheckResult") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CheckState") + .HasColumnType("int") + .HasComment("核查状态"); + + b.Property("CheckTime") + .HasColumnType("datetime2"); + + b.Property("CheckUserId") + .HasColumnType("uniqueidentifier") + .HasComment("一致性核查人Id"); + + b.Property("CloseTheReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("关闭一致性质疑原因"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CurrentActionUserExpireTime") + .HasColumnType("datetime2"); + + b.Property("CurrentActionUserId") + .HasColumnType("uniqueidentifier") + .HasComment("当前质控领取人"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("EarliestScanDate") + .HasColumnType("datetime2"); + + b.Property("ForwardState") + .HasColumnType("int"); + + b.Property("ForwardTime") + .HasColumnType("datetime2"); + + b.Property("ForwardUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("InPlan") + .HasColumnType("bit"); + + b.Property("IsBaseLine") + .HasColumnType("bit"); + + b.Property("IsCheckBack") + .HasColumnType("bit") + .HasComment("是否一致性核查回退"); + + b.Property("IsConfirmedClinicalData") + .HasColumnType("bit") + .HasComment("是否确认了、签名了 临床数据完整性"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEnrollmentConfirm") + .HasColumnType("bit"); + + b.Property("IsFinalVisit") + .HasColumnType("bit"); + + b.Property("IsLostVisit") + .HasColumnType("bit"); + + b.Property("IsPMBackOrReReading") + .HasColumnType("bit"); + + b.Property("IsQCConfirmedReupload") + .HasColumnType("bit"); + + b.Property("IsTake") + .HasColumnType("bit"); + + b.Property("IsUrgent") + .HasColumnType("bit"); + + b.Property("IsVisitTaskGenerated") + .HasColumnType("bit"); + + b.Property("LatestScanDate") + .HasColumnType("datetime2") + .HasComment("最晚拍片日期"); + + b.Property("ManualPassReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("通过原因"); + + b.Property("OutPlanPreviousVisitId") + .HasColumnType("uniqueidentifier") + .HasComment("计划外上一访视"); + + b.Property("PDState") + .HasColumnType("int"); + + b.Property("PreliminaryAuditTime") + .HasColumnType("datetime2"); + + b.Property("PreliminaryAuditUserId") + .HasColumnType("uniqueidentifier") + .HasComment("单审通过人"); + + b.Property("ReadingStatus") + .HasColumnType("int"); + + b.Property("RequestBackState") + .HasColumnType("int") + .HasComment("一致性核查 回退"); + + b.Property("ReviewAuditTime") + .HasColumnType("datetime2"); + + b.Property("ReviewAuditUserId") + .HasColumnType("uniqueidentifier") + .HasComment("双审通过人"); + + b.Property("SVENDTC") + .HasColumnType("datetime2"); + + b.Property("SVSTDTC") + .HasColumnType("datetime2"); + + b.Property("SVUPDES") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SecondReviewState") + .HasColumnType("int"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubmitState") + .HasColumnType("int") + .HasComment("提交状态"); + + b.Property("SubmitTime") + .HasColumnType("datetime2"); + + b.Property("SubmitUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitDay") + .HasColumnType("int"); + + b.Property("VisitExecuted") + .HasColumnType("int") + .HasComment("0 未执行 1 执行了 2 不可用"); + + b.Property("VisitName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("VisitNum") + .HasPrecision(18, 1) + .HasColumnType("decimal(18,1)"); + + b.Property("VisitStageId") + .HasColumnType("uniqueidentifier") + .HasComment("访视计划Id,计划外没有"); + + b.Property("VisitWindowLeft") + .HasColumnType("int"); + + b.Property("VisitWindowRight") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("CurrentActionUserId"); + + b.HasIndex("ForwardUserId"); + + b.HasIndex("OutPlanPreviousVisitId"); + + b.HasIndex("PreliminaryAuditUserId"); + + b.HasIndex("ReviewAuditUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("SubmitUserId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialSiteId"); + + b.ToTable("SubjectVisit", t => + { + t.HasComment("受试者访视"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectVisitImageBackRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplyReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ApplyUserRole") + .HasColumnType("int"); + + b.Property("AuditTime") + .HasColumnType("datetime2"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EarliestScanDate") + .HasColumnType("datetime2"); + + b.Property("ImageBackState") + .HasColumnType("int") + .HasComment("影像上传 回退"); + + b.Property("LatestScanDate") + .HasColumnType("datetime2") + .HasComment("最晚拍片日期"); + + b.Property("ResultRemark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubmitTime") + .HasColumnType("datetime2"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("SubjectVisitImageBackRecord", t => + { + t.HasComment("受试者访视影像回退记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SysFileType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ArchiveTypeEnum") + .HasColumnType("int") + .HasComment("报告、文档、记录"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsConfirmRecord") + .HasColumnType("bit") + .HasComment("是否确认收入项"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("SubIdentificationEnum") + .HasColumnType("int") + .HasComment("子类标识,是取那个表的数据"); + + b.Property("SysTemplateTypeEnum") + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("SysFileType", t => + { + t.HasComment("后台 - 系统文件类型表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemAnonymization", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Element") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Group") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsAdd") + .HasColumnType("bit"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsFixed") + .HasColumnType("bit"); + + b.Property("ReplaceValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TagDescription") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TagDescriptionCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ValueRepresentation") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("SystemAnonymization", t => + { + t.HasComment("系统 - 匿名化配置(需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemBasicData", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BasicDataTypeEnum") + .HasColumnType("int"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ValueCN") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ParentId"); + + b.ToTable("SystemBasicData", t => + { + t.HasComment("系统 - 签名模板场景配置 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemClinicalQuestion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CalculateQuestions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasComment("自定义计算问题"); + + b.Property("ClinicalOptionTypeEnum") + .HasColumnType("int") + .HasComment("临床数据选项类型(无,自定义)"); + + b.Property("ClinicalQuestionMarkEnum") + .HasColumnType("int") + .HasComment("问题标识"); + + b.Property("ClinicalQuestionShowEnum") + .HasColumnType("int") + .HasComment("显示类型"); + + b.Property("ClinicalQuestionType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("临床问题类型(分组,单选。)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CustomCalculateMark") + .HasColumnType("int") + .HasComment("自定义计算标记"); + + b.Property("DefaultValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("默认值"); + + b.Property("DictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("字典Code"); + + b.Property("DigitPlaces") + .HasColumnType("int") + .HasComment("小数点位数"); + + b.Property("GroupId") + .HasColumnType("uniqueidentifier") + .HasComment("分组Id"); + + b.Property("IsCheckDate") + .HasColumnType("bit") + .HasComment("是否是检查日期"); + + b.Property("IsRequired") + .HasColumnType("int") + .HasComment("是否必填"); + + b.Property("MaxAnswerLength") + .HasColumnType("int") + .HasComment("最大长度"); + + b.Property("MaxQuestionCount") + .HasColumnType("int") + .HasComment("最大行数"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasComment("父问题Id"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("父问题触发值"); + + b.Property("QuestionEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文名称"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题名称"); + + b.Property("RelevanceId") + .HasColumnType("uniqueidentifier") + .HasComment("关联ID"); + + b.Property("RelevanceValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("关联Value"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("SystemClinicalId") + .HasColumnType("uniqueidentifier") + .HasComment("项目临床数据Id"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("自定义选项"); + + b.Property("Unit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("单位"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("GroupId"); + + b.ToTable("SystemClinicalQuestion", t => + { + t.HasComment("系统临床数据问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemClinicalTableQuestion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClinicalOptionTypeEnum") + .HasColumnType("int") + .HasComment("临床数据选项类型(无,自定义)"); + + b.Property("ClinicalTableQuestionMarkEnum") + .HasColumnType("int") + .HasComment("问题标识"); + + b.Property("ClinicalTableQuestionType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("临床问题类型(分组,单选。)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DefaultValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("默认值"); + + b.Property("DictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("字典Code"); + + b.Property("DigitPlaces") + .HasColumnType("int") + .HasComment("小数点位数"); + + b.Property("IsRequired") + .HasColumnType("int") + .HasComment("是否必填"); + + b.Property("MaxAnswerLength") + .HasColumnType("int") + .HasComment("最大长度"); + + b.Property("QuestionEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文名称"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("外层问题Id"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题名称"); + + b.Property("RelevanceId") + .HasColumnType("uniqueidentifier") + .HasComment("关联ID"); + + b.Property("RelevanceValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("关联Value"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("SystemClinicalId") + .HasColumnType("uniqueidentifier") + .HasComment("系统临床数据Id"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("自定义选项"); + + b.Property("Unit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("单位"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("SystemClinicalTableQuestion", t => + { + t.HasComment("系统临床表格问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemCriterionDictionaryCode", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("SystemCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("SystemCriterionDictionaryCode", t => + { + t.HasComment("系统标准 - 字典配置 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemCriterionKeyFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SystemCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("SystemCriterionKeyFile", t => + { + t.HasComment("系统标准阅片关键点文件"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemDocConfirmedIdentityUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConfirmTime") + .HasColumnType("datetime2"); + + b.Property("ConfirmUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("SignFirstViewTime") + .HasColumnType("datetime2"); + + b.Property("SignText") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("SystemDocumentId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ConfirmUserId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SystemDocumentId"); + + b.ToTable("SystemDocConfirmedIdentityUser", t => + { + t.HasComment("后台 - 系统文档签署记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemDocNeedConfirmedUserType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("NeedConfirmUserTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("SystemDocumentId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("NeedConfirmUserTypeId"); + + b.HasIndex("SystemDocumentId"); + + b.ToTable("SystemDocNeedConfirmedUserType", t => + { + t.HasComment("后台 - 系统文档需要签署用户类型"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemDocument", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CurrentStaffTrainDays") + .HasColumnType("int"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("DocUserSignType") + .HasColumnType("int"); + + b.Property("FileTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsPublish") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NewStaffTrainDays") + .HasColumnType("int"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("SignViewMinimumMinutes") + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("FileTypeId"); + + b.ToTable("SystemDocument", t => + { + t.HasComment("后台 - 系统签署文档"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemDocumentAttachment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileFormat") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("FileSize") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OffLine") + .HasColumnType("bit"); + + b.Property("SystemDocumentId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SystemDocumentId"); + + b.ToTable("SystemDocumentAttachment", t => + { + t.HasComment("后台 - 系统签署文档附件"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemNotice", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicableProjectEnum") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NoticeContent") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NoticeLevelEnum") + .HasColumnType("int"); + + b.Property("NoticeModeEnum") + .HasColumnType("int"); + + b.Property("NoticeStateEnum") + .HasColumnType("int"); + + b.Property("NoticeTypeEnum") + .HasColumnType("int"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PublishedTime") + .HasColumnType("datetime2"); + + b.Property("PublishedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("PublishedUserId"); + + b.ToTable("SystemNotice", t => + { + t.HasComment("后台 - 系统通知"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemNoticeUserRead", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("SystemNoticeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SystemNoticeId"); + + b.ToTable("SystemNoticeUserRead", t => + { + t.HasComment("后台 - 系统通知用户读取记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemNoticeUserType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("SystemNoticeId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserTypeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SystemNoticeId"); + + b.HasIndex("UserTypeId"); + + b.ToTable("SystemNoticeUserType", t => + { + t.HasComment("后台 - 系统通知用户类型配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskAllocationRule", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EnrollId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsJudgeDoctor") + .HasColumnType("bit") + .HasComment("是否是裁判医生 裁判医生单独加入"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PlanReadingRatio") + .HasColumnType("int"); + + b.Property("PlanSubjectCount") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DoctorUserId"); + + b.HasIndex("EnrollId") + .IsUnique(); + + b.HasIndex("TrialId"); + + b.ToTable("TaskAllocationRule", t => + { + t.HasComment("项目阅片 - 分配规则"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskConsistentRule", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BlindSubjectNumberOfPlaces") + .HasColumnType("int"); + + b.Property("BlindTrialSiteCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IntervalWeeks") + .HasColumnType("int"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsGenerateGlobalTask") + .HasColumnType("bit"); + + b.Property("IsHaveReadingPeriod") + .HasColumnType("bit"); + + b.Property("IsSelfAnalysis") + .HasColumnType("bit"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PlanSubjectCount") + .HasColumnType("int"); + + b.Property("PlanVisitCount") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("TaskConsistentRule", t => + { + t.HasComment("项目阅片 - 一致性分析生成任务配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskInfluence", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("InfluenceTaskId") + .HasColumnType("uniqueidentifier"); + + b.Property("OptType") + .HasColumnType("int") + .HasComment("对影响任务进行的操作"); + + b.Property("OriginalTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("InfluenceTaskId"); + + b.HasIndex("OriginalTaskId"); + + b.ToTable("TaskInfluence", t => + { + t.HasComment("项目阅片 - 退回重阅影响"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskInstance", b => + { + b.Property("SeqId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Anonymize") + .HasColumnType("bit"); + + b.Property("BitsAllocated") + .HasColumnType("int"); + + b.Property("CPIStatus") + .HasColumnType("bit"); + + b.Property("CorrectedImage") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DecayCorrection") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EncapsulatedDocument") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("FrameOfReferenceUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FrameTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("HtmlPath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ImageColumns") + .HasColumnType("int"); + + b.Property("ImageOrientationPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImagePositionPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageRows") + .HasColumnType("int"); + + b.Property("ImagerPixelSpacing") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("InstanceNumber") + .HasColumnType("int"); + + b.Property("InstanceTime") + .HasColumnType("datetime2"); + + b.Property("IsEncapsulated") + .HasColumnType("bit"); + + b.Property("MediaStorageSOPClassUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MediaStorageSOPInstanceUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NumberOfFrames") + .HasColumnType("int"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PhotometricInterpretation") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PixelRepresentation") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PixelSpacing") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RescaleIntercept") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RescaleSlope") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SOPClassUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SequenceOfUltrasoundRegions") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesId") + .HasColumnType("uniqueidentifier"); + + b.Property("SeriesInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SliceLocation") + .HasColumnType("int"); + + b.Property("SliceThickness") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SopInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TransferSytaxUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("Units") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.Property("WindowCenter") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("WindowWidth") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("SeqId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SeriesId"); + + b.HasIndex("StudyId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("TaskInstance", t => + { + t.HasComment("项目阅片 - 任务后处理Instance"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskMedicalReview", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllocateTime") + .HasColumnType("datetime2") + .HasComment("分配时间"); + + b.Property("AuditAdviceEnum") + .HasColumnType("int") + .HasComment("审核建议"); + + b.Property("AuditSignTime") + .HasColumnType("datetime2") + .HasComment("审核通过时间"); + + b.Property("AuditState") + .HasColumnType("int") + .HasComment("审核状态"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DialogCloseReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("对话关闭原因"); + + b.Property("DisagreeReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("不同意重阅原因"); + + b.Property("DoctorUserIdeaEnum") + .HasColumnType("int") + .HasComment("阅片人是否认同"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("文件名称"); + + b.Property("ImagePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasComment("图片路径"); + + b.Property("IsApplyHeavyReading") + .HasColumnType("bit") + .HasComment("是否申请重阅"); + + b.Property("IsAutoGenerate") + .HasColumnType("bit"); + + b.Property("IsClosedDialog") + .HasColumnType("bit") + .HasComment("是否关闭对话"); + + b.Property("IsHaveQuestion") + .HasColumnType("bit") + .HasComment("是否有问题"); + + b.Property("IsInvalid") + .HasColumnType("bit") + .HasComment("无效的 为True无效"); + + b.Property("IsSendMessage") + .HasColumnType("bit") + .HasComment("是否发送消息"); + + b.Property("LatestReplyUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("MedicalDialogCloseEnum") + .HasColumnType("int") + .HasComment("医学审核对话关闭原因"); + + b.Property("MedicalManagerUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("PDRelationTaskIdListStr") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Questioning") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("质询问题"); + + b.Property("SaveConclusionTime") + .HasColumnType("datetime2") + .HasComment("保存结论时间"); + + b.Property("SaveQuestionTime") + .HasColumnType("datetime2") + .HasComment("保存问题的时间"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("LatestReplyUserId"); + + b.HasIndex("MedicalManagerUserId"); + + b.HasIndex("TrialId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("TaskMedicalReview", t => + { + t.HasComment("项目阅片 - 医学审核"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskMedicalReviewRule", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PlanGlobalCount") + .HasColumnType("int"); + + b.Property("PlanJudgeCount") + .HasColumnType("int"); + + b.Property("PlanTumorCount") + .HasColumnType("int"); + + b.Property("PlanVisitCount") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DoctorUserId"); + + b.ToTable("TaskMedicalReviewRule", t => + { + t.HasComment("项目阅片 - 一致性分析规则"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskSeries", b => + { + b.Property("SeqId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AcquisitionDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartExamined") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEdit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomSeriesDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomSeriesTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ImageOrientationPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImagePositionPatient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageResizePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ImagerPixelSpacing") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("InstanceCount") + .HasColumnType("int"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("Modality") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ProtocolName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RadiopharmaceuticalInformationSequence") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SequenceName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesNumber") + .HasColumnType("int"); + + b.Property("SeriesTime") + .HasColumnType("datetime2"); + + b.Property("SliceThickness") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TriggerTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("SeqId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("StudyId"); + + b.HasIndex("SubjectVisitId"); + + b.ToTable("TaskSeries", t => + { + t.HasComment("项目阅片 - 任务后上传序列"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskStudy", b => + { + b.Property("SeqId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessionNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AcquisitionTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartExamined") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEdit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartForEditOther") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DeviceSerialNumber") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DeviceUID") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomStudyDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DicomStudyTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("InstanceCount") + .HasColumnType("int"); + + b.Property("InstitutionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("Manufacturer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ManufacturerModelName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Modalities") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ModalityForEdit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientAge") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientBirthDate") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientId") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientSex") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PatientWeight") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SeriesCount") + .HasColumnType("int"); + + b.Property("SoftwareVersions") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyDIRPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyInstanceUid") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyTime") + .HasColumnType("datetime2"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TriggerTime") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("SeqId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("TaskStudy", t => + { + t.HasComment("项目阅片 - 任务后上传检查"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Trial", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AttendedReviewerTypes") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BlindBaseLineName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BlindFollowUpPrefix") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BodyPartTypes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CROId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChangeDefalutDays") + .HasColumnType("int"); + + b.Property("ClinicalInformationTransmissionEnum") + .HasColumnType("int") + .HasComment("临床信息传输 1:系统录入 2:系统录入+PDF 0:无"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("CollectImagesEnum") + .HasColumnType("int") + .HasComment("阅片任务产生之前 采集影像"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeclarationTypes") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("DigitPlaces") + .HasColumnType("int"); + + b.Property("EmailAuthorizationCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("密码/授权码"); + + b.Property("EmailFromEmail") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("发件箱账号"); + + b.Property("EmailFromName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("发件人"); + + b.Property("EmailSMTPServerAddress") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("SMTP服务器"); + + b.Property("EmailSMTPServerPort") + .HasColumnType("int") + .HasComment("SMTP端口"); + + b.Property("ExpectedPatients") + .HasColumnType("int"); + + b.Property("Expedited") + .HasColumnType("int"); + + b.Property("ExperimentName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("实验名称"); + + b.Property("GRRReviewers") + .HasColumnType("int"); + + b.Property("HeadPI") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("负责人PI"); + + b.Property("ImageFormatList") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("Indication") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IndicationEnum") + .HasColumnType("int"); + + b.Property("IndicationTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsCRAAuditClinicalInformation") + .HasColumnType("bit") + .HasComment("是否审核 临床信息"); + + b.Property("IsConfigureEmail") + .HasColumnType("bit") + .HasComment("是否配置过邮箱"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEnrollementQualificationConfirm") + .HasColumnType("bit") + .HasComment("是否有 入组性确认"); + + b.Property("IsHaveFirstGiveMedicineDate") + .HasColumnType("bit") + .HasComment("是否 有基准时间(首次给药时间)"); + + b.Property("IsHaveSubjectAge") + .HasColumnType("bit") + .HasComment("是否有 受试者年龄"); + + b.Property("IsIQCAutoNextTask") + .HasColumnType("bit"); + + b.Property("IsIQCAutoTaskDistinguishType") + .HasColumnType("bit"); + + b.Property("IsImageConsistencyVerification") + .HasColumnType("bit") + .HasComment("影像一致性核查"); + + b.Property("IsImageExport") + .HasColumnType("bit") + .HasComment("影像导出"); + + b.Property("IsImageReplicationAcrossTrial") + .HasColumnType("bit") + .HasComment("跨项目复制"); + + b.Property("IsNoticeSubjectCodeRule") + .HasColumnType("bit") + .HasComment("是否 提醒受试者编号规则"); + + b.Property("IsPACSConnect") + .HasColumnType("bit"); + + b.Property("IsPDProgressView") + .HasColumnType("bit") + .HasComment("PD 进展是否显示 配置访视 是否显示 PD进展 (从而可以设置状态)"); + + b.Property("IsQCQuestionConfirmed") + .HasColumnType("bit"); + + b.Property("IsSPMJoinReReadingApproval") + .HasColumnType("bit") + .HasComment("SPM 参与重阅审批"); + + b.Property("IsSPMJoinReviewerSelect") + .HasColumnType("bit") + .HasComment("SPM 参与阅片人筛选"); + + b.Property("IsSPMJoinSiteSurvey") + .HasColumnType("bit") + .HasComment("SPM 参与中心调研"); + + b.Property("IsShowStudyName") + .HasColumnType("bit"); + + b.Property("IsSubjectExpeditedView") + .HasColumnType("bit") + .HasComment("配置Suject Edit页面 是否显示 加急"); + + b.Property("IsSubjectSecondCodeView") + .HasColumnType("bit"); + + b.Property("IsSubjectSexView") + .HasColumnType("bit"); + + b.Property("IsTrialBasicLogicConfirmed") + .HasColumnType("bit"); + + b.Property("IsTrialPACSConfirmed") + .HasColumnType("bit"); + + b.Property("IsTrialProcessConfirmed") + .HasColumnType("bit"); + + b.Property("IsTrialStart") + .HasColumnType("bit"); + + b.Property("IsTrialUrgentConfirmed") + .HasColumnType("bit"); + + b.Property("IsUrgent") + .HasColumnType("bit"); + + b.Property("IsVerifyVisitImageDate") + .HasColumnType("bit") + .HasComment("是否 验证拍片日期"); + + b.Property("MainResearchUnit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("主研单位"); + + b.Property("MessageFromClient") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("MessageFromClientName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Modalitys") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OutEnrollmentVisitName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("出组后计划外访视名称"); + + b.Property("PhaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("PlanSiteCount") + .HasColumnType("int"); + + b.Property("PlanVisitCount") + .HasColumnType("int"); + + b.Property("PreliminaryAuditReuploadText") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ProjectCycle") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("QCProcessEnum") + .HasColumnType("int") + .HasComment("QC流程 0 不审,1 单审,2双审"); + + b.Property("QCQuestionConfirmedTime") + .HasColumnType("datetime2"); + + b.Property("QCQuestionConfirmedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReadingMode") + .HasColumnType("int") + .HasComment("阅片方式"); + + b.Property("ResearchProgramNo") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("研究方案号"); + + b.Property("ReviewAuditReuploadText") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ReviewModeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReviewProtocol") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ReviewProtocolName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SponsorId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectCodeRule") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("受试者编号具体规则"); + + b.Property("SyncClinicalDataTime") + .HasColumnType("datetime2") + .HasComment("同步临床数据时间"); + + b.Property("TimePointsPerPatient") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("TotalReviewers") + .HasColumnType("int"); + + b.Property("TrialCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialEnrollStatus") + .HasColumnType("int") + .HasComment("入组那一块的状态"); + + b.Property("TrialExtraConfigJsonStr") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("TrialFinishTime") + .HasColumnType("datetime2") + .HasComment("项目完成时间"); + + b.Property("TrialFinishedTime") + .HasColumnType("datetime2"); + + b.Property("TrialStatusStr") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("启动状态"); + + b.Property("TrialType") + .HasColumnType("int") + .HasComment("项目类型 1 正式项目、0 非正式项目 2是培训项目"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitPlanConfirmed") + .HasColumnType("bit"); + + b.Property("VitrualSiteCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CROId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("IndicationTypeId"); + + b.HasIndex("PhaseId"); + + b.HasIndex("QCQuestionConfirmedUserId"); + + b.HasIndex("ReviewModeId"); + + b.HasIndex("SponsorId"); + + b.ToTable("Trial", t => + { + t.HasComment("项目 - 项目基本信息与配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialAuditShow", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FrontAuditConfigId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsShow") + .HasColumnType("bit"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("TrialAuditShow"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialBodyPart", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsHandAdd") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialBodyPart", t => + { + t.HasComment("项目 - 项目部位配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialClinicalDataSetCriterion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialClinicalDataSetId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialClinicalDataSetId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("TrialClinicalDataSetCriterion", t => + { + t.HasComment("项目标准 - 临床数据配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialClinicalQuestion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CalculateQuestions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasComment("自定义计算问题"); + + b.Property("ClinicalOptionTypeEnum") + .HasColumnType("int") + .HasComment("临床数据选项类型(无,自定义)"); + + b.Property("ClinicalQuestionMarkEnum") + .HasColumnType("int") + .HasComment("问题标识"); + + b.Property("ClinicalQuestionShowEnum") + .HasColumnType("int") + .HasComment("显示类型"); + + b.Property("ClinicalQuestionType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("临床问题类型(分组,单选。)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CustomCalculateMark") + .HasColumnType("int") + .HasComment("自定义计算标记"); + + b.Property("DefaultValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("默认值"); + + b.Property("DictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("字典Code"); + + b.Property("DigitPlaces") + .HasColumnType("int") + .HasComment("小数点位数"); + + b.Property("GroupId") + .HasColumnType("uniqueidentifier") + .HasComment("分组Id"); + + b.Property("IsCheckDate") + .HasColumnType("bit") + .HasComment("是否是检查日期"); + + b.Property("IsRequired") + .HasColumnType("int") + .HasComment("是否必填"); + + b.Property("MaxAnswerLength") + .HasColumnType("int") + .HasComment("最大长度"); + + b.Property("MaxQuestionCount") + .HasColumnType("int") + .HasComment("最大行数"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasComment("父问题Id"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("父问题触发值"); + + b.Property("QuestionEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文名称"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题名称"); + + b.Property("RelevanceId") + .HasColumnType("uniqueidentifier") + .HasComment("关联ID"); + + b.Property("RelevanceValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("关联Value"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("SystemClinicalQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("系统临床问题Id"); + + b.Property("TrialClinicalId") + .HasColumnType("uniqueidentifier") + .HasComment("项目临床数据Id"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("自定义选项"); + + b.Property("Unit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("单位"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("GroupId"); + + b.HasIndex("TrialClinicalId"); + + b.ToTable("TrialClinicalQuestion", t => + { + t.HasComment("项目临床数据问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialClinicalTableQuestion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CalculateQuestions") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasComment("自定义计算问题"); + + b.Property("ClinicalCalculateMarkEnum") + .HasColumnType("int") + .HasComment("自定义计算标记"); + + b.Property("ClinicalOptionTypeEnum") + .HasColumnType("int") + .HasComment("临床数据选项类型(无,自定义)"); + + b.Property("ClinicalTableQuestionMarkEnum") + .HasColumnType("int") + .HasComment("问题标识"); + + b.Property("ClinicalTableQuestionType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("临床问题类型(分组,单选。)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DefaultValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("默认值"); + + b.Property("DictionaryCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("字典Code"); + + b.Property("DigitPlaces") + .HasColumnType("int") + .HasComment("小数点位数"); + + b.Property("IsRequired") + .HasColumnType("int") + .HasComment("是否必填"); + + b.Property("MaxAnswerLength") + .HasColumnType("int") + .HasComment("最大长度"); + + b.Property("QuestionEnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题英文名称"); + + b.Property("QuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("外层问题Id"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("问题名称"); + + b.Property("RelevanceId") + .HasColumnType("uniqueidentifier") + .HasComment("关联ID"); + + b.Property("RelevanceValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("关联Value"); + + b.Property("ShowOrder") + .HasColumnType("int") + .HasComment("排序"); + + b.Property("SystemTableQuestionId") + .HasColumnType("uniqueidentifier") + .HasComment("系统表格问题Id"); + + b.Property("TrialClinicalId") + .HasColumnType("uniqueidentifier") + .HasComment("项目临床数据Id"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("自定义选项"); + + b.Property("Unit") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("单位"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("TrialClinicalTableQuestion", t => + { + t.HasComment("项目临床表格问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionAdditionalAssessmentType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AdditionalAssessmentType") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionType") + .HasColumnType("int"); + + b.Property("IsSelected") + .HasColumnType("bit"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("TrialCriterionAdditionalAssessmentType", t => + { + t.HasComment("项目 - 项目标准附加评估配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionDictionaryCode", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialCriterionId"); + + b.ToTable("TrialCriterionDictionaryCode"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionKeyFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialCriterionId"); + + b.ToTable("TrialCriterionKeyFile", t => + { + t.HasComment("项目标准阅片关键点文件"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDicomAE", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CalledAE") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IP") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsTestOK") + .HasColumnType("bit"); + + b.Property("LatestTestTime") + .HasColumnType("datetime2"); + + b.Property("Modality") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Port") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("TrialDicomAE", t => + { + t.HasComment("项目 - 项目DicomAE"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDictionary", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DictionaryId") + .HasColumnType("uniqueidentifier"); + + b.Property("KeyName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("DictionaryId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialDictionary", t => + { + t.HasComment("项目 - 项目字典关系表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDocConfirmedIdentityUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConfirmTime") + .HasColumnType("datetime2"); + + b.Property("ConfirmUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("SignFirstViewTime") + .HasColumnType("datetime2"); + + b.Property("SignText") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("TrialDocumentId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ConfirmUserId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialDocumentId"); + + b.ToTable("TrialDocConfirmedIdentityUser"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDocNeedConfirmedUserType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("NeedConfirmUserTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialDocumentId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("NeedConfirmUserTypeId"); + + b.HasIndex("TrialDocumentId"); + + b.ToTable("TrialDocNeedConfirmedUserType", t => + { + t.HasComment("项目 - 项目文档需要签署的用户类型"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDocument", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CurrentStaffTrainDays") + .HasColumnType("int"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileTypeId") + .HasColumnType("uniqueidentifier") + .HasComment("需要确认的项目用户 通过TrialId 关联 用中间表过滤"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsPublish") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NewStaffTrainDays") + .HasColumnType("int"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SignViewMinimumMinutes") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("FileTypeId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialDocument", t => + { + t.HasComment("项目 - 项目文档"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDocumentAttachment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileFormat") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("FileSize") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OffLine") + .HasColumnType("bit"); + + b.Property("TrialDocumentId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialDocumentId"); + + b.ToTable("TrialDocumentAttachment", t => + { + t.HasComment("项目签署文档附件"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialEmailBlackUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialEmailNoticeConfigId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TrialEmailNoticeConfigId"); + + b.HasIndex("UserId"); + + b.ToTable("TrialEmailBlackUser", t => + { + t.HasComment("项目 - 项目邮件用户黑名单"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AttachCNPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AttachName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AttachNameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AttachPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("AuthorizationCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BusinessLevelEnum") + .HasColumnType("int"); + + b.Property("BusinessModuleEnum") + .HasColumnType("int"); + + b.Property("BusinessScenarioEnum") + .HasColumnType("int"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionTypeEnum") + .HasColumnType("int") + .HasComment("后续删除,需要维护数据"); + + b.Property("CriterionTypeList") + .HasColumnType("nvarchar(max)") + .HasComment("邮件配置的多个标准"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EmailCron") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EmailDelaySeconds") + .HasColumnType("int") + .HasComment("邮件延时秒数,比如一个事件触发,延迟多少s后才发邮件"); + + b.Property("EmailHtmlContent") + .HasColumnType("nvarchar(max)"); + + b.Property("EmailHtmlContentCN") + .HasColumnType("nvarchar(max)"); + + b.Property("EmailTopic") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EmailTopicCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("EmailTypeEnum") + .HasColumnType("int"); + + b.Property("EmailUrgentEnum") + .HasColumnType("int"); + + b.Property("FromEmail") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FromName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsAutoSend") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsDistinguishCriteria") + .HasColumnType("bit"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsReturnRequired") + .HasColumnType("bit"); + + b.Property("SMTPServerAddress") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SMTPServerPort") + .HasColumnType("int"); + + b.Property("SysEmailNoticeConfigId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier") + .HasComment("下次版本删除"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SysEmailNoticeConfigId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("TrialEmailNoticeConfig", t => + { + t.HasComment("项目 - 项目发送邮件配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialEmailNoticeUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("EmailUserType") + .HasColumnType("int"); + + b.Property("TrialEmailNoticeConfigId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TrialEmailNoticeConfigId"); + + b.ToTable("TrialEmailNoticeUser", t => + { + t.HasComment("项目 - 项目邮件收发配置用户类型"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialExperience", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CriterionType") + .HasColumnType("int"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("EvaluationContent") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ExperienceDataType") + .HasColumnType("int"); + + b.Property("IndicationEnum") + .HasColumnType("int"); + + b.Property("IndicationTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("OtherCriterion") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OtherStages") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PhaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("StartTime") + .HasColumnType("datetime2"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitReadingCount") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("PhaseId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialExperience", t => + { + t.HasComment("医生 - 项目临床经历"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialExperienceCriteria", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("EvaluationCriteriaId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialExperienceId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("DoctorId"); + + b.HasIndex("EvaluationCriteriaId"); + + b.HasIndex("TrialExperienceId"); + + b.ToTable("TrialExperienceCriteria", t => + { + t.HasComment("医生 - 项目临床经历评估标准"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialExternalUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConfirmTime") + .HasColumnType("datetime2"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ExpireTime") + .HasColumnType("datetime2"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("InviteState") + .HasColumnType("int") + .HasComment("邀请状态"); + + b.Property("IsJoin") + .HasColumnType("bit"); + + b.Property("IsSystemUser") + .HasColumnType("bit"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OrganizationName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Phone") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RejectReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SystemUserId") + .HasColumnType("uniqueidentifier") + .HasComment("IdentityUser 表的用户Id"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserTypeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialExternalUser", t => + { + t.HasComment("项目 - 项目外部人员"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileFormat") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("FileSize") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialFileTypeId") + .HasColumnType("uniqueidentifier") + .HasComment("关联项目文件类型"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialFileTypeId"); + + b.ToTable("TrialFile", t => + { + t.HasComment("项目文件 - 文件表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFileType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ArchiveTypeEnum") + .HasColumnType("int") + .HasComment("报告、文档、记录"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileRecordId") + .HasColumnType("uniqueidentifier") + .HasComment("文件Id"); + + b.Property("FirstFinalDate") + .HasColumnType("date") + .HasComment("首次定稿日期"); + + b.Property("IsConfirmRecord") + .HasColumnType("bit") + .HasComment("是否确认收入项"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsSelfDefine") + .HasColumnType("bit") + .HasComment("是否自定义"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NameCN") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("SubIdentificationEnum") + .HasColumnType("int") + .HasComment("子类标识,是取那个表的数据"); + + b.Property("SysFileTypeId") + .HasColumnType("uniqueidentifier") + .HasComment("关联系统文件类型"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("TrialFileType", t => + { + t.HasComment("项目文件 - 文件类型表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFinalRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("HistoryFileRecordId") + .HasColumnType("uniqueidentifier") + .HasComment("历史记录"); + + b.Property("IsAuthorizedView") + .HasColumnType("bit") + .HasComment("是否授权查看"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PDFFileRecordId") + .HasColumnType("uniqueidentifier") + .HasComment("定稿PDF"); + + b.Property("SignFileRecordId") + .HasColumnType("uniqueidentifier") + .HasComment("签名页"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TrialFileTypeId") + .HasColumnType("uniqueidentifier") + .HasComment("关联项目文件类型"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("WordFileRecordId") + .HasColumnType("uniqueidentifier") + .HasComment("定稿Word"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("HistoryFileRecordId"); + + b.HasIndex("PDFFileRecordId"); + + b.HasIndex("SignFileRecordId"); + + b.HasIndex("WordFileRecordId"); + + b.ToTable("TrialFinalRecord", t => + { + t.HasComment("项目文件 - 定稿记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialHistoryRecordFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileFormat") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("FileSize") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialFileTypeId") + .HasColumnType("uniqueidentifier") + .HasComment("关联项目文件类型"); + + b.Property("TrialRecordId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialFileTypeId"); + + b.HasIndex("TrialRecordId"); + + b.ToTable("TrialHistoryRecordFile"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialIdentityUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("IdentityUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("JoinTime") + .HasColumnType("datetime2"); + + b.Property("RemoveTime") + .HasColumnType("datetime2"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("IdentityUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialIdentityUser", t => + { + t.HasComment("项目用户表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialImageDownload", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DicomStudyCount") + .HasColumnType("int"); + + b.Property("DownloadEndTime") + .HasColumnType("datetime2"); + + b.Property("DownloadStartTime") + .HasColumnType("datetime2"); + + b.Property("IP") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ImageCount") + .HasColumnType("int"); + + b.Property("ImageSize") + .HasColumnType("bigint"); + + b.Property("ImageType") + .HasColumnType("int"); + + b.Property("IsSuccess") + .HasColumnType("bit"); + + b.Property("NoneDicomStudyCount") + .HasColumnType("int"); + + b.Property("SubjectCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("一致性分析的就显示一致性分析的中心"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialImageDownload", t => + { + t.HasComment("项目 - 影像下载监控"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialNormalRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("HistoryFileRecordId") + .HasColumnType("uniqueidentifier") + .HasComment("历史文件"); + + b.Property("IsAuthorizedView") + .HasColumnType("bit") + .HasComment("是否授权查看"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TrialFileRecordId") + .HasColumnType("uniqueidentifier") + .HasComment("关联具体的文件记录,记录里面有大小,格式,名称"); + + b.Property("TrialFileTypeId") + .HasColumnType("uniqueidentifier") + .HasComment("关联项目文件类型"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("HistoryFileRecordId"); + + b.HasIndex("TrialFileRecordId"); + + b.ToTable("TrialNormalRecord", t => + { + t.HasComment("项目文件 - 一般文件记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialPaymentPrice", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AdjustmentMultiple") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsNewTrial") + .HasColumnType("bit") + .HasComment("是否有 为新项目"); + + b.Property("SowName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SowPath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialAdditional") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialPaymentPrice", t => + { + t.HasComment("医生计费 - 项目支付配置"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialQCQuestion", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsConfirm") + .HasColumnType("bit"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("IsRequired") + .HasColumnType("bit"); + + b.Property("LanguageType") + .HasColumnType("int") + .HasComment("语言类型"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentTriggerValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("QuestionName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("下拉框、文本、单选、多选"); + + b.Property("TypeValue") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialQCQuestion", t => + { + t.HasComment("项目 - 质控问题"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialQCQuestionAnswer", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Answer") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CurrentQCEnum") + .HasColumnType("int") + .HasComment("1代表第一个人QC数据 2 代表第二个人QC数据"); + + b.Property("QCProcessEnum") + .HasColumnType("int"); + + b.Property("SecondReviewTime") + .HasColumnType("datetime2"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialQCQuestionConfigureId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("TrialQCQuestionConfigureId"); + + b.ToTable("TrialQCQuestionAnswer", t => + { + t.HasComment("项目 - 质控问题表单答案"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialRevenuesPrice", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Adjudication") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("AdjudicationIn24H") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("AdjudicationIn48H") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Downtime") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("Global") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("RefresherTraining") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("Timepoint") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("TimepointIn24H") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("TimepointIn48H") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("Training") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("TrialRevenuesPrice", t => + { + t.HasComment("医生计费 - 项目工作量收入单价"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialRevenuesPriceVerification", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Adjudication") + .HasColumnType("bit"); + + b.Property("AdjudicationIn24H") + .HasColumnType("bit"); + + b.Property("AdjudicationIn48H") + .HasColumnType("bit"); + + b.Property("Downtime") + .HasColumnType("bit"); + + b.Property("Global") + .HasColumnType("bit"); + + b.Property("RefresherTraining") + .HasColumnType("bit"); + + b.Property("ReviewerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Timepoint") + .HasColumnType("bit"); + + b.Property("TimepointIn24H") + .HasColumnType("bit"); + + b.Property("TimepointIn48H") + .HasColumnType("bit"); + + b.Property("Training") + .HasColumnType("bit"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("WorkLoadDate") + .HasColumnType("datetime2"); + + b.Property("YearMonth") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.ToTable("TrialRevenuesPriceVerification", t => + { + t.HasComment("医生计费 - 项目收入价格验证"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSign", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsCompleted") + .HasColumnType("bit"); + + b.Property("SignCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SignCodeId") + .HasColumnType("uniqueidentifier"); + + b.Property("SignText") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("TrialSign", t => + { + t.HasComment("项目 - 项目操作签名表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSite", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("EnabledTime") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("SiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteAliasName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialSiteCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialSiteName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SiteId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialSite", t => + { + t.HasComment("项目 - 项目中心表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteDicomAE", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CallingAE") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IP") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("Port") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialSiteId"); + + b.ToTable("TrialSiteDicomAE", t => + { + t.HasComment("项目 - 项目中心DicomAE表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteEquipmentSurvey", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EquipmentTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ManufacturerName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Parameters") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ScannerType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialSiteSurveyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("TrialSiteSurveyId"); + + b.ToTable("TrialSiteEquipmentSurvey", t => + { + t.HasComment("项目 - 项目中心调研设备表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteSurvey", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AverageEngravingCycle") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("EfficacyEvaluatorType") + .HasColumnType("int"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsConfirmImagingTechnologist") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsFollowStudyParameters") + .HasColumnType("bit"); + + b.Property("LatestBackReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NotConfirmReson") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NotFollowReson") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Phone") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("PreliminaryTime") + .HasColumnType("datetime2"); + + b.Property("PreliminaryUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReviewerTime") + .HasColumnType("datetime2"); + + b.Property("ReviewerUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("PreliminaryUserId"); + + b.HasIndex("ReviewerUserId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialSiteId"); + + b.ToTable("TrialSiteSurvey", t => + { + t.HasComment("项目 - 项目中心调研表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUserRole", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialSiteId"); + + b.HasIndex("UserId"); + + b.ToTable("TrialSiteUser", t => + { + t.HasComment("项目 - 项目中心用户角色关系表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUserSurvey", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("InviteState") + .HasColumnType("int"); + + b.Property("IsGenerateAccount") + .HasColumnType("bit"); + + b.Property("IsGenerateSuccess") + .HasColumnType("bit"); + + b.Property("IsHistoryUser") + .HasColumnType("bit"); + + b.Property("IsHistoryUserDeleted") + .HasColumnType("bit"); + + b.Property("IsHistoryUserOriginDeleted") + .HasColumnType("bit"); + + b.Property("IsJoin") + .HasColumnType("bit"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OrganizationName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Phone") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("SystemUserId") + .HasColumnType("uniqueidentifier") + .HasComment("IdentityUser 表的用户Id"); + + b.Property("TrialRoleCode") + .HasColumnType("int"); + + b.Property("TrialSiteSurveyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserTypeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialSiteSurveyId"); + + b.HasIndex("UserTypeId"); + + b.ToTable("TrialSiteUserSurvey", t => + { + t.HasComment("项目 - 项目中心调研用户表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialStateChange", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("NowState") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OriginState") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Reason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialStateChange", t => + { + t.HasComment("项目 - 项目状态变更记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialStatusDetail", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Memo") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("OptUserType") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialStatus") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("TrialStatus", t => + { + t.HasComment("项目 - 入组流程记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialTrianingRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("HistoryFileRecordId") + .HasColumnType("uniqueidentifier") + .HasComment("历史文件"); + + b.Property("IsAuthorizedView") + .HasColumnType("bit") + .HasComment("是否授权查看"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TrialFileRecordId") + .HasColumnType("uniqueidentifier") + .HasComment("关联具体的文件记录,记录里面有大小,格式,名称"); + + b.Property("TrialFileTypeId") + .HasColumnType("uniqueidentifier") + .HasComment("关联项目文件类型"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrianingCount") + .HasColumnType("int"); + + b.Property("TrianingDate") + .HasColumnType("date"); + + b.Property("TrianingState") + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("培训效果"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("HistoryFileRecordId"); + + b.HasIndex("TrialFileRecordId"); + + b.ToTable("TrialTrianingRecord", t => + { + t.HasComment("项目文件 - 培训记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialUserRole", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasComment("这里实际是UserRoleId"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialUserId"); + + b.HasIndex("UserId"); + + b.ToTable("TrialUser", t => + { + t.HasComment("项目用户角色表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialVirtualSiteCodeUpdate", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("VirturalSiteCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("TrialVirtualSiteCodeUpdate", t => + { + t.HasComment("项目 - 虚拟中心编号更新记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TumorAssessment_IRECIST1Point1", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("NewLesion") + .HasColumnType("int") + .HasComment("新病灶"); + + b.Property("NonTargetLesions") + .HasColumnType("int") + .HasComment("非靶病灶"); + + b.Property("OverallEfficacy") + .HasColumnType("int") + .HasComment("整体疗效"); + + b.Property("TargetLesion") + .HasColumnType("int") + .HasComment("靶病灶"); + + b.HasKey("Id"); + + b.ToTable("TumorAssessment_IRECIST1Point1", t => + { + t.HasComment("IRECIST1Point1肿瘤评估(系统标准)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TumorAssessment_RECIST1Point1", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("NewLesion") + .HasColumnType("int") + .HasComment("新病灶"); + + b.Property("NonTargetLesions") + .HasColumnType("int") + .HasComment("非靶病灶"); + + b.Property("OverallEfficacy") + .HasColumnType("int") + .HasComment("整体疗效"); + + b.Property("TargetLesion") + .HasColumnType("int") + .HasComment("靶病灶"); + + b.HasKey("Id"); + + b.ToTable("TumorAssessment_RECIST1Point1", t => + { + t.HasComment("RECIST1Point1肿瘤评估(系统标准)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TumorAssessment_RECIST1Point1BM", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("NewLesion") + .HasColumnType("int") + .HasComment("新病灶"); + + b.Property("NonTargetLesions") + .HasColumnType("int") + .HasComment("非靶病灶"); + + b.Property("OverallEfficacy") + .HasColumnType("int") + .HasComment("整体疗效"); + + b.Property("TargetLesion") + .HasColumnType("int") + .HasComment("靶病灶"); + + b.HasKey("Id"); + + b.ToTable("TumorAssessment_RECIST1Point1BM", t => + { + t.HasComment("RECIST1Point1BM肿瘤评估(系统标准)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserAgreement", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EffectiveDate") + .HasColumnType("datetime2"); + + b.Property("FileContent") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FileEnContent") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FileVersion") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsCurrentVersion") + .HasColumnType("bit"); + + b.Property("UpdateDate") + .HasColumnType("datetime2"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserAgreementTypeEnum") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("UserAgreement", t => + { + t.HasComment("后台 - 用户协议和隐私采集"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserFeedBack", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("QuestionDescription") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("QuestionType") + .HasColumnType("int"); + + b.Property("ScreenshotListStr") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialSiteId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialSiteId"); + + b.HasIndex("VisitTaskId"); + + b.ToTable("UserFeedBack", t => + { + t.HasComment("后台 - 用户反馈"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActionIdentityUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ActionUserName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("ActionUserType") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IP") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IPRegion") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsIgnoreUncommonly") + .HasColumnType("bit") + .HasComment("是否忽略异地登录"); + + b.Property("IsLoginUncommonly") + .HasColumnType("bit") + .HasComment("异地登录"); + + b.Property("JsonObj") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LoginFaildName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("LoginPassword") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("LoginUserId") + .HasColumnType("uniqueidentifier") + .HasComment("后续删除"); + + b.Property("OptType") + .HasColumnType("int"); + + b.Property("OptUserId") + .HasColumnType("uniqueidentifier") + .HasComment("被操作的人,自己操作的就是自己--后续删除"); + + b.Property("TargetIdentityUserId") + .HasColumnType("uniqueidentifier") + .HasComment("被操作的对象 admin 修改张三信息 张三是被操作对象"); + + b.HasKey("Id"); + + b.HasIndex("ActionIdentityUserId"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TargetIdentityUserId"); + + b.ToTable("UserLog", t => + { + t.HasComment("后台 - 用户账户操作日志"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserPassWordLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IdentityUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("PassWord") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("密码"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasComment("用户Id"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("UserPassWordLog", t => + { + t.HasComment("后台 - 用户修改密码"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserRole", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AutoCutNextTask") + .HasColumnType("bit") + .HasComment("自动切换下一个任务"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier") + .HasComment("医生生成账号后,会有值"); + + b.Property("EMail") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IdentityUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDoubleScreen") + .HasColumnType("bit"); + + b.Property("IsUserRoleDisabled") + .HasColumnType("bit"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UserTypeEnum") + .HasColumnType("int"); + + b.Property("UserTypeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DoctorId") + .IsUnique() + .HasFilter("[DoctorId] IS NOT NULL"); + + b.HasIndex("IdentityUserId"); + + b.HasIndex("UserTypeId"); + + b.ToTable("User", t => + { + t.HasComment("后台 - 系统账户角色关系表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsEnable") + .HasColumnType("bit"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("PermissionStr") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UserTypeEnum") + .HasColumnType("int"); + + b.Property("UserTypeName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UserTypeShortName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.ToTable("UserType", t => + { + t.HasComment("后台 - 系统用户类型 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserTypeGroup", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DictionaryId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserTypeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("DictionaryId"); + + b.HasIndex("UserTypeId"); + + b.ToTable("UserTypeGroup", t => + { + t.HasComment("后台 - 用户类型组(需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserTypeMenu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("MenuId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserTypeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("MenuId"); + + b.HasIndex("UserTypeId"); + + b.ToTable("UserTypeMenu", t => + { + t.HasComment("后台 - 系统用户类型菜单中间关系表 (需要同步)"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserWLTemplate", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsPitchOn") + .HasColumnType("bit") + .HasComment("是否为默认"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.Property("TemplateName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("WL") + .HasColumnType("int"); + + b.Property("WW") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("UserWLTemplate", t => + { + t.HasComment("用户配置 - WL模板"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Vacation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("Vacation", t => + { + t.HasComment("医生 - 假期安排"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VerificationCode", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("验证码"); + + b.Property("CodeType") + .HasColumnType("int") + .HasComment("什么类型的验证码 邮箱|手机"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("EmailOrPhone") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("发送的邮箱或者手机"); + + b.Property("ExpirationTime") + .HasColumnType("datetime2") + .HasComment("过期时间"); + + b.Property("HasSend") + .HasColumnType("bit"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("VerificationCode", t => + { + t.HasComment("后台 - 验证码记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitPlanInfluenceStat", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("InconsistentCount") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("VisitPlanInfluenceStat", t => + { + t.HasComment("项目配置 - 访视计划调整不一致数量记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitPlanInfluenceStudy", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("HistoryWindow") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsDicomStudy") + .HasColumnType("bit"); + + b.Property("IsOverWindowNowNotOverWindow") + .HasColumnType("bit"); + + b.Property("Modality") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("NowWindow") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StudyId") + .HasColumnType("uniqueidentifier"); + + b.Property("StudyTime") + .HasColumnType("datetime2"); + + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitPlanInfluenceStatId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("SubjectVisitId"); + + b.HasIndex("VisitPlanInfluenceStatId"); + + b.ToTable("VisitPlanInfluenceStudy", t => + { + t.HasComment("项目配置 - 访视计划调整影像检查"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitStage", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BlindName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleteUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletedTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("IsBaseLine") + .HasColumnType("bit"); + + b.Property("IsConfirmed") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsHaveFirstConfirmed") + .HasColumnType("bit"); + + b.Property("NeedGlobal") + .HasColumnType("bit"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitDay") + .HasColumnType("int"); + + b.Property("VisitName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("VisitNum") + .HasPrecision(18, 1) + .HasColumnType("decimal(18,1)"); + + b.Property("VisitWindowLeft") + .HasColumnType("int"); + + b.Property("VisitWindowRight") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("VisitStage", t => + { + t.HasComment("项目配置 - 访视记录"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitTask", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllocateTime") + .HasColumnType("datetime2") + .HasComment("分配时间"); + + b.Property("ArmEnum") + .HasColumnType("int") + .HasComment("0 代表 单重阅片 产生的任务 否则就是双重 任务 1 任务 2"); + + b.Property("BeforeConvertedTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("转换之前的任务Id(转化的任务才有该值)"); + + b.Property("BlindSubjectCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("BlindTrialSiteCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("ConsistentAnalysisOriginalTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("针对产生的一致性任务而言,这个字段存储的是原始任务"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("DoctorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExpetidEmailNoticeTime") + .HasColumnType("datetime2") + .HasComment("通知IR加急阅片时间"); + + b.Property("FirstReadingTime") + .HasColumnType("datetime2") + .HasComment("首次阅片时间"); + + b.Property("ImageStudyState") + .HasColumnType("int"); + + b.Property("IsAnalysisCreate") + .HasColumnType("bit") + .HasComment("是否是一致性分析产生"); + + b.Property("IsAnalysisDiffToOriginalData") + .HasColumnType("bit") + .HasComment("阅片结果是否和原数据有差异"); + + b.Property("IsCanEditUrgentState") + .HasColumnType("bit") + .HasComment("是否和编辑加急状态"); + + b.Property("IsChangeTumorEvaluate") + .HasColumnType("bit") + .HasComment("是否修改了整体肿瘤评估"); + + b.Property("IsClinicalDataSign") + .HasColumnType("bit") + .HasComment("临床数据是否签名"); + + b.Property("IsFrontTaskNeedSignButNotSign") + .HasColumnType("bit") + .HasComment("前序任务需要签名 但是未签名"); + + b.Property("IsGlobalHaveUpdate") + .HasColumnType("bit") + .HasComment("全局是否有更新"); + + b.Property("IsGroupDiffArm1") + .HasColumnType("bit") + .HasComment("组件一致性和原Arm1是否有差异"); + + b.Property("IsGroupDiffArm2") + .HasColumnType("bit") + .HasComment("组件一致性和原Arm2是否有差异"); + + b.Property("IsHistoryConvertedTask") + .HasColumnType("bit") + .HasComment("重阅重置任务的 标注是转化之前的 还是转化之后的"); + + b.Property("IsNeedClinicalDataSign") + .HasColumnType("bit") + .HasComment("临床数据"); + + b.Property("IsPMSetBack") + .HasColumnType("bit") + .HasComment("PM 对该任务进行了回退 影响的任务不设置"); + + b.Property("IsReReadingCreate") + .HasColumnType("bit") + .HasComment("是否是重阅产生的,方便过滤数据"); + + b.Property("IsReadClinicalData") + .HasColumnType("bit") + .HasComment("IR是否阅读临床数据"); + + b.Property("IsSelfAnalysis") + .HasColumnType("bit") + .HasComment("是否是自身一致性"); + + b.Property("IsUrgent") + .HasColumnType("bit"); + + b.Property("IsViewStudyPart") + .HasColumnType("bit"); + + b.Property("JudgeResultImagePath") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasComment("裁判结果的图片路径"); + + b.Property("JudgeResultRemark") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("裁判结果的备注"); + + b.Property("JudgeResultTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("在裁判任务上记录 裁判结果的任务ID(访视或者全局)"); + + b.Property("JudgeVisitTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("在访视或者全局任务上记录 裁判任务的Id"); + + b.Property("PMBackReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("退回原因"); + + b.Property("PastResultTaskIds") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasComment("既往任务Id 不包括自己"); + + b.Property("RandomOrder") + .HasColumnType("int") + .HasComment("完全随机阅片号"); + + b.Property("ReReadingApplyState") + .HasColumnType("int") + .HasComment("重阅状态"); + + b.Property("ReadingCategory") + .HasColumnType("int") + .HasComment("任务类型"); + + b.Property("ReadingTaskState") + .HasColumnType("int") + .HasComment("任务阅片状态"); + + b.Property("RelatedVisitTaskIds") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasComment("关联的访视任务ID (当前任务是访视任务的话会有自己)"); + + b.Property("ReportRelatedTaskIds") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasComment("报告任务关系 包含冻结"); + + b.Property("SignTime") + .HasColumnType("datetime2") + .HasComment("签名时间"); + + b.Property("SouceReadModuleId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceSubjectVisitId") + .HasColumnType("uniqueidentifier") + .HasComment("任务来源访视Id 方便回更访视读片状态"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("SuggesteFinishedTime") + .HasColumnType("datetime2"); + + b.Property("TaskAllocationState") + .HasColumnType("int") + .HasComment("分配状态"); + + b.Property("TaskBlindName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TaskCode") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TaskName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TaskState") + .HasColumnType("int"); + + b.Property("TaskUrgentRemake") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)") + .HasComment("任务加急类型"); + + b.Property("TaskUrgentType") + .HasColumnType("int") + .HasComment("加急类型"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("TrialReadingCriterionId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("VisitTaskNum") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasComment("随访任务号 取访视的号 计划外是 访视+0.1 裁判任务在访视任务上+0.02 全局任务在截止访视号上+0.03 肿瘤0.06"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("DoctorUserId"); + + b.HasIndex("JudgeResultTaskId"); + + b.HasIndex("JudgeVisitTaskId"); + + b.HasIndex("SouceReadModuleId"); + + b.HasIndex("SourceSubjectVisitId"); + + b.HasIndex("SubjectId"); + + b.HasIndex("TrialId"); + + b.HasIndex("TrialReadingCriterionId"); + + b.ToTable("VisitTask", t => + { + t.HasComment("项目阅片 - 阅片任务表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitTaskReReading", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsCopyFollowForms") + .HasColumnType("bit") + .HasComment("仅仅包括全局和访视"); + + b.Property("IsCopyOrigenalForms") + .HasColumnType("bit"); + + b.Property("NewReReadingTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("重阅申请 产生的新任务Id"); + + b.Property("OriginalReReadingTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("重阅原始任务Id 重阅会产生新的任务"); + + b.Property("RequestReReadingConfirmUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RequestReReadingReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RequestReReadingRejectReason") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("RequestReReadingResultEnum") + .HasColumnType("int"); + + b.Property("RequestReReadingTime") + .HasColumnType("datetime2"); + + b.Property("RequestReReadingType") + .HasColumnType("int") + .HasComment("申请回退类型"); + + b.Property("RequestReReadingUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RootReReadingTaskId") + .HasColumnType("uniqueidentifier") + .HasComment("产生重阅的根任务Id"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("NewReReadingTaskId"); + + b.HasIndex("OriginalReReadingTaskId"); + + b.HasIndex("RequestReReadingConfirmUserId"); + + b.HasIndex("RequestReReadingUserId"); + + b.HasIndex("RootReReadingTaskId"); + + b.HasIndex("TrialId"); + + b.ToTable("VisitTaskReReading", t => + { + t.HasComment("重阅申请流程记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VolumeReward", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Max") + .HasColumnType("int"); + + b.Property("Min") + .HasColumnType("int"); + + b.Property("Price") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.ToTable("VolumeReward", t => + { + t.HasComment("医生计费 - 奖励"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Workload", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Adjudication") + .HasColumnType("int"); + + b.Property("AdjudicationIn24H") + .HasColumnType("int"); + + b.Property("AdjudicationIn48H") + .HasColumnType("int"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateUserType") + .HasColumnType("int"); + + b.Property("DataFrom") + .HasColumnType("int"); + + b.Property("DoctorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Downtime") + .HasColumnType("int"); + + b.Property("Global") + .HasColumnType("int"); + + b.Property("IsLock") + .HasColumnType("bit"); + + b.Property("RefresherTraining") + .HasColumnType("int"); + + b.Property("Timepoint") + .HasColumnType("int"); + + b.Property("TimepointIn24H") + .HasColumnType("int"); + + b.Property("TimepointIn48H") + .HasColumnType("int"); + + b.Property("Training") + .HasColumnType("int"); + + b.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdateTime") + .HasColumnType("datetime2"); + + b.Property("UpdateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("WorkTime") + .HasColumnType("datetime2"); + + b.Property("YearMonth") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialId"); + + b.ToTable("DoctorWorkload", t => + { + t.HasComment("医生计费 - 工作量记录表"); + }); + }); + + modelBuilder.Entity("IRaCIS.Core.Infra.EFCore.TestLength", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DateTimeList") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("StringList") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("TestDate") + .HasColumnType("date"); + + b.Property("TestEnumList") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("TestJsonObjectLsit") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("TestLength"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Attachment", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Doctor", "Doctor") + .WithMany("AttachmentList") + .HasForeignKey("DoctorId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Doctor"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditDocument", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.AuditDocument", "MainAuditDocument") + .WithMany("AuditDocumentOldVersionList") + .HasForeignKey("MainFileId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("MainAuditDocument"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditDocumentClosure", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.AuditDocument", "Ancestor") + .WithMany("DescendantList") + .HasForeignKey("AncestorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.AuditDocument", "Descendant") + .WithMany("AncestorList") + .HasForeignKey("DescendantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Ancestor"); + + b.Navigation("Descendant"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecord", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecordIdentityUser", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.AuditRecord", "AuditRecord") + .WithMany("AuditRecordIdentityUserList") + .HasForeignKey("AuditRecordId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.IdentityUser", "IdentityUser") + .WithMany("AuditRecordList") + .HasForeignKey("IdentityUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AuditRecord"); + + b.Navigation("CreateUserRole"); + + b.Navigation("IdentityUser"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecordPermission", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.AuditDocument", "AuditDocument") + .WithMany() + .HasForeignKey("AuditDocumentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.AuditRecord", "AuditRecord") + .WithMany() + .HasForeignKey("AuditRecordId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AuditDocument"); + + b.Navigation("AuditRecord"); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CRO", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CheckChallengeDialog", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("CheckChallengeDialogList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalAnswerRowInfo", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalDataSystemSet", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalDataSystemSet", "ClinicalDataSystemSet") + .WithMany() + .HasForeignKey("SystemClinicalDataSetId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("ClinicalDataTrialSetList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalDataSystemSet"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalForm", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", "ClinicalDataTrialSet") + .WithMany() + .HasForeignKey("ClinicalDataTrialSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("ClinicalFormList") + .HasForeignKey("ReadingId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany("ClinicalFormList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalDataTrialSet"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Subject"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalQuestionAnswer", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalForm", "ClinicalForm") + .WithMany() + .HasForeignKey("ClinicalFormId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalForm"); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalTableAnswer", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalAnswerRowInfo", "ClinicalAnswerRowInfo") + .WithMany() + .HasForeignKey("RowId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalAnswerRowInfo"); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CommonDocument", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CriterionKeyFileRead", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CriterionNidusSystem", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("CriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.CriterionNidusTrial", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DataInspection", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany() + .HasForeignKey("VisitTaskId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialReadingCriterion"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomInstance", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomSeries", "DicomSerie") + .WithMany("DicomInstanceList") + .HasForeignKey("SeriesId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy") + .WithMany("InstanceList") + .HasForeignKey("StudyId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DicomSerie"); + + b.Navigation("DicomStudy"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomSeries", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy") + .WithMany("SeriesList") + .HasForeignKey("StudyId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DicomStudy"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomStudy", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany("StudyList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("StudyList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", null) + .WithMany("StudyList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Subject"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Dictionary", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "ConfigDictionary") + .WithMany() + .HasForeignKey("ConfigTypeId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Parent") + .WithMany("ChildList") + .HasForeignKey("ParentId"); + + b.Navigation("ConfigDictionary"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Doctor", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Department") + .WithMany() + .HasForeignKey("DepartmentId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Hospital", "Hospital") + .WithMany("DoctorList") + .HasForeignKey("HospitalId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Position") + .WithMany() + .HasForeignKey("PositionId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Rank") + .WithMany() + .HasForeignKey("RankId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Speciality") + .WithMany() + .HasForeignKey("SpecialityId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Department"); + + b.Navigation("Hospital"); + + b.Navigation("Position"); + + b.Navigation("Rank"); + + b.Navigation("Speciality"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DoctorCriterionFile", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Doctor", "Doctor") + .WithMany("CriterionFileList") + .HasForeignKey("DoctorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Doctor"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DoctorDictionary", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Dictionary") + .WithMany("DoctorDicRelationList") + .HasForeignKey("DictionaryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Doctor", "Doctor") + .WithMany("DoctorDicRelationList") + .HasForeignKey("DoctorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Dictionary"); + + b.Navigation("Doctor"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DoctorSummarize", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Education", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailAttachmentLog", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.EmailLog", "EmailLog") + .WithMany("AttachmentList") + .HasForeignKey("EmailLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("EmailLog"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailLog", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailNoticeConfig", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailNoticeUserType", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.EmailNoticeConfig", "EmailNoticeConfig") + .WithMany("EmailNoticeUserTypeList") + .HasForeignKey("EmailNoticeConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EmailNoticeConfig"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailRecipientLog", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.EmailLog", "EmailLog") + .WithMany("EmailRecipientLogList") + .HasForeignKey("EmailLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("EmailLog"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Enroll", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Doctor", "Doctor") + .WithMany("EnrollList") + .HasForeignKey("DoctorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "DoctorUser") + .WithMany() + .HasForeignKey("DoctorUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("EnrollList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Doctor"); + + b.Navigation("DoctorUser"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EnrollDetail", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Doctor", "Doctor") + .WithMany() + .HasForeignKey("DoctorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialStatusDetail", "TrialDetail") + .WithMany() + .HasForeignKey("TrialDetailId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Doctor"); + + b.Navigation("TrialDetail"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EnrollReadingCategory", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Enroll", "Enroll") + .WithMany("EnrollReadingCategoryList") + .HasForeignKey("EnrollId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Enroll"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EnrollReadingCriterion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Enroll", "Enroll") + .WithMany("EnrollReadingCriteriaList") + .HasForeignKey("EnrollId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Enroll"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EventStoreRecord", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ExchangeRate", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ExploreRecommend", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.FrontAuditConfig", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Hospital", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Site", "Site") + .WithMany() + .HasForeignKey("SiteId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Site"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.IdentityUser", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.InspectionFile", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Internationalization", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.PublishLog", "PublishLog") + .WithMany() + .HasForeignKey("PublishLogId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("PublishLog"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Menu", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.NoneDicomStudy", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany() + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("NoneDicomStudyList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", null) + .WithMany("NoneDicomStudyList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Subject"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.NoneDicomStudyFile", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "ImageMarkNoneDicomStudy") + .WithMany("ImageLabelNoneDicomFileList") + .HasForeignKey("ImageLabelNoneDicomStudyId"); + + b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy") + .WithMany("NoneDicomFileList") + .HasForeignKey("NoneDicomStudyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "OriginNoneDicomStudy") + .WithMany("TaskNoneDicomFileList") + .HasForeignKey("OriginNoneDicomStudyId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany("TaskNoneDicomStudyFileList") + .HasForeignKey("VisitTaskId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("ImageMarkNoneDicomStudy"); + + b.Navigation("NoneDicomStudy"); + + b.Navigation("OriginNoneDicomStudy"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.OrganInfo", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.OrganTrialInfo", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.OrganInfo", "OrganInfo") + .WithMany() + .HasForeignKey("OrganInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("OrganInfo"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Payment", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PaymentAdjustment", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PaymentDetail", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Postgraduate", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Hospital", "HospitalEnt") + .WithMany() + .HasForeignKey("HospitalId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("HospitalEnt"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PreviousHistory", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", "ClinicalDataTrialSet") + .WithMany() + .HasForeignKey("ClinicalDataTrialSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("PreviousHistoryList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalDataTrialSet"); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PreviousOther", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", "ClinicalDataTrialSet") + .WithMany() + .HasForeignKey("ClinicalDataTrialSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("PreviousOtherList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalDataTrialSet"); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PreviousPDF", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("PreviousPDFList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PreviousSurgery", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", "ClinicalDataTrialSet") + .WithMany() + .HasForeignKey("ClinicalDataTrialSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", null) + .WithMany("PreviousSurgeryList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalDataTrialSet"); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.PublishLog", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.QCChallenge", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "LatestReplyUser") + .WithMany() + .HasForeignKey("LatestReplyUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("QCChallengeList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("LatestReplyUser"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.QCChallengeDialog", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.QCChallenge", "QCChallenge") + .WithMany("DialogList") + .HasForeignKey("QCChallengeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", null) + .WithMany("QCChallengeDialogList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("QCChallenge"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.QCQuestion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.QCQuestion", "ParentQuestion") + .WithMany() + .HasForeignKey("ParentId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("ParentQuestion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.RankPrice", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadModule", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingPeriodSet", "ReadingPeriodSet") + .WithMany() + .HasForeignKey("ReadingPeriodSetId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany("ReadModuleList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("ReadModuleList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("ReadModuleList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("ReadingPeriodSet"); + + b.Navigation("Subject"); + + b.Navigation("SubjectVisit"); + + b.Navigation("Trial"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadModuleCriterionFrom", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalForm", "ClinicalForm") + .WithMany() + .HasForeignKey("ClinicalFormId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadModule", null) + .WithMany("ReadModuleCriterionFromList") + .HasForeignKey("ReadModuleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalForm"); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingClinicalData", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", "ClinicalDataTrialSet") + .WithMany("ReadingClinicalDataList") + .HasForeignKey("ClinicalDataTrialSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadModule", "ReadModule") + .WithMany("ReadingClinicalDataList") + .HasForeignKey("ReadingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("ReadingClinicalDataList") + .HasForeignKey("ReadingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy") + .WithMany("ReadingClinicalDataList") + .HasForeignKey("StudyId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany("ClinicalDataList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("ReadingClinicalDataList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalDataTrialSet"); + + b.Navigation("CreateUserRole"); + + b.Navigation("DicomStudy"); + + b.Navigation("ReadModule"); + + b.Navigation("Subject"); + + b.Navigation("SubjectVisit"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingClinicalDataPDF", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingClinicalData", "ReadingClinicalData") + .WithMany("ReadingClinicalDataPDFList") + .HasForeignKey("ReadingClinicalDataId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("ReadingClinicalData"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingConsistentClinicalData", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", "ClinicalDataTrialSet") + .WithMany() + .HasForeignKey("ClinicalDataTrialSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadModule", "ReadModule") + .WithMany() + .HasForeignKey("ReadingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("ReadingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy") + .WithMany("ReadingConsistentClinicalDataList") + .HasForeignKey("StudyId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany() + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalDataTrialSet"); + + b.Navigation("CreateUserRole"); + + b.Navigation("DicomStudy"); + + b.Navigation("ReadModule"); + + b.Navigation("Subject"); + + b.Navigation("SubjectVisit"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingConsistentClinicalDataPDF", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingConsistentClinicalData", "ReadingConsistentClinicalData") + .WithMany("ReadingClinicalDataPDFList") + .HasForeignKey("ReadingConsistentClinicalDataId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("ReadingConsistentClinicalData"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingCriterionPage", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingCustomTag", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingGlobalTaskInfo", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "GlobalVisitTask") + .WithMany("GlobalVisitResultList") + .HasForeignKey("GlobalTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "TrialReadingQuestion") + .WithMany() + .HasForeignKey("QuestionId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany() + .HasForeignKey("TaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("GlobalVisitTask"); + + b.Navigation("TrialReadingQuestion"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingImportFile", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingJudgeInfo", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingMedicalReviewDialog", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TaskMedicalReview", "TaskMedicalReview") + .WithMany("ReadingMedicalReviewDialogList") + .HasForeignKey("TaskMedicalReviewId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TaskMedicalReview"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingMedicineQuestionAnswer", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TaskMedicalReview", "TaskMedicalReview") + .WithMany() + .HasForeignKey("TaskMedicalReviewId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TaskMedicalReview"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingMedicineSystemQuestion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingMedicineSystemQuestion", "ParentQuestion") + .WithMany() + .HasForeignKey("ParentId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("ParentQuestion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingMedicineTrialQuestion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingMedicineTrialQuestion", "ParentQuestion") + .WithMany() + .HasForeignKey("ParentId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("ParentQuestion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingNoneDicomMark", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy") + .WithMany() + .HasForeignKey("StudyId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", null) + .WithMany("ReadingNoneDicomMarkList") + .HasForeignKey("VisitTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("NoneDicomStudy"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingNoneDicomMarkBinding", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingNoneDicomMark", "ReadingNoneDicomMark") + .WithMany() + .HasForeignKey("NoneDicomMarkId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("ReadingNoneDicomMark"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingOncologyTaskInfo", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "OncologyVisitTask") + .WithMany() + .HasForeignKey("OncologyTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany() + .HasForeignKey("VisitTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("OncologyVisitTask"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingPeriodPlan", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingPeriodSet", "ReadingPeriodSet") + .WithMany("ReadingPeriodPlanList") + .HasForeignKey("ReadingPeriodSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("ReadingPeriodSet"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingPeriodSet", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitStage", "VisitStage") + .WithMany() + .HasForeignKey("VisitStageId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("VisitStage"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingPeriodSite", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingPeriodSet", "ReadingPeriodSet") + .WithMany("ReadingPeriodSites") + .HasForeignKey("ReadingPeriodSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany() + .HasForeignKey("TrialSiteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("ReadingPeriodSet"); + + b.Navigation("TrialSite"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionSystem", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialReadingCriterionList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionSystem", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionSystem", "GroupInfo") + .WithMany() + .HasForeignKey("GroupId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionSystem", "ParentReadingQuestionSystem") + .WithMany() + .HasForeignKey("ParentId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionSystem", "ReadingQuestionCriterionSystem") + .WithMany("ReadingQuestionSystemList") + .HasForeignKey("ReadingQuestionCriterionSystemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionSystem", "RelevanceReadingQuestionSystem") + .WithMany() + .HasForeignKey("RelevanceId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("GroupInfo"); + + b.Navigation("ParentReadingQuestionSystem"); + + b.Navigation("ReadingQuestionCriterionSystem"); + + b.Navigation("RelevanceReadingQuestionSystem"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "GroupInfo") + .WithMany() + .HasForeignKey("GroupId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "ParentReadingQuestionTrial") + .WithMany() + .HasForeignKey("ParentId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingCriterionPage", "ReadingCriterionPage") + .WithMany("ReadingQuestionList") + .HasForeignKey("ReadingCriterionPageId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "ReadingQuestionCriterionTrial") + .WithMany() + .HasForeignKey("ReadingQuestionCriterionTrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "RelevanceReadingQuestionTrial") + .WithMany() + .HasForeignKey("RelevanceId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("GroupInfo"); + + b.Navigation("ParentReadingQuestionTrial"); + + b.Navigation("ReadingCriterionPage"); + + b.Navigation("ReadingQuestionCriterionTrial"); + + b.Navigation("RelevanceReadingQuestionTrial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingSystemCriterionDictionary", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Dictionary") + .WithMany() + .HasForeignKey("DictionaryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Dictionary"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "FristAddTask") + .WithMany() + .HasForeignKey("FristAddTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomInstance", "Instance") + .WithMany("ReadingTableAnswerRowInfoList") + .HasForeignKey("InstanceId") + .HasPrincipalKey("Id"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo", "MergeRow") + .WithMany() + .HasForeignKey("MergeRowId"); + + b.HasOne("IRaCIS.Core.Domain.Models.OrganInfo", "OrganInfo") + .WithMany() + .HasForeignKey("OrganInfoId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "ReadingQuestionTrial") + .WithMany() + .HasForeignKey("QuestionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomSeries", "DicomSeries") + .WithMany() + .HasForeignKey("SeriesId") + .HasPrincipalKey("Id"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo", "SplitRow") + .WithMany() + .HasForeignKey("SplitRowId"); + + b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy") + .WithMany() + .HasForeignKey("StudyId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany("LesionList") + .HasForeignKey("VisitTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DicomSeries"); + + b.Navigation("FristAddTask"); + + b.Navigation("Instance"); + + b.Navigation("MergeRow"); + + b.Navigation("NoneDicomStudy"); + + b.Navigation("OrganInfo"); + + b.Navigation("ReadingQuestionTrial"); + + b.Navigation("SplitRow"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTableQuestionAnswer", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "ReadingQuestionTrial") + .WithMany() + .HasForeignKey("QuestionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo", "Lesion") + .WithMany("LesionAnswerList") + .HasForeignKey("RowId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial", "ReadingTableQuestionTrial") + .WithMany() + .HasForeignKey("TableQuestionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany() + .HasForeignKey("VisitTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Lesion"); + + b.Navigation("ReadingQuestionTrial"); + + b.Navigation("ReadingTableQuestionTrial"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTableQuestionSystem", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingTableQuestionSystem", "DependParentQuestion") + .WithMany() + .HasForeignKey("DependParentId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionSystem", "ReadingQuestionSystem") + .WithMany("ReadingTableQuestionTrialList") + .HasForeignKey("ReadingQuestionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DependParentQuestion"); + + b.Navigation("ReadingQuestionSystem"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial", "DependParentQuestion") + .WithMany() + .HasForeignKey("DependParentId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "ReadingQuestionTrial") + .WithMany("ReadingTableQuestionTrialList") + .HasForeignKey("ReadingQuestionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DependParentQuestion"); + + b.Navigation("ReadingQuestionTrial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "ReadingQuestionTrial") + .WithMany() + .HasForeignKey("ReadingQuestionTrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", null) + .WithMany("ReadingTaskQuestionAnswerList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany("ReadingTaskQuestionAnswerList") + .HasForeignKey("VisitTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("ReadingQuestionTrial"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTaskQuestionMark", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "ReadingQuestionTrial") + .WithMany() + .HasForeignKey("QuestionId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany("ReadingTaskQuestionMarkList") + .HasForeignKey("VisitTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("ReadingQuestionTrial"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTaskRelation", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany() + .HasForeignKey("TaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTrialCriterionDictionary", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("CriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Dictionary") + .WithMany() + .HasForeignKey("DictionaryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Dictionary"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ResearchPublication", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReviewerPayInformation", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPImageUpload", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany() + .HasForeignKey("TrialSiteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + + b.Navigation("TrialSite"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPInstance", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SCPSeries", "SCPSeries") + .WithMany("SCPInstanceList") + .HasForeignKey("SeriesId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SCPStudy", "SCPStudy") + .WithMany("InstanceList") + .HasForeignKey("StudyId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("SCPSeries"); + + b.Navigation("SCPStudy"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPPatient", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany() + .HasForeignKey("SubjectId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany() + .HasForeignKey("TrialSiteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Subject"); + + b.Navigation("Trial"); + + b.Navigation("TrialSite"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPSeries", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SCPStudy", "SCPStudy") + .WithMany("SeriesList") + .HasForeignKey("StudyId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("SCPStudy"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPStudy", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SCPPatient", "Patient") + .WithMany("SCPStudyList") + .HasForeignKey("PatientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany() + .HasForeignKey("TrialSiteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Patient"); + + b.Navigation("SubjectVisit"); + + b.Navigation("Trial"); + + b.Navigation("TrialSite"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ShortcutKey", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Site", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Hospital", "Hospital") + .WithMany() + .HasForeignKey("HospitalId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Hospital"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Sponsor", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.StudyMonitor", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy") + .WithMany("DicomStudyMonitorList") + .HasForeignKey("StudyId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy") + .WithMany() + .HasForeignKey("StudyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TaskStudy", "TaskStudy") + .WithMany() + .HasForeignKey("StudyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany() + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DicomStudy"); + + b.Navigation("NoneDicomStudy"); + + b.Navigation("Subject"); + + b.Navigation("SubjectVisit"); + + b.Navigation("TaskStudy"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Subject", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "FinalSubjectVisit") + .WithMany() + .HasForeignKey("FinalSubjectVisitId"); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "LatestSubjectVisit") + .WithMany() + .HasForeignKey("LatestSubjectVisitId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("SubjectList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany("SubjectList") + .HasForeignKey("TrialSiteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("FinalSubjectVisit"); + + b.Navigation("LatestSubjectVisit"); + + b.Navigation("Trial"); + + b.Navigation("TrialSite"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectAdditionalEvaluationResult", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", null) + .WithMany("SubjectAdditionalEvaluationResult") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", "TrialReadingQuestion") + .WithMany() + .HasForeignKey("TrialReadingQuestionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialReadingQuestion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectCanceDoctor", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany("SubjectCanceDoctorList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Subject"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectCriteriaEvaluation", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "subject") + .WithMany("SubjectCriteriaEvaluationList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialReadingCriterion"); + + b.Navigation("subject"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectCriteriaEvaluationVisitFilter", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", null) + .WithMany("SubjectCriteriaEvaluationVisitFilterList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("SubjectCriteriaEvaluationVisitFilterList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectCriteriaEvaluationVisitStudyFilter", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomSeries", "Series") + .WithMany("SubjectCriteriaEvaluationVisitStudyFilterList") + .HasForeignKey("SeriesId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "Study") + .WithMany("SubjectCriteriaEvaluationVisitStudyFilterList") + .HasForeignKey("StudyId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Series"); + + b.Navigation("Study"); + + b.Navigation("SubjectVisit"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectUser", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "DoctorUser") + .WithMany() + .HasForeignKey("DoctorUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectUser", "ReplacedSubjectUser") + .WithMany("EarlierSubjectUserList") + .HasForeignKey("ReplacedSubjectUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany("SubjectDoctorList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("SubjectDoctorUserList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DoctorUser"); + + b.Navigation("ReplacedSubjectUser"); + + b.Navigation("Subject"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectVisit", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CurrentActionUser") + .WithMany() + .HasForeignKey("CurrentActionUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "ForwardUser") + .WithMany() + .HasForeignKey("ForwardUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "OutPlanPreviousVisit") + .WithMany() + .HasForeignKey("OutPlanPreviousVisitId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "PreliminaryAuditUser") + .WithMany() + .HasForeignKey("PreliminaryAuditUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "ReviewAuditUser") + .WithMany() + .HasForeignKey("ReviewAuditUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany("SubjectVisitList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "SubmitUser") + .WithMany() + .HasForeignKey("SubmitUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("SubjectVisitList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany("SubjectVisitList") + .HasForeignKey("TrialSiteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("CurrentActionUser"); + + b.Navigation("ForwardUser"); + + b.Navigation("OutPlanPreviousVisit"); + + b.Navigation("PreliminaryAuditUser"); + + b.Navigation("ReviewAuditUser"); + + b.Navigation("Subject"); + + b.Navigation("SubmitUser"); + + b.Navigation("Trial"); + + b.Navigation("TrialSite"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectVisitImageBackRecord", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("SubjectVisitImageBackRecordList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SysFileType", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemAnonymization", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemBasicData", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SystemBasicData", "Parent") + .WithMany() + .HasForeignKey("ParentId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemClinicalQuestion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SystemClinicalQuestion", "GroupQuestin") + .WithMany() + .HasForeignKey("GroupId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("GroupQuestin"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemClinicalTableQuestion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemCriterionDictionaryCode", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemCriterionKeyFile", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemDocConfirmedIdentityUser", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.IdentityUser", "ConfirmUser") + .WithMany("SystemDocConfirmedList") + .HasForeignKey("ConfirmUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SystemDocument", "SystemDocument") + .WithMany("SystemDocConfirmedUserList") + .HasForeignKey("SystemDocumentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ConfirmUser"); + + b.Navigation("CreateUserRole"); + + b.Navigation("SystemDocument"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemDocNeedConfirmedUserType", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserType", "UserTypeRole") + .WithMany("SystemDocNeedConfirmedUserTypeList") + .HasForeignKey("NeedConfirmUserTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SystemDocument", "SystemDocument") + .WithMany("NeedConfirmedUserTypeList") + .HasForeignKey("SystemDocumentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("SystemDocument"); + + b.Navigation("UserTypeRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemDocument", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "FileType") + .WithMany() + .HasForeignKey("FileTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("FileType"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemDocumentAttachment", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SystemDocument", "SystemDocument") + .WithMany("SystemDocumentAttachmentList") + .HasForeignKey("SystemDocumentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("SystemDocument"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemNotice", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "PublishedUser") + .WithMany() + .HasForeignKey("PublishedUserId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("PublishedUser"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemNoticeUserRead", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SystemNotice", null) + .WithMany("NoticeUserReadList") + .HasForeignKey("SystemNoticeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemNoticeUserType", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SystemNotice", null) + .WithMany("NoticeUserTypeList") + .HasForeignKey("SystemNoticeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserType", "NoticeUserType") + .WithMany() + .HasForeignKey("UserTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("NoticeUserType"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskAllocationRule", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "DoctorUser") + .WithMany() + .HasForeignKey("DoctorUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Enroll", "Enroll") + .WithOne("TaskAllocationRule") + .HasForeignKey("IRaCIS.Core.Domain.Models.TaskAllocationRule", "EnrollId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DoctorUser"); + + b.Navigation("Enroll"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskConsistentRule", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TaskConsistentRuleList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskInfluence", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "InfluenceTask") + .WithMany() + .HasForeignKey("InfluenceTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "OriginalTask") + .WithMany("TaskInfluenceList") + .HasForeignKey("OriginalTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("InfluenceTask"); + + b.Navigation("OriginalTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskInstance", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TaskSeries", "TaskSeries") + .WithMany("InstanceList") + .HasForeignKey("SeriesId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TaskStudy", "TaskStudy") + .WithMany("InstanceList") + .HasForeignKey("StudyId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + + b.Navigation("TaskSeries"); + + b.Navigation("TaskStudy"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskMedicalReview", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "LatestReplyUser") + .WithMany() + .HasForeignKey("LatestReplyUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "MedicalManagerUser") + .WithMany() + .HasForeignKey("MedicalManagerUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TaskMedicalReviewList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany("TaskMedicalReviewList") + .HasForeignKey("VisitTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("LatestReplyUser"); + + b.Navigation("MedicalManagerUser"); + + b.Navigation("Trial"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskMedicalReviewRule", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "DoctorUser") + .WithMany() + .HasForeignKey("DoctorUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DoctorUser"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskSeries", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TaskStudy", "TaskStudy") + .WithMany("SeriesList") + .HasForeignKey("StudyId") + .HasPrincipalKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + + b.Navigation("TaskStudy"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskStudy", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany("TaskStudyList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("TaskStudyList") + .HasForeignKey("SubjectVisitId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany("TaskStudyList") + .HasForeignKey("VisitTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Subject"); + + b.Navigation("SubjectVisit"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Trial", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.CRO", "CRO") + .WithMany() + .HasForeignKey("CROId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "IndicationType") + .WithMany() + .HasForeignKey("IndicationTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Phase") + .WithMany() + .HasForeignKey("PhaseId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "QCQuestionConfirmedUser") + .WithMany() + .HasForeignKey("QCQuestionConfirmedUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "ReviewMode") + .WithMany() + .HasForeignKey("ReviewModeId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Sponsor", "Sponsor") + .WithMany() + .HasForeignKey("SponsorId"); + + b.OwnsMany("IRaCIS.Core.Domain.Models.StudyName", "StudyNameList", b1 => + { + b1.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b1.Property("EnName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b1.Property("IsChoose") + .HasColumnType("bit"); + + b1.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b1.HasKey("TrialId", "Id"); + + b1.ToTable("Trial"); + + b1.ToJson("StudyNameList"); + + b1.WithOwner() + .HasForeignKey("TrialId"); + }); + + b.OwnsMany("IRaCIS.Core.Domain.Models.TrialObjectNameConfig", "TrialObjectNameList", b1 => + { + b1.Property("TrialId") + .HasColumnType("uniqueidentifier"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b1.Property("IsDefault") + .HasColumnType("bit"); + + b1.Property("Name") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b1.Property("TrialName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b1.HasKey("TrialId", "Id"); + + b1.ToTable("Trial"); + + b1.ToJson("TrialObjectNameList"); + + b1.WithOwner() + .HasForeignKey("TrialId"); + }); + + b.Navigation("CRO"); + + b.Navigation("CreateUserRole"); + + b.Navigation("IndicationType"); + + b.Navigation("Phase"); + + b.Navigation("QCQuestionConfirmedUser"); + + b.Navigation("ReviewMode"); + + b.Navigation("Sponsor"); + + b.Navigation("StudyNameList"); + + b.Navigation("TrialObjectNameList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialAuditShow", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialBodyPart", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialBodyPartList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialClinicalDataSetCriterion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", "TrialClinicalDataSet") + .WithMany("TrialClinicalDataSetCriteriaList") + .HasForeignKey("TrialClinicalDataSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany("TrialClinicalDataSetCriterionList") + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialClinicalDataSet"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialClinicalQuestion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialClinicalQuestion", "GroupQuestin") + .WithMany() + .HasForeignKey("GroupId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", "ClinicalDataTrialSet") + .WithMany("TrialClinicalQuestionList") + .HasForeignKey("TrialClinicalId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClinicalDataTrialSet"); + + b.Navigation("CreateUserRole"); + + b.Navigation("GroupQuestin"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialClinicalTableQuestion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionAdditionalAssessmentType", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany("TrialCriterionAdditionalAssessmentTypeList") + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionDictionaryCode", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionKeyFile", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany("KeyFileList") + .HasForeignKey("TrialCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDicomAE", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDictionary", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Dictionary") + .WithMany() + .HasForeignKey("DictionaryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialDicList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Dictionary"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDocConfirmedIdentityUser", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.IdentityUser", "User") + .WithMany() + .HasForeignKey("ConfirmUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialDocument", "TrialDocument") + .WithMany("TrialDocConfirmedUserList") + .HasForeignKey("TrialDocumentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialDocument"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDocNeedConfirmedUserType", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserType", "UserTypeRole") + .WithMany() + .HasForeignKey("NeedConfirmUserTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialDocument", "TrialDocument") + .WithMany("NeedConfirmedUserTypeList") + .HasForeignKey("TrialDocumentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TrialDocument"); + + b.Navigation("UserTypeRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDocument", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "FileType") + .WithMany() + .HasForeignKey("FileTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialDocumentList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("FileType"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDocumentAttachment", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialDocument", "TrialDocument") + .WithMany("TrialDocumentAttachmentList") + .HasForeignKey("TrialDocumentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialDocument"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialEmailBlackUser", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig", "TrialEmailNoticeConfig") + .WithMany("TrialEmailBlackUserList") + .HasForeignKey("TrialEmailNoticeConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TrialEmailNoticeConfig"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.EmailNoticeConfig", "SysEmailNoticeConfig") + .WithMany("TrialEmailNoticeConfigList") + .HasForeignKey("SysEmailNoticeConfigId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany() + .HasForeignKey("TrialReadingCriterionId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("SysEmailNoticeConfig"); + + b.Navigation("Trial"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialEmailNoticeUser", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig", "TrialEmailNoticeConfig") + .WithMany("TrialEmailNoticeUserList") + .HasForeignKey("TrialEmailNoticeConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TrialEmailNoticeConfig"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialExperience", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Phase") + .WithMany() + .HasForeignKey("PhaseId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Phase"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialExperienceCriteria", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.Doctor", null) + .WithMany("TrialExperienceCriteriaList") + .HasForeignKey("DoctorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "EvaluationCriteria") + .WithMany() + .HasForeignKey("EvaluationCriteriaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialExperience", null) + .WithMany("ExperienceCriteriaList") + .HasForeignKey("TrialExperienceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EvaluationCriteria"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialExternalUser", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFile", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFileType", "TrialFileType") + .WithMany() + .HasForeignKey("TrialFileTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialFileType"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFileType", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFinalRecord", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFile", "HistoryFileRecord") + .WithMany() + .HasForeignKey("HistoryFileRecordId"); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFile", "PDFFileRecord") + .WithMany() + .HasForeignKey("PDFFileRecordId"); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFile", "SignFileRecord") + .WithMany() + .HasForeignKey("SignFileRecordId"); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFile", "WordFileRecord") + .WithMany() + .HasForeignKey("WordFileRecordId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("HistoryFileRecord"); + + b.Navigation("PDFFileRecord"); + + b.Navigation("SignFileRecord"); + + b.Navigation("WordFileRecord"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialHistoryRecordFile", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFileType", "TrialFileType") + .WithMany() + .HasForeignKey("TrialFileTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFinalRecord", "TrialFinalRecord") + .WithMany("TrialHistoryRecordFileList") + .HasForeignKey("TrialRecordId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialNormalRecord", "TrialNormalRecord") + .WithMany("TrialHistoryRecordFileList") + .HasForeignKey("TrialRecordId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialTrianingRecord", "TrialTrianingRecord") + .WithMany("TrialHistoryRecordFileList") + .HasForeignKey("TrialRecordId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialFileType"); + + b.Navigation("TrialFinalRecord"); + + b.Navigation("TrialNormalRecord"); + + b.Navigation("TrialTrianingRecord"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialIdentityUser", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.IdentityUser", "IdentityUser") + .WithMany("UserTrialList") + .HasForeignKey("IdentityUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialIdentityUserList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("IdentityUser"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialImageDownload", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany() + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Subject"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialNormalRecord", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFile", "HistoryFileRecord") + .WithMany() + .HasForeignKey("HistoryFileRecordId"); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFile", "TrialFileRecord") + .WithMany() + .HasForeignKey("TrialFileRecordId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("HistoryFileRecord"); + + b.Navigation("TrialFileRecord"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialPaymentPrice", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialQCQuestion", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialQCQuestion", "ParentQCQuestion") + .WithMany() + .HasForeignKey("ParentId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("ParentQCQuestion"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialQCQuestionAnswer", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("TrialQCQuestionAnswerList") + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialQCQuestion", "TrialQCQuestionConfigure") + .WithMany("TrialQCQuestionAnswerList") + .HasForeignKey("TrialQCQuestionConfigureId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + + b.Navigation("TrialQCQuestionConfigure"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialRevenuesPrice", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSign", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSite", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Site", "Site") + .WithMany("TrialSiteList") + .HasForeignKey("SiteId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialSiteList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Site"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteDicomAE", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany("TrialSiteDicomAEList") + .HasForeignKey("TrialSiteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialSite"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteEquipmentSurvey", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSiteSurvey", "TrialSiteSurvey") + .WithMany("TrialSiteEquipmentSurveyList") + .HasForeignKey("TrialSiteSurveyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("EquipmentType"); + + b.Navigation("TrialSiteSurvey"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteSurvey", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "PreliminaryUser") + .WithMany() + .HasForeignKey("PreliminaryUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "ReviewerUser") + .WithMany() + .HasForeignKey("ReviewerUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialSiteSurveyList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany("TrialSiteSurveyList") + .HasForeignKey("TrialSiteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("PreliminaryUser"); + + b.Navigation("ReviewerUser"); + + b.Navigation("Trial"); + + b.Navigation("TrialSite"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUserRole", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialSiteUserList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany("CRCUserList") + .HasForeignKey("TrialSiteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "UserRole") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + + b.Navigation("TrialSite"); + + b.Navigation("UserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteUserSurvey", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSiteSurvey", "TrialSiteSurvey") + .WithMany("TrialSiteUserSurveyList") + .HasForeignKey("TrialSiteSurveyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserType", "UserTypeRole") + .WithMany() + .HasForeignKey("UserTypeId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialSiteSurvey"); + + b.Navigation("UserTypeRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialStateChange", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialStateChangeList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialStatusDetail", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("ClinicalTrialProjectDetails") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialTrianingRecord", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFile", "HistoryFileRecord") + .WithMany() + .HasForeignKey("HistoryFileRecordId"); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialFile", "TrialFileRecord") + .WithMany() + .HasForeignKey("TrialFileRecordId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("HistoryFileRecord"); + + b.Navigation("TrialFileRecord"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialUserRole", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("TrialUserRoleList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialIdentityUser", "TrialUser") + .WithMany("TrialUserRoleList") + .HasForeignKey("TrialUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "UserRole") + .WithMany("UserRoleTrials") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + + b.Navigation("TrialUser"); + + b.Navigation("UserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialVirtualSiteCodeUpdate", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserAgreement", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserFeedBack", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany() + .HasForeignKey("SubjectId"); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("UserFeedBackList") + .HasForeignKey("TrialId"); + + b.HasOne("IRaCIS.Core.Domain.Models.TrialSite", "TrialSite") + .WithMany() + .HasForeignKey("TrialSiteId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") + .WithMany("UserFeedBackList") + .HasForeignKey("VisitTaskId"); + + b.Navigation("CreateUserRole"); + + b.Navigation("Subject"); + + b.Navigation("SubjectVisit"); + + b.Navigation("Trial"); + + b.Navigation("TrialSite"); + + b.Navigation("VisitTask"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserLog", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.IdentityUser", "ActionIdentityUser") + .WithMany() + .HasForeignKey("ActionIdentityUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.IdentityUser", "TargetIdentityUser") + .WithMany() + .HasForeignKey("TargetIdentityUserId"); + + b.Navigation("ActionIdentityUser"); + + b.Navigation("CreateUserRole"); + + b.Navigation("TargetIdentityUser"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserPassWordLog", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserRole", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Doctor", null) + .WithOne("UserRole") + .HasForeignKey("IRaCIS.Core.Domain.Models.UserRole", "DoctorId"); + + b.HasOne("IRaCIS.Core.Domain.Models.IdentityUser", "IdentityUser") + .WithMany("UserRoleList") + .HasForeignKey("IdentityUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserType", "UserTypeRole") + .WithMany("UserList") + .HasForeignKey("UserTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("IdentityUser"); + + b.Navigation("UserTypeRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserTypeGroup", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.Dictionary", "Group") + .WithMany() + .HasForeignKey("DictionaryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserType", "UserType") + .WithMany("UserTypeGroupList") + .HasForeignKey("UserTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + + b.Navigation("UserType"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserTypeMenu", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.Menu", "Menu") + .WithMany("UserTypeMenuList") + .HasForeignKey("MenuId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserType", "UserType") + .WithMany("UserTypeMenuList") + .HasForeignKey("UserTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Menu"); + + b.Navigation("UserType"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserWLTemplate", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Vacation", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VerificationCode", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitPlanInfluenceStat", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitPlanInfluenceStudy", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitPlanInfluenceStat", "VisitPlanInfluenceStat") + .WithMany("InfluenceStudyList") + .HasForeignKey("VisitPlanInfluenceStatId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("SubjectVisit"); + + b.Navigation("VisitPlanInfluenceStat"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitStage", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany() + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitTask", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "DoctorUser") + .WithMany("VisitTaskList") + .HasForeignKey("DoctorUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "JudgeResultTask") + .WithMany() + .HasForeignKey("JudgeResultTaskId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "JudgeVisitTask") + .WithMany("JudgeVisitList") + .HasForeignKey("JudgeVisitTaskId"); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadModule", "ReadModule") + .WithMany("ModuleTaskList") + .HasForeignKey("SouceReadModuleId"); + + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SourceSubjectVisit") + .WithMany("VisitTaskList") + .HasForeignKey("SourceSubjectVisitId"); + + b.HasOne("IRaCIS.Core.Domain.Models.Subject", "Subject") + .WithMany("SubjectVisitTaskList") + .HasForeignKey("SubjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("VisitTaskList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany("VisitTaskList") + .HasForeignKey("TrialReadingCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("DoctorUser"); + + b.Navigation("JudgeResultTask"); + + b.Navigation("JudgeVisitTask"); + + b.Navigation("ReadModule"); + + b.Navigation("SourceSubjectVisit"); + + b.Navigation("Subject"); + + b.Navigation("Trial"); + + b.Navigation("TrialReadingCriterion"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitTaskReReading", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "NewReReadingTask") + .WithMany() + .HasForeignKey("NewReReadingTaskId"); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "OriginalReReadingTask") + .WithMany() + .HasForeignKey("OriginalReReadingTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "RequestReReadingConfirmUser") + .WithMany() + .HasForeignKey("RequestReReadingConfirmUserId"); + + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "RequestReReadingUser") + .WithMany() + .HasForeignKey("RequestReReadingUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "RootReReadingTask") + .WithMany() + .HasForeignKey("RootReReadingTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial") + .WithMany("VisitTaskReReadingList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("NewReReadingTask"); + + b.Navigation("OriginalReReadingTask"); + + b.Navigation("RequestReReadingConfirmUser"); + + b.Navigation("RequestReReadingUser"); + + b.Navigation("RootReReadingTask"); + + b.Navigation("Trial"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VolumeReward", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Workload", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.Trial", null) + .WithMany("WorkloadList") + .HasForeignKey("TrialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditDocument", b => + { + b.Navigation("AncestorList"); + + b.Navigation("AuditDocumentOldVersionList"); + + b.Navigation("DescendantList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecord", b => + { + b.Navigation("AuditRecordIdentityUserList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", b => + { + b.Navigation("ReadingClinicalDataList"); + + b.Navigation("TrialClinicalDataSetCriteriaList"); + + b.Navigation("TrialClinicalQuestionList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomInstance", b => + { + b.Navigation("ReadingTableAnswerRowInfoList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomSeries", b => + { + b.Navigation("DicomInstanceList"); + + b.Navigation("SubjectCriteriaEvaluationVisitStudyFilterList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomStudy", b => + { + b.Navigation("DicomStudyMonitorList"); + + b.Navigation("InstanceList"); + + b.Navigation("ReadingClinicalDataList"); + + b.Navigation("ReadingConsistentClinicalDataList"); + + b.Navigation("SeriesList"); + + b.Navigation("SubjectCriteriaEvaluationVisitStudyFilterList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Dictionary", b => + { + b.Navigation("ChildList"); + + b.Navigation("DoctorDicRelationList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Doctor", b => + { + b.Navigation("AttachmentList"); + + b.Navigation("CriterionFileList"); + + b.Navigation("DoctorDicRelationList"); + + b.Navigation("EnrollList"); + + b.Navigation("TrialExperienceCriteriaList"); + + b.Navigation("UserRole") + .IsRequired(); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailLog", b => + { + b.Navigation("AttachmentList"); + + b.Navigation("EmailRecipientLogList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.EmailNoticeConfig", b => + { + b.Navigation("EmailNoticeUserTypeList"); + + b.Navigation("TrialEmailNoticeConfigList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Enroll", b => + { + b.Navigation("EnrollReadingCategoryList"); + + b.Navigation("EnrollReadingCriteriaList"); + + b.Navigation("TaskAllocationRule") + .IsRequired(); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Hospital", b => + { + b.Navigation("DoctorList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.IdentityUser", b => + { + b.Navigation("AuditRecordList"); + + b.Navigation("SystemDocConfirmedList"); + + b.Navigation("UserRoleList"); + + b.Navigation("UserTrialList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Menu", b => + { + b.Navigation("UserTypeMenuList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.NoneDicomStudy", b => + { + b.Navigation("ImageLabelNoneDicomFileList"); + + b.Navigation("NoneDicomFileList"); + + b.Navigation("TaskNoneDicomFileList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.QCChallenge", b => + { + b.Navigation("DialogList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadModule", b => + { + b.Navigation("ModuleTaskList"); + + b.Navigation("ReadModuleCriterionFromList"); + + b.Navigation("ReadingClinicalDataList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingClinicalData", b => + { + b.Navigation("ReadingClinicalDataPDFList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingConsistentClinicalData", b => + { + b.Navigation("ReadingClinicalDataPDFList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingCriterionPage", b => + { + b.Navigation("ReadingQuestionList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingPeriodSet", b => + { + b.Navigation("ReadingPeriodPlanList"); + + b.Navigation("ReadingPeriodSites"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionSystem", b => + { + b.Navigation("ReadingQuestionSystemList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", b => + { + b.Navigation("KeyFileList"); + + b.Navigation("TrialClinicalDataSetCriterionList"); + + b.Navigation("TrialCriterionAdditionalAssessmentTypeList"); + + b.Navigation("VisitTaskList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionSystem", b => + { + b.Navigation("ReadingTableQuestionTrialList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionTrial", b => + { + b.Navigation("ReadingTableQuestionTrialList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo", b => + { + b.Navigation("LesionAnswerList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPPatient", b => + { + b.Navigation("SCPStudyList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPSeries", b => + { + b.Navigation("SCPInstanceList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPStudy", b => + { + b.Navigation("InstanceList"); + + b.Navigation("SeriesList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Site", b => + { + b.Navigation("TrialSiteList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Subject", b => + { + b.Navigation("ClinicalDataList"); + + b.Navigation("ClinicalFormList"); + + b.Navigation("ReadModuleList"); + + b.Navigation("ReadingTaskQuestionAnswerList"); + + b.Navigation("StudyList"); + + b.Navigation("SubjectAdditionalEvaluationResult"); + + b.Navigation("SubjectCanceDoctorList"); + + b.Navigation("SubjectCriteriaEvaluationList"); + + b.Navigation("SubjectCriteriaEvaluationVisitFilterList"); + + b.Navigation("SubjectDoctorList"); + + b.Navigation("SubjectVisitList"); + + b.Navigation("SubjectVisitTaskList"); + + b.Navigation("TaskStudyList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectUser", b => + { + b.Navigation("EarlierSubjectUserList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SubjectVisit", b => + { + b.Navigation("CheckChallengeDialogList"); + + b.Navigation("ClinicalFormList"); + + b.Navigation("NoneDicomStudyList"); + + b.Navigation("PreviousHistoryList"); + + b.Navigation("PreviousOtherList"); + + b.Navigation("PreviousPDFList"); + + b.Navigation("PreviousSurgeryList"); + + b.Navigation("QCChallengeDialogList"); + + b.Navigation("QCChallengeList"); + + b.Navigation("ReadModuleList"); + + b.Navigation("ReadingClinicalDataList"); + + b.Navigation("StudyList"); + + b.Navigation("SubjectCriteriaEvaluationVisitFilterList"); + + b.Navigation("SubjectVisitImageBackRecordList"); + + b.Navigation("TaskStudyList"); + + b.Navigation("TrialQCQuestionAnswerList"); + + b.Navigation("VisitTaskList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemDocument", b => + { + b.Navigation("NeedConfirmedUserTypeList"); + + b.Navigation("SystemDocConfirmedUserList"); + + b.Navigation("SystemDocumentAttachmentList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.SystemNotice", b => + { + b.Navigation("NoticeUserReadList"); + + b.Navigation("NoticeUserTypeList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskMedicalReview", b => + { + b.Navigation("ReadingMedicalReviewDialogList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskSeries", b => + { + b.Navigation("InstanceList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskStudy", b => + { + b.Navigation("InstanceList"); + + b.Navigation("SeriesList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.Trial", b => + { + b.Navigation("ClinicalDataTrialSetList"); + + b.Navigation("ClinicalTrialProjectDetails"); + + b.Navigation("EnrollList"); + + b.Navigation("NoneDicomStudyList"); + + b.Navigation("ReadModuleList"); + + b.Navigation("ReadingClinicalDataList"); + + b.Navigation("StudyList"); + + b.Navigation("SubjectDoctorUserList"); + + b.Navigation("SubjectList"); + + b.Navigation("SubjectVisitList"); + + b.Navigation("TaskConsistentRuleList"); + + b.Navigation("TaskMedicalReviewList"); + + b.Navigation("TrialBodyPartList"); + + b.Navigation("TrialDicList"); + + b.Navigation("TrialDocumentList"); + + b.Navigation("TrialIdentityUserList"); + + b.Navigation("TrialReadingCriterionList"); + + b.Navigation("TrialSiteList"); + + b.Navigation("TrialSiteSurveyList"); + + b.Navigation("TrialSiteUserList"); + + b.Navigation("TrialStateChangeList"); + + b.Navigation("TrialUserRoleList"); + + b.Navigation("UserFeedBackList"); + + b.Navigation("VisitTaskList"); + + b.Navigation("VisitTaskReReadingList"); + + b.Navigation("WorkloadList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDocument", b => + { + b.Navigation("NeedConfirmedUserTypeList"); + + b.Navigation("TrialDocConfirmedUserList"); + + b.Navigation("TrialDocumentAttachmentList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialEmailNoticeConfig", b => + { + b.Navigation("TrialEmailBlackUserList"); + + b.Navigation("TrialEmailNoticeUserList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialExperience", b => + { + b.Navigation("ExperienceCriteriaList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFinalRecord", b => + { + b.Navigation("TrialHistoryRecordFileList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialIdentityUser", b => + { + b.Navigation("TrialUserRoleList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialNormalRecord", b => + { + b.Navigation("TrialHistoryRecordFileList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialQCQuestion", b => + { + b.Navigation("TrialQCQuestionAnswerList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSite", b => + { + b.Navigation("CRCUserList"); + + b.Navigation("SubjectList"); + + b.Navigation("SubjectVisitList"); + + b.Navigation("TrialSiteDicomAEList"); + + b.Navigation("TrialSiteSurveyList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialSiteSurvey", b => + { + b.Navigation("TrialSiteEquipmentSurveyList"); + + b.Navigation("TrialSiteUserSurveyList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialTrianingRecord", b => + { + b.Navigation("TrialHistoryRecordFileList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserRole", b => + { + b.Navigation("UserRoleTrials"); + + b.Navigation("VisitTaskList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserType", b => + { + b.Navigation("SystemDocNeedConfirmedUserTypeList"); + + b.Navigation("UserList"); + + b.Navigation("UserTypeGroupList"); + + b.Navigation("UserTypeMenuList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitPlanInfluenceStat", b => + { + b.Navigation("InfluenceStudyList"); + }); + + modelBuilder.Entity("IRaCIS.Core.Domain.Models.VisitTask", b => + { + b.Navigation("GlobalVisitResultList"); + + b.Navigation("JudgeVisitList"); + + b.Navigation("LesionList"); + + b.Navigation("ReadingNoneDicomMarkList"); + + b.Navigation("ReadingTaskQuestionAnswerList"); + + b.Navigation("ReadingTaskQuestionMarkList"); + + b.Navigation("TaskInfluenceList"); + + b.Navigation("TaskMedicalReviewList"); + + b.Navigation("TaskNoneDicomStudyFileList"); + + b.Navigation("TaskStudyList"); + + b.Navigation("UserFeedBackList"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/IRaCIS.Core.Infra.EFCore/Migrations/20251119020403_oct-add.cs b/IRaCIS.Core.Infra.EFCore/Migrations/20251119020403_oct-add.cs new file mode 100644 index 000000000..344cdb6ae --- /dev/null +++ b/IRaCIS.Core.Infra.EFCore/Migrations/20251119020403_oct-add.cs @@ -0,0 +1,160 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace IRaCIS.Core.Infra.EFCore.Migrations +{ + /// + public partial class octadd : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "SubjectVisitId", + table: "TaskStudy", + type: "uniqueidentifier", + nullable: true); + + migrationBuilder.AddColumn( + name: "SubjectVisitId", + table: "TaskSeries", + type: "uniqueidentifier", + nullable: true); + + migrationBuilder.AddColumn( + name: "SubjectVisitId", + table: "TaskInstance", + type: "uniqueidentifier", + nullable: true); + + migrationBuilder.AddColumn( + name: "ImageLabelNoneDicomStudyId", + table: "NoneDicomStudyFile", + type: "uniqueidentifier", + nullable: true); + + //migrationBuilder.CreateIndex( + // name: "IX_TrialCriterionKeyFile_TrialCriterionId", + // table: "TrialCriterionKeyFile", + // column: "TrialCriterionId"); + + //migrationBuilder.CreateIndex( + // name: "IX_TaskStudy_SubjectVisitId", + // table: "TaskStudy", + // column: "SubjectVisitId"); + + //migrationBuilder.CreateIndex( + // name: "IX_TaskSeries_SubjectVisitId", + // table: "TaskSeries", + // column: "SubjectVisitId"); + + //migrationBuilder.CreateIndex( + // name: "IX_TaskInstance_SubjectVisitId", + // table: "TaskInstance", + // column: "SubjectVisitId"); + + //migrationBuilder.CreateIndex( + // name: "IX_NoneDicomStudyFile_ImageLabelNoneDicomStudyId", + // table: "NoneDicomStudyFile", + // column: "ImageLabelNoneDicomStudyId"); + + //migrationBuilder.AddForeignKey( + // name: "FK_NoneDicomStudyFile_NoneDicomStudy_ImageLabelNoneDicomStudyId", + // table: "NoneDicomStudyFile", + // column: "ImageLabelNoneDicomStudyId", + // principalTable: "NoneDicomStudy", + // principalColumn: "Id"); + + //migrationBuilder.AddForeignKey( + // name: "FK_TaskInstance_SubjectVisit_SubjectVisitId", + // table: "TaskInstance", + // column: "SubjectVisitId", + // principalTable: "SubjectVisit", + // principalColumn: "Id"); + + //migrationBuilder.AddForeignKey( + // name: "FK_TaskSeries_SubjectVisit_SubjectVisitId", + // table: "TaskSeries", + // column: "SubjectVisitId", + // principalTable: "SubjectVisit", + // principalColumn: "Id"); + + //migrationBuilder.AddForeignKey( + // name: "FK_TaskStudy_SubjectVisit_SubjectVisitId", + // table: "TaskStudy", + // column: "SubjectVisitId", + // principalTable: "SubjectVisit", + // principalColumn: "Id"); + + //migrationBuilder.AddForeignKey( + // name: "FK_TrialCriterionKeyFile_ReadingQuestionCriterionTrial_TrialCriterionId", + // table: "TrialCriterionKeyFile", + // column: "TrialCriterionId", + // principalTable: "ReadingQuestionCriterionTrial", + // principalColumn: "Id", + // onDelete: ReferentialAction.Cascade); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + //migrationBuilder.DropForeignKey( + // name: "FK_NoneDicomStudyFile_NoneDicomStudy_ImageLabelNoneDicomStudyId", + // table: "NoneDicomStudyFile"); + + //migrationBuilder.DropForeignKey( + // name: "FK_TaskInstance_SubjectVisit_SubjectVisitId", + // table: "TaskInstance"); + + //migrationBuilder.DropForeignKey( + // name: "FK_TaskSeries_SubjectVisit_SubjectVisitId", + // table: "TaskSeries"); + + //migrationBuilder.DropForeignKey( + // name: "FK_TaskStudy_SubjectVisit_SubjectVisitId", + // table: "TaskStudy"); + + //migrationBuilder.DropForeignKey( + // name: "FK_TrialCriterionKeyFile_ReadingQuestionCriterionTrial_TrialCriterionId", + // table: "TrialCriterionKeyFile"); + + //migrationBuilder.DropIndex( + // name: "IX_TrialCriterionKeyFile_TrialCriterionId", + // table: "TrialCriterionKeyFile"); + + //migrationBuilder.DropIndex( + // name: "IX_TaskStudy_SubjectVisitId", + // table: "TaskStudy"); + + //migrationBuilder.DropIndex( + // name: "IX_TaskSeries_SubjectVisitId", + // table: "TaskSeries"); + + //migrationBuilder.DropIndex( + // name: "IX_TaskInstance_SubjectVisitId", + // table: "TaskInstance"); + + //migrationBuilder.DropIndex( + // name: "IX_NoneDicomStudyFile_ImageLabelNoneDicomStudyId", + // table: "NoneDicomStudyFile"); + + migrationBuilder.DropColumn( + name: "SubjectVisitId", + table: "TaskStudy"); + + migrationBuilder.DropColumn( + name: "SubjectVisitId", + table: "TaskSeries"); + + migrationBuilder.DropColumn( + name: "SubjectVisitId", + table: "TaskInstance"); + + migrationBuilder.DropColumn( + name: "ImageLabelNoneDicomStudyId", + table: "NoneDicomStudyFile"); + } + } +} diff --git a/IRaCIS.Core.Infra.EFCore/Migrations/IRaCISDBContextModelSnapshot.cs b/IRaCIS.Core.Infra.EFCore/Migrations/IRaCISDBContextModelSnapshot.cs index cdf37484f..a7aaf0014 100644 --- a/IRaCIS.Core.Infra.EFCore/Migrations/IRaCISDBContextModelSnapshot.cs +++ b/IRaCIS.Core.Infra.EFCore/Migrations/IRaCISDBContextModelSnapshot.cs @@ -3538,6 +3538,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations .HasMaxLength(400) .HasColumnType("nvarchar(400)"); + b.Property("ImageLabelNoneDicomStudyId") + .HasColumnType("uniqueidentifier"); + b.Property("IsDeleted") .HasColumnType("bit"); @@ -3563,6 +3566,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.HasIndex("CreateUserId"); + b.HasIndex("ImageLabelNoneDicomStudyId"); + b.HasIndex("NoneDicomStudyId"); b.HasIndex("OriginNoneDicomStudyId"); @@ -10570,6 +10575,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.Property("SubjectId") .HasColumnType("uniqueidentifier"); + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + b.Property("TransferSytaxUID") .IsRequired() .HasMaxLength(400) @@ -10605,6 +10613,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.HasIndex("StudyId"); + b.HasIndex("SubjectVisitId"); + b.ToTable("TaskInstance", t => { t.HasComment("项目阅片 - 任务后处理Instance"); @@ -10927,6 +10937,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.Property("SubjectId") .HasColumnType("uniqueidentifier"); + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + b.Property("TrialId") .HasColumnType("uniqueidentifier"); @@ -10950,6 +10963,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.HasIndex("StudyId"); + b.HasIndex("SubjectVisitId"); + b.ToTable("TaskSeries", t => { t.HasComment("项目阅片 - 任务后上传序列"); @@ -11100,6 +11115,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.Property("SubjectId") .HasColumnType("uniqueidentifier"); + b.Property("SubjectVisitId") + .HasColumnType("uniqueidentifier"); + b.Property("TrialId") .HasColumnType("uniqueidentifier"); @@ -11123,6 +11141,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.HasIndex("SubjectId"); + b.HasIndex("SubjectVisitId"); + b.HasIndex("VisitTaskId"); b.ToTable("TaskStudy", t => @@ -11980,6 +12000,42 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.ToTable("TrialCriterionDictionaryCode"); }); + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionKeyFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreateTime") + .HasColumnType("datetime2"); + + b.Property("CreateUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("TrialCriterionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreateUserId"); + + b.HasIndex("TrialCriterionId"); + + b.ToTable("TrialCriterionKeyFile", t => + { + t.HasComment("项目标准阅片关键点文件"); + }); + }); + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDicomAE", b => { b.Property("Id") @@ -16221,6 +16277,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "ImageMarkNoneDicomStudy") + .WithMany("ImageLabelNoneDicomFileList") + .HasForeignKey("ImageLabelNoneDicomStudyId"); + b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy") .WithMany("NoneDicomFileList") .HasForeignKey("NoneDicomStudyId") @@ -16237,6 +16297,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.Navigation("CreateUserRole"); + b.Navigation("ImageMarkNoneDicomStudy"); + b.Navigation("NoneDicomStudy"); b.Navigation("OriginNoneDicomStudy"); @@ -18315,8 +18377,14 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId"); + b.Navigation("CreateUserRole"); + b.Navigation("SubjectVisit"); + b.Navigation("TaskSeries"); b.Navigation("TaskStudy"); @@ -18395,8 +18463,14 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany() + .HasForeignKey("SubjectVisitId"); + b.Navigation("CreateUserRole"); + b.Navigation("SubjectVisit"); + b.Navigation("TaskStudy"); }); @@ -18414,6 +18488,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit") + .WithMany("TaskStudyList") + .HasForeignKey("SubjectVisitId"); + b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask") .WithMany("TaskStudyList") .HasForeignKey("VisitTaskId") @@ -18424,6 +18502,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.Navigation("Subject"); + b.Navigation("SubjectVisit"); + b.Navigation("VisitTask"); }); @@ -18675,6 +18755,25 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.Navigation("TrialReadingCriterion"); }); + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionKeyFile", b => + { + b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") + .WithMany() + .HasForeignKey("CreateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion") + .WithMany("KeyFileList") + .HasForeignKey("TrialCriterionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreateUserRole"); + + b.Navigation("TrialReadingCriterion"); + }); + modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDicomAE", b => { b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole") @@ -19973,6 +20072,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations modelBuilder.Entity("IRaCIS.Core.Domain.Models.NoneDicomStudy", b => { + b.Navigation("ImageLabelNoneDicomFileList"); + b.Navigation("NoneDicomFileList"); b.Navigation("TaskNoneDicomFileList"); @@ -20021,6 +20122,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", b => { + b.Navigation("KeyFileList"); + b.Navigation("TrialClinicalDataSetCriterionList"); b.Navigation("TrialCriterionAdditionalAssessmentTypeList"); @@ -20129,6 +20232,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations b.Navigation("SubjectVisitImageBackRecordList"); + b.Navigation("TaskStudyList"); + b.Navigation("TrialQCQuestionAnswerList"); b.Navigation("VisitTaskList"); diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs index 56be0b871..18f5d77e2 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs @@ -1,6 +1,7 @@ using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson; using Newtonsoft.Json; using System; +using System.Collections; using System.Collections.Generic; using System.Reflection; @@ -75,6 +76,13 @@ namespace IRaCIS.Core.Infrastructure.Extention foreach (PropertyInfo property in properties) { + //质控导出需要集合 + // if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType) + //&& property.PropertyType != typeof(string)) + // { + // continue; + // } + string propertyName = property.Name; object propertyValue = property.GetValue(obj); // 如果属性的类型是枚举,将其值保留为整数 diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs index cdb5e4639..a75ea796d 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs @@ -306,6 +306,15 @@ public static class StaticData public const string SystenMedicalQCQuestionsList_Export = "SystenMedicalQCQuestionsList_Export"; + //一致性全量核查导出 + public const string TrialConsistentFUllCheckList_Export = "TrialConsistentFUllCheckList_Export"; + + public const string TumorCDISC_Export = "TumorCDISC_Export"; + + public const string IVUS_CDISC_Export = "IVUS_CDISC_Export"; + + public const string OCT_CDISC_Export = "OCT_CDISC_Export"; + }