Hmmm. This seems - to my eye - to be Business Logic and here it's coded up in a data model. Seems like incorrect encapsulation, IMO. If we're going to trigger Business Logic from state transitions - which is a good idea - can we have the actual business logic elsewhere?