PS

The scenario

Let's say we have part of a basic procurement business process

1.  Start:  Determine goods/services are needed

2.  Create a requisition

3.  Route it for approval

4.  Approve/reject

5.  Create a PO (sourcing is already done)

6.  Possibly route it for approval as well

7.  Communicate w/ the supplier

8.  End:  Supplier accepts the PO



Now, for the approvals they are actually a complex sub-process.  If at anytime the requisition is withdrawn then the approval process aborts because there is nothing to approve.  If the requisition is canceled then the whole process just stops.





I've modeled the requisition's approval subprocess, but I'm not sure how to handle its abort & which interrupting events would best be used.

  • My understanding of a cancel event is:  Subprocess is not done.  If cancel message is caught then all activities are undone.
  • My understanding of a compensation event is:  Subprocess is done.  If compensation message is caught then a non-specific set of steps are done to reverse the process.
  • My understanding of a conditional event is:  Subprocess is not done.  If a condition exist then abort the process, but do not undo anything that happened inside the process.





You can withdraw a requisition before, during, or after requisition approval with different responses

  • If you withdraw before routing for approval, then you just revert back to creating / editing the requisition.
  • If you withdraw during the approval subprocess, then you notify the current approver that the requisition is withdrawn.  The process reverts back to the beginning with the requisition going through the creation activity.
  • If you withdraw after the approver subprocess then it is the same as withdrawing it prior to routing for approval.  You just have a record that prior approval was given.  Withdrawal is no longer possible once the PO is created.





Now, for the questions

1.  I think this requisition approval subprocess is a transaction subprocess because the entire approval chain needs to complete and if it does not complete then it needs to be redone from the beginning.  Is that correct?



2.  If I withdraw during the approval then from the business's point-of-view the approval is undone even if the original approval requests exist but cannot be completed.  The approval process is also not complete.  Thus, I should be modeling the interrupt with an intermediate cancel event on the boundary.  Is that correct?



3.  If I am supposed to use an intermediate cancel event then am I required to have a cancel end event within the process?  The withdrawal of the requisition happens outside of the approval process, so it doesn't seem likely.  To rephrase:  can you have an interrupt on the border of a subprocess if you have no throwing event within the subprocess?



4.  Alternatively I could say that I interrupted the approval subprocess because of a state change:  the requisition is withdrawn.  Should I instead be using a conditional event with a sequence flow back to the activity of creating / editing the requisition?



5.  If the requisition is canceled then it means that the request was in error and no further requisition will be coming for that request.  Would this be considered a hazard and thus use an interrupting error event?  Or do I use a cancel?



6.  If I need to withdraw after the approval is done should I have a compensation event on the subproceses border leading to a "Withdraw Requisition" activity via association or do I simply draw a sequence flow from one of the other events (cancel or conditional) back to the "Create Requisition" activity and label the sequence flow as "Requisition was withdrawn"?



7.  Am I overthinking this?  Are there any good examples or reference books which discuss supply chain processes in BPMN terms, even in part?

Featured achievement

Rookie
Say hello to the ARIS Community! Personalize your community experience by following forums or tags, liking a post or uploading a profile picture.
Recent Unlocks

Leaderboard

|
icon-arrow-down icon-arrow-cerulean-left icon-arrow-cerulean-right icon-arrow-down icon-arrow-left icon-arrow-right icon-arrow icon-back icon-close icon-comments icon-correct-answer icon-tick icon-download icon-facebook icon-flag icon-google-plus icon-hamburger icon-in icon-info icon-instagram icon-login-true icon-login icon-mail-notification icon-mail icon-mortarboard icon-newsletter icon-notification icon-pinterest icon-plus icon-rss icon-search icon-share icon-shield icon-snapchat icon-star icon-tutorials icon-twitter icon-universities icon-videos icon-views icon-whatsapp icon-xing icon-youtube icon-jobs icon-heart icon-heart2 aris-express bpm-glossary help-intro help-design Process_Mining_Icon help-publishing help-administration help-dashboarding help-archive help-risk icon-knowledge icon-question icon-events icon-message icon-more icon-pencil forum-icon icon-lock