Index: flexoentity/flexo_entity.py
===================================================================
--- flexoentity/flexo_entity.py	(revision 8840db74c6f31da82b328f156497143fb0be6908)
+++ flexoentity/flexo_entity.py	(revision 3cf10cb640ba51528620e4f93d2a95458a05d852)
@@ -62,4 +62,5 @@
 from flexoentity.id_factory import FlexOID
 from flexoentity import canonical_seed
+
 
 # ──────────────────────────────────────────────────────────────────────────────
@@ -105,6 +106,20 @@
     OBSOLETE = "O"
 
+    def allowed_transitions(self) -> list[str]:
+        """Return allowed state names for this state."""
+        return TRANSITIONS[self]
+
     def __str__(self):
         return self.name
+
+TRANSITIONS = {
+    EntityState.DRAFT: [EntityState.APPROVED],
+    EntityState.APPROVED: [EntityState.APPROVED_AND_SIGNED, EntityState.PUBLISHED,
+                           EntityState.OBSOLETE],
+    EntityState.APPROVED_AND_SIGNED: [EntityState.PUBLISHED, EntityState.OBSOLETE],
+    EntityState.PUBLISHED: [EntityState.OBSOLETE],
+    EntityState.OBSOLETE: [],
+}
+
 
 
@@ -507,17 +522,5 @@
     def allowed_transitions(self) -> list[str]:
         """Return a list of possible next state names (for GUI use)."""
-        match self.state:
-            case EntityState.DRAFT:
-                return ["APPROVED"]
-            case EntityState.APPROVED:
-                return ["APPROVED_AND_SIGNED", "PUBLISHED", "OBSOLETE"]
-            case EntityState.APPROVED_AND_SIGNED:
-                return ["PUBLISHED", "OBSOLETE"]
-            case EntityState.PUBLISHED:
-                return ["OBSOLETE"]
-            case EntityState.OBSOLETE:
-                return []
-            case _:
-                return []
+        return self.state.allowed_transitions()
 
     def apply_state_change(self, new_state):
