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)

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