using EntityFrameworkCore.Projectables; using IRaCIS.Core.Domain.Share; using System.Linq; namespace IRaCIS.Core.Domain.Models; [Comment("项目阅片 - 阅片任务表")] [Table("VisitTask")] public class VisitTask : BaseFullAuditEntity { #region 导航属性 [JsonIgnore] public List TaskStudyList { get; set; } public List TaskNoneDicomStudyFileList { get; set; } [JsonIgnore] [ForeignKey("TrialReadingCriterionId")] public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; } [ForeignKey("DoctorUserId")] public User DoctorUser { get; set; } [ForeignKey("SouceReadModuleId")] public ReadModule ReadModule { get; set; } [ForeignKey("SourceSubjectVisitId")] public SubjectVisit SourceSubjectVisit { get; set; } [JsonIgnore] [ForeignKey("JudgeVisitTaskId")] public VisitTask JudgeVisitTask { get; set; } [JsonIgnore] public Subject Subject { get; set; } [JsonIgnore] public List TaskMedicalReviewList { get; set; } [ForeignKey("JudgeResultTaskId")] public VisitTask JudgeResultTask { get; set; } [Comment("影像质量 等等第一层级问题答案")] [JsonIgnore] public List ReadingTaskQuestionAnswerList { get; set; } = new List(); [Comment("病灶表")] [JsonIgnore] public List LesionList { get; set; } = new List(); [Comment("病灶答案表")] [JsonIgnore] public List LesionAnswerList { get; set; } = new List(); [Comment("重阅或者退回影像的记录中间表")] [JsonIgnore] public List TaskInfluenceList { get; set; } = new List(); [JsonIgnore] [Comment("对于全局任务而言 才可以用的 关联的访视阅片结果")] public List GlobalVisitResultList { get; set; } = new List(); [Comment("裁判结果图片地址")] [NotMapped] public List JudgeResultImagePathList { get { try { return this.JudgeResultImagePath.Trim().Split(',').ToList(); } catch (Exception) { return new List(); } } } [JsonIgnore] public Trial Trial { get; set; } [JsonIgnore] public List UserFeedBackList { get; set; } [Comment("关联的访视任务ID (当前任务是访视任务的话会有自己)集合")] [NotMapped] public List RelatedVisitTaskIdList { get { try { return JsonConvert.DeserializeObject>(this.RelatedVisitTaskIds); } catch (Exception) { return new List(); } } } [Comment("报告任务关系 包含冻结")] [NotMapped] public List ReportRelatedTaskIdList { get { try { return JsonConvert.DeserializeObject>(this.ReportRelatedTaskIds); } catch (Exception) { return new List(); } } } [Comment("既往任务Id 不包括自己集合")] [NotMapped] public List PastResultTaskIdList { get { try { return JsonConvert.DeserializeObject>(this.PastResultTaskIds); } catch (Exception) { return new List(); } } } #endregion public string TaskName { get; set; } = string.Empty; public string TaskBlindName { get; set; } = string.Empty; [Comment("任务来源访视Id 方便回更访视读片状态")] public Guid? SourceSubjectVisitId { get; set; } public Guid? SouceReadModuleId { get; set; } [Comment("任务类型")] public ReadingCategory ReadingCategory { get; set; } public Guid TrialId { get; set; } [Comment("分配时间")] public DateTime? AllocateTime { get; set; } public Guid SubjectId { get; set; } public int Code { get; set; } public string TaskCode { get; set; } = string.Empty; public bool IsUrgent { get; set; } [Comment("加急类型")] public TaskUrgentType? TaskUrgentType { get; set; } [Comment("任务加急类型")] public string TaskUrgentRemake { get; set; } = string.Empty; [Comment("是否和编辑加急状态")] public bool IsCanEditUrgentState { get; set; } = true; [Comment("0 代表 单重阅片 产生的任务 否则就是双重 任务 1 任务 2")] public Arm ArmEnum { get; set; } [Comment("分配状态")] public TaskAllocationState TaskAllocationState { get; set; } public TaskState TaskState { get; set; } [Comment("重阅状态")] public ReReadingApplyState ReReadingApplyState { get; set; } public Guid? DoctorUserId { get; set; } public Guid TrialReadingCriterionId { get; set; } [Comment("裁判任务的Id")] public Guid? JudgeVisitTaskId { get; set; } [Comment("任务阅片状态")] public ReadingTaskState ReadingTaskState { get; set; } [Comment("签名时间")] public DateTime? SignTime { get; set; } public DateTime? SuggesteFinishedTime { get; set; } [Comment("是否是重阅产生的,方便过滤数据")] public bool IsReReadingCreate { get; set; } [Comment("PM 对该任务进行了回退 影响的任务不设置")] public bool IsPMSetBack { get; set; } [Comment("裁判结果的任务ID")] public Guid? JudgeResultTaskId { get; set; } [Comment("随访任务号 取访视的号 计划外是 访视+0.1 裁判任务在访视任务上+0.002 全局任务在截止访视号上+0.03 肿瘤待定")] public decimal VisitTaskNum { get; set; } [Comment("首次阅片时间")] public DateTime? FirstReadingTime { get; set; } [Comment("全局是否有更新")] public bool? IsGlobalHaveUpdate { get; set; } [Comment("IR是否阅读临床数据")] public bool IsReadClinicalData { get; set; } = false; [Comment("关联的访视任务ID (当前任务是访视任务的话会有自己)")] [StringLength(2000)] public string RelatedVisitTaskIds { get; set; } = "[]"; [Comment("报告任务关系 包含冻结")] [StringLength(2000)] public string ReportRelatedTaskIds { get; set; } = "[]"; [Comment("既往任务Id 不包括自己")] [StringLength(2000)] public string PastResultTaskIds { get; set; } = "[]"; #region 裁判任务特有 [JsonIgnore] [Comment("对于裁判任务而言,触发裁判的列表")] public List JudgeVisitList { get; set; } [Comment("裁判结果的备注")] public string JudgeResultRemark { get; set; } = string.Empty; [Comment("裁判结果的图片路径")] [StringLength(1000)] public string JudgeResultImagePath { get; set; } = string.Empty; #endregion #region 一致性分析的任务特有数据 [Comment("阅片结果是否和原数据有差异")] public bool? IsAnalysisDiffToOriginalData { get; set; } [Comment("组件一致性和原Arm1是否有差异")] public bool? IsGroupDiffArm1 { get; set; } [Comment("组件一致性和原Arm2是否有差异")] public bool? IsGroupDiffArm2 { get; set; } [Comment("是否是一致性分析产生")] public bool IsAnalysisCreate { get; set; } [Comment("转换之前的任务Id(转化的任务才有该值)")] public Guid? BeforeConvertedTaskId { get; set; } [Projectable] [JsonIgnore] public bool IsConvertedTask => BeforeConvertedTaskId != null || IsHistoryConvertedTask || Subject.SubjectVisitTaskList.Where(t => t.TrialReadingCriterionId == TrialReadingCriterionId && t.DoctorUserId == DoctorUserId && t.BeforeConvertedTaskId != null && t.TaskState == TaskState.Effect && t.VisitTaskNum < VisitTaskNum && t.IsSelfAnalysis == IsSelfAnalysis && t.ArmEnum == ArmEnum ).Any(); [Comment("是否修改了整体肿瘤评估")] public bool IsChangeTumorEvaluate { get; set; } = false; [Comment("重阅重置任务的 标注是转化之前的 还是转化之后的")] public bool IsHistoryConvertedTask { get; set; } = false; [Comment("是否是自身一致性")] public bool? IsSelfAnalysis { get; set; } public string BlindSubjectCode { get; set; } = string.Empty; public string BlindTrialSiteCode { get; set; } = string.Empty; [Comment("针对产生的一致性任务而言,这个字段存储的是原始任务")] public Guid? ConsistentAnalysisOriginalTaskId { get; set; } #endregion [Comment("临床数据")] public bool IsNeedClinicalDataSign { get; set; } [Comment("临床数据是否签名")] public bool IsClinicalDataSign { get; set; } [Comment("前序任务需要签名 但是未签名")] public bool IsFrontTaskNeedSignButNotSign { get; set; } public int ImageStudyState { get; set; } }