Volver a BLOX ESL
Demo 3 de 3

Demo de negocios

BLOX ESL como motor de reglas para pedidos: aprobaciones, descuentos, impuestos, envío y revisión manual. El host C mantiene la persistencia, BLOX decide la política.

Contexto

Las políticas comerciales cambian por temporada, campaña, país o segmento. Tenerlas incrustadas en el binario obliga a redeployar. Con BLOX ESL viven en un archivo .blox auditable.

Pedidos en C

El host administra clientes, órdenes, persistencia, autenticación e integraciones (ERP, CRM, pasarela de pago).

Reglas en BLOX

Descuentos, cupones, tramos, impuestos y umbrales de aprobación en reglas.blox.

Auditoría al host

BLOX llama HOST_AUDIT(); el host registra la traza en su propio sistema.

Ubicación y ejecución

rutatext
integrations/demo-reglas-C
run.ps1powershell
.\integrations\demo-reglas-C\run.ps1

¿Qué hace main.c?

Define la estructura Order, registra un callback de auditoría y evalúa cada pedido vía BLOX.

main.cc
typedef struct Order {
    const char *id;
    const char *customer;
    const char *country;
    const char *coupon;
    double      subtotal;
    double      score;
} Order;

Callback nativo para auditoría:

main.cc
blox_vm_register_native(
    vm,
    "HOST_AUDIT",
    2,
    BLOX_VALUE_EMPTY,
    host_audit,
    &ledger
);

Cada orden se serializa a JSON y se convierte en tabla BLOX:

pedido.jsonjson
[{
  "id": "A104",
  "cliente": "NORMAL",
  "pais": "PY",
  "cupon": "",
  "subtotal": 6300.00,
  "score_credito": 640
}]
main.cc
blox_vm_table_from_json(vm, json_view, &input);
blox_vm_call(vm, "evaluar_orden", &input, 1, &result);

El resultado es una tabla de una fila con campos:

aprobadarequiere_revisiondescuento_pctimpuestoenviototalmensaje

¿Qué hace reglas.blox?

Expone evaluar_orden(pedido). Lee campos del pedido, aplica descuentos por segmento y umbrales de aprobación por score de crédito.

reglas.bloxblox
FUNCION evaluar_orden(pedido)
INICIO
    NUMERICO subtotal, score, descuento, impuesto, envio, total
    CADENA cliente, pais, cupon, mensaje
    LOGICO aprobada, revision

    subtotal = pedido[1].subtotal
    score    = pedido[1].score_credito
    cliente  = pedido[1].cliente
    pais     = pedido[1].pais
    cupon    = pedido[1].cupon

Descuentos por segmento:

reglas.bloxblox
SI (cliente == "VIP") ENTONCES
    descuento = 0.15
    envio     = 0
FIN_SI

SI (cupon == "BLACKFRIDAY") ENTONCES
    descuento = descuento + 0.10
FIN_SI

Aprobación por monto y score:

reglas.bloxblox
SI (subtotal > 5000) ENTONCES
    SI (score < 700) ENTONCES
        aprobada = FALSO
        revision = VERDADERO
        mensaje  = "requiere aprobacion manual"
        HOST_AUDIT("revision", "monto alto con score medio")
    FIN_SI
FIN_SI

Devuelve una tabla con la decisión completa:

reglas.bloxblox
resultado = {
    aprobada          = aprobada,
    requiere_revision = revision,
    descuento_pct     = descuento,
    impuesto          = impuesto,
    envio             = envio,
    total             = total,
    mensaje           = mensaje
}

RETORNAR resultado
FINAL_FUNCION
Resultado esperado
Resumen reglas: auditorias=3 rechazadas=2 total_aprobado=4204.00

El área comercial puede ajustar descuentos, cupones y umbrales editando reglas.blox; el host C sigue en producción sin recompilar.

Explora las otras integraciones