package com.emoon.chat.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 医疗记录质控结果表 (medical_record_result) 实体类
 * 用于存储AI或人工对各类病历文书的质控评审结果。
 * </p>
 *
 * @author han
 * @since 2025-12-17
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("medical_record_result") // MyBatis-Plus 注解：指定表名
public class MedicalRecordResult implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键 ID（32位字符串）
     */
    @TableId(type = IdType.ASSIGN_ID)
    private String id;

    /**
     * 病历记录ID（外键，对应 patient_record.id）
     */
    @TableField("patient_record_id")
    private String patientRecordId;

    /**
     * 质控开始时间
     */
    @TableField("qc_start_time")
    private LocalDateTime qcStartTime;

    /**
     * 质控完成时间
     */
    @TableField("qc_end_time")
    private LocalDateTime qcEndTime;

    /**
     * 质控结果：0 不通过，1 通过
     */
    @TableField("qc_result")
    private Integer qcResult;

    /**
     * 质控类型：
     * 0 入院记录
     * 1 首次病程记录
     * 2 查房记录
     * 3 手术记录
     * 4 检验报告
     * 5 检查报告
     * 6 医嘱记录
     * 7 出院小结
     * 8 各类知情同意书
     */
    @TableField("qc_type")
    private Integer qcType;

    /**
     * 质控评分（如：95分，A级等）
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @TableField("qc_score")
    private String qcScore;

    /**
     * 质控评审意见（可存储违规项、原因、建议等JSON字符串）
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @TableField("qc_comments")
    private String qcComments;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @TableField("qc_review_comments")
    private String qcReviewComments;

    /**
     * 质控评审员姓名（AI质控可填“AI质控系统”）
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @TableField("qc_name")
    private String qcName;

    /**
     * 创建时间（自动更新）
     */
    @TableField(value = "create_date", fill = FieldFill.INSERT)
    private LocalDateTime createDate;

    // ========================
    // 静态常量：方便代码中使用
    // ========================

    /**
     * 质控类型常量 - 入院记录
     */
    public static final Integer QC_TYPE_ADMISSION_NOTE = 0;

    /**
     * 质控类型常量 - 首次病程记录
     */
    public static final Integer QC_TYPE_FIRST_COURSE = 1;

    /**
     * 质控结果常量 - 通过
     */
    public static final Integer QC_RESULT_PASS = 1;

    /**
     * 质控结果常量 - 不通过
     */
    public static final Integer QC_RESULT_FAIL = 0;

    /**
     * 默认质控人名称
     */
    public static final String DEFAULT_QC_NAME = "AI质控系统";

}
