We do something similar to this with Activity types. When a person needs to be reimbursed they submit an Activity type called "Check Request" and assign it to the person that needs to approve it. That person will review it and set the status to Approved and then assign it to the next person to approve. We have detailed logging enabled and each time the activity is approved/denied/assigned a log event is recorded. We had Jon write us an extension that would show the log history for the Activity type at the bottom of the Activity. That way the person who cuts the check could see that all the approvals necessary were given.
I'd like to make some improvements to it so that the Statuses would be "Approve and Route", "Deny and Return", etc. And use Relationships to automatically assign the activity based on who is the supervisor of the person approving it. But that's down the road.
It's got several hard coded items in the code like the activity type id, and specific activity status id's but the code is at