Saltar al contenido

Escribir reglas de negocio en lenguaje claro que se traduzcan a lógica

Una regla de negocio escrita en lenguaje claro debería traducirse a una sola fórmula booleana sin necesidad de un comité. La regla de descuento de abajo muestra los hábitos que lo hacen posible: condiciones con nombre y una descripción de una línea cada una, una conectiva por cláusula, y paréntesis allí donde «y» se encuentra con «o».

La regla es (student OR senior) AND NOT expired AND (member OR coupon), cinco condiciones. Cada una tiene una descripción de glosario en la página: el cliente tiene carné de estudiante, tiene 65 años o más, el carné o el cupón ha caducado, el cliente es socio, el cliente presenta un cupón. Con esas descripciones, la lectura en lenguaje natural de la fórmula por el motor es una frase que un responsable de producto puede confirmar o rechazar, y la tabla de verdad es la versión exhaustiva de la misma frase, treinta y dos filas.

Los hábitos que mantienen alineados el lenguaje y la lógica son pocos. Nombra cada condición como un enunciado que es verdadero o falso, no como una cantidad («más de 50» se convierte en over_50, decidido en otro sitio). Escribe «y» y «o» de uno en uno y pon entre paréntesis cada grupo mixto, porque el lenguaje natural no tiene precedencia. Traduce «a menos que» y «salvo» como AND NOT, «solo si» como condición necesaria, y «o bien … o bien» como XOR solo cuando se quiere decir «pero no ambos». Mantén las negaciones pegadas a la condición que niegan.

Cuando una frase se resiste a la traducción, lo habitual es que la frase sea ambigua y no que la lógica sea insuficiente, y las dos lecturas deberían escribirse como dos fórmulas y compararse; el comprobador de equivalencia informa de las filas en las que difieren, que es la pregunta que llevar de vuelta a quien es dueño de la regla. La lista de revisión recoge estos puntos para el lado de quien revisa en esa conversación.

Ejemplo

discount := (student OR senior) AND NOT expired AND (member OR coupon) · salida

Comprobaciones exactas

¿Siempre verdadera (tautología)? No Contraejemplo: student = F, senior = F, expired = F, member = F, coupon = F · Exhaustively checked and solver cross-checked · 1 filas
¿Siempre falsa (contradicción)? No Contraejemplo: student = F, senior = V, expired = F, member = F, coupon = V · Exhaustively checked and solver cross-checked · 10 filas
¿Puede ser verdadera? Sí Asignación de ejemplo: student = F, senior = V, expired = F, member = F, coupon = V · Exhaustively checked and solver cross-checked · 10 filas

Tabla de verdad (32 filas)

Escribir reglas de negocio en lenguaje claro que se traduzcan a lógica
#studentseniorexpiredmembercoupondiscount
0FALSOFALSOFALSOFALSOFALSOFALSO
1FALSOFALSOFALSOFALSOVERDADEROFALSO
2FALSOFALSOFALSOVERDADEROFALSOFALSO
3FALSOFALSOFALSOVERDADEROVERDADEROFALSO
4FALSOFALSOVERDADEROFALSOFALSOFALSO
5FALSOFALSOVERDADEROFALSOVERDADEROFALSO
6FALSOFALSOVERDADEROVERDADEROFALSOFALSO
7FALSOFALSOVERDADEROVERDADEROVERDADEROFALSO
8FALSOVERDADEROFALSOFALSOFALSOFALSO
9FALSOVERDADEROFALSOFALSOVERDADEROVERDADERO
10FALSOVERDADEROFALSOVERDADEROFALSOVERDADERO
11FALSOVERDADEROFALSOVERDADEROVERDADEROVERDADERO
12FALSOVERDADEROVERDADEROFALSOFALSOFALSO
13FALSOVERDADEROVERDADEROFALSOVERDADEROFALSO
14FALSOVERDADEROVERDADEROVERDADEROFALSOFALSO
15FALSOVERDADEROVERDADEROVERDADEROVERDADEROFALSO
16VERDADEROFALSOFALSOFALSOFALSOFALSO
17VERDADEROFALSOFALSOFALSOVERDADEROVERDADERO
18VERDADEROFALSOFALSOVERDADEROFALSOVERDADERO
19VERDADEROFALSOFALSOVERDADEROVERDADEROVERDADERO
20VERDADEROFALSOVERDADEROFALSOFALSOFALSO
21VERDADEROFALSOVERDADEROFALSOVERDADEROFALSO
22VERDADEROFALSOVERDADEROVERDADEROFALSOFALSO
23VERDADEROFALSOVERDADEROVERDADEROVERDADEROFALSO
24VERDADEROVERDADEROFALSOFALSOFALSOFALSO
25VERDADEROVERDADEROFALSOFALSOVERDADEROVERDADERO
26VERDADEROVERDADEROFALSOVERDADEROFALSOVERDADERO
27VERDADEROVERDADEROFALSOVERDADEROVERDADEROVERDADERO
28VERDADEROVERDADEROVERDADEROFALSOFALSOFALSO
29VERDADEROVERDADEROVERDADEROFALSOVERDADEROFALSO
30VERDADEROVERDADEROVERDADEROVERDADEROFALSOFALSO
31VERDADEROVERDADEROVERDADEROVERDADEROVERDADEROFALSO

Lectura en lenguaje claro

Principiantediscount es verdadero exactamente cuando se cumplen todas las condiciones siguientes:
1. al menos uno entre student y senior es verdadero (pueden serlo ambos)
2. expired es falso
3. al menos uno entre member y coupon es verdadero (pueden serlo ambos)
En todos los demás casos, discount es falso.
Sobre los operadores:
- AND (Y) solo es verdadero cuando todas sus partes son verdaderas.
- OR (O) es inclusivo: es verdadero en cuanto al menos una parte es verdadera, también cuando lo son varias.
- NOT (NO) invierte un valor: lo verdadero pasa a ser falso y lo falso, verdadero.
Intermediodiscount es verdadero exactamente cuando se cumplen todas las condiciones siguientes:
1. al menos uno entre student y senior es verdadero (pueden serlo ambos)
2. expired es falso
3. al menos uno entre member y coupon es verdadero (pueden serlo ambos)
En todos los demás casos, discount es falso.
Avanzadodiscount es verdadero exactamente cuando se cumplen todas las condiciones siguientes [conjunción ∧]:
1. al menos uno entre student y senior es verdadero (pueden serlo ambos) [disyunción inclusiva ∨]
2. expired es falso [negación ¬]
3. al menos uno entre member y coupon es verdadero (pueden serlo ambos) [disyunción inclusiva ∨]
En todos los demás casos, discount es falso.
Notación formal: (student ∨ senior) ∧ ¬expired ∧ (member ∨ coupon)

Diagrama lógico

Writing business rules in plain English that translate to logic Writing business rules in plain English that translate to logic student senior expired member coupon discount AND OR NOT OR
Writing business rules in plain English that translate to logic Writing business rules in plain English that translate to logic student senior expired member coupon discount AND OR NOT OR

El error habitual

Traducir «estudiantes y mayores tienen descuento» como student AND senior. El «y» del lenguaje enumera dos grupos que cumplen cada uno; la lógica es student OR senior. La tabla hace evidente la diferencia, una fila VERDADERA frente a tres.

Preguntas

¿Las condiciones deberían ser positivas o negativas?

Positivas cuando sea posible (expired en lugar de not_expired), con la negación en la fórmula. Las dobles negaciones en los nombres de las condiciones son donde empiezan los deslices de De Morgan.

¿Cómo trato los umbrales numéricos?

Como entradas de umbral: age_65_or_over se define una sola vez como age ≥ 65 sobre la cantidad age, y la regla sigue combinando un nombre VERDADERO/FALSO. El motor deduce el orden entre los umbrales de una misma cantidad, así que age_at_least_21 nunca puede valer VERDADERO mientras age_at_least_18 vale FALSO, y un escenario o una prueba puede dar el número en sí. Fuera de la app la misma disciplina funciona a mano: decide cada umbral una sola vez, nómbralo como un enunciado y anota su definición en el glosario, donde puede leerse y comprobarse.

Relacionado

Véase también

Pruebas y reglas

Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.