297 lines
9.3 KiB
C#
297 lines
9.3 KiB
C#
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<ReadingTaskQuestionMark> ReadingTaskQuestionMarkList { get; set; }
|
||
|
||
[JsonIgnore]
|
||
public List<TaskStudy> TaskStudyList { get; set; }
|
||
|
||
public List<NoneDicomStudyFile> TaskNoneDicomStudyFileList { get; set; }
|
||
|
||
[JsonIgnore]
|
||
[ForeignKey("TrialReadingCriterionId")]
|
||
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
|
||
[ForeignKey("DoctorUserId")]
|
||
public UserRole 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<TaskMedicalReview> TaskMedicalReviewList { get; set; }
|
||
|
||
[ForeignKey("JudgeResultTaskId")]
|
||
public VisitTask JudgeResultTask { get; set; }
|
||
[Comment("影像质量 等等第一层级问题答案")]
|
||
[JsonIgnore]
|
||
public List<ReadingTaskQuestionAnswer> ReadingTaskQuestionAnswerList { get; set; } = new List<ReadingTaskQuestionAnswer>();
|
||
[Comment("病灶表")]
|
||
[JsonIgnore]
|
||
public List<ReadingTableAnswerRowInfo> LesionList { get; set; } = new List<ReadingTableAnswerRowInfo>();
|
||
|
||
[Comment("重阅或者退回影像的记录中间表")]
|
||
[JsonIgnore]
|
||
public List<TaskInfluence> TaskInfluenceList { get; set; } = new List<TaskInfluence>();
|
||
[JsonIgnore]
|
||
[Comment("对于全局任务而言 才可以用的 关联的访视阅片结果")]
|
||
public List<ReadingGlobalTaskInfo> GlobalVisitResultList { get; set; } = new List<ReadingGlobalTaskInfo>();
|
||
[Comment("裁判结果图片地址")]
|
||
[NotMapped]
|
||
public List<string> JudgeResultImagePathList
|
||
{
|
||
get
|
||
{
|
||
|
||
try
|
||
{
|
||
return this.JudgeResultImagePath.Trim().Split(',').ToList();
|
||
}
|
||
catch (Exception)
|
||
{
|
||
|
||
return new List<string>();
|
||
}
|
||
|
||
}
|
||
}
|
||
[JsonIgnore]
|
||
|
||
public Trial Trial { get; set; }
|
||
[JsonIgnore]
|
||
public List<UserFeedBack> UserFeedBackList { get; set; }
|
||
|
||
[Comment("关联的访视任务ID (当前任务是访视任务的话会有自己)集合")]
|
||
[NotMapped]
|
||
public List<Guid> RelatedVisitTaskIdList
|
||
{
|
||
get
|
||
{
|
||
|
||
try
|
||
{
|
||
|
||
return JsonConvert.DeserializeObject<List<Guid>>(this.RelatedVisitTaskIds);
|
||
}
|
||
catch (Exception)
|
||
{
|
||
|
||
return new List<Guid>();
|
||
}
|
||
|
||
}
|
||
}
|
||
[Comment("报告任务关系 包含冻结")]
|
||
[NotMapped]
|
||
public List<Guid> ReportRelatedTaskIdList
|
||
{
|
||
get
|
||
{
|
||
|
||
try
|
||
{
|
||
|
||
return JsonConvert.DeserializeObject<List<Guid>>(this.ReportRelatedTaskIds);
|
||
}
|
||
catch (Exception)
|
||
{
|
||
|
||
return new List<Guid>();
|
||
}
|
||
|
||
}
|
||
}
|
||
[Comment("既往任务Id 不包括自己集合")]
|
||
[NotMapped]
|
||
public List<Guid> PastResultTaskIdList
|
||
{
|
||
get
|
||
{
|
||
|
||
try
|
||
{
|
||
return JsonConvert.DeserializeObject<List<Guid>>(this.PastResultTaskIds);
|
||
}
|
||
catch (Exception)
|
||
{
|
||
|
||
return new List<Guid>();
|
||
}
|
||
|
||
}
|
||
}
|
||
#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.02 全局任务在截止访视号上+0.03 肿瘤0.06")]
|
||
|
||
[DecimalPrecision(18,2)]
|
||
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<VisitTask> 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; }
|
||
|
||
[Comment("通知IR加急阅片时间")]
|
||
public DateTime? ExpetidEmailNoticeTime { get; set; }
|
||
|
||
[Comment("退回原因")]
|
||
public string PMBackReason { get; set; }
|
||
}
|