Hello everyone,
I would like to share with you a BPMN collaboration diagram model for the BPA Export process. This process is related to the Brazilian healthcare industry, and is regularly performed by the healthcare providers (such as hospitals and clinics) contracted by SUS (Brazil's government-funded healthcare universal system). BPA stands for Bulletin of Ambulatorial Production and it is a production report consisting of detailed records of all medical procedures performed by the executing organization within a certain period (named monthly billing competency).
This production report must be delivered successfully validated according to several business rules mandated by SUS (such as, a given medical procedure must comply with certain ICD-10 codes). In the diagram, they are grouped within a sub-process called BPA Consistency and are not detailed for the purposes of this exercise.
I also modelled a rather complex activity which is a messaging broker acting as a relay/control in order to give to the end user full flexibility in executing the process, considering that upon validating each business rule certain user-defined parameters can be verified according to the validation resulting message. The message will then be sent to the messaging broker, which will verify if:
- which process can be triggered according to the message processed;
- the message must be shown to the user on screen;
- the message must be recorded in the audit trail;
- the message interrupts execution;
- additional messages that must be sent to external participants;
- etc.
Now, I would like to highlight some issues that I faced while drawing this diagram.
1. Converging sequence flows to a single point is rather difficult. For an example, each of the initial 3 tasks trigger an error event that must be sent to the messaging broker in another pool. In fact, as I stated earlier, any message must be to the broker. Initially, I tried to draw the message flow accross the pool boundary but the receiving object would accept only up to 3 connections. Then I tried an alternative - link event - and it seems to work, although now the message flows crossing the pool boundaries are not explicit.
2. Drawing result triggers with the task boundaries is neat, but adding too many events to it can make the model difficult to read, considering that a task can trigger several result messages (error, complete, business rule validated, business rule not validated, etc.) which is the case. Another issue with this point is that adding a description to the event can also make the model difficult to read due to weird positioning.
3. For readability purposes, I used exclusive gateways to converge message events that would be then sent as a single object to the messaging broker. I also did that with link events, and perhaps the later form is better because using gateways can imply that a decision has been made in a previous point.
4. Also for readability purposes, considering that each message event can have content AND/OR an user-defined interruption flag, I used an event gateway to split it, thus assigning the meaning that the system will behave according to the message's content and execution flag contained within.
5. For a message where content and execution flag (or 2 or more messages that are bundled together) are mandatory, I used the parallel multiple event. I am not sure if a signal event (which is not explicit in most of the diagram) can be instantiated in runtime, because the signal event behavior is set by the message's execution flag. A workaround would be drawing the signal event along with the message event, as you can see in the end of the Messaging pool. If semantically correct, a neat way would be drawing the parallel multiple event to assign the meaning that several events are contained within that must be treated in blocks. In programming (at least in C++ programming) this relationship can be implemented using a simple data structure (a matrix record with pointers).
6. BPA Consistency sub-process is a loop activity, because it goes through multiple records validating each one and verifying its compliance with SUS' business rules. It is unclear to me whether the loop conditions must be drawn within the sub-process or outside it. Thus, the BPA Consistency activity and its related objects may be incorrectly modelled in this diagram, considering that the messaging broker could be called within its execution flow. In order to make it work in that way that is designed now, BPA Consistency should be designed as an external sub-process thus requiring a call activity, which would control the loop execution, but in that case several tasks and some gateways would be necessary to be model the loop, thus effectively making the call activity a sub-process.
7. I've read several posts on the Web by people complaining that BPMN 2.0 is too difficult for the common business user. I completely agree. From a business user perspective, he or she would lose it when seeing the weird markers on gateways, or the crosses on the events. Being myself a systems analyst with a decade's experience as a business consultant, considering that sometimes it's difficult to keep the two perspectives apart when modelling systems, my "business user persona" could not intuitively relate some established concepts/practices to BPMN 2.0 concepts, such as Exclusive AND is implemented by the parallel gateway. Other than that, I believe that BPMN 2.0 is a great tool that can empower the work of process consultants, but at least here in Brazil "many waters will flow below the bridge" until we see BPMN becoming standard practice mainly because notation languages are not regular courses on the curriculum of educational institutions, and most of business users (specially those that work in the process-complex healthcare industry) are unable to draw even a basic workflow diagram. This is a true fact accross the organization, from bottom to top.
In closing, I would like to thank you in advance for any inputs/commentaries that you may want to add.
Cheers,
Wendel Souza