Muchos objetos del dominio cambian de significado durante un proceso. Un Turno puede estar disponible, reservado, confirmado, cancelado, atendido o ausente. Un Pedido puede estar pendiente, pagado, enviado, entregado o anulado. Una Factura puede estar emitida, pagada o anulada. Estos cambios no son simples etiquetas: determinan qué acciones están permitidas y qué reglas se aplican.
Modelar estados y transiciones ayuda a comprender el ciclo de vida de conceptos importantes. También evita permitir operaciones inválidas, como cancelar un turno ya atendido o enviar un pedido que todavía no fue pagado.
Un estado representa una situación significativa en la que puede encontrarse un objeto del dominio durante su ciclo de vida. No todo atributo es un estado. Para que una situación sea estado, normalmente debe afectar reglas, acciones permitidas, decisiones o interpretación del objeto.
Por ejemplo, que un Turno esté reservado significa que ya no puede ofrecerse libremente a otro paciente. Que esté atendido significa que no debería cancelarse como si aún estuviera pendiente. Cada estado cambia el significado del objeto.
Una transición es el cambio de un estado a otro. Suele ocurrir por una acción, un evento, una decisión o el paso del tiempo. Por ejemplo, un Turno pasa de disponible a reservado cuando un paciente lo reserva. Pasa de reservado a cancelado cuando se cancela. Pasa de confirmado a atendido cuando se registra la atención.
Las transiciones deben estar controladas por reglas. No todos los cambios son válidos. Un turno atendido no debería volver a disponible sin una regla explícita que justifique esa operación.
Como vimos en el tema anterior, no conviene confundir estados con tipos. Un tipo suele ser una clasificación más estable. Un estado cambia durante el ciclo de vida. Turno presencial y Turno virtual pueden ser tipos o modalidades. Turno reservado y Turno cancelado son estados.
Una buena pregunta es: ¿la misma instancia puede pasar de una categoría a otra durante su vida normal? Si la respuesta es sí, probablemente hablamos de estados.
Un estado describe una situación actual. Un evento describe algo que ocurrió. "Reservado" es un estado. "Turno reservado" es un evento que pudo causar el cambio al estado reservado. "Cancelado" es un estado. "Turno cancelado" es un hecho ocurrido en un momento.
Distinguir ambos conceptos ayuda a modelar mejor. El estado permite saber qué puede hacerse ahora. El evento permite conocer cómo se llegó a esa situación y puede ser parte del historial.
Un ciclo de vida simple para Turno podría ser:
Con caminos alternativos:
Este ciclo no es universal. Cada organización puede tener reglas diferentes. Algunas pueden no usar confirmación. Otras pueden permitir reprogramación, lista de espera o sobreturnos.
Una de las razones principales para modelar estados es definir acciones permitidas. Por ejemplo:
Estas reglas evitan transiciones incoherentes.
Muchas transiciones ocurren porque una persona o sistema realiza una acción. Reservar, cancelar, confirmar, atender, pagar, aprobar, rechazar o enviar son acciones que pueden cambiar estados.
Al analizar una acción, conviene preguntar desde qué estados puede ejecutarse, a qué estado lleva, quién puede realizarla, qué condiciones deben cumplirse y qué consecuencias produce.
Otras transiciones ocurren por el paso del tiempo. Un turno no confirmado puede vencer. Una reserva puede expirar. Una promoción puede dejar de estar vigente. Un pedido pendiente puede cancelarse automáticamente después de cierto plazo.
Estas transiciones requieren reglas temporales claras: cuánto tiempo debe pasar, desde qué momento se cuenta, qué calendario se usa y qué ocurre si hay días no laborables o feriados.
Algunos estados son finales o casi finales. Un Turno atendido normalmente cierra el ciclo del turno. Un Pedido entregado puede considerarse final, salvo devoluciones. Una Factura anulada conserva registro, pero ya no sigue el mismo proceso que una factura activa.
Identificar estados finales ayuda a evitar operaciones inválidas y a comprender cuándo un proceso termina.
Algunos estados representan etapas intermedias. Un Pedido puede estar en preparación antes de enviarse. Una Agenda puede estar en borrador antes de publicarse. Una Reserva puede estar pendiente antes de confirmarse.
Los estados intermedios suelen ser necesarios cuando hay reglas, revisiones o acciones específicas antes de llegar al estado final. Si no aportan reglas ni decisiones, quizá no hace falta modelarlos explícitamente.
Una tabla puede ayudar a revisar estados y transiciones:
| Estado actual | Acción o evento | Estado resultante | Condición |
|---|---|---|---|
| Disponible | Reservar turno | Reservado | La franja no debe estar ocupada. |
| Reservado | Confirmar turno | Confirmado | Debe realizarse antes del vencimiento. |
| Reservado | Cancelar turno | Cancelado | Debe cumplir política de cancelación. |
| Confirmado | Registrar atención | Atendido | Debe haber llegado la fecha del turno. |
| Confirmado | Registrar inasistencia | Ausente | El paciente no asistió. |
Los diagramas de estados de UML son útiles para representar ciclos de vida. Muestran estados como nodos y transiciones como flechas. Permiten visualizar qué caminos son válidos y qué eventos producen cambios.
No siempre hace falta un diagrama formal. Para modelos simples, una tabla o lista puede alcanzar. Pero cuando un objeto tiene muchos estados, reglas y caminos alternativos, el diagrama de estados ayuda a detectar huecos e inconsistencias.
Cada estado puede habilitar o prohibir reglas. Por ejemplo, un Turno reservado puede cancelarse, pero un Turno atendido no. Una Factura emitida puede anularse, pero una Factura en borrador quizá puede eliminarse sin anulación formal.
Al modelar estados, conviene asociar cada estado con las acciones permitidas, las restricciones y los eventos que pueden ocurrir. Esto permite construir pruebas más completas y evitar comportamientos no previstos.
Estas preguntas ayudan a identificar estados y transiciones:
Al modelar estados y transiciones, suelen aparecer estos errores:
Los estados y transiciones permiten representar objetos cuyo significado cambia durante un proceso. Hacen visible el ciclo de vida del dominio, muestran qué acciones son válidas y ayudan a ubicar reglas según la situación de cada objeto. Cuando un concepto importante cambia de estado, modelarlo explícitamente evita ambigüedad y errores.
En el próximo tema estudiaremos los eventos de dominio, es decir, hechos importantes que ya ocurrieron y que pueden afectar el modelo o iniciar nuevos procesos.