[AccessD] State machines

jwcolby jwcolby at colbyconsulting.com
Tue Jun 10 20:19:13 CDT 2008


Thanks for that link Gustav.  I am reading it now.

John W. Colby
www.ColbyConsulting.com


Gustav Brock wrote:
> Hi John
> 
> With that enthusiasm of yours, WWF - Windows Workflow Foundation, must represent nothing less than a Christmas present for you:
> 
>   http://msdn.microsoft.com/en-us/magazine/cc163281.aspx 
> 
> I'm still looking for a good project to put it into action ...
> 
> /gustav
> 
> 
>>>> jwcolby at colbyconsulting.com 10-06-2008 20:42 >>>
> How many of you know what a state machine is?
> 
> http://en.wikipedia.org/wiki/Finite_state_machine 
> 
> More generically a state machine is a structure (hardware or 
> software) that stores the current "state" of something and 
> uses stimuli to cause changes from the current state to some 
> other state.  State machines prevent and allow state changes 
> from a specific state to another specific state.
> 
> IOW from this state you can only move to "these other 
> states" and which state you actually move to will be 
> determined by something that occurred.
> 
> I wrote a state machine for my disability call center software.
> 
> During the processing of claims, EVENTS happen.  Events can 
> be (pretty much) anything that the client wants to call an 
> EVENT, IOW it has to be programmable by the client.  Some 
> actual EVENTS from the event table:
> 
> New Claim Notice
> Approve
> Pend
> Terminate
> Deny
> Re-Open
> Suspend
> Delete This Event
> Receive
> Appeal
> Uphold Denial
> Uphold Termination
> Transfer In
> Transfer Out
> Not Received
> 
> There are MANY MANY more.
> 
> Events MAY or may not cause STATUSES.  Some actual statuses 
> from the STATUS table:
> 
> CS_Status
> None
> First Notice
> Open
> Pending
> Terminated
> Denied
> Re-Opened
> Suspended
> Received
> Appeal
> Upheld Denial
> Upheld Termination
> Transfer In
> Transferred Out
> Determined at IDE
> Archived
> Not Received
> 
> Now, obviously EVENTS and STATUSES are NOT the same thing. 
> Events MAY CAUSE a status change, however there are RULES 
> about what STATUS can be "moved to" from the current status. 
>   For example you cannot go to the CLOSED status unless the 
> claim is OPEN.  You cannot RE-OPEN a claim that is ALREADY 
> in the OPEN state.  APPEAL can move to UPHELD DENIAL, UPHELD 
> TERMINATION or OPEN, and so forth.
> 
> So you have to have a transition table that maps the current 
> status to "POSSIBLE" status, IOW "where can you go from 
> here".  You also have a stimulus table that maps "this event 
> can cause this status (or causes NO status change)".  An 
> OPEN event causes an OPEN status, but a "DOCUMENT RECEIVED" 
> or a "LETTER SENT" event does not cause a status change.
> 
> And finally you have a table that says "this event can 
> happen when in this state".
> 
> Then of course you have a class system that enforces the 
> rules.  It loads all of the tables into class instances 
> which are then stored in collections.
> 
> The tables are "the rules" for the state machine and are 
> fully programmable by the client.  The user is presented a 
> list of "possible events" in a combo box.  Basically the 
> current status is discovered and used to filter the list of 
> events to those that can occur in that state.  The user can 
> therefore only select an event if the system says that it 
> can occur while in the current state.
> 
> State machines are wonderful devices for mapping business 
> rules where "this process can only happen in these cases".
> 
> In my case, there is a table of events that have occurred in 
> the claim.  These events display the entire history of the 
> claim and are the focal point of the claim processing.  The 
> events channel the user, allowing them to do what makes 
> sense given where we are in the processing sequence, and 
> preventing doing things that make no sense given the current 
> state of the claim process.
> 
> The user can examine the event table and see what events 
> have transpired, the sequence of events, the dates, memos 
> about those events etc.  We even create events from outside 
> processes such as the mail merge process creates an event 
> "letter sent" with the name of the letter, who it was sent 
> to etc.
> 
> State machines, check them out.  They might just solve that 
> thorny process control problem that you are facing.
> 



More information about the AccessD mailing list