RULESCRIPT / REFERENCIA

Reglas legibles.
Una base que conservamos.

El lenguaje histórico de RuleGenius para validación y transformación, reorganizado como una referencia práctica.

¿Qué es RuleScript?

RuleScript es el lenguaje de dominio específico propuesto originalmente para expresar transformaciones y validaciones en texto legible. Su idea central separa la declaración de una regla del entorno que la ejecuta.

Los ejemplos usan nombres de campo entre comillas, palabras clave explícitas y mensajes de error opcionales. Sirven de referencia del lenguaje; los casos límite y el soporte real requieren un motor definido.

Sintaxis y ejemplos

1. Transformar un registro

transform.rs
rename "price_usd" to "price";
split "full_name" into "first_name", "last_name" by " ";
map "country_code" [US: "United States", CA: "Canada", MX: "Mexico"];

2. Validar valores

validate.rs
validate "price": number, min 0, max 10000, on error "Price must be valid";
validate "country": required, in ["United States", "Canada", "Mexico"], on error "Invalid country";

3. Combinar pasos explícitos

Aplica el renombrado y el mapeo antes de comprobar los valores resultantes. Conserva los datos originales y explicita el orden de las transformaciones.

combined.rs
rename "price_usd" to "price";
validate "price": number, min 0, max 10000, on error "Price must be valid";

4. Validación condicional

conditional.rs
validate "discount": number, on error "Discount must be numeric", if "price" > 100;

El ejemplo histórico omitía el punto y coma final; aquí se normaliza. El orden de las cláusulas opcionales y el comportamiento ante campos ausentes siguen necesitando una especificación del motor.

21 entradas visibles

Transformaciones

1. Renombrar un campo

Cambia el nombre de una columna sin alterar sus valores.

transformation.rs
rename "price_usd" to "price";

Parámetros: campo, nombre nuevo

2. Dividir un campo

Separa un campo en varias columnas con un delimitador. Revisa los casos de nombres compuestos antes de usar el ejemplo.

transformation.rs
split "full_name" into "first_name", "last_name" by " ";

Parámetros: campo, campos destino, delimitador

3. Combinar campos

Une varias columnas utilizando el separador indicado.

transformation.rs
merge "first_name", "last_name" into "full_name" with " ";

Parámetros: campos origen, campo destino, separador

4. Mapear valores

Sustituye códigos por los valores definidos en un mapa explícito.

transformation.rs
map "country_code" [US: "United States", CA: "Canada", MX: "Mexico"];

Parámetros: campo, mapa

5. Convertir el tipo

Declara una conversión de tipo. El comportamiento ante valores no convertibles necesita definición del motor.

transformation.rs
convert "quantity" to integer;

Parámetros: campo, tipo destino

6. Calcular un campo

Expresa un campo derivado a partir de otras columnas. La notación de expresiones es histórica.

transformation.rs
calculate "total" as "price * quantity";

Parámetros: campo nuevo, expresión

7. Normalizar mayúsculas

Convierte texto a minúsculas con la operación documentada.

transformation.rs
normalize "name" to lowercase;

Parámetros: campo, modo de mayúsculas

8. Sustituir valores

Reemplaza un valor concreto, como null, por un valor explícito.

transformation.rs
replace "status" null with "N/A";

Parámetros: campo, valor anterior, sustitución

9. Redondear números

Redondea al número indicado de decimales. La regla de redondeo depende de la implementación.

transformation.rs
round "price" to 2 decimal places;

Parámetros: campo, decimales

10. Enmascarar datos

Ejemplo histórico de enmascaramiento de un campo. No demuestra anonimización irreversible ni garantiza privacidad.

transformation.rs
anonymize "email" with "****@domain.com";

Parámetros: campo, máscara

11. Eliminar columnas

Excluye las columnas indicadas del resultado.

transformation.rs
drop "temp_field";

Parámetros: campo(s)

12. Imputar valores ausentes

Ejemplo histórico de sustitución por la media. Evalúa su efecto sobre el significado de los datos.

transformation.rs
impute "age" missing with average;

Parámetros: campo, método de imputación

13. Reordenar columnas

Define el orden de las columnas de salida.

transformation.rs
reorder columns "id", "name", "email";

Parámetros: lista ordenada de campos

14. Filtrar filas

Conserva las filas que satisfacen la condición.

transformation.rs
filter "age" > 18;

Parámetros: condición

Funciones de validación

1. Campo obligatorio

Comprueba que un campo no esté vacío ni sea nulo.

validation.rs
validate "name": required, on error "Name is required";

Parámetros: campo; on error opcional

2. Tipo de dato

Expresa el tipo esperado: number, integer, string, date, time o datetime.

validation.rs
validate "age": number, on error "Age must be numeric";

Parámetros: campo, tipo; on error opcional

3. Rango numérico

Declara límites mínimo y máximo para un valor.

validation.rs
validate "price": number, min 0, max 10000, on error "Price must be valid";

Parámetros: campo, min, max; on error opcional

4. Pertenencia a una lista

Comprueba que el valor figure en una lista explícita.

validation.rs
validate "country": in ["United States", "Canada", "Mexico"], on error "Invalid country";

Parámetros: campo, lista; on error opcional

5. Mayor que o igual

Compara el valor con un umbral usando > o >=.

validation.rs
validate "discount": > 0, on error "Discount must be positive";
validate "price": >= 0, on error "Price must be non-negative";

Parámetros: campo, umbral; on error opcional

6. Menor que o igual

Compara el valor con un umbral usando < o <=.

validation.rs
validate "age": < 18, on error "Age must be below 18";
validate "discount": <= 50, on error "Discount must be 50% or less";

Parámetros: campo, umbral; on error opcional

7. Igualdad y exclusión

Comprueba igualdad con equal o excluye valores mediante not in.

validation.rs
validate "status": equal "Active", on error "Status must be active";
validate "status": not in ["Inactive", "Suspended"], on error "Invalid status";

Parámetros: campo, valor o lista excluida; on error opcional

Flujos históricos

CLI

El diseño original usaba archivos fuente .rs y artefactos compilados .rsx. Son comandos históricos; no se ofrece un instalador.

historical CLI
rg-compile rules.rs
rg-run rules.rsx input.csv output.csv

API

La documentación proponía lotes CSV y registros JSON individuales. Las rutas siguientes son bocetos históricos, no endpoints operativos. Una carga multipart debe enviar una parte de archivo real, no el nombre dentro de JSON que mostraba la web anterior.

Entrada CSV

historical HTTP sketch
POST /api/v1/validate/my_rules.rsx
Content-Type: multipart/form-data; boundary=example

--example
Content-Disposition: form-data; name="file"; filename="input.csv"
Content-Type: text/csv

price,country
25,US
--example--

Registro JSON individual

historical HTTP sketch
POST /api/v1/validate/my_rules.rsx
Content-Type: application/json

{"record":{"full_name":"Sample Person","price":-50,"country_code":"US"}}
illustrative response
{"status":"error","errors":[{"field":"price","error":"Price must be between 0 and 10000"}]}

El procesamiento por lotes comprueba una entrega completa; la validación por registro comprueba un evento o envío. Una implementación futura debe definir errores y coherencia entre interfaces.

Procesos encadenados

historical pipeline
rg-transform step1.rsx input.csv \
  | rg-transform step2.rsx \
  | rg-validate rules.rsx --output output.csv

Conservamos el concepto del proceso original. Un motor debe definir el formato entre pasos y los códigos de salida antes de que pueda usarse de forma fiable.

Despliegue privado

La ejecución local era una dirección de despliegue en la web anterior. Aquí no se anuncia una oferta empresarial disponible y el despliegue por sí solo no acredita cumplimiento normativo.

Prueba dos comprobaciones en tu navegador.

Esta demostración comprueba un precio numérico entre 0 y 10000 y un código US, CA o MX. Es JavaScript escrito para estas dos comprobaciones, no un parser de RuleScript ni el futuro motor. Los datos permanecen en esta página.

0 ≤ price ≤ 10000 · country ∈ {US, CA, MX}

Ejecuta las comprobaciones para ver el resultado.

¿Qué cambia en la migración?

  • RuleScript conserva su nombre. Los ejemplos .rs y .rsx se mantienen como documentación; la migración de la web no cambia su semántica de ejecución.
  • Las comillas se normalizan para copiar los ejemplos. El ejemplo condicional incluye punto y coma final.
  • Se conservan las 14 transformaciones y los 7 grupos de validación. Los ejemplos de CLI y API indican su estado.
  • El enmascaramiento se describe como tal; no como garantía de anonimización.

¿Te interesa el proyecto? Hablemos.