RULESCRIPT / REFERENCIA

Reglas legibles.
Una referencia práctica.

El lenguaje de RuleGenius para validar y transformar datos, con sintaxis y ejemplos en 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.rules
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.rules
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.rules
rename "price_usd" to "price";
validate "price": number, min 0, max 10000, on error "Price must be valid";

4. Validación condicional

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

Las instrucciones terminan con punto y coma. El orden de las cláusulas opcionales y el comportamiento ante campos ausentes aún deben especificarse para el motor.

21 entradas visibles

Transformaciones

1. Renombrar un campo

Cambia el nombre de una columna sin alterar sus valores.

transformation.rules
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.rules
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.rules
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.rules
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.rules
convert "quantity" to integer;

Parámetros: campo, tipo destino

6. Calcular un campo

Expresa un campo derivado a partir de otras columnas. La expresión debe evaluarse según las reglas del lenguaje.

transformation.rules
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.rules
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.rules
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.rules
round "price" to 2 decimal places;

Parámetros: campo, decimales

10. Enmascarar datos

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

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

Parámetros: campo, máscara

11. Eliminar columnas

Excluye las columnas indicadas del resultado.

transformation.rules
drop "temp_field";

Parámetros: campo(s)

12. Imputar valores ausentes

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

transformation.rules
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.rules
reorder columns "id", "name", "email";

Parámetros: lista ordenada de campos

14. Filtrar filas

Conserva las filas que satisfacen la condición.

transformation.rules
filter "age" > 18;

Parámetros: condición

Grupos de validación

1. Campo obligatorio

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

validation.rules
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.rules
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.rules
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.rules
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.rules
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.rules
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.rules
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 de trabajo

CLI

Los archivos de reglas usan la extensión .rules. La CLI lee estos archivos directamente; el ejemplo muestra el comando previsto.

CLI example
rg-run rules.rules input.csv output.csv

API

El diseño de la API contempla lotes CSV y registros JSON individuales con archivos .rules. Las rutas ilustran la interfaz prevista. Las cargas multipart envían el archivo CSV como una parte de archivo.

Entrada CSV

HTTP example
POST /api/v1/validate/my_rules.rules
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

HTTP example
POST /api/v1/validate/my_rules.rules
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

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

Cada paso del proceso lee un archivo .rules. El motor debe definir el formato de los datos entre pasos y los códigos de salida.

Despliegue privado

La ejecución privada es una opción de despliegue en estudio para que los equipos puedan ejecutar reglas en su propia infraestructura. Aún no está disponible.

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.