-- 诊单待办事项（T5 - 2026-05-05）
-- 用途：医助在诊单上挂「将来要提醒自己的事」，到点由企微推送给创建人本人。
-- 设计：状态机 0=待执行 → 1=已发送（成功）/ 2=已取消（人工） / 3=发送失败（终态，不重试）
-- 索引说明：
--   idx_diagnosis_id          —— 编辑页/列表按诊单查询
--   idx_creator_id            —— 反查某 admin 创建过的待办（取消权限校验等）
--   idx_status_remind_time    —— 复合索引，cron 扫表「status=0 AND remind_time<=now」核心索引

CREATE TABLE IF NOT EXISTS `zyt_tcm_diagnosis_todo` (
    `id`            int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
    `diagnosis_id`  int(11) unsigned NOT NULL DEFAULT 0 COMMENT '所属诊单 id（zyt_tcm_diagnosis.id）',
    `patient_id`    int(11) unsigned NOT NULL DEFAULT 0 COMMENT '冗余患者 id，便于反查',
    `content`       varchar(500) NOT NULL DEFAULT '' COMMENT '提醒内容（企微推送正文）',
    `remind_time`   int(11) unsigned NOT NULL DEFAULT 0 COMMENT '提醒时间戳（秒）；cron 扫描 remind_time<=now',
    `status`        tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '状态：0=待执行 1=已发送 2=已取消 3=发送失败',
    `creator_id`    int(11) unsigned NOT NULL DEFAULT 0 COMMENT '创建人 admin.id（推送目标）',
    `creator_name`  varchar(64) NOT NULL DEFAULT '' COMMENT '创建人姓名快照',
    `notified_at`   int(11) unsigned NOT NULL DEFAULT 0 COMMENT '实际推送时间（成功时写入）',
    `error`         varchar(500) NOT NULL DEFAULT '' COMMENT '失败原因（status=3 时写入）',
    `cancelled_at`  int(11) unsigned NOT NULL DEFAULT 0 COMMENT '取消时间',
    `cancelled_by`  int(11) unsigned NOT NULL DEFAULT 0 COMMENT '取消人 admin.id',
    `create_time`   int(11) unsigned NOT NULL DEFAULT 0 COMMENT '创建时间',
    `update_time`   int(11) unsigned NOT NULL DEFAULT 0 COMMENT '更新时间',
    `delete_time`   int(11) unsigned NULL DEFAULT NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    KEY `idx_diagnosis_id` (`diagnosis_id`),
    KEY `idx_creator_id` (`creator_id`),
    KEY `idx_status_remind_time` (`status`, `remind_time`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '诊单待办事项（企微定时推送给创建人）';
