-- 智能分诊排队：候选池排除记录表
-- 用途：记录已从智能候选池中移除的患者（加入队列后不再出现在候选池）
-- 注意：必须在后端实际连接的 schema 中执行（dev环境是 hisdev，test环境是 histest，prd环境是 hisprd）
-- 执行前请先确认：SET search_path TO hisdev; （或对应的 schema）

CREATE TABLE IF NOT EXISTS hisdev.triage_candidate_exclusion (
    id               BIGSERIAL PRIMARY KEY,
    tenant_id        INTEGER      NOT NULL,
    exclusion_date   DATE         NOT NULL,
    encounter_id     BIGINT       NOT NULL,
    patient_id       BIGINT,
    patient_name     VARCHAR(255),
    organization_id  BIGINT,
    organization_name VARCHAR(255),
    reason           VARCHAR(100) DEFAULT 'ADDED_TO_QUEUE', -- 排除原因：ADDED_TO_QUEUE（加入队列）、MANUAL_REMOVE（手动移除）等
    create_time      TIMESTAMP    DEFAULT CURRENT_TIMESTAMP,
    update_time      TIMESTAMP    DEFAULT CURRENT_TIMESTAMP,
    delete_flag      CHAR(1)      NOT NULL DEFAULT '0'
);

-- 常用查询索引：按租户/日期/就诊记录查询
CREATE INDEX IF NOT EXISTS idx_triage_candidate_exclusion_list
    ON hisdev.triage_candidate_exclusion (tenant_id, exclusion_date, delete_flag, encounter_id);

-- 防重复：同一天同租户同就诊记录只能有一条排除记录（未删除）
CREATE UNIQUE INDEX IF NOT EXISTS uq_triage_candidate_exclusion_encounter
    ON hisdev.triage_candidate_exclusion (tenant_id, exclusion_date, encounter_id, delete_flag)
    WHERE delete_flag = '0';

-- 就诊记录ID索引（用于关联查询）
CREATE INDEX IF NOT EXISTS idx_triage_candidate_exclusion_encounter_id
    ON hisdev.triage_candidate_exclusion (encounter_id);

-- 注释
COMMENT ON TABLE hisdev.triage_candidate_exclusion IS '智能分诊排队候选池排除记录表';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.tenant_id IS '租户ID';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.exclusion_date IS '排除日期（通常为当天）';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.encounter_id IS '就诊记录ID（唯一标识）';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.patient_id IS '患者ID';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.patient_name IS '患者姓名';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.organization_id IS '科室ID';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.organization_name IS '科室名称';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.reason IS '排除原因：ADDED_TO_QUEUE（加入队列）、MANUAL_REMOVE（手动移除）等';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.delete_flag IS '删除标志：0-未删除，1-已删除';

