一种医院轮转排班方法与流程

文档序号:12469707阅读:3331来源:国知局

本发明属于医院排班系统技术领域,尤其涉及一种医院轮转排班方法。



背景技术:

传统的医院轮班的排班需要手动进行排班,人员较多的时候排班浪费时间,容易出错,造成多排人员的不满,产生不公平的现象。



技术实现要素:

本发明的目的是为了弥补已有技术的不足,提供一种医院轮转排班方法。

本发明是通过如下技术方案来实现的:

一种医院轮转排班方法,包括如下步骤:首先,建立同类型轮转人员排班初始矩阵;

步骤1、批量读入同类型轮转人员,并定义系统参数;

步骤2、定义轮转人员排班初始矩阵;

其次,读取排班条件及排班期列表;

步骤3、定义并读取排班条件数组;

步骤4、定义并读取排班期列表;

再次,对条件内科室进行排班;

步骤5、依次读取排班条件,将科室序列拆分读取形成数组;

步骤6、依次读取轮转人员信息,遍历排班矩阵,形成该轮转人员已排科室信息数组;

步骤7、将数组条件内科室数量与已排科室数量进行比较,形成轮转人员条件内已排科室数组;

步骤8、遍历数组,寻找轮转人员的可排班周期;

步骤9、定义条件内科室负担数组,每行分别存储科室ID、科室名称、科室类型ID、年、周期号、当前实际数、单周期最大数、科室负担比,其中科室负担比=当前实际数/单周期最大数,并按照科室负担比由低到高对数组进行排序;

步骤10、遍历数组,寻找适合的排班科室;

步骤11、根据参数、科室ID、科室名称,更新轮转人员排班矩阵及科室排班负担表。排班成功后,进行阶梯式下移,对下一个轮转人员的下一个排班周期进行安排;

最后,对排班矩阵中的空缺进行补充排班:

步骤12、按照轮转人员遍历数组,依次读取轮转人员信息;

步骤13、按照周期遍历轮转人员的排班信息,依次读取轮转人员的周期的排班情况;遍历所有人员的所有周期之后,完成排班。

本发明的有益效果:本发明有效解决了医院轮转人员的排班问题,产生了合理的排班序列,保证了轮转人员轮转要求的满足、单个科室不同期人员数量的平衡和各科室同期人员数量的平衡,并不再用手工进行繁琐的排班工作。

附图说明

图1为本发明的流程图。

具体实施方式

下面结合实施例对本发明做进一步说明。

实施例

如图1所示为本发明排班的流程图,具体包括以下步骤:

首先,建立同类型轮转人员排班初始矩阵:

步骤1、批量读入同类型轮转人员,并定义如下系统参数:

N:该批次轮转人员数量,

max_period:每年可轮转期数量,

begin_year:该批次轮转人员起始年,

begin_period:该批次轮转人员起始期,

end_year:该批次轮转人员结束年,

end_period:该批次轮转人员结束期,

M:该批次轮转人员总轮转期数,可由(式1)计算得到:

M=(end_year-begin_year)*max_period+end_period-begin_per iod+1 (式1);

步骤2、定义轮转人员排班初始矩阵:

student_schedule[N,M]:N人M期的排班初始矩阵;

其次,读取排班条件及排班期列表:

步骤3、定义并读取排班条件数组:

sArray_Condition[Count_Condition,4],其中Count_Condition为条件数量,sArray_Condition[Count_Condition,0]用于存储条件内科室序列,sArray_Condition[Count_Condition,1]用于存储条件内科室总安排周期,sArray_Condition[Count_Condition,2]用于存储条件内科室起始周期,sArray_Condition[Count_Condition,3]用于存储条件内单科室轮转周期;

步骤4、定义并读取排班期列表:

temp_Period[M,2]:其中M在步骤1中已定义,temp_Period[M,0]用于存储该期的年信息,temp_Period[M,1]用于存储该期的期信息;

再次,对条件内科室进行排班:

步骤5、依次读取第i_condition个排班条件,其中0≤i_condition<Count_Condition,并定义:

total_period=sArray_Condition[i_condition,1],

start_period=sArray_Condition[i_condition,2]-1,

dep_period=sArray_Condition[i_condition,3],

temp_flag=start_period,为排班指针,

sArray_Dep_temp[Count_Dep_temp,3],将sArray_Condition[i_condition,0]中的科室序列拆分读取形成数组,其中Count_Dep_temp为该条件内科室数量,sArray_Dep_temp[Count_Dep_temp,0]用于存储科室ID号,sArray_Dep_temp[Count_Dep_temp,1]用于存储科室名称,sArray_Dep_temp[Count_Dep_temp,2]用于存储科室类型ID;

步骤6、依次读取第i_student个轮转人员信息,0≤i_student<N,遍历排班矩阵第i_student行,形成该轮转人员已排科室信息数组sArray_Dep_Used[Count_Dep_Used,3],其中Count_Dep_Used为已排科室数量,sArray_Dep_Used[Count_Dep_Used,0]用于存储已排科室ID号,sArray_Dep_Used[Count_Dep_Used,1]用于存储已排科室名称,sArray_Dep_Used[Count_Dep_Used,2]用于存储已排科室类型ID;

步骤7、将数组sArray_Dep_temp与sArray_Dep_Used进行比较,形成第i_student个轮转人员条件内已排科室数组sArray_Dep_Used_in_condition[Count_Dep_Used_in_condition,3],其中Count_Dep_Used_in_condition为条件内已排科室数量,sArray_Dep_Used_in_condition[Count_Dep_Used_in_condition,0]用于存储科室ID号,sArray_Dep_Used_in_condition[Count_Dep_Used_in_condition,1]用于存储科室名称,sArray_Dep_Used_in_condition[Count_Dep_Used_in_condition,2]用于存储科室类型ID;

步骤8、遍历数组temp_Period[M,2]寻找第i_student个轮转人员的可排班周期,计算temp_Period[temp_flag,1]-1)%dep_period(式2),

如果式2不等于0,则temp_flag++,如果temp_flag≥M,则temp_flag=start_period;

否则如果temp_flag+dep_period>M,则temp_flag=start_period;

否则如果第i_student个轮转人员在该段时间内空闲,即student_schedule[i_student,temp_flag]到student_schedule[i_student,temp_flag+dep_period]为空,则返回temp_flag,否则第i_student个轮转人员在该段时间内不满足排班条件,则temp_flag=temp_flag+dep_period;

如果遍历后未找到合适可排班周期,则i_student++并返回步骤6;

步骤9、定义条件内科室负担数组sArray_Dep_burden[Count_Dep_temp,8],每行分别存储科室ID、科室名称、科室类型ID、年、周期号、当前实际数、单周期最大数、科室负担比,其中科室负担比=当前实际数/单周期最大数,并按照科室负担比由低到高对数组sArray_Dep_burden[Count_Dep_temp,8]进行排序;

步骤10、遍历数组sArray_Dep_burden[Count_Dep_temp,8],寻找适合的排班科室,如出现如下情况之一(①sArray_Dep_burden[Count_Dep_temp,7]科室负担比≥100%;②与数组sArray_Dep_Used_in_condition比较,发现科室已排;③与数组sArray_Dep_Used_in_condition比较,发现所属科室类型已排,条件③根据实际需要设置)则排除该科室,如找到合适科室,则返回科室ID、科室名称,否则返回步骤8重新寻找合适的排班周期;

步骤11、根据参数temp_flag、科室ID、科室名称,更新轮转人员排班矩阵及科室排班负担表,成功后,进行阶梯式下移,对下一个轮转人员的下一个排班周期进行安排,即temp_flag=temp_flag+dep_period,i_student++,并返回步骤6;如果i_student≥N,则返回步骤5;如果i_condition≥Count_Condition,则完成条件内科室排班;

最后,对排班矩阵中的空缺进行补充排班:

步骤12、按照轮转人员遍历student_schedule[N,M]数组,依次读取第i_student个轮转人员信息,0≤i_student<N;

步骤13、按照周期遍历第i_student个轮转人员的排班信息,依次读取第i_student个轮转人员的第i_period个周期的排班情况student_schedule[i_student,i_period],其中0≤i_period<M;

步骤14、如果student_schedule[i_student,i_period]为空,则定义数组temp_Dep[K,6],其中K为所有科室的数量,temp_Dep[K,0]用于存储科室ID,temp_Dep[K,1]用于存储科室名称,temp_Dep[K,2]用于存储该科室第i_period周期实际人数,temp_Dep[K,3]用于存储该科室最大可接纳人数,temp_Dep[K,4]用于存储该科室单科室轮转周期,temp_Dep[K,5]=temp_Dep[K,2]/temp_Dep[K,3]为科室负担比,并按照temp_Dep[K,5]由低到高进行排序;

步骤15、依次选择第i_temp_Dep个科室,0≤i_temp_Dep<M,如果temp_Dep[i_temp_Dep,1]在轮转人员i_student的所有周期中未被安排过,且student_schedule[i_student,i_period]到student_schedule[i_student,i_period+temp_Dep[K,4]-1]都为空,且第i_period周期的周期号period满足条件(period-1)%temp_Dep[K,4]=0,则可安排该科室,更新轮转人员排班矩阵及科室排班负担表;

步骤16、遍历所有人员的所有周期之后,完成排班。

以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本领域内普通的技术人员的简单更改和替换都是本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1