ミス発生に伴う生産性ダウン
決裁者さんにとって「差し戻し処理」は、億劫(おっくう)です。申請内容を読み『無言』でOKすれば良いハズ(3分)のところ、(無言でNGするワケにも行かず)、更に10分かけて『差し戻す理由』を書かなければなりません。しかもそれが「単純ミスや誤記の指摘」であり、それが一日に5件・10件も発生するとなれば、流石に気分も滅入ってしまうでしょう。
そして当然、帰宅する時刻も1時間・2時間と遅くなってしまいます。
システム改良で下げられるミス率
『日付』をまちがう、『金額』をまちがう、『顧客の名前』をまちがう。申請者さん達も、好き好んで間違っている訳ではありません。基本的には(?)、「業務プロセス定義の工夫や改良」によってミス率を下げることを考えたいものです。(プロセスを憎んでヒトを憎まず!)
- 入力画面の「注意書き」や「入力チェック」を改良する
- 業務フローに同僚による「レビュー工程」を追加する
[申請系プロセスのベースフロー-スクリプト]
ミスやロスの数値化
「改善になっているのか???」プロセスオーナーにとって、プロセス改善は、なかなか実感しづらいものです。
この例では、「差し戻し回数」が自動記録され、加えて「差し戻しによってロスした時間」も自動的に記録されるフローとなっています。つまり、申請の処理においては不必要なデータを、あえて個別の案件データとして記録する仕組みとなっています。
そしてその結果、たとえば「社内全体での差し戻しの発生回数」や「平均的な差し戻しロス時間」といった KPI が、いつでも簡単に確認(モニタリング)できるようになっています。(カイゼン活動の可視化)
具体的な設定方法
この例においては、自動工程『ロス計算』のプロパティとして、以下のようなサーバサイド JavaScript が設定されています。▼スクリプト工程『ロス計算』の設定例 (サーバサイド JavaScript)
//// == ワークフローデータの参照 / Data Retrieving == var loopCount = data.get( "q_loopCount" ) - 0; // Java to JavaScript Number var lostTime = data.get( "q_lostTime" ) - 0; // Java to JavaScript Number var startTime = data.get("q_startTime"); var endTime = data.get("q_endTime"); // com.questetra.bpms.util.AddableTimestamp //// == 演算 / Calculating == loopCount = loopCount + 1; var intervalMilliSec = endTime.getTime() - startTime.getTime(); var intervalHour = Math.ceil( intervalMilliSec / 10 / 3600 ) / 100; lostTime = lostTime + intervalHour; //// == ワークフローデータへの代入 / Data Updating == retVal.put( "q_loopCount", java.math.BigDecimal( loopCount ) ); retVal.put( "q_lostTime", java.math.BigDecimal( lostTime ) );
すなわち、申請がスクリプト工程に到達する度に、2つの時刻データの差分値(B-A)が、『累計ロス時間』(C)として記録される仕組みです。
- A. [2.承認]で NG となった時刻
- B. [1x.差戻対応]の入力を完了した時刻
- C. 累計ロス時間(h)
なお、もし社内の様々な業務プロセスで同様の仕組みを設定したい場合、都度、サーバサイド JavaScript を書き込むのは面倒です。メンテナンス性においても問題があると言えるでしょう。
その様な場合は、パッケージ化した「サービス工程」をワークフロープラットフォームに登録しておくのが有効です。そうすれば各業務プロセス定義において、サーバサイド JavaScript を書きこむ必要が無くなります。
具体的には、以下のような「Addon-XML」を作成し登録します。
PS: ちなみに「計測すべき時間」は、業務によって、事業によって、会社によって、異なります。たとえば、[2.承認]で「最初に NG となった時刻」と「OK となった時刻」の差分をとるなど、他にも様々な計測方法が考えられるでしょう。その場合は、自動工程の配置場所や配置数は異なってきます。
▼Addon-XML によるパッケージ化(サービス工程化)の例
<?xml version="1.0" encoding="UTF-8"?><service-task-definition> <label>Lost Time Calculator</label> <configs> <config name="conf_DataIdA" required="true" form-type="SELECT" select-data-type="DATETIME"> <label>A: Select DATETIME DATA for Start</label> <label locale="ja">A: 計測開始時刻が格納されている時刻型データを選択してください</label> </config> <config name="conf_DataIdB" required="true" form-type="SELECT" select-data-type="DATETIME"> <label>B: Select DATETIME DATA for End</label> <label locale="ja">B: 計測完了時刻が格納されている時刻型データを選択してください</label> </config> <config name="conf_DataIdC" required="true" form-type="SELECT" select-data-type="DECIMAL"> <label>C: Select NUMERIC DATA for Elapsed Time (h) (update)</label> <label locale="ja">C: 経過時間(h)が格納されている数値型データを選択してください(更新)</label> </config> <config name="conf_DataIdD" required="true" form-type="SELECT" select-data-type="DECIMAL"> <label>D: Select NUMERIC DATA for Arrival Count (update)</label> <label locale="ja">D: 到達回数が格納されている数値型データを選択してください(更新)</label> </config> </configs> <script><![CDATA[ // Lost Time Calculator (ver. 20170523) // (c) 2017, Questetra, Inc. (the MIT License) //// == 自動工程コンフィグの参照 / Config Retrieving == var dataIdA = configs.get( "conf_DataIdA" ); var dataIdB = configs.get( "conf_DataIdB" ); var dataIdC = configs.get( "conf_DataIdC" ); var dataIdD = configs.get( "conf_DataIdD" ); //// == ワークフローデータの参照 / Data Retrieving == var loopCount = data.get( dataIdD ) - 0; // Java to JavaScript Number var lostTime = data.get( dataIdC ) - 0; // Java to JavaScript Number var startTime = data.get( dataIdA ); var endTime = data.get( dataIdB ); // com.questetra.bpms.util.AddableTimestamp //// == 演算 / Calculating == loopCount = loopCount + 1; var intervalMilliSec = endTime.getTime() - startTime.getTime(); var intervalHour = Math.ceil( intervalMilliSec / 10 / 3600 ) / 100; lostTime = lostTime + intervalHour; //// == ワークフローデータへの代入 / Data Updating == retVal.put( dataIdD, java.math.BigDecimal( loopCount ) ); retVal.put( dataIdC, java.math.BigDecimal( lostTime ) ); ]]></script> <icon> iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABv0lEQVRYR+1XPU7DMBj1l0xpJcQFUBkZYe2Cx9bJ0CP0COUElBPAEXqEDo1ToQ6uxA5HgBuwVJ3qD32ortxUKc5PE4HIEiV+iV/e+75nB1jqEEKMAeA+fb+Ka0R8kFKO7XfBP4GfFCDZyshv21nIgjiOD2w6RkgIcU3jUso3OodhiAZ/cgI0udb6CgDOEPF5Pp+/10qg2+126GtbrdbFYrF4aUKBMbVZGIajOI6faidAE1KOaK0nJH8lBBBxLzjydgQA7J4vVIR5JzyG/50EEHGZ9VUAcEtjLpgtLv9acCyITI+7YCohIIRQUkpuFKmNQK/XuwSAjud5SmvNEfHDTjlSwGCs2N3DlFJACDFkjA3J863fEynlxFbAYKx62cOUImBLbvtdmwWGQBRFfDabqVprgDzPakOqCRpzwRS2oPEkdAkZF0xhBVxCxgVTigDn/DwIAp4kybTf7w/W67VSSn3aXUAFqrX+jmY6PM9bUsFWsiMiAu12WyHiKwDcrFYrnkFgV7BUoJUR2G4sRoyxR8bYXXq3c3ILKGZ9359uNpuBOaejOP1HZdb+SizIasVaktAlZFwwhbug8SD68wS+AAh8Lj/CJSvYAAAAAElFTkSuQmCC </icon> </service-task-definition>
[Addon-XMLダウンロード]
[申請系プロセスのベースフロー-スクリプト:「2.承認」画面]
<データ項目一覧画面>
[雛形ダウンロード (無料)]
- 業務テンプレート:申請系プロセスのベースフロー-スクリプト
- 第536話:差し戻し回数も、貴重な案件データだ?! (2017-05-22)
- 第515話:契約書の承認はワークフローで!(改善編) (2016-12-26)
- 第501話:予算の消費額がワカラン!?! (2016-09-20)
- 第519話:業務プロセスの自動化とは?(その2) (2017-01-23)
- M117 データ検索: 全案件データを絞込検索する/絞込条件を保存する (使い方)
- M209 引受ルール: 引受候補者を “営業部” などの組織情報や “資格者” などのロール情報で設定する (使い方)
- M227 自動工程: 業務データの結合や四則演算が自動実行されるように設定する (使い方)
- M401 業務の流れ: 申請と差戻対応の工程を分け “手戻り” をモニタリングしやすいように設定する (使い方)
- M415 自動工程: 業務プロセス定義で利用可能な自動工程を追加する (使い方)
- M416 自動工程: 業務プロセス定義で利用可能な自動工程を自作する (使い方)
[英文記事 (English Entry) ]
0 件のコメント :
コメントを投稿