Motor de reglas comerciales
Esta aplicación de referencia demuestra la construcción, verificación, compilación y prueba de un componente WebAssembly Component Model determinista para el cálculo de descuentos comerciales y elegibilidad por tiers (Bronze, Silver, Gold).
El código fuente completo y los artefactos ejecutables están disponibles en el repositorio:
examples/business-rules/.
1. Contrato WIT
Sección titulada «1. Contrato WIT»El componente expone dos funciones a través de la interfaz rules:
package wasma:examples@0.1.0;
interface rules { record discount-summary { status-code: s32, discount-cents: s32, final-amount-cents: s32, applied-rate: s32, }
evaluate-discount: func(order-amount-cents: s32, customer-tier: s32, loyalty-years: s32) -> discount-summary; is-eligible-for-tier: func(customer-tier: s32, annual-spend-cents: s32) -> bool;}
world business-rules { export rules;}2. Reglas de Negocio y Límites
Sección titulada «2. Reglas de Negocio y Límites»El componente implementa las siguientes reglas aritméticas deterministas sobre enteros con signo i32:
Límites de entrada y prevención de overflow
Sección titulada «Límites de entrada y prevención de overflow»order-amount-cents: Rango admisible0..=20_000_000(hasta $200,000.00 USD). Cifras superiores o valores negativos retornanstatus-code: 400para garantizar que ninguna multiplicación intermedia desborde el límite positivo dei32($2^{31}-1$).loyalty-years: Rango admisible0..=100. Valores negativos o superiores retornanstatus-code: 400.customer-tier: Valores admitidos1(Bronze),2(Silver) y3(Gold). Tiers no reconocidos retornanstatus-code: 404.
Tiers y bonificaciones
Sección titulada «Tiers y bonificaciones»- Bronze (Tier 1):
- Tasa base:
0 %. - Bonificación por volumen: Si
order-amount-cents >= 10_000($100.00), tasa aplicada =5 %.
- Tasa base:
- Silver (Tier 2):
- Tasa base:
10 %. - Bonificación por lealtad: Si
loyalty-years >= 3, tasa aplicada =12 %(10 %base +2 %bono).
- Tasa base:
- Gold (Tier 3):
- Tasa base:
20 %. - Bonificación por lealtad: Si
loyalty-years >= 5, tasa aplicada =25 %(20 %base +5 %bono).
- Tasa base:
Elegibilidad de clientes (is-eligible-for-tier)
Sección titulada «Elegibilidad de clientes (is-eligible-for-tier)»- Bronze: Elegible para cualquier gasto anual acumulado
>= 0. - Silver: Requiere gasto anual
>= 50_000($500.00). - Gold: Requiere gasto anual
>= 200_000($2,000.00). - Valores negativos o tiers desconocidos retornan
false.
3. Ejecución desde un Checkout Limpio
Sección titulada «3. Ejecución desde un Checkout Limpio»Desde la raíz del repositorio, acceda al directorio del ejemplo:
cd examples/business-rulesPaso A — Verificación estática
Sección titulada «Paso A — Verificación estática»Comprueba la conformidad del Semantic IR v0.5 contra el esquema y el contrato WIT:
wasma verify discount-rules.ir.jsonVerification SUCCESSFUL: discount-rules.ir.jsonType: Semantic IRStatus: Valid (0 errors)Paso B — Compilación determinista
Sección titulada «Paso B — Compilación determinista»Genera el binario Component Model (discount_rules.wasm) con SHA-256 reproducible:
wasma build discount-rules.ir.json -o discount_rules.wasmBuild SUCCESSFUL: Component 'unnamed_component'Mode: synthesizerWASM Size: 1616 bytesSHA-256: 44d3fefb65a973809878becc0e20dbf144762d57019529d017bc76f4ff8cc629Output: discount_rules.wasmPaso C — Invocación directa con CLI
Sección titulada «Paso C — Invocación directa con CLI»Evaluación de un pedido de $150.00 (15,000 centavos) para cliente Silver (Tier 2) con 4 años de antigüedad (tasa 12 %):
wasma run --component discount_rules.wasm --function "wasma:examples/rules@0.1.0#evaluate-discount" 15000 2 4Function 'wasma:examples/rules@0.1.0#evaluate-discount' returned 1 value(s): [0]: Record([("status-code", S32(200)), ("discount-cents", S32(1800)), ("final-amount-cents", S32(13200)), ("applied-rate", S32(12))])Comprobación de elegibilidad para Tier Gold con gasto anual de $2,500.00:
wasma run --component discount_rules.wasm --function "wasma:examples/rules@0.1.0#is-eligible-for-tier" 3 250000Function 'wasma:examples/rules@0.1.0#is-eligible-for-tier' returned 1 value(s): [0]: Bool(true)Paso D — Suite declarativa YAML
Sección titulada «Paso D — Suite declarativa YAML»Ejecución de la batería completa de 24 casos de prueba (positivos, frontera, desbordamiento y entradas inválidas):
wasma test --suite suite.yaml --component discount_rules.wasmTest Suite: wasma-business-rulesComponent: discount_rules.wasmResults: 24 total, 24 passed, 0 failed, 0 errored
Suite Result: PASSED4. Alcance de la Reproducibilidad Observada
Sección titulada «4. Alcance de la Reproducibilidad Observada»La compilación de discount-rules.ir.json produce consistentemente el hash SHA-256 44d3fefb65a973809878becc0e20dbf144762d57019529d017bc76f4ff8cc629 (1,616 bytes) en ejecuciones repetidas bajo la versión actual de la CLI y el compilador (wasma-compiler).
Esta reproducibilidad confirma la estabilidad interna del pipeline de síntesis desde Semantic IR v0.5 hasta WebAssembly Component Model en la línea base de desarrollo. No constituye una afirmación de determinismo binario universal independiente de sistemas operativos, opciones de empaquetado o futuras evoluciones mayores del toolchain de WebAssembly.

