看護師勤務表の変遷

勤務表ソフトを手掛けて10年になりますが、その間にも、看護師勤務表は、変化しています。今後も、時代の流れにより様々に変化していくことでしょう。
ここで、看護師勤務表の変遷について眺めてみます。



深準3交代型

徐々に少なくなってはきていますが、、国公立病院で未だ生きています。このシフトパターンの問題は、日勤→深夜の時間が殆ど取れなくて、なおかつサーカディアンリズムに反する強い逆循環であることです。



3交代正循環

逆循環の反省として、看護協会が打ち出したのが正循環です。しかし、準公深パターンで、休みが損したような気になったりして現場からは不評でした。
それほど普及しているとは思えません。



2交代16時間

介護関係では、ほぼこのパターン一択です。
しかし、16時間ものシフトを行っている国は、先進国の中には見当たりません。
欧米では法律により規制され、この時間のシフトは皆無と言ってよいと思います。

また、日本の看護現場では、長時間労働は集中力を欠く傾向があるので、急性期病棟ではあまりないと思います。



変則2交代

以上の反省を踏まえて、提案されたのが変則2交代です。近年、急速にこのパターンが増えてきました。

https://www.otarukyokai.or.jp/hotnews/files/00000300/00000388/nurse_life01.pdf



一般化変則2交代

変則2交代の基本は、長入明です。通常は、このパターン一択ですが、そうでない場合の一般化実装をここでは、考えます。

ここからは、長入明を長短深と記します。

長短深パターン

一般に長は、1.5Day、短は、0.5Dayです。よって相殺され、一塊で見れば±0です。今月で見ると、+-1差が発生する可能性がありますが、先月との貸し借りとして長い目で見れば、±0となります。
従い、このパターンであれば、勤怠システムで目くじらを立てる必要はないと思いますが、今月内で見て+-0を強要する 残念な勤怠システム もあるようです。自ら解空間を狭めてどうするの?と言いたくなります。


ともあれ、長短深パターンの一択だけならば、長短部の長短時間差は、相殺され、残念な勤怠システム でなければ、問題は発生しません。
しかし、後述の事由により、必ずしも、長短深は、一塊にならない場合があります。
そこで、本稿では、長短深パターンに当てはまらない全ての長日シフトを単長(単独の長日という意図で)と呼称することにします。
同様に長短深に当てはまらない全ての短日シフトを単短と称することにします



長短深とはならない場合
長短深の縦の列必要人員数が一致しない場合

たとえば、長短深=(2,1,1)のような場合、上記パターンだけでは、列を揃えることは出来ません。単長により補償する必要が生じます。



スタッフの予定希望で、休短パターンを入力されたとき

2番目のケースは、スタッフの予定希望です。長短深に属さないパターンを入力されたときです。誰しも長日勤はやりたくないと思いますが、やむを得ず長日勤を回避する場面もあろうかと思います。



上で分かる通り、自分がやらない分を誰かに単長を強いるパターンになっています。

遅を長短深に組み込んだとき(Ex.長遅短深)

長遅短深だけを見ると効率が良さそうに見えるのですが、他の誰かへの影響が少なからずある制約となります。



休短パターンと違い、スタッフのやむをえぬ事情という必然性が見当たらないので、このようなパターンは禁止とします。
遅番については、連続2回までとして、遅番の後は休みとします。



単長の補償方法

単長に関して、1単長につき、働きすぎの分が0.5Day発生するので、勤怠システムで月累計し、次月以降、年休と同様に非番で補償するものとします。
単長2回で1非番となります。非番はハード制約とします。



単短の扱い

就業日数不足なので、勤務表ソフトの範疇を超えています。勤怠システムでの対応になります。



仕様

プロジェクトは、以下の仕様です。

列制約

■ 長短深=(4,3,3)
■ 遅番1名
■ 救急外来応援、遅番と日勤各指定日に1名
■ 長日勤、夜勤、遅番要員に看護師長および1年目は、含まれない
■ チームA/B夜勤・長日各1名以上
■ 若手夜勤・長日1名以下 
■ 看護師長不在時、副看護師長1名日勤 
■ 日勤平日6名以上、休日5名
■ 主任クラスの夜勤は1名以下

行制約

■ 連続勤務は5連勤まで
■ 出来るだけ2連休(特に5日連続勤務後)

1年目制約 ■ CC(クリニカルコーチ)と月1回、長短深を一緒にする

実装

要員

各要員は、看護師長と1年目を外しています。看護師長または1年目が要員として含む場合は、次の記述を変更してください。



長単と入単

変則2交代においては、長入明シーケンスが基本です。 その基本シーケンスから外れた勤務が、便宜上必要となる「長単」と「入単」です。
勤務表から見ると同じシフトです。単に、基本シーケンスから外れたシフトをパターン制約するための便宜上必要となるシフトになります。

勤務シフトは全く同じでありながら、このように設計しているのは、ソフト制約を使わずに、基本シーケンスを守りつつ、イレギュラー勤務にも対応するというコンセプトで設計しているためです。

シフト集合
予定のラベル貼り付け用は、「または(非自動シフト含)」で作成する

「または」は、自動アサインをしないシフトは、貼り付け時に除外されるシフト集合となります。 一方、「または(非自動シフト含)」は、その名の通りです。どちらも演算自体は、全く同じOR動作になりますが、予定ラベルとして貼り付けられたときの動作が違います。

例えば、長xは、入り単発を記述に含みますが、「または」で記述されているので、自動割り当て対象ではない「入り単発」は、割り当てられません。これを予定ラベルを貼り付けたとき、入り単発が割りあてされることはありません。 しかし 長Xは、全く同じ記述ですが、「または(非自動シフト含)」が用いられています。このため、シフト集合結果は、演算通りとなります。

夜勤禁止も2種類ありますが、こちらは、自動割り当てされないものが含まれていないため冗長な記述となっています。(等価な記述です)

いずれにせよ、予定を制約するだけの目的で集合を作成するのでしたら、または(非自動シフト含)」で作成する としておいた方が分かり易いかと思います。



救急外来応援

応援先になります。タスクにしているのは、その他の応援が必要になったときにシフトに影響することがなく追加できるからです。

今応援先は、救急外来のみですが、遅番勤務と日勤勤務で、各々1づつ、特別な日で設定しています。




フェーズ記述

タスクが意味を持つのは、日勤、および遅番のみです。それは、次のように記述されているからです。



列制約

自職場の人数が下の仕様です。

 日    必要人数
  1   稼働日日勤   6名以上   
  2 休日日勤    5名
  3 遅番   1名    



これとは独立に、救急外来用の人数、遅番1人、日勤1人が各々、勤救急外来日勤日と勤救急外来遅番日に必要です。 次のテーブルとなります。

 日    必要人数
  1   救急外来日勤日   1名   
  2 救急外来遅番日   1名    



従って、日勤と遅番については、自職場(NoTaskVar)もしくは救急外来の指定が常に必要となります。

これを下のように制約しています。



NoTaskVarは、特別なタスクですが、このプロジェクトのように1Phaseで使う場合には、自職場を現わしている、と読み替えてください。





スタッフ毎のタスク

救急外来を行えるスタッフは、次のチェックを付けます。出来ないスタッフは、チェックを外します。NoTaskVarは、特別なタスクで"自職場"を表現するタスクになります。 (NoTaskVarは、全てのスタッフにチェックする必要があります。)



スタッフ毎のシフト

救急外来遅番者は、当然、遅番がチェックされている必要があります。



1年目制約 CC(クリニカルコーチ)と月1回、長短深を一緒にする

二つの方法があります。一つ目は、Pythonを使う方法です。下のコードのみでよいのです。

import sc3

for person in a_1年目:
    list=[]
    for day in 今月:
        v=sc3.GetShiftVar(person,day,'ロング日勤')
        vc=sc3.GetShiftVar(CC[0],day,'ロング日勤')
        list.append(v&vc)
    s='1年目CCと長日_'+staffdef[person]
    sc3.AddSoft(sc3.SeqError(1,1,3,list),s,4)# Min Max allowable errors  level

二つめの方法は、1年目用に独自シフトを作成する方法で、面倒です。面倒な理由は、常にペアということではなく、ペアになる回数を指定されているからです。

シフトの追加



シフト集合の追加

今までの「入り」で参照されている箇所をを次で置き換えます。



ペア制約追加

1年目が、「入り1年目」ならば、CCの「入り」を強制します。ここはハード制約です。リニア表現<= を用いていますが、AならばBに相当します。



行制約追加

1年目の「入り1年目」回数を制約します。ここは、ソフト制約にします。この行制約で、「入り1年目」シフト回数は、1回に制約されます。その一回の「入り1年目」に対して、CCの「入り」が強制されます。



列制約追加

1年目の「入り1年目」は、1日あたり1回に制限します。これによりCCと1年目は、1-1の関係となります。



カスタマイズ方法

ICU/HCU/急性期病棟等、スタッフ人数、列の長日、短深人数、遅番の人数等、自在に設定可能となっています。
ここでは、カスタマイズ方法について、説明します。

まずは、スタッフプロパティシートの変更を行ってください。人員スペースが足りない場合、右クリックでメニューを出し、複数行追加します。
人員数の変更、人員名の変更、チームの変更、職能の変更、公休数の変更を行ってください。



列 長日人数を変更する

長日人数と短深人数が同じときと、違うときで、制約最終日の単長制約を次のように変えてください。というのは、最終制約日は、パターンによる自然な作用が効かないためです。 その他の日は、自然に長短深パターンが生成されます。



その他の制約人数に関しては、各々上のスタッフ人数を確保した上で列制約の人数を変更してください。

救急外来応援なしにするには?

特別の日の予定を全てクリアすれば、OKです。



応援先を増やすには?

(1)タスクを追加します。


(2)スタッフ毎のタスク を設定します。



1年目「入り1年目」を止めるには?

(1)この行制約 のチェックを外します。
(2)スタッフ毎のシフト の1年目スタッフの「入り1年目」のチェックを外します



遅番なしにするには?

(1)列制約 で、遅番に関わる制約のチェックを外します。
(2)スタッフ毎のシフト の遅番のチェックを外します



プロジェクト

プロジェクトは、以下です。

ダウンロード して、実装の参考にしてください。