-- 物业 AI HR 对练记录最小表结构。 -- ponytail: one session table covers history, review list and profile aggregation for MVP. CREATE TABLE IF NOT EXISTS `aihr_case_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `case_id` varchar(80) NOT NULL COMMENT '案例ID', `file_name` varchar(255) DEFAULT NULL COMMENT '来源文件', `project_ext_org_id` varchar(100) DEFAULT NULL COMMENT '项目外部组织ID', `title` varchar(120) DEFAULT NULL COMMENT '标题', `type` varchar(80) DEFAULT NULL COMMENT '案例类型', `status` varchar(30) DEFAULT '已转写' COMMENT '状态', `transcript` text DEFAULT NULL COMMENT 'ASR转写', `summary` varchar(1000) DEFAULT NULL COMMENT '摘要', `learning_points` text DEFAULT NULL COMMENT '案例学习点JSON', `supervisor_comment` varchar(1000) DEFAULT NULL COMMENT '主管点评', `media_oss_id` bigint DEFAULT NULL COMMENT '原始音频OSS文件ID', `media_url` varchar(500) DEFAULT NULL COMMENT '原始音频访问地址', `owner` varchar(80) DEFAULT '培训组' COMMENT '负责人', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_case_record_case` (`tenant_id`, `case_id`), KEY `idx_aihr_case_record_status` (`tenant_id`, `status`, `update_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 案例沉淀记录'; CREATE TABLE IF NOT EXISTS `aihr_practice_session` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `session_id` varchar(100) NOT NULL COMMENT '训练会话ID', `ext_party_id` varchar(100) DEFAULT NULL COMMENT '外部主体或手机号', `trainee_name` varchar(100) DEFAULT NULL COMMENT '学员名称', `scenario_id` varchar(80) DEFAULT NULL COMMENT '场景ID', `scenario_name` varchar(100) DEFAULT NULL COMMENT '场景名称', `position_snapshot` varchar(80) DEFAULT NULL COMMENT '训练开始时岗位快照', `project_type_snapshot` varchar(80) DEFAULT NULL COMMENT '训练开始时项目类型快照', `growth_level` varchar(20) DEFAULT NULL COMMENT '训练开始时成长层级快照', `competency_code` varchar(100) DEFAULT NULL COMMENT '训练开始时能力项快照', `collaboration_positions` varchar(500) DEFAULT NULL COMMENT '训练开始时协同岗位快照', `curriculum_version` varchar(30) DEFAULT NULL COMMENT '训练开始时成长目录版本快照', `growth_confirmation_level` varchar(20) DEFAULT NULL COMMENT '主管确认可进入的训练层级', `growth_confirmed_by` varchar(100) DEFAULT NULL COMMENT '训练层级确认主管', `growth_confirmed_time` datetime DEFAULT NULL COMMENT '训练层级确认时间', `mode` varchar(30) DEFAULT 'text' COMMENT '训练模式', `total_score` int DEFAULT NULL COMMENT '总分', `dim_task_completion` int DEFAULT NULL COMMENT '任务完成度分', `dim_response_timeliness` int DEFAULT NULL COMMENT '响应时效分', `response_latency_ms` int DEFAULT NULL COMMENT '平均陪练响应时长毫秒', `dim_compliance` int DEFAULT NULL COMMENT '合规分', `dim_emotion` int DEFAULT NULL COMMENT '情绪分', `dim_communication` int DEFAULT NULL COMMENT '沟通分', `dim_marketing` int DEFAULT NULL COMMENT '营销分', `rubric_code` varchar(100) DEFAULT NULL COMMENT '训练开始时评分规则编码', `rubric_version` varchar(30) DEFAULT NULL COMMENT '训练开始时评分规则版本', `rubric_snapshot_json` text DEFAULT NULL COMMENT '训练开始时评分规则快照', `mentor_rewrite` varchar(1000) DEFAULT NULL COMMENT '导师改写', `ai_comment` varchar(1000) DEFAULT NULL COMMENT 'AI点评', `review_advice` varchar(1000) DEFAULT NULL COMMENT '主管复盘建议', `incentive_point` int DEFAULT NULL COMMENT '主管人工贡献分', `satisfaction_score` tinyint DEFAULT NULL COMMENT '员工训练满意度1-5分', `satisfaction_comment` varchar(500) DEFAULT NULL COMMENT '员工训练满意度意见', `summary` varchar(1000) DEFAULT NULL COMMENT '摘要', `dialogue_json` text DEFAULT NULL COMMENT '对练话术JSON', `annotations_json` text DEFAULT NULL COMMENT '逐句标注JSON', `trust_curve` varchar(100) DEFAULT NULL COMMENT '信任曲线', `status` varchar(30) DEFAULT '待复盘' COMMENT '状态', `started_time` datetime DEFAULT NULL COMMENT '开始时间', `finished_time` datetime DEFAULT NULL COMMENT '完成时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_practice_session` (`tenant_id`, `session_id`), KEY `idx_aihr_practice_party` (`tenant_id`, `ext_party_id`, `finished_time`), KEY `idx_aihr_practice_review` (`tenant_id`, `mode`, `status`, `finished_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练记录'; CREATE TABLE IF NOT EXISTS `aihr_practice_help_event` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `session_id` varchar(100) NOT NULL COMMENT '训练会话ID', `scenario_id` varchar(80) NOT NULL COMMENT '训练场景ID', `ext_party_id` varchar(100) DEFAULT NULL COMMENT '员工外部主体ID', `round_index` int NOT NULL DEFAULT 0 COMMENT '求助时所在回合', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_aihr_practice_help_session` (`tenant_id`, `session_id`, `create_time`), KEY `idx_aihr_practice_help_party` (`tenant_id`, `ext_party_id`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 训练求助事件'; CREATE TABLE IF NOT EXISTS `aihr_practice_annotation` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `session_id` varchar(100) NOT NULL COMMENT '训练会话ID', `turn_index` int NOT NULL COMMENT '话术序号', `source_text` varchar(1000) DEFAULT NULL COMMENT '原话', `issue_text` varchar(1000) DEFAULT NULL COMMENT '问题点', `rewrite_text` varchar(1000) DEFAULT NULL COMMENT '推荐改写', `sop_point` varchar(1000) DEFAULT NULL COMMENT '命中或漏掉的SOP点', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_practice_annotation` (`tenant_id`, `session_id`, `turn_index`), KEY `idx_aihr_practice_annotation_session` (`tenant_id`, `session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练逐句标注'; CREATE TABLE IF NOT EXISTS `aihr_practice_audio` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `session_id` varchar(100) NOT NULL COMMENT '训练会话ID', `turn_index` int NOT NULL COMMENT '话术序号', `role` varchar(30) NOT NULL COMMENT '音频角色', `oss_id` bigint DEFAULT NULL COMMENT 'OSS文件ID', `audio_url` varchar(1000) DEFAULT NULL COMMENT '音频URL', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_practice_audio` (`tenant_id`, `session_id`, `turn_index`, `role`), KEY `idx_aihr_practice_audio_session` (`tenant_id`, `session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练音频'; CREATE TABLE IF NOT EXISTS `aihr_practice_audio_upload` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `oss_id` bigint NOT NULL COMMENT 'OSS文件ID', `owner_user_id` bigint NOT NULL COMMENT '上传用户ID', `owner_identity` varchar(100) NOT NULL COMMENT '上传主体', `audio_url` varchar(1000) DEFAULT NULL COMMENT '音频URL', `status` varchar(20) NOT NULL DEFAULT 'staged' COMMENT 'staged/bound', `expires_time` datetime NOT NULL COMMENT '过期时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_practice_audio_upload` (`tenant_id`, `oss_id`), KEY `idx_aihr_practice_audio_upload_expire` (`tenant_id`, `status`, `expires_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练音频上传暂存'; CREATE TABLE IF NOT EXISTS `aihr_practice_assignment` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `ext_party_id` varchar(100) NOT NULL COMMENT '员工外部主体或手机号', `trainee_name` varchar(100) DEFAULT NULL COMMENT '员工姓名', `scenario_id` varchar(80) NOT NULL COMMENT '场景ID', `scenario_name` varchar(100) DEFAULT NULL COMMENT '场景名称', `source` varchar(30) NOT NULL DEFAULT 'manual' COMMENT '来源 daily/camp/retry/manual', `reason` varchar(500) DEFAULT NULL COMMENT '派发原因', `task_goal` varchar(200) DEFAULT NULL COMMENT '训练目标', `task_requirements` varchar(500) DEFAULT NULL COMMENT '任务要求', `due_time` datetime DEFAULT NULL COMMENT '截止时间', `status` varchar(30) NOT NULL DEFAULT '待训练' COMMENT '状态', `due_date` date DEFAULT NULL COMMENT '训练截止日期', `request_key` varchar(100) DEFAULT NULL COMMENT '客户端幂等请求ID', `answer_text` varchar(1000) DEFAULT NULL COMMENT '每日三题作答', `answer_audio_url` varchar(500) DEFAULT NULL COMMENT '每日三题语音回放地址', `answer_audio_oss_id` bigint DEFAULT NULL COMMENT '每日三题语音OSS编号', `feedback` varchar(1000) DEFAULT NULL COMMENT '每日三题反馈', `correct` tinyint DEFAULT NULL COMMENT '是否答对', `score` int DEFAULT NULL COMMENT '每日三题得分', `score_mode` varchar(30) DEFAULT NULL COMMENT '评分模式 LLM/RULE_FALLBACK', `finished_time` datetime DEFAULT NULL COMMENT '完成时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_assignment_request` (`tenant_id`, `request_key`, `ext_party_id`), KEY `idx_aihr_assignment_party` (`tenant_id`, `ext_party_id`, `status`, `create_time`), KEY `idx_aihr_assignment_source` (`tenant_id`, `source`, `status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练派发任务'; CREATE TABLE IF NOT EXISTS `aihr_practice_calibration` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `session_id` varchar(100) NOT NULL COMMENT '训练会话ID', `reviewer` varchar(100) DEFAULT NULL COMMENT '校准人', `original_score` int DEFAULT NULL COMMENT 'AI原始总分', `corrected_score` int DEFAULT NULL COMMENT '人工校准总分', `corrected_dimensions_json` text DEFAULT NULL COMMENT '校准维度JSON', `reason` varchar(500) DEFAULT NULL COMMENT '校准原因', `status` varchar(30) DEFAULT '已记录' COMMENT '状态', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_aihr_calibration_session` (`tenant_id`, `session_id`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 评分校准记录'; CREATE TABLE IF NOT EXISTS `aihr_practice_scenario` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `scenario_code` varchar(80) NOT NULL COMMENT '场景编码', `scenario_name` varchar(100) NOT NULL COMMENT '场景名称', `position` varchar(80) NOT NULL COMMENT '岗位', `scenario_type` varchar(50) NOT NULL COMMENT '场景类型', `project_type` varchar(80) DEFAULT NULL COMMENT '项目类型', `difficulty` tinyint DEFAULT 1 COMMENT '难度', `growth_level` varchar(20) NOT NULL DEFAULT '初级' COMMENT '训练成长层级:初级/中级/高级', `competency_code` varchar(100) NOT NULL DEFAULT '待归类' COMMENT '岗位能力项编码;由内容运营归入固定矩阵', `collaboration_positions` varchar(500) NOT NULL DEFAULT '' COMMENT '协同岗位,使用中文顿号分隔', `review_status` varchar(20) NOT NULL DEFAULT '草稿' COMMENT '内容状态:草稿/待业务审核/已发布/已下线', `risk_level` varchar(20) NOT NULL DEFAULT '待评估' COMMENT '内容风险:待评估/常规/高风险', `reviewer` varchar(100) DEFAULT NULL COMMENT '首位内容审核操作人', `reviewer_user_id` bigint DEFAULT NULL COMMENT '首位内容审核人稳定用户ID', `reviewed_time` datetime DEFAULT NULL COMMENT '首位内容审核时间', `second_reviewer` varchar(100) DEFAULT NULL COMMENT '高风险内容第二位审核操作人', `second_reviewer_user_id` bigint DEFAULT NULL COMMENT '高风险内容第二位审核人稳定用户ID', `second_reviewed_time` datetime DEFAULT NULL COMMENT '高风险内容第二位审核时间', `customer_persona` varchar(500) DEFAULT NULL COMMENT '业主人设', `opening_text` varchar(500) DEFAULT NULL COMMENT '开场白', `explicit_need` varchar(300) DEFAULT NULL COMMENT '显性诉求', `hidden_need` varchar(300) DEFAULT NULL COMMENT '隐性诉求', `irritants` varchar(500) DEFAULT NULL COMMENT '雷点', `delights` varchar(500) DEFAULT NULL COMMENT '爽点', `sop_refs` varchar(500) DEFAULT NULL COMMENT 'SOP引用', `success_criteria` varchar(500) DEFAULT NULL COMMENT '成功条件', `strategy` varchar(500) DEFAULT NULL COMMENT '训练策略', `goal` varchar(500) DEFAULT NULL COMMENT '训练目标', `curriculum_version` varchar(30) NOT NULL DEFAULT '住宅五岗-v1' COMMENT '成长目录版本', `trainee_name` varchar(100) DEFAULT '张三' COMMENT '默认学员', `trust_start` int DEFAULT 60 COMMENT '起始信任', `trust_end` int DEFAULT 80 COMMENT '目标信任', `rounds_json` text DEFAULT NULL COMMENT '回合seed JSON', `content_version` varchar(30) NOT NULL DEFAULT 'v1.0' COMMENT '内容版本', `content_hash` char(64) DEFAULT NULL COMMENT '内容快照哈希', `enabled` tinyint DEFAULT 1 COMMENT '是否启用', `sort_order` int DEFAULT 0 COMMENT '排序', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_practice_scenario` (`tenant_id`, `scenario_code`), KEY `idx_aihr_practice_scenario_filter` (`tenant_id`, `position`, `scenario_type`, `enabled`, `sort_order`), KEY `idx_aihr_practice_scenario_curriculum` (`tenant_id`, `position`, `growth_level`, `competency_code`, `review_status`, `enabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练场景'; CREATE TABLE IF NOT EXISTS `aihr_practice_rubric` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `rubric_code` varchar(100) NOT NULL COMMENT 'Rubric编码', `scenario_code` varchar(80) NOT NULL COMMENT '场景编码', `rubric_name` varchar(100) NOT NULL COMMENT 'Rubric名称', `version` varchar(30) DEFAULT 'v1' COMMENT '版本', `enabled` tinyint DEFAULT 1 COMMENT '是否启用', `description` varchar(500) DEFAULT NULL COMMENT '说明', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_practice_rubric` (`tenant_id`, `rubric_code`), KEY `idx_aihr_practice_rubric_scenario` (`tenant_id`, `scenario_code`, `enabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练评分标准'; CREATE TABLE IF NOT EXISTS `aihr_practice_rubric_dimension` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `rubric_code` varchar(100) NOT NULL COMMENT 'Rubric编码', `dimension_code` varchar(50) NOT NULL COMMENT '维度编码', `dimension_name` varchar(50) NOT NULL COMMENT '维度名称', `weight` decimal(5,2) NOT NULL COMMENT '权重', `description` varchar(500) DEFAULT NULL COMMENT '评分说明', `sort_order` int DEFAULT 0 COMMENT '排序', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_practice_rubric_dimension` (`tenant_id`, `rubric_code`, `dimension_code`), KEY `idx_aihr_practice_rubric_dimension` (`tenant_id`, `rubric_code`, `sort_order`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 对练评分维度'; CREATE TABLE IF NOT EXISTS `aihr_prompt_template` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `code` varchar(80) NOT NULL COMMENT '模板编码', `name` varchar(100) NOT NULL COMMENT '模板名称', `category` varchar(50) NOT NULL COMMENT '业务分类', `output_format` varchar(50) NOT NULL COMMENT '输出文体', `system_prompt` text DEFAULT NULL COMMENT '系统提示词', `template` text NOT NULL COMMENT '用户提示词模板', `variables` varchar(1000) DEFAULT NULL COMMENT '变量清单', `version` varchar(30) DEFAULT 'v1' COMMENT '版本', `enabled` tinyint DEFAULT 1 COMMENT '是否启用', `description` varchar(500) DEFAULT NULL COMMENT '说明', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_prompt_template` (`tenant_id`, `code`, `output_format`, `version`), KEY `idx_aihr_prompt_template_enabled` (`tenant_id`, `code`, `enabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 提示词模板'; CREATE TABLE IF NOT EXISTS `aihr_knowledge_gap` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `query_text` varchar(1000) NOT NULL COMMENT '未命中问题', `category` varchar(100) DEFAULT NULL COMMENT '知识分类', `position` varchar(80) DEFAULT NULL COMMENT '岗位', `source` varchar(50) DEFAULT 'knowledge_search' COMMENT '来源', `status` varchar(30) DEFAULT '待补充' COMMENT '状态', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_aihr_knowledge_gap_status` (`tenant_id`, `status`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 知识缺口日志'; CREATE TABLE IF NOT EXISTS `aihr_sop_answer_review` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `query_text` varchar(1000) NOT NULL COMMENT '问题', `category` varchar(100) DEFAULT NULL COMMENT '知识分类', `answer_text` varchar(2000) DEFAULT NULL COMMENT '回答', `reference_text` varchar(1000) DEFAULT NULL COMMENT '引用', `snippet_count` int DEFAULT 0 COMMENT '命中片段数', `source` varchar(50) DEFAULT 'knowledge_search' COMMENT '来源', `requester_ext_party_id` varchar(100) DEFAULT NULL COMMENT '提问员工外部主体ID', `prompt_version` varchar(80) DEFAULT NULL COMMENT '答案生成提示词版本', `usable` tinyint DEFAULT NULL COMMENT '人工评审是否可用', `reviewer` varchar(100) DEFAULT NULL COMMENT '评审人', `note` varchar(500) DEFAULT NULL COMMENT '评审备注', `status` varchar(30) DEFAULT '待评审' COMMENT '状态', `reviewed_time` datetime DEFAULT NULL COMMENT '评审时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_aihr_sop_answer_review_status` (`tenant_id`, `status`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR SOP问答人工评审'; CREATE TABLE IF NOT EXISTS `aihr_knowledge_answer_feedback` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `query_text` varchar(1000) NOT NULL COMMENT '问题原文', `query_norm` varchar(500) NOT NULL COMMENT '规范化问题', `fragment_id` bigint NOT NULL COMMENT '知识片段ID', `verdict` varchar(10) NOT NULL COMMENT '反馈: up/down', `category` varchar(100) DEFAULT NULL COMMENT '知识分类', `position` varchar(80) DEFAULT NULL COMMENT '岗位', `source` varchar(50) DEFAULT 'knowledge_search' COMMENT '来源', `review_id` bigint DEFAULT NULL COMMENT '对应SOP问答评审ID', `review_status` varchar(30) DEFAULT '待复核' COMMENT '复核状态', `reviewer` varchar(100) DEFAULT NULL COMMENT '复核人', `reviewed_time` datetime DEFAULT NULL COMMENT '复核时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_answer_feedback_pair` (`tenant_id`, `query_norm`, `fragment_id`), KEY `idx_aihr_answer_feedback_verdict` (`tenant_id`, `query_norm`, `fragment_id`, `verdict`), KEY `idx_aihr_answer_feedback_review` (`tenant_id`, `review_status`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 知识答案反馈'; INSERT INTO `aihr_practice_scenario` (`tenant_id`, `scenario_code`, `scenario_name`, `position`, `scenario_type`, `project_type`, `difficulty`, `customer_persona`, `opening_text`, `explicit_need`, `hidden_need`, `irritants`, `delights`, `sop_refs`, `success_criteria`, `strategy`, `goal`, `trainee_name`, `trust_start`, `trust_end`, `rounds_json`, `enabled`, `sort_order`, `create_time`, `update_time`) VALUES ('000000', 'complaint-water', '客服应对投诉', '生活顾问', '投诉处理', '住宅', 2, '高情绪、追问进度、质疑服务的业主', '你们说今天处理,到现在都没人联系我,这个车库还怎么停?', '投诉车库积水未处理', '想确认物业是否持续跟进', '被敷衍、只讲流程、推给工程', '先安抚、给责任人、给首次反馈时间', '投诉处理SOP;高情绪沟通话术', '先承接情绪,确认点位,给责任人与首次反馈时间,说明升级路径', '仅在漏关键步骤时提示', '训练学员先安抚、再确认诉求,并给出责任人和首次反馈时间。', '张三', 68, 82, '[{"customer":"你们说今天处理,到现在都没人联系我,这个车库还怎么停?","coachHint":"命中安抚、责任人、首次反馈时间后继续追问处理承诺。","emotion":76,"trust":75},{"customer":"我不要流程,我要知道如果今天还处理不好怎么办。","coachHint":"补上升级路径和兜底承诺,可以进入评分。","emotion":64,"trust":82}]', 1, 10, NOW(), NOW()), ('000000', 'complaint-noise', '楼上噪音投诉', '生活顾问', '投诉处理', '住宅', 2, '长期受扰、睡眠受影响、对物业不信任的业主', '楼上每天晚上拖椅子,你们物业到底管不管?', '投诉夜间噪音', '希望物业持续跟踪而不是一次性劝说', '让业主自己协商、说没有执法权、不给反馈节点', '先共情睡眠影响、承诺核实、给回访时间', '噪音投诉SOP;邻里协调SOP', '记录时间段和房号,说明核实方式,约定首次沟通和回访时间', '提示不要先讲权限边界', '训练生活顾问在权限边界内给出可执行跟进。', '张三', 60, 80, '[{"customer":"楼上每天晚上拖椅子,你们物业到底管不管?","coachHint":"先承接睡眠受影响,再收集时间段和楼栋房号。","emotion":78,"trust":66},{"customer":"你别又说去问问,我要看到结果。","coachHint":"给出上门/电话沟通和回访节点,避免空泛承诺。","emotion":70,"trust":80}]', 1, 20, NOW(), NOW()), ('000000', 'complaint-attitude', '服务态度投诉', '生活顾问', '投诉处理', '住宅', 1, '对前台态度不满、要求道歉的业主', '你们前台刚才那是什么态度?我要投诉。', '投诉服务态度', '希望被尊重并看到内部改进', '替同事辩解、追问业主责任、让业主冷静', '先道歉、复述问题、承诺核查和反馈', '服务投诉SOP;客户情绪安抚', '表达歉意,记录经过,明确核查责任人和反馈时限', '提示先道歉不等于先定责', '训练生活顾问把道歉、核查和后续反馈拆开说清。', '张三', 62, 82, '[{"customer":"你们前台刚才那是什么态度?我要投诉。","coachHint":"先为体验道歉,再记录时间、地点和涉及岗位。","emotion":74,"trust":68},{"customer":"你是不是想包庇你同事?","coachHint":"强调会客观核查并按节点反馈,不做现场定责。","emotion":66,"trust":82}]', 1, 30, NOW(), NOW()), ('000000', 'fee-collection', '催缴沟通技巧', '生活顾问', '催费/停车费', '住宅', 2, '拒绝缴费、质疑服务、要求先整改的业主', '服务做成这样还让我缴费?你先把问题解决了再说。', '物业费催缴', '希望服务问题被负责到底', '压缴费、忽略服务问题、威胁停服务', '承接问题、争议复核、缴费与整改并行', '催缴沟通SOP;费用争议处理', '拆分费用和服务问题,说明复核、整改跟进和缴费节点', '提示服务改进与缴费并行', '训练学员把费用沟通和服务整改拆开处理,避免激化争议。', '张三', 61, 76, '[{"customer":"服务做成这样还让我缴费?你先把问题解决了再说。","coachHint":"表达方向正确,但要补争议项复核和责任人。","emotion":72,"trust":68},{"customer":"那我怎么知道你不是随便记一下?","coachHint":"补上主管复核和节点同步,可以进入评分。","emotion":66,"trust":76}]', 1, 40, NOW(), NOW()), ('000000', 'fee-parking', '停车费催缴', '生活顾问', '催费/停车费', '住宅', 2, '对停车费涨价敏感、担心权益受损的业主', '停车费又催,我车位入口问题一直没解决,凭什么交?', '停车费缴费提醒', '希望停车体验问题同步解决', '只重复收费规则、否认问题、催得太硬', '先记录停车问题、说明费用依据、给处理节点', '停车费催缴SOP;停车场服务SOP', '说明费用依据,记录入口问题,给整改反馈时间和缴费办理方式', '提示先服务后收费说明', '训练收费季停车费沟通时的共情和政策表达。', '张三', 58, 78, '[{"customer":"停车费又催,我车位入口问题一直没解决,凭什么交?","coachHint":"先确认入口问题,再说明费用依据和复核方式。","emotion":75,"trust":65},{"customer":"你说的优惠和截止时间到底是什么?","coachHint":"把折扣、截止时间和办理路径一次说清。","emotion":62,"trust":78}]', 1, 50, NOW(), NOW()), ('000000', 'fee-prepay-discount', '预交折扣沟通', '生活顾问', '催费/停车费', '住宅', 2, '精打细算、关注优惠边界和历史欠费的业主', '你们说预交有折扣,那我以前欠的怎么算?', '预交折扣咨询', '希望弄清优惠、欠费和办理路径', '含糊优惠口径、承诺无法兑现、回避欠费', '先说明以系统账单为准、再给办理路径', '预交折扣SOP;历史欠费沟通', '解释预交折扣、历史欠费处理口径和办理材料', '提示金额必须以系统账单为准', '训练收费季预交优惠和历史欠费的稳妥表达。', '张三', 65, 84, '[{"customer":"你们说预交有折扣,那我以前欠的怎么算?","coachHint":"先说明金额以系统账单为准,避免口头承诺具体金额。","emotion":60,"trust":72},{"customer":"我要今天就知道能省多少钱。","coachHint":"给出查询路径和反馈时间,不现场编金额。","emotion":58,"trust":84}]', 1, 60, NOW(), NOW()), ('000000', 'repair-leak-followup', '漏水报修跟进', '生活顾问', '报修跟进', '住宅', 2, '家中受损、担心维修拖延和赔偿的业主', '我家天花还在滴水,报修两天了怎么没人来?', '漏水报修跟进', '希望明确上门时间和后续责任', '只说已派单、不给时限、回避损失记录', '确认安全、给上门时间、记录受损情况', '报修跟进SOP;漏水应急SOP', '确认漏水现状,安排上门节点,记录损失并同步责任人', '提示先排安全风险', '训练报修跟进中的时限、责任人和证据记录。', '张三', 57, 81, '[{"customer":"我家天花还在滴水,报修两天了怎么没人来?","coachHint":"先确认是否仍在漏水和用电安全,再给上门安排。","emotion":77,"trust":64},{"customer":"如果家具泡坏了谁负责?","coachHint":"说明先记录现场和照片,后续按责任认定处理。","emotion":69,"trust":81}]', 1, 70, NOW(), NOW()), ('000000', 'repair-elevator-delay', '电梯故障跟进', '生活顾问', '报修跟进', '住宅', 3, '住高层、老人出行受影响、要求明确恢复时间的业主', '电梯坏了一上午,老人怎么下楼?你们给个准话。', '电梯故障跟进', '希望知道预计恢复和临时协助', '只说维保在路上、没有临时方案、不给播报', '先共情出行影响、说明维保进展、提供临时协助', '电梯故障SOP;应急协助SOP', '说明维保进展、预计反馈时间、老人出行临时协助和公告节奏', '提示不要承诺未经确认的恢复时间', '训练高影响报修的进展播报和临时协助。', '张三', 55, 80, '[{"customer":"电梯坏了一上午,老人怎么下楼?你们给个准话。","coachHint":"先承接老人出行影响,再说明维保进展和下一次反馈。","emotion":80,"trust":62},{"customer":"你就说几点能好。","coachHint":"不能编恢复时间,要承诺确认后反馈并给临时协助。","emotion":72,"trust":80}]', 1, 80, NOW(), NOW()), ('000000', 'repair-public-light', '公区照明维修', '生活顾问', '报修跟进', '住宅', 1, '晚上回家担心安全、希望小问题快处理的业主', '楼道灯坏了三天,晚上黑漆漆的。', '公区照明维修', '希望确认维修时间', '轻视小问题、不给工单、让业主等', '记录点位、给工单和处理时限', '公区维修SOP;夜间安全巡查', '记录楼栋楼层点位,说明派单和反馈时间', '提示给出工单闭环', '训练轻量报修也要闭环表达。', '张三', 66, 86, '[{"customer":"楼道灯坏了三天,晚上黑漆漆的。","coachHint":"记录准确点位,并给派单和预计反馈时间。","emotion":62,"trust":76},{"customer":"别又登记完没下文。","coachHint":"补充工单编号或责任人和回访时间。","emotion":56,"trust":86}]', 1, 90, NOW(), NOW()), ('000000', 'emergency-water-outage', '突发停水求助', '生活顾问', '突发求助', '住宅', 2, '家中有老人小孩、对突发停水焦虑的业主', '家里突然没水了,孩子还要洗澡,怎么回事?', '突发停水求助', '希望知道原因和临时供水办法', '不知道原因就乱猜、只让等待、不给通知渠道', '先核实范围、同步排查、提供临时取水信息', '停水应急SOP;突发通知SOP', '核实是否区域性停水,说明排查进展、通知渠道和临时方案', '提示未知原因时说排查中', '训练突发问题的原因核实和临时安置表达。', '张三', 60, 83, '[{"customer":"家里突然没水了,孩子还要洗澡,怎么回事?","coachHint":"先核实楼栋范围,不要猜测原因。","emotion":73,"trust":68},{"customer":"那现在怎么办?总不能一直等。","coachHint":"给临时取水点或下一次公告时间。","emotion":65,"trust":83}]', 1, 100, NOW(), NOW()), ('000000', 'emergency-elder-fall', '老人摔倒求助', '生活顾问', '突发求助', '住宅', 3, '情绪慌张、需要立即协助的家属', '我爸在楼下摔倒了,你们快来帮忙!', '老人摔倒求助', '希望物业迅速到场并联系救助', '先追责、慢吞吞登记、忽略急救安全', '先确认位置和意识状态、派人到场、建议急救电话', '突发救助SOP;急救协助SOP', '确认位置和安全状态,派人到场,提醒拨打急救电话并联系家属', '提示物业协助不替代专业急救', '训练高紧急求助中的优先级和措辞。', '张三', 52, 79, '[{"customer":"我爸在楼下摔倒了,你们快来帮忙!","coachHint":"先问清准确位置和意识状态,同时安排人员到场。","emotion":88,"trust":60},{"customer":"你们到了能不能处理?","coachHint":"说明会协助保护现场和联系急救,不替代医生判断。","emotion":78,"trust":79}]', 1, 110, NOW(), NOW()), ('000000', 'emergency-security', '陌生人尾随求助', '生活顾问', '突发求助', '住宅', 3, '夜间回家、感到被尾随、需要安全协助的业主', '我刚进小区感觉有人跟着我,你们保安在哪里?', '安全求助', '希望马上获得陪同和安全确认', '要求业主自己确认、轻描淡写、泄露巡逻盲区', '先确认位置、安排安保、保持通话或引导到安全点', '安全巡逻SOP;突发求助SOP', '确认实时位置,安排安保接应,引导到明亮公共区域并保留记录', '提示不要透露安防盲区', '训练夜间安全求助的接警式沟通。', '张三', 54, 82, '[{"customer":"我刚进小区感觉有人跟着我,你们保安在哪里?","coachHint":"先确认当前位置和是否安全,安排安保接应。","emotion":86,"trust":62},{"customer":"我要不要直接回家?","coachHint":"引导到明亮公共区域或岗亭,保持联系。","emotion":76,"trust":82}]', 1, 120, NOW(), NOW()), ('000000', 'service-promotion-needs', '增值服务需求识别与推介', '生活顾问', '服务推介/增值', '住宅', 2, '关注生活品质、但对营销话术敏感的业主', '最近家里老人要长期出门,社区有没有更方便的生活服务?', '识别真实需求并介绍适配的增值服务', '希望得到有用建议而不是被强行推销', '不问需求就罗列产品、夸大承诺、把推介当成收费催促', '先确认家庭场景和预算,再介绍适配服务并说明价格与取消规则', '增值服务推介SOP;客户需求识别SOP', '先提问确认需求,再说明服务适用范围、价格口径和后续咨询路径', '提示不得编造优惠、效果或未确认的服务承诺', '训练生活顾问在真实需求基础上完成合规的增值服务介绍。', '张三', 63, 84, '[{"customer":"我不喜欢被推销,你先说这个服务到底能解决什么问题。","coachHint":"先复述业主需求,再说明适用场景,不要直接报一串产品。","emotion":68,"trust":72},{"customer":"那具体多少钱?可以随时取消吗?","coachHint":"金额和取消规则必须以正式价目与合同口径为准,不能现场编造。","emotion":58,"trust":84}]', 1, 130, NOW(), NOW()), ('000000', 'daily-service-followup', '日常服务主动回访', '生活顾问', '日常服务', '住宅', 1, '刚办理过服务、希望有人持续跟进的业主', '上次你们帮我处理完了,我想知道后面还会有人跟进吗?', '完成日常服务回访与问题闭环', '希望被持续关注,避免问题处理后无人回应', '只说已经完成、不给回访节点、不记录新的服务需求', '确认结果是否满足、记录新问题、约定回访节点并留下服务记录', '日常服务回访SOP;服务闭环SOP', '确认满意度和遗留问题,明确责任人、回访时间和记录方式', '提示已完成不等于已闭环,必须确认业主感受和后续动作', '训练生活顾问把一次性服务延伸为有记录、有节点的日常回访。', '张三', 66, 85, '[{"customer":"事情是处理了,但我不知道以后有问题找谁。","coachHint":"确认当前结果和遗留问题,给出明确联系人和回访节点。","emotion":62,"trust":74},{"customer":"那你们会记下来吗?别下次又要从头说。","coachHint":"说明服务记录和后续跟进方式,避免只做口头承诺。","emotion":54,"trust":85}]', 1, 140, NOW(), NOW()) ON DUPLICATE KEY UPDATE `scenario_name` = VALUES(`scenario_name`), `position` = VALUES(`position`), `scenario_type` = VALUES(`scenario_type`), `project_type` = VALUES(`project_type`), `difficulty` = VALUES(`difficulty`), `customer_persona` = VALUES(`customer_persona`), `opening_text` = VALUES(`opening_text`), `explicit_need` = VALUES(`explicit_need`), `hidden_need` = VALUES(`hidden_need`), `irritants` = VALUES(`irritants`), `delights` = VALUES(`delights`), `sop_refs` = VALUES(`sop_refs`), `success_criteria` = VALUES(`success_criteria`), `strategy` = VALUES(`strategy`), `goal` = VALUES(`goal`), `trainee_name` = VALUES(`trainee_name`), `trust_start` = VALUES(`trust_start`), `trust_end` = VALUES(`trust_end`), `rounds_json` = VALUES(`rounds_json`), `enabled` = VALUES(`enabled`), `sort_order` = VALUES(`sort_order`), `update_time` = VALUES(`update_time`); -- 此文件仅用于全新开发库初始化;内置种子只是待审核素材,不能从 enabled 推断为正式发布。 -- 新增/编辑内容必须走审核状态流转后才向员工可见。 UPDATE `aihr_practice_scenario` SET `risk_level` = CASE WHEN CONCAT_WS('\n', `scenario_name`, `scenario_type`, `customer_persona`, `opening_text`, `explicit_need`, `hidden_need`, `irritants`, `delights`, `sop_refs`, `success_criteria`, `strategy`, `goal`, `rounds_json`) REGEXP '投诉|客诉|纠纷|收费|催费|费用|停车费|退款|减免|安全|事故|消防|燃气|漏电|电梯|高空|受伤|人身伤害|舆情' THEN '高风险' WHEN `risk_level` IS NULL OR `risk_level` = '' OR `risk_level` NOT IN ('待评估', '常规', '高风险') THEN '待评估' ELSE `risk_level` END, `review_status` = CASE WHEN `review_status` IS NULL OR `review_status` = '' OR `review_status` = '草稿' THEN '待业务审核' WHEN `review_status` = '已发布' AND (`competency_code` IS NULL OR `competency_code` = '' OR `competency_code` = '待归类' OR `risk_level` = '待评估' OR (`risk_level` = '高风险' AND (`reviewer_user_id` IS NULL OR `second_reviewer_user_id` IS NULL))) THEN '待业务审核' ELSE `review_status` END, -- 重跑初始化脚本时不得清空“待业务审核”中的首审记录;高风险场景可能正等待第二人复核。 -- 草稿没有有效审核结论,才允许清除其历史审核字段。 `reviewer` = CASE WHEN `review_status` = '草稿' THEN NULL ELSE `reviewer` END, `reviewer_user_id` = CASE WHEN `review_status` = '草稿' THEN NULL ELSE `reviewer_user_id` END, `reviewed_time` = CASE WHEN `review_status` = '草稿' THEN NULL ELSE `reviewed_time` END, `second_reviewer` = CASE WHEN `review_status` = '草稿' THEN NULL ELSE `second_reviewer` END, `second_reviewer_user_id` = CASE WHEN `review_status` = '草稿' THEN NULL ELSE `second_reviewer_user_id` END, `second_reviewed_time` = CASE WHEN `review_status` = '草稿' THEN NULL ELSE `second_reviewed_time` END, `curriculum_version` = COALESCE(NULLIF(`curriculum_version`, ''), '住宅五岗-v1') WHERE `tenant_id` = '000000'; INSERT INTO `aihr_practice_rubric` (`tenant_id`, `rubric_code`, `scenario_code`, `rubric_name`, `version`, `enabled`, `description`, `create_time`, `update_time`) SELECT `tenant_id`, CONCAT('rubric-', `scenario_code`), `scenario_code`, CONCAT(`scenario_name`, ' Rubric'), 'v1', 1, '生活顾问试点五维评分标准', NOW(), NOW() FROM `aihr_practice_scenario` WHERE `tenant_id` = '000000' ON DUPLICATE KEY UPDATE `rubric_name` = VALUES(`rubric_name`), `scenario_code` = VALUES(`scenario_code`), `enabled` = VALUES(`enabled`), `description` = VALUES(`description`), `update_time` = VALUES(`update_time`); INSERT INTO `aihr_practice_rubric_dimension` (`tenant_id`, `rubric_code`, `dimension_code`, `dimension_name`, `weight`, `description`, `sort_order`, `create_time`, `update_time`) SELECT r.`tenant_id`, r.`rubric_code`, d.`dimension_code`, d.`dimension_name`, d.`weight`, d.`description`, d.`sort_order`, NOW(), NOW() FROM `aihr_practice_rubric` r JOIN `aihr_practice_scenario` s ON s.`tenant_id` = r.`tenant_id` AND s.`scenario_code` = r.`scenario_code` JOIN ( SELECT 'task_completion' AS `dimension_code`, '任务完成度' AS `dimension_name`, 0.40 AS `weight`, '问题解决有效性、工单闭环率、首解率、SOP关键点执行率' AS `description`, 10 AS `sort_order` UNION ALL SELECT 'standardization', '话术规范性', 0.25, '流程完整性、法规引用准确性、沟通合规、用语专业度', 20 UNION ALL SELECT 'emotion', '情绪管理能力', 0.20, '共情、语速语气控制、业主情绪引导安抚有效性', 30 UNION ALL SELECT 'response_timeliness', '响应时效', 0.10, '首响时长、处理周期、跟进频率', 40 UNION ALL SELECT 'marketing', '增值转化潜力', 0.05, '活动引导、产品推介时机与成功率', 50 ) d WHERE r.`tenant_id` = '000000' ON DUPLICATE KEY UPDATE `dimension_name` = VALUES(`dimension_name`), `weight` = VALUES(`weight`), `description` = VALUES(`description`), `sort_order` = VALUES(`sort_order`), `update_time` = VALUES(`update_time`); INSERT INTO `aihr_prompt_template` (`tenant_id`, `code`, `name`, `category`, `output_format`, `system_prompt`, `template`, `variables`, `version`, `enabled`, `description`, `create_time`, `update_time`) VALUES ('000000', 'summary_card', 'SOP总结卡', 'knowledge', 'json_card', '你是物业一线员工的SOP总结卡助手。只返回JSON,不要markdown。固定输出title、steps、objections、scripts、reminders。steps必须且只包含问题、建议、标准三项。', '员工问题:{{queryText}}。知识片段:{{context}}。请生成可拆分展示的总结卡,问题写员工当前要处理的核心问题,建议写下一步动作,标准写SOP依据和红线。', 'queryText,context', 'v1', 1, '总结卡固定问题/建议/标准三段式', NOW(), NOW()), ('000000', 'sop_answer', 'SOP问答直给', 'knowledge', 'json_answer', '你是物业一线员工的SOP助手。只返回 JSON,不要 markdown。字段固定为 answer, keyPoints, cautions。answer 必须结论先行,60字内直接告诉员工现在怎么做;keyPoints 必须是3到5条可执行步骤,每条以「一、」「二、」「三、」「四、」「五、」开头,包含责任人、动作、时限或留痕要求;cautions 是0到3条注意事项或红线。引用片段由系统后置展示,不要在 answer 中堆大段原文。硬约束:只能基于给定片段内容作答,片段中没有的信息不得编造;若片段无法回答问题,answer 固定为「未在已入库 SOP 中找到明确依据」且 keyPoints 为空数组。', '员工的问题:{{queryText}}\n\n检索命中的 SOP 片段:\n{{context}}', 'queryText,context', 'v1', 1, 'SOP问答结论先行+编号步骤+引用后置', NOW(), NOW()), ('000000', 'mentor_rewrite', '导师改写', 'practice', 'text', '你是物业管家带教师傅。只基于本场对话给出一段更稳妥的话术,不评价人格。', '场景:{{scenarioName}}。目标:{{goal}}。员工原话:{{traineeText}}。请改写成可直接说出口的版本,80字以内。', 'scenarioName,goal,traineeText', 'v1', 1, '训练后标杆话术生成', NOW(), NOW()), ('000000', 'review_annotation', '逐句标注', 'practice', 'json_annotation', '你是物业AI陪练复盘教练。只返回JSON数组,每项包含quote、problem、rewrite、sopPoint。', '场景:{{scenarioName}}。Rubric:{{rubric}}。对话:{{dialogue}}。请只标注员工关键句,指出问题、推荐改写和命中或漏掉的SOP点。', 'scenarioName,rubric,dialogue', 'v1', 1, 'finish后逐句标注', NOW(), NOW()), ('000000', 'prep_card', '训练前预习卡', 'practice', 'json_prep', '你是物业培训教练。只返回JSON,字段固定为keyPoints、redLines、scripts。', '场景:{{scenarioName}}。SOP引用:{{sopRefs}}。成功条件:{{successCriteria}}。请生成训练前预习卡:要点3条、红线3条、可说话术2条。', 'scenarioName,sopRefs,successCriteria', 'v1', 1, '训练前卡固定三栏结构', NOW(), NOW()), ('000000', 'supervision_image_analysis_maintenance', '图片督导分析', 'supervision', 'json_card', '你是物业现场督导助手。只返回JSON,字段固定为problem、suggestion、standard。', '图片/视频描述:{{visualText}}。相关标准:{{standard}}。请按问题、建议、标准三段输出,不要扩写无依据内容。', 'visualText,standard', 'v1', 1, '督导图片分析三段式', NOW(), NOW()) ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `category` = VALUES(`category`), `system_prompt` = VALUES(`system_prompt`), `template` = VALUES(`template`), `variables` = VALUES(`variables`), `enabled` = VALUES(`enabled`), `description` = VALUES(`description`), `update_time` = VALUES(`update_time`); -- 岗位职责、SOP 适用范围、入职任务和资格门禁正式结构。 -- 不写入业务数据;与 update/aihr_20260715_position_sop_qualification_mysql8.sql 保持一致。 CREATE TABLE IF NOT EXISTS `aihr_position_responsibility` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号', `position_code` varchar(80) NOT NULL COMMENT '岗位编码', `responsibility_text` varchar(1000) NOT NULL COMMENT '岗位职责', `sop_id` bigint DEFAULT NULL COMMENT '关联SOP主键(跨模块引用)', `sop_code` varchar(100) DEFAULT NULL COMMENT '关联SOP编码', `enabled` tinyint NOT NULL DEFAULT 1 COMMENT '是否启用', `effective_from` date DEFAULT NULL COMMENT '生效日期', `effective_thru` date DEFAULT NULL COMMENT '失效日期', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_position_responsibility` (`tenant_id`, `position_code`, `sop_code`), KEY `idx_aihr_position_responsibility_status` (`tenant_id`, `position_code`, `enabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 岗位职责与SOP挂载'; CREATE TABLE IF NOT EXISTS `aihr_sop_applicability` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号', `sop_id` bigint DEFAULT NULL COMMENT '关联SOP主键(跨模块引用)', `sop_code` varchar(100) DEFAULT NULL COMMENT '关联SOP编码', `project_type` varchar(80) DEFAULT NULL COMMENT '项目类型:住宅/公建/景区等', `industry` varchar(80) DEFAULT NULL COMMENT '行业分类', `org_scope` varchar(500) DEFAULT NULL COMMENT '适用组织/项目范围编码,不存展示姓名', `enabled` tinyint NOT NULL DEFAULT 1 COMMENT '是否启用', `effective_from` date DEFAULT NULL COMMENT '生效日期', `effective_thru` date DEFAULT NULL COMMENT '失效日期', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_aihr_sop_applicability_sop` (`tenant_id`, `sop_id`, `sop_code`), KEY `idx_aihr_sop_applicability_scope` (`tenant_id`, `project_type`, `industry`, `enabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR SOP适用范围'; CREATE TABLE IF NOT EXISTS `aihr_onboard_task` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号', `ext_party_id` varchar(100) NOT NULL COMMENT '员工外部主体ID,不复制姓名', `project_code` varchar(100) DEFAULT NULL COMMENT '项目编码', `position_code` varchar(80) DEFAULT NULL COMMENT '岗位编码', `sop_id` bigint DEFAULT NULL COMMENT '关联SOP主键(跨模块引用)', `course_id` bigint DEFAULT NULL COMMENT '关联课程主键(跨模块引用)', `task_type` varchar(20) NOT NULL COMMENT '任务类型:岗前/入职', `status` varchar(30) NOT NULL DEFAULT '待完成' COMMENT '待完成/进行中/已完成/已取消', `assign_by` varchar(100) DEFAULT NULL COMMENT '派发人外部主体或系统标识', `assigned_time` datetime DEFAULT NULL COMMENT '派发时间', `due_time` datetime DEFAULT NULL COMMENT '截止时间', `completed_time` datetime DEFAULT NULL COMMENT '完成时间', `evidence_ref` varchar(500) DEFAULT NULL COMMENT '完成证据引用', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_aihr_onboard_task_party` (`tenant_id`, `ext_party_id`, `status`, `create_time`), KEY `idx_aihr_onboard_task_scope` (`tenant_id`, `project_code`, `position_code`, `task_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 岗前/入职培训任务'; CREATE TABLE IF NOT EXISTS `aihr_qualification_gate` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号', `ext_party_id` varchar(100) NOT NULL COMMENT '员工外部主体ID,不复制姓名', `project_code` varchar(100) DEFAULT NULL COMMENT '项目编码', `position_code` varchar(80) NOT NULL COMMENT '岗位编码', `cert_id` varchar(100) NOT NULL COMMENT '资格/证书编码', `passed` tinyint NOT NULL DEFAULT 0 COMMENT '是否通过', `valid_thru` date DEFAULT NULL COMMENT '有效期至', `evidence_ref` varchar(500) DEFAULT NULL COMMENT '资格证据引用', `reviewer` varchar(100) DEFAULT NULL COMMENT '复核人外部主体或系统标识', `reviewed_time` datetime DEFAULT NULL COMMENT '复核时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_qualification_gate` (`tenant_id`, `ext_party_id`, `project_code`, `position_code`, `cert_id`), KEY `idx_aihr_qualification_gate_status` (`tenant_id`, `position_code`, `passed`, `valid_thru`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 上岗资格门禁';