Episode 537: Visualizing the Status of Occurrence of Redoing Work

Sunday, May 28, 2017

Productivity declining due to mistakes

For those who make approvals, processing of "Sending back" is annoying.

Instead of reading the contents of an application and giving approval on it without saying anything (It will take 3 minutes), he or she must write a "reason for sending back" which costs 10 more minutes. (You don't dare to reject without a word, do you?) And if that was for "Point out simple mistake or typo", and if that occurred five, ten times a day, it may make you depressed.

And of course, the time to get home will be delayed by 1 hour and 2 hours.

Mistake occurrence rate lowered by system improvement

Mistake in "Date", "Amount", or "Customer name".

The applicants don't dare to make mistake on purpose. Basically, we would like to consider how to lower occurrence rate by "improving the Business Process Definition".

  • Improve "notes" and "input check" on input screen
  • Add "reviewing step" by colleagues to Workflow

[Base flow of Request type process-Script]


Numerization of mistakes and losses

"Does it help improving?"

For Process owners, Process improvement is hard to recognize.

In this example, the "number of times of Sending-back" is automatically recorded, and additionally "the time which lost due to Sending-back" is automatically recorded. In other words, it is a mechanism to record unnecessary data in processing of the application as separate data Issue daringly.

As a result, for example, KPIs such as "number of occurrences of sent-back in the whole company" or "average loss time due to sent-back" can be easily checked (monitored) at any time. (Visualization of improvement activity)

Specific setting method

In this example, the following server side JavaScript is set in the property of the automatic process "loss calculation".

[Setting example of Script Task "Loss calculation" (Server side 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 ) ); 

That is, each time the application reaches the Script Task, the difference value between the two time data (B - A) is recorded as "cumulative loss time" (C).
  • A. Time of rejection at [2. Approval]
  • B. Time of input completion at[1x. Rework]
  • C. Cumulative loss time (h)

If you want to set up a similar mechanism in various in-house Business Processes, it is troublesome to write server side JavaScript each time. It can be said that there is also a problem in maintainability.

In such a case, it is effective to register the "service process" on the workflow platform as a package. This eliminates the need to write server side JavaScript in each Business Process Definition.

Specifically, create and register "Addon-XML" as shown below.


P.S. Incidentally, "time to measure" depends on the operation, business, or on the company. For example, at [2. Approval], various other measurement methods such as taking the difference between "time when it first rejected" and "time when it was approved" can be considered. In that case, the placement location and number to be arranged of the automatic steps will differ.

[Example of packaging in 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 Download]

[Base flow of Application type process:"2. Approval" screen]

[Data Items list]


[Free Download]
<Similar Models>
<<Related Articles>>

[Japanese Entry (和文記事)]