第469話:住所変更届(社員マスターの自動更新付)

2016年2月8日
『社員マスター』をセットしたい!

ただ、人事部のシゴトは「在職者」だけを管理すれば良いという訳ではない。「出向した人」や「退職した人」の情報も管理しなければならない。しかし、業務システム等で使われる「在職者の一覧」(社員マスター)も、きっちりメンテナンスしたい。

そして「Excel ファイル」での社員マスター管理は、すでに限界だ。。。
  • 基本情報(社員マスタ-):社員番号、メールアドレス、通称氏名、入社年月日
  • 詳細情報(法定管理項目):戸籍氏名、生年月日、性別、最終学歴、職歴、緊急連絡先、退職年月日、など

以下は「氏名・住所・電話番号等の新規申請もしくは変更申請」を処理する業務フローだ。

入社時だけでなく、氏名が変わった時、住所が変わった時、電話番号が変わった時に、逐次申請してもらう必要がある。秀逸な点は、必要に応じてワークフロー基盤の『社員マスター』を自動更新できる機能だ。そして自動更新される『社員マスター』は、たとえば「ワークフロー基盤にログインアカウントを持たない社員に通知メールが送られる仕組み」などを作る際に活用される

[社員個人情報の申請受付]



なお、人事部が「在職証明書」や「退職証明書」を発行する際などに必要であれば、該当者の最新の申請を検索することになる。つまり、わざわざ労働者名簿といった「最新の名簿」を作成することはしない。申請された情報をそのまま保存し必要なければ一切アクセスしない、というスタンスだ。

(もちろん、ワークフローシステムの[Excel ダウンロード機能]でデータをエクスポートし、ユニークソートすれば綺麗な「労働者名簿」を作成できるが、今の御時世、それは「リスク書類」でしかないという考え方。)

ちなみに、日本の法律(「労働基準法の第107条(労働者名簿)」および「労働基準法施行規則の第53条」)には、
  • 氏名
  • 生年月日
  • 履歴
  • 性別
  • 住所
  • 従事する業務の種類
  • 雇入の年月日
  • 退職の年月日およびその事由
  • 死亡年月日およびその事由
を管理しなければならないと定められている。しかも、「労働者名簿、賃金台帳及び雇入、解雇、災害補償、賃金その他労働関係に関する重要な書類」を3年間保存しなければならない(第109条)。

ただ、一方で
  • 戸籍名は?
  • メールアドレスは?
  • 電話番号は?
  • 資格情報は?
などなど、実際にどの様なフォーマットで人事情報を管理すべきか、については、各社で方針を決めるべきだ。

つまり、どのような福利厚生を行うのか、どの様な連絡体制を構築するのか、どの様な資格取得支援体制を整えるか、などの方針を定めたうえで規定すべきといえる。(そして、いわゆる『個人情報の取り扱い』(社員等個人情報の取り扱い)に該当する)

[社員個人情報の申請受付:「1.社員情報の追加・更新」画面]


▼スクリプト工程『マスターの取得』の設定サンプル (サーバサイド JavaScript)
  • 入力:[共通ファイル]に登録されている XML ファイル
  • 出力:テーブル型データに出力、文字列型データに TSV テキストを出力
//// == ワークフローデータの参照 / Retrieving ==
// M319 Options-XML: 
// 複数の業務プロセス定義から参照される選択肢XML
// return "List" 
optionsList = itemDao.findAll("staff-master.xml", true); 
// 社員番号#通称氏名#通称ふりがな#入社年月日 = メールアドレス

//// == 演算 / Calculating ==
optionsNum = optionsList.size();

var tmpTable = new com.questetra.bpms.core.model.formdata.ListArray(); // Table型
var tsvtext = ""; // 複数行文字列型

for (i=0; i < optionsNum; i++){
  var tmpRow = new com.questetra.bpms.core.model.formdata.ListArray.ListRow(); // 追加行
  var values = optionsList.get(i).getValue() + "";
  var arr = values.split("#");
  tmpRow.addCol( arr[0] );
  tmpRow.addCol( arr[1] );
  tmpRow.addCol( arr[2] );
  tmpRow.addCol( arr[3] );
  tmpRow.addCol( optionsList.get(i).getDisplay() );
  tmpTable.addRow( tmpRow ); // 行追加

  tsvtext += arr[0] + "\t";
  tsvtext += arr[1] + "\t";
  tsvtext += arr[2] + "\t";
  tsvtext += arr[3] + "\t";
  tsvtext += optionsList.get(i).getDisplay() + "\n";
}


//// == ワークフローデータへの代入 / Updating ==
retVal.put("24", tmpTable );
retVal.put("25", tsvtext );
retVal.put("23", new java.sql.Date(Date.now()));

▼スクリプト工程『Listの生成』の設定サンプル(サーバサイド)
  • 入力:テーブル型データに記入されている内容
  • 出力:2つの文字列型データにテキスト出力
//// == ワークフローデータの参照 / Retrieving ==
// mytable: com.questetra.bpms.core.model.formdata.ListArray
var mytable = data.get("24"); // Table型

//// == 演算 / Calculating ==
// 社員番号 通称氏名 通称ふりがな 入社年月日 メールアドレス
// 社員番号#通称氏名#通称ふりがな#入社年月日 = メールアドレス
var i=0;
var n = mytable.size();
var value_id_list = "";
var display_label_list = "";
for (i=0; i < n; i++){
  value_id_list += mytable.get(i, 0) + "#";
  value_id_list += mytable.get(i, 1) + "#";
  value_id_list += mytable.get(i, 2) + "#";
  value_id_list += mytable.get(i, 3) + "\n";
  display_label_list += mytable.get(i, 4) + "\n";
}

//// == ワークフローデータへの代入 / Updating ==
retVal.put("26", value_id_list);
retVal.put("27", display_label_list);

▼スクリプト工程『TSVの取り込み』の設定サンプル(サーバサイド)
  • 入力:複数行文字列型のデータ(1行につき5項目が「タブ」で区切られている)
  • 出力:テーブル型データを更新
  • ※ MS-Excel や Google-Spreadsheet 等からコピーペーストで取り込める
//// == ワークフローデータの参照 / Retrieving ==
var tsvtext = data.get("25") + ""; // TSV のテキストデータを取得

//// == 演算 / Calculating ==
var tmpTable = new com.questetra.bpms.core.model.formdata.ListArray(); // テーブル型データ
var lineArray = tsvtext.split("\n");  // 改行毎に分割し string[] 配列に格納
for (var i=0; i < lineArray.length; i++){
  var tmpRow = new com.questetra.bpms.core.model.formdata.ListArray.ListRow(); // 追加行(横列)
  var cellstrArray = lineArray[i].split("\t");  // tab 毎に分割し格納
  tmpRow.addCol( cellstrArray[0] );
  tmpRow.addCol( cellstrArray[1] );
  tmpRow.addCol( cellstrArray[2] );
  tmpRow.addCol( cellstrArray[3] );
  tmpRow.addCol( cellstrArray[4] );
  tmpTable.addRow( tmpRow );  // 行追加      
}

//// == ワークフローデータへの代入 / Updating ==
retVal.put("24", tmpTable );

<データ項目一覧画面>


[雛形ダウンロード (無料)]
<類似プロセス>
≪関連記事≫
[英文記事 (English Entry) ]

0 件のコメント :

コメントを投稿