You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于优先级分组的患者与个案经理均等分配及增量分配方案问询

患者-个案经理均等分配算法实现方案

核心思路

  • 按优先级(LOW/HIGH)拆分患者池与经理池,同优先级内独立执行分配逻辑
  • 保留历史分配关系,仅对新增未分配患者执行均衡分配
  • 通过追踪经理当前负责的活跃患者数量,确保同优先级内每位经理的负载尽可能均衡

数据表优化方案

1. 新增分配记录表(推荐方案)

不建议直接修改个案经理表,新增独立的PATIENT_ASSIGNMENT分配记录表,避免业务数据耦合:

字段名类型说明
ASSIGNMENT_ID自增主键分配记录唯一标识
PATIENTID外键关联患者表PATIENTID
CASE_MANAGER_ID外键关联个案经理表CASE MANAGER
ASSIGN_DATE日期时间分配执行时间
IS_ACTIVE布尔值标记患者是否仍需跟进(转归后设为FALSE)

2. 可选:经理表新增统计字段(实时计算优先)

如果一定要在个案经理表添加统计字段,可新增CURRENT_PATIENT_COUNT,但更推荐实时计算(避免数据同步不一致问题):

-- 实时统计LOW优先级经理的当前活跃患者数
SELECT cm.`CASE MANAGER`, COUNT(pa.PATIENTID) AS CURRENT_PATIENT_COUNT
FROM `CASE MANAGER` cm
LEFT JOIN PATIENT_ASSIGNMENT pa ON cm.`CASE MANAGER` = pa.CASE_MANAGER_ID AND pa.IS_ACTIVE = TRUE
WHERE cm.PRIORITY = 'LOW'
GROUP BY cm.`CASE MANAGER`;

每周执行的分配算法步骤

1. 筛选新增未分配患者

-- 获取近7天新增、未分配过的患者,按优先级分组
SELECT PATIENTID, PRIORITY
FROM PATIENT
WHERE PATIENTID NOT IN (SELECT PATIENTID FROM PATIENT_ASSIGNMENT)
AND CREATE_DATE >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);

2. 按优先级执行均衡分配

对LOW、HIGH两个优先级分别执行以下逻辑:

  • 步骤1:拉取该优先级下所有个案经理,以及他们当前负责的活跃患者数(通过分配表统计)
  • 步骤2:将新增患者按顺序分配给当前患者数最少的经理;若多名经理患者数相同,按经理ID升序轮询分配
  • 步骤3:将分配结果写入PATIENT_ASSIGNMENT表

示例伪代码

def assign_new_patients_weekly():
    # 获取本周新增未分配患者,按优先级分组
    new_patients = query_new_unassigned_patients()
    grouped_patients = group_patients_by_priority(new_patients)
    
    for priority, patients in grouped_patients.items():
        # 获取该优先级经理及当前活跃患者数
        managers = query_managers_with_patient_count(priority)
        # 按患者数升序、经理ID升序排序,确保先分配给负载最低的
        sorted_managers = sorted(managers, key=lambda x: (x['patient_count'], x['id']))
        
        # 轮询分配新增患者
        manager_idx = 0
        manager_count = len(sorted_managers)
        for patient in patients:
            target_manager = sorted_managers[manager_idx]
            # 写入分配记录
            save_assignment_record(patient['id'], target_manager['id'])
            # 内存中更新经理负载,避免重复查询数据库
            target_manager['patient_count'] += 1
            # 重新排序,确保下一位患者分配给当前负载最低的经理
            sorted_managers = sorted(sorted_managers, key=lambda x: (x['patient_count'], x['id']))
            # 若所有经理当前负载相同,直接轮询即可
            # manager_idx = (manager_idx + 1) % manager_count

关键注意事项

  • 数据一致性:优先通过分配表实时统计经理负载,若使用存储字段,需在每次分配后同步更新该字段
  • 患者转归处理:当患者无需继续跟进时,及时标记IS_ACTIVE = FALSE,避免统计无效数据影响分配均衡性
  • 性能优化:每周执行前可缓存各优先级经理的负载数据,减少数据库查询次数
  • 公平性保障:负载相同时采用固定规则(如经理ID升序)轮询,避免随机分配导致的长期负载不均

内容的提问来源于stack exchange,提问作者armsagainstatrophy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:05:22