Petri-Net based state machine w/ Guards + Roles

This is my first time dipping my toes into Solidity.

My current code is here: (incomplete/WIP) https://gist.github.com/stackdump/ed25acd9405d3fa5ceca46064b025a7c

Generally I'm hoping to develop a re-usable library for crating models and binding to ACL / Roles

If Intend for the models to be deployed as singleton-contracts - is there a specific pattern I should follow, or anything else I should consider?

I was able to add Open Zepplin's ACL