Las reglas de negocio indican qué debe cumplirse dentro del dominio. Pueden expresar condiciones, restricciones, cálculos, decisiones, autorizaciones, límites o políticas. Son una parte esencial del modelo de dominio porque explican cómo deben comportarse los conceptos importantes.
Un modelo que solo muestra entidades, atributos y relaciones puede parecer ordenado, pero será incompleto si no incluye reglas. En la práctica, muchas fallas de software aparecen porque una regla fue omitida, interpretada de forma ambigua o implementada en un lugar incorrecto.
Una regla de negocio es una declaración que limita, guía o determina el comportamiento del dominio. No describe una preferencia técnica, sino una condición que proviene del negocio, de una política interna, de una norma externa o de una necesidad operativa.
Por ejemplo: "Un paciente no puede reservar dos turnos pendientes para la misma especialidad", "Una cancelación debe realizarse con al menos 24 horas de anticipación" o "El importe final se calcula aplicando descuento antes de impuestos".
Las reglas de condición indican cuándo algo puede ocurrir. Suelen expresarse con frases como "si", "solo si", "cuando", "mientras" o "siempre que".
Ejemplos:
Estas reglas ayudan a definir condiciones previas para acciones del dominio.
Las reglas de restricción indican límites que no deben violarse. Pueden referirse a cantidades, estados, combinaciones, fechas, rangos o relaciones entre conceptos.
Por ejemplo, una franja horaria no debe superponerse con otra dentro de la misma agenda. Un pedido no puede confirmarse sin ítems. Un descuento no puede superar cierto porcentaje. Un paciente no puede tener más de una reserva pendiente con el mismo profesional para el mismo día.
Las restricciones suelen ser candidatas a invariantes, tema que veremos en el próximo capítulo.
Las reglas de cálculo determinan cómo obtener un valor a partir de otros datos. Pueden incluir fórmulas, prioridades, redondeos, impuestos, descuentos, recargos o criterios de duración.
En un dominio de turnos, la duración de un turno puede depender de la especialidad, del profesional o del tipo de atención. En un dominio de ventas, el total de un pedido puede depender de ítems, impuestos, descuentos y gastos de envío.
Las reglas de decisión determinan qué camino tomar ante determinadas condiciones. Pueden responder preguntas como: ¿se aprueba o se rechaza?, ¿qué prioridad corresponde?, ¿qué estado debe asignarse?, ¿qué política se aplica?
Por ejemplo, si un paciente cancela fuera de término, el sistema puede registrar una inasistencia. Si una agenda no tiene disponibilidad, el sistema puede ofrecer lista de espera. Si un pedido supera cierto monto, puede requerir autorización adicional.
Estas reglas suelen representarse bien con tablas de decisión, árboles de decisión o casos concretos.
Algunas reglas indican quién puede realizar una acción. Aunque la seguridad técnica se implemente luego, el dominio puede tener reglas propias sobre permisos y responsabilidades.
Por ejemplo, un paciente puede cancelar sus propios turnos, pero no los de otro paciente. Un administrativo puede reprogramar turnos dentro de una sede. Un profesional puede bloquear franjas de su agenda, pero quizás no pueda modificar agendas de otros profesionales.
Estas reglas conectan roles, acciones y límites del negocio.
Muchas reglas dependen del tiempo. Una cancelación puede permitirse hasta 24 horas antes. Una promoción puede estar vigente durante un período. Una cobertura médica puede estar activa hasta una fecha. Un turno puede pasar a vencido si no se confirma a tiempo.
Las reglas temporales requieren especial cuidado porque involucran fechas, horarios, zonas horarias, días hábiles, feriados o períodos de vigencia. El modelo debe expresar claramente qué momento se toma como referencia.
Algunas reglas están escritas en documentos formales. Otras aparecen en conversaciones o en la práctica diaria. Estas últimas son reglas implícitas y pueden ser peligrosas si no se descubren, porque los expertos del negocio las dan por obvias pero el equipo técnico no las conoce.
Por ejemplo, un administrativo puede decir: "Nunca damos sobreturnos los viernes a la tarde". Si esa política afecta el sistema, debe registrarse como regla. No alcanza con dejarla como comentario informal de una reunión.
No todas las reglas cambian con la misma frecuencia. Algunas son estables porque pertenecen a la esencia del dominio. Otras cambian por decisiones comerciales, políticas internas, regulación, temporada o estrategia.
Por ejemplo, "un turno reservado ocupa una franja horaria" puede ser una regla bastante estable. En cambio, "la cancelación requiere 24 horas de anticipación" podría cambiar a 48 horas. Distinguir reglas estables y cambiantes ayuda a tomar mejores decisiones de diseño más adelante.
Las reglas deben escribirse usando el lenguaje ubicuo del dominio. Si el negocio habla de Turno, Paciente, Agenda, Franja horaria y Cancelación fuera de término, las reglas deberían usar esos términos.
Una regla expresada con vocabulario técnico puede perder claridad. Por ejemplo, "validar campo estado antes de insertar registro" no comunica lo mismo que "un turno atendido no puede cancelarse". La segunda frase pertenece al dominio y puede ser validada por expertos.
Durante el análisis, debemos identificar a qué concepto se relaciona cada regla. Algunas reglas pertenecen naturalmente a una entidad. Otras involucran varios conceptos y pueden requerir un servicio de dominio, una política o una regla explícita documentada.
Por ejemplo, "un turno no puede reservarse si la franja ya está ocupada" involucra Turno, Franja horaria y Agenda. "Un correo electrónico debe tener formato válido" puede pertenecer al objeto de valor Correo electrónico. "El total del pedido se calcula sumando ítems y descuentos" puede pertenecer a Pedido o a una política de precios, según el dominio.
La siguiente tabla muestra distintos tipos de reglas:
| Regla | Tipo principal | Conceptos involucrados |
|---|---|---|
| Un turno atendido no puede cancelarse. | Restricción | Turno, Cancelación |
| Una agenda publicada debe tener al menos una franja. | Condición y restricción | Agenda, Franja horaria |
| La duración del turno depende de la especialidad. | Cálculo o derivación | Turno, Especialidad |
| Una cancelación fuera de término registra una inasistencia. | Decisión | Cancelación, Turno, Paciente |
| Solo un administrativo puede reprogramar turnos de otro paciente. | Autorización | Usuario, Rol, Turno |
Para descubrir reglas de negocio, conviene buscar expresiones y situaciones como:
Una regla debe probarse con ejemplos y contraejemplos. Si la regla dice que un paciente no puede tener dos turnos pendientes para la misma especialidad, debemos preguntar qué ocurre si los turnos son con profesionales distintos, en sedes distintas, en fechas distintas o si uno de ellos ya está confirmado.
Los ejemplos revelan límites, excepciones y condiciones ocultas. También ayudan a convertir reglas ambiguas en reglas verificables.
Al trabajar con reglas de negocio, suelen aparecer estos errores:
Las reglas de negocio son una parte central del modelado de dominio. Explican qué acciones están permitidas, qué restricciones se deben respetar, cómo se calculan valores y qué decisiones debe tomar el sistema. Sin reglas claras, el modelo queda incompleto y el software puede comportarse de manera incorrecta aunque técnicamente funcione.
En el próximo tema estudiaremos los invariantes del dominio, es decir, aquellas propiedades que siempre deben cumplirse para que el modelo se mantenga válido.