Adopt `transitions` library for consultation queue state machine
Problem
Queue status transitions in app/services/consultation_queue_service.py are implemented as a manually maintained VALID_TRANSITIONS dict with imperative validation logic (~120 LOC). Adding a new state or transition requires editing multiple places and is error-prone.
The full flow is:
vitals → know_your_patient → waiting → in_consultation → consultation_completed → medicine_prescribed → medicine_verified → counselling_done
Location
app/services/consultation_queue_service.py lines ~283–399
Fix
Replace with the transitions library (LGPL-3.0, actively maintained):
from transitions import Machine
states = [s.value for s in QueueStatusEnum]
transitions_list = [
{'trigger': 'advance', 'source': 'vitals', 'dest': 'know_your_patient'},
{'trigger': 'advance', 'source': 'waiting', 'dest': 'in_consultation'},
# ...
]
machine = Machine(model=queue_obj, states=states, transitions=transitions_list)
Invalid transitions are rejected automatically; no manual validation code needed.
References
Effort
Medium (~3h)