更新
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
-- 医助服务模块:仅新增独立表,不修改既有诊单、处方和提醒状态语义。
|
||||
-- 幂等建表;执行前核实实际前缀。依赖现有 zyt_tcm_diagnosis_todo。
|
||||
CREATE TABLE IF NOT EXISTS `zyt_assistant_service_record` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
|
||||
`diagnosis_id` int unsigned NOT NULL,
|
||||
`patient_id` int unsigned NOT NULL DEFAULT 0,
|
||||
`actor_id` int unsigned NOT NULL,
|
||||
`content` text NOT NULL,
|
||||
`record_type` varchar(32) NOT NULL,
|
||||
`speaker_confirmed` tinyint unsigned NOT NULL DEFAULT 0,
|
||||
`occurred_at` int unsigned NOT NULL,
|
||||
`created_at` int unsigned NOT NULL,
|
||||
`delete_time` int unsigned DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_diagnosis_occurred` (`diagnosis_id`,`occurred_at`),
|
||||
KEY `idx_actor` (`actor_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='医助人工服务记录与核对转写';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zyt_assistant_service_job` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
|
||||
`diagnosis_id` int unsigned NOT NULL,
|
||||
`patient_id` int unsigned NOT NULL DEFAULT 0,
|
||||
`actor_id` int unsigned NOT NULL,
|
||||
`type` varchar(16) NOT NULL,
|
||||
`scenario` varchar(16) NOT NULL,
|
||||
`days` int unsigned NOT NULL DEFAULT 30,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'queued',
|
||||
`version` int unsigned NOT NULL DEFAULT 1,
|
||||
`dedupe_key` char(64) NOT NULL,
|
||||
`source_hash` char(64) NOT NULL,
|
||||
`scope_hash` char(64) NOT NULL,
|
||||
`payload_json` mediumtext NOT NULL,
|
||||
`result_json` mediumtext DEFAULT NULL,
|
||||
`claim_token` varchar(64) NOT NULL DEFAULT '',
|
||||
`lease_until` int unsigned NOT NULL DEFAULT 0,
|
||||
`error_code` varchar(64) NOT NULL DEFAULT '',
|
||||
`error_message` varchar(255) NOT NULL DEFAULT '',
|
||||
`upstream_id` varchar(191) NOT NULL DEFAULT '',
|
||||
`created_at` int unsigned NOT NULL,
|
||||
`updated_at` int unsigned NOT NULL,
|
||||
`finished_at` int unsigned NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_dedupe` (`dedupe_key`),
|
||||
KEY `idx_queue` (`status`,`created_at`,`id`),
|
||||
KEY `idx_lease` (`status`,`lease_until`),
|
||||
KEY `idx_diagnosis` (`diagnosis_id`,`created_at`),
|
||||
KEY `idx_actor_day` (`actor_id`,`created_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='医助AI持久任务与版本化结果';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zyt_assistant_service_review` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
|
||||
`job_id` bigint unsigned NOT NULL,
|
||||
`item_key` varchar(64) NOT NULL,
|
||||
`reviewer_id` int unsigned NOT NULL,
|
||||
`decision` varchar(32) NOT NULL,
|
||||
`note` varchar(1000) NOT NULL DEFAULT '',
|
||||
`created_at` int unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_job_item` (`job_id`,`item_key`,`id`),
|
||||
KEY `idx_reviewer` (`reviewer_id`,`created_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='医助服务质检人工复核历史';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zyt_assistant_service_action` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
|
||||
`diagnosis_id` int unsigned NOT NULL,
|
||||
`job_id` bigint unsigned NOT NULL,
|
||||
`action_key` varchar(64) NOT NULL,
|
||||
`todo_id` bigint unsigned NOT NULL,
|
||||
`assignee_id` int unsigned NOT NULL,
|
||||
`content` varchar(1000) NOT NULL,
|
||||
`due_at` int unsigned NOT NULL,
|
||||
`business_state` varchar(20) NOT NULL DEFAULT 'pending',
|
||||
`completion_note` varchar(1000) NOT NULL DEFAULT '',
|
||||
`completed_at` int unsigned NOT NULL DEFAULT 0,
|
||||
`created_at` int unsigned NOT NULL,
|
||||
`updated_at` int unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_job_action` (`job_id`,`action_key`),
|
||||
UNIQUE KEY `uk_todo` (`todo_id`),
|
||||
KEY `idx_assignee_state_due` (`assignee_id`,`business_state`,`due_at`),
|
||||
KEY `idx_diagnosis` (`diagnosis_id`,`created_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='服务动作执行状态,独立于提醒发送状态';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zyt_assistant_service_knowledge` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
|
||||
`question` varchar(300) NOT NULL,
|
||||
`answer` text NOT NULL,
|
||||
`category` varchar(64) NOT NULL,
|
||||
`source_note` varchar(1000) NOT NULL DEFAULT '',
|
||||
`status` varchar(16) NOT NULL DEFAULT 'draft',
|
||||
`version` int unsigned NOT NULL DEFAULT 1,
|
||||
`created_by` int unsigned NOT NULL,
|
||||
`published_by` int unsigned NOT NULL DEFAULT 0,
|
||||
`created_at` int unsigned NOT NULL,
|
||||
`updated_at` int unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_status` (`status`,`id`),
|
||||
KEY `idx_category` (`category`,`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审核后发布的医助服务知识';
|
||||
@@ -0,0 +1,42 @@
|
||||
-- 独立医助服务菜单与权限;可重复执行,不覆盖已有自定义授权。
|
||||
START TRANSACTION;
|
||||
INSERT INTO `zyt_system_menu` (`pid`,`type`,`name`,`icon`,`sort`,`perms`,`paths`,`component`,`selected`,`params`,`is_cache`,`is_show`,`is_disable`,`create_time`,`update_time`)
|
||||
SELECT 0,'M','医助服务','el-icon-Service',790,'','assistant_service','','','',0,1,0,UNIX_TIMESTAMP(),UNIX_TIMESTAMP()
|
||||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `zyt_system_menu` WHERE `pid`=0 AND `paths`='assistant_service');
|
||||
SET @as_root=(SELECT id FROM `zyt_system_menu` WHERE pid=0 AND paths='assistant_service' ORDER BY id LIMIT 1);
|
||||
INSERT INTO `zyt_system_menu` (`pid`,`type`,`name`,`icon`,`sort`,`perms`,`paths`,`component`,`selected`,`params`,`is_cache`,`is_show`,`is_disable`,`create_time`,`update_time`)
|
||||
SELECT @as_root,'C','服务工作台','el-icon-List',20,'tcm.assistantService/view','workbench','assistant_service/workbench/index','','',0,1,0,UNIX_TIMESTAMP(),UNIX_TIMESTAMP()
|
||||
FROM DUAL WHERE @as_root IS NOT NULL AND NOT EXISTS (SELECT 1 FROM `zyt_system_menu` WHERE `perms`='tcm.assistantService/view');
|
||||
INSERT INTO `zyt_system_menu` (`pid`,`type`,`name`,`icon`,`sort`,`perms`,`paths`,`component`,`selected`,`params`,`is_cache`,`is_show`,`is_disable`,`create_time`,`update_time`)
|
||||
SELECT @as_root,'C','服务知识','el-icon-Reading',10,'tcm.assistantService/manageKnowledge','knowledge','assistant_service/knowledge/index','','',0,1,0,UNIX_TIMESTAMP(),UNIX_TIMESTAMP()
|
||||
FROM DUAL WHERE @as_root IS NOT NULL AND NOT EXISTS (SELECT 1 FROM `zyt_system_menu` WHERE `perms`='tcm.assistantService/manageKnowledge');
|
||||
SET @as_workbench=(SELECT id FROM `zyt_system_menu` WHERE perms='tcm.assistantService/view' ORDER BY id LIMIT 1);
|
||||
INSERT INTO `zyt_system_menu` (`pid`,`type`,`name`,`icon`,`sort`,`perms`,`paths`,`component`,`selected`,`params`,`is_cache`,`is_show`,`is_disable`,`create_time`,`update_time`)
|
||||
SELECT @as_workbench,'A','生成服务分析','',0,'tcm.assistantService/analyze','','','','',0,0,0,UNIX_TIMESTAMP(),UNIX_TIMESTAMP()
|
||||
FROM DUAL WHERE @as_workbench IS NOT NULL AND NOT EXISTS (SELECT 1 FROM `zyt_system_menu` WHERE `perms`='tcm.assistantService/analyze');
|
||||
INSERT INTO `zyt_system_menu` (`pid`,`type`,`name`,`icon`,`sort`,`perms`,`paths`,`component`,`selected`,`params`,`is_cache`,`is_show`,`is_disable`,`create_time`,`update_time`)
|
||||
SELECT @as_workbench,'A','生成回复草稿','',0,'tcm.assistantService/draftReply','','','','',0,0,0,UNIX_TIMESTAMP(),UNIX_TIMESTAMP()
|
||||
FROM DUAL WHERE @as_workbench IS NOT NULL AND NOT EXISTS (SELECT 1 FROM `zyt_system_menu` WHERE `perms`='tcm.assistantService/draftReply');
|
||||
INSERT INTO `zyt_system_menu` (`pid`,`type`,`name`,`icon`,`sort`,`perms`,`paths`,`component`,`selected`,`params`,`is_cache`,`is_show`,`is_disable`,`create_time`,`update_time`)
|
||||
SELECT @as_workbench,'A','登记服务记录','',0,'tcm.assistantService/record','','','','',0,0,0,UNIX_TIMESTAMP(),UNIX_TIMESTAMP()
|
||||
FROM DUAL WHERE @as_workbench IS NOT NULL AND NOT EXISTS (SELECT 1 FROM `zyt_system_menu` WHERE `perms`='tcm.assistantService/record');
|
||||
INSERT INTO `zyt_system_menu` (`pid`,`type`,`name`,`icon`,`sort`,`perms`,`paths`,`component`,`selected`,`params`,`is_cache`,`is_show`,`is_disable`,`create_time`,`update_time`)
|
||||
SELECT @as_workbench,'A','采纳跟进动作','',0,'tcm.assistantService/adoptAction','','','','',0,0,0,UNIX_TIMESTAMP(),UNIX_TIMESTAMP()
|
||||
FROM DUAL WHERE @as_workbench IS NOT NULL AND NOT EXISTS (SELECT 1 FROM `zyt_system_menu` WHERE `perms`='tcm.assistantService/adoptAction');
|
||||
INSERT INTO `zyt_system_menu` (`pid`,`type`,`name`,`icon`,`sort`,`perms`,`paths`,`component`,`selected`,`params`,`is_cache`,`is_show`,`is_disable`,`create_time`,`update_time`)
|
||||
SELECT @as_workbench,'A','处理服务待办','',0,'tcm.assistantService/completeAction','','','','',0,0,0,UNIX_TIMESTAMP(),UNIX_TIMESTAMP()
|
||||
FROM DUAL WHERE @as_workbench IS NOT NULL AND NOT EXISTS (SELECT 1 FROM `zyt_system_menu` WHERE `perms`='tcm.assistantService/completeAction');
|
||||
INSERT INTO `zyt_system_menu` (`pid`,`type`,`name`,`icon`,`sort`,`perms`,`paths`,`component`,`selected`,`params`,`is_cache`,`is_show`,`is_disable`,`create_time`,`update_time`)
|
||||
SELECT @as_workbench,'A','复核服务质检','',0,'tcm.assistantService/reviewQuality','','','','',0,0,0,UNIX_TIMESTAMP(),UNIX_TIMESTAMP()
|
||||
FROM DUAL WHERE @as_workbench IS NOT NULL AND NOT EXISTS (SELECT 1 FROM `zyt_system_menu` WHERE `perms`='tcm.assistantService/reviewQuality');
|
||||
-- 一线及管理角色的工作台权限;root 由服务端显式识别。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`,`menu_id`)
|
||||
SELECT r.id,m.id FROM `zyt_system_role` r JOIN `zyt_system_menu` m
|
||||
ON (m.id=@as_root OR m.perms IN ('tcm.assistantService/view','tcm.assistantService/analyze','tcm.assistantService/draftReply','tcm.assistantService/record','tcm.assistantService/adoptAction','tcm.assistantService/completeAction'))
|
||||
WHERE r.delete_time IS NULL AND r.name IN ('医助','经理','诊室组长','管理员');
|
||||
-- 质检与知识发布仅授权管理角色。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`,`menu_id`)
|
||||
SELECT r.id,m.id FROM `zyt_system_role` r JOIN `zyt_system_menu` m
|
||||
ON m.perms IN ('tcm.assistantService/reviewQuality','tcm.assistantService/manageKnowledge')
|
||||
WHERE r.delete_time IS NULL AND r.name IN ('经理','诊室组长','管理员');
|
||||
COMMIT;
|
||||
Binary file not shown.
@@ -0,0 +1,49 @@
|
||||
-- 今日联系计划:仅记录真实来源的当日责任,不重建启用前历史,不改变提醒发送状态。
|
||||
-- MySQL 5.7 兼容;先执行 1.9.20261109 医助服务模块表迁移。核实实际表前缀后执行。
|
||||
CREATE TABLE IF NOT EXISTS `zyt_assistant_service_daily_contact` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
|
||||
`business_date` date NOT NULL COMMENT 'Asia/Shanghai 自然日',
|
||||
`assistant_id` int unsigned NOT NULL,
|
||||
`diagnosis_id` int unsigned NOT NULL,
|
||||
`patient_id` int unsigned NOT NULL DEFAULT 0,
|
||||
`source_type` varchar(16) NOT NULL COMMENT 'revisit/action',
|
||||
`source_id` bigint unsigned NOT NULL,
|
||||
`source_order_id` int unsigned NOT NULL DEFAULT 0 COMMENT '复诊原订单周期,动作固定0',
|
||||
`reason` varchar(200) NOT NULL DEFAULT '',
|
||||
`due_at` int unsigned NOT NULL DEFAULT 0,
|
||||
`state` varchar(16) NOT NULL DEFAULT 'active' COMMENT 'active/exempt,豁免不算完成',
|
||||
`exempt_reason` varchar(200) NOT NULL DEFAULT '',
|
||||
`created_at` int unsigned NOT NULL,
|
||||
`updated_at` int unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_day_source` (`business_date`,`assistant_id`,`source_type`,`source_id`,`source_order_id`),
|
||||
KEY `idx_day_staff_patient` (`business_date`,`assistant_id`,`patient_id`),
|
||||
KEY `idx_diagnosis_day` (`diagnosis_id`,`business_date`),
|
||||
KEY `idx_day_cursor` (`business_date`,`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='医助今日联系固化计划与来源豁免';
|
||||
|
||||
-- 旧泛化动作不能自动成为联系任务。已存在列时不重写既有取值。
|
||||
SET @daily_contact_column = (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'zyt_assistant_service_action' AND COLUMN_NAME = 'contact_required'
|
||||
);
|
||||
SET @daily_contact_sql = IF(@daily_contact_column = 0,
|
||||
'ALTER TABLE `zyt_assistant_service_action` ADD COLUMN `contact_required` tinyint unsigned NOT NULL DEFAULT 0 COMMENT ''人工采纳时明确要求联系患者''',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE daily_contact_stmt FROM @daily_contact_sql;
|
||||
EXECUTE daily_contact_stmt;
|
||||
DEALLOCATE PREPARE daily_contact_stmt;
|
||||
|
||||
-- 实际完成/取消操作者只记录今后的真实操作,0表示旧数据未知,禁止按负责人回填。
|
||||
SET @daily_contact_column = (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'zyt_assistant_service_action' AND COLUMN_NAME = 'completed_by'
|
||||
);
|
||||
SET @daily_contact_sql = IF(@daily_contact_column = 0,
|
||||
'ALTER TABLE `zyt_assistant_service_action` ADD COLUMN `completed_by` int unsigned NOT NULL DEFAULT 0 COMMENT ''实际完成或取消操作者,旧数据0未知''',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE daily_contact_stmt FROM @daily_contact_sql;
|
||||
EXECUTE daily_contact_stmt;
|
||||
DEALLOCATE PREPARE daily_contact_stmt;
|
||||
@@ -0,0 +1,26 @@
|
||||
-- 行为预警。只保存规则命中和摘录。channel 为 im 或 call。
|
||||
-- MySQL 5.7 兼容;可重复执行。核实实际表前缀后执行。
|
||||
CREATE TABLE IF NOT EXISTS `zyt_assistant_service_alert` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
|
||||
`staff_admin_id` int unsigned NOT NULL COMMENT '发消息时的员工账号,不按患者当前归属回填',
|
||||
`patient_id` int unsigned NOT NULL,
|
||||
`diagnosis_id` int unsigned NOT NULL DEFAULT 0 COMMENT '消息上的诊单,0表示当时没有可靠诊单',
|
||||
`channel` varchar(16) NOT NULL COMMENT 'im',
|
||||
`source_id` bigint unsigned NOT NULL COMMENT '来源表主键,企微文字为 0',
|
||||
`source_key` varchar(80) NOT NULL DEFAULT '' COMMENT '企微消息和患者组成的来源键',
|
||||
`rule_code` varchar(32) NOT NULL,
|
||||
`rule_version` smallint unsigned NOT NULL,
|
||||
`severity` varchar(16) NOT NULL COMMENT 'high/medium/low',
|
||||
`snippet` varchar(120) NOT NULL COMMENT '命中位置附近的摘录',
|
||||
`status` varchar(16) NOT NULL DEFAULT 'open' COMMENT 'open/confirmed/false_positive/followed',
|
||||
`reviewer_id` int unsigned NOT NULL DEFAULT 0,
|
||||
`review_note` varchar(200) NOT NULL DEFAULT '',
|
||||
`reviewed_at` int unsigned NOT NULL DEFAULT 0,
|
||||
`occurred_at` int unsigned NOT NULL,
|
||||
`created_at` int unsigned NOT NULL,
|
||||
`updated_at` int unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_channel_source_rule` (`channel`,`source_id`,`source_key`,`rule_code`),
|
||||
KEY `idx_status_time` (`status`,`occurred_at`,`id`),
|
||||
KEY `idx_staff_time` (`staff_admin_id`,`occurred_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='医助行为预警';
|
||||
@@ -0,0 +1,6 @@
|
||||
-- 行为预警接入企微聊天归档。已有库执行一次;新库用 02 建表即可。
|
||||
ALTER TABLE `zyt_assistant_service_alert`
|
||||
ADD COLUMN `source_key` varchar(80) NOT NULL DEFAULT '' COMMENT '企微消息和患者组成的来源键' AFTER `source_id`;
|
||||
ALTER TABLE `zyt_assistant_service_alert` DROP INDEX `uk_channel_source_rule`;
|
||||
ALTER TABLE `zyt_assistant_service_alert`
|
||||
ADD UNIQUE KEY `uk_channel_source_rule` (`channel`,`source_id`,`source_key`,`rule_code`);
|
||||
@@ -0,0 +1,4 @@
|
||||
-- 本地企微归档对不上患者或员工时,保留会话名和账号名。已有库执行一次。
|
||||
ALTER TABLE `zyt_assistant_service_alert`
|
||||
ADD COLUMN `external_staff` varchar(64) NOT NULL DEFAULT '' COMMENT '归档账号名,员工账号对不上时使用' AFTER `source_key`,
|
||||
ADD COLUMN `external_patient` varchar(64) NOT NULL DEFAULT '' COMMENT '归档会话名,患者对不上时使用' AFTER `external_staff`;
|
||||
Reference in New Issue
Block a user