業務:大量の月末請求
月末のカード請求業務が、ヌケモレなく実施されるようになった!それぞれのお客様への「請求金額」について、、、いつ誰が入力し、いつ誰が承認したのか、全てがリアルタイムに捕捉できるようになった。しかも、クレジット会社 API (Stripe API)にアクセスしてくれる「自動工程」のおかげで、ワークフローシステムからダイレクトにカード課金される。つまり、経理システムへの「二重入力」といった二度手間もなくなった。
課題:人間依存の低減
しかし、、、この業務プロセス(第556話)は、いまだ「人間のデータ入力」に依存している。つまり、肝心の「課金額」の入力については人間(担当営業)が担当している。たしかに、「お客様情報」は自動でセットされているし、「カード請求コード」(Stripe CustomerID)だって予めセットされている。更には「請求作業の一覧」もヌケモレなく引き受け待ちリストに表示されているので、複数人で協調して請求作業を行うこともカンタンになっている。つまり「入力の省力化」については、かなり高いレベルで実現できているとは思うのだが。。。
もっとも「課金額」(請求額)の情報は、ワークフローシステムから見て「外部システム」にあたる「売上管理システム」にある。なんとかして売上集計を自動取得させることはできないものか? (「APIエコノミー」が叫ばれる今日、業務プロセス改善の行きつく先は「無人化」だと思う。。。)
[クレジットカード課金プロセス-再帰呼出&全自動]
解決:売上集計システムとの自動連携
業務プロセス管理活動(BPM活動)に取り組んで1年もすれば、「入力作業の省力化」という目標を、「入力作業の無人化」(人間の排除)に昇華させたくなるものです。つまり、定義したワークフロー図(プロセス図)にある『ヒューマン工程』(水色四角アイコン)を、全て『サービス工程』(灰色四角アイコン:自動工程)に置き換えられれば、、、「人間のミス」や「人間の処理スピード」を想定する必要が無くなります。その結果、たとえば承認や確認といったダブルチェック工程も不要となり、たとえば休日や営業時間外であっても滞留することがなくなります。延いては、ビジネスの急拡大期(スケールアウト期)に至って「人材不足」に陥る心配もなくなることでしょう。
ここで紹介した業務プロセス定義は、第556話の『クレジットカード課金プロセス』(Stripe カード課金業務)をアレンジし、全工程を無人化したものです。
基本的には、
- [1.課金額の入力]というヒューマン工程が[販売実績の取得]という自動工程と[1.請求先情報の編集]というヒューマン工程に分解(分割)され、
- [2.課金承認]というヒューマン工程が[2.課金モニタ]というヒューマン工程に置き換えられています。
考察:完全自動化で注意すべき事
BPMシステム/ワークフローシステムにおける自動処理(自動工程)は、案件進捗をコントロールするワークフローエンジン(サーバサイド)によって実現されます。この例では新たに毎月の「課金額」(請求額)が自動工程において自動取得されるようになっています(販売実績の取得)。難点としては、売上管理システムと通信するスクリプトが必要になってくるところでしょう。すなわち、プログラミング知識が必要となってきます。また売上管理システム側にも「金額をレスポンスするAPI」が実装されている必要もあります。
※「売上管理システム」としては、いわゆる「売上管理クラウド」だけでなく、「EDIシステム」といった商取引プラットフォーム、さらには「Google Sheets」や「Cybozu kintone」といった簡易データベースなどが想定されます。(EDI: Electronic Data Interchange)
なお、全ての工程が自動化され、業務プロセス全体が無人処理されるようになった場合にも、人間の関与は重要です。
すなわち、(1)人間がきちんとモニタリングすること、(2)自動処理エラー時に人間がリカバリーするフローを考えておくこと、が重要といえるでしょう。たとえば、この例では「課金実績の取得日時」から「予定通知日時」が[2.課金モニタ]を操作できる時間になっています。これは何らかのエラーが検知された際に「処理中止」などの措置を取ることが想定されています。
▼スクリプト工程『販売実績の取得』の設定例 (サーバサイド JavaScript)
/// Sum of a series of numbers in a Google Spreadsheet (ver. 20171011) /// (c) 2017, Questetra, Inc. (the MIT License) //// == OAuth2 config == // Authorization Endpoint URL: https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force // Token Endpoint URL: https://accounts.google.com/o/oauth2/token // Scope: https://www.googleapis.com/auth/spreadsheets // Consumer Key: (via Google Developers Console) // Consumer Secret: (via Google Developers Console) var token = httpClient.getOAuth2Token( "Google-Sheets" ); //// == ワークフローデータの参照 / Data Retrieving == var driveFileId = "zxcv123EXAMPLE321vnm"; var monthYear = engine.findDataByName( "販売実績の取得日時" ).toString() + ""; // "2017-12-30 12:34" monthYear = monthYear.slice(0,7); // "2017-12" var customerEmail = engine.findDataByName( "Email" ) + ""; // "bill@example.com" var sheetRange = "A:C"; // A:customerEmail, B:amount, C:description //// == 演算 / Calculating == // preparing for API Request var apiRequest = httpClient.begin(); // HttpRequestWrapper // com.questetra.bpms.core.event.scripttask.HttpClientWrapper // preparing for API Request (OAuth2 Token) apiRequest = apiRequest.bearer( token ); // preparing for API Request (Path parameters) var apiUri = "https://sheets.googleapis.com/v4/spreadsheets/"; apiUri += driveFileId; apiUri += "/values/"; apiUri += monthYear; apiUri += "!"; apiUri += sheetRange; // preparing for API Request (Query parameters) // (no set) // preparing for API Request (JSON Body, Form Parameters) // (no set) // Request to the API (GET) var response = apiRequest.get( apiUri ); // HttpResponseWrapper var httpStatus = response.getStatusCode() + ""; var accessLog = "---GET request--- " + httpStatus + "\n"; accessLog += response.getResponseAsString() + "\n"; var responseObj = JSON.parse( response.getResponseAsString() ); // Retrieve Properties from Response-JSON var sumOfSales = 0; var listOfCharge = ""; if( httpStatus === "200" ){ for( var i = 0; i < responseObj.values.length; i++ ){ if( responseObj.values[i][0] === customerEmail ){ sumOfSales += parseFloat( responseObj.values[i][1] ); listOfCharge += responseObj.values[i][2] + ", "; } } } // Error Handling // (no action) //// == Data Updating / ワークフローデータへの代入 == engine.setDataByNumber( "28", listOfCharge ); engine.setDataByNumber( "8", java.math.BigDecimal( sumOfSales ) );
[クレジットカード課金プロセス-再帰呼出&全自動:「2.課金モニタ」画面]
<データ項目一覧画面>
[雛形ダウンロード (無料)]
- 業務テンプレート:クレジットカード課金プロセス-再帰呼出&全自動
- 第542話:PayPal Invoice 連携で、ラクラク請求業務(3) (2017-07-03)
- 第529話:PayPal業務のサブルーチン化 (2017-04-03)
- 第528話:自動工程で PayPal ステータスの自動確認 (2017-03-27)
- M412 プロセス接続: “次回の請求” を忘れないように、次回処理分が自動開始されるように設定する (使い方)
- M103 新規開始: 過去のデータを再利用して新規開始する (使い方)
- M223 自動イベント: 処理フロー途中で、自動的に一定時間スリープするように設定する (使い方)
- オンライン決済 Stripe を試してみた (Blog)
- Stripe Customer ID 生成 (Addon解説)
- Stripe カード課金 (Addon解説)
- プロセスモデラー アドオン
- ロボットがパソコン作業を完全代行する日?? (RPAとBPMの違い)
0 件のコメント :
コメントを投稿