tawasuyu/nakui
> Excel-style reactive engine, on solid principles — exact Decimal, topological cascade, WAL, time-travel — in Rust, with a Llimphi UI.
⎇ 7041e0499f8449ae8d7bba2a65695d82cef05a9e
01_yachay/nakui/modules/inventory/scripts/transferir_stock.rhai
History
raw
feat: nakui standalone — front-door ERP/Hoja/Grafo sobre Llimphi
1// transferir_stock — mueve `cantidad` unidades de un Stock a otro.
2// Inputs ligados: `source` y `dest` (ambos entity Stock). Params: cantidad,
3// timestamp, transfer_id.
4//
5// Conserva unidades: la regla `invariants.conserve` (Stock.cantidad agrupado
6// por sku_id) la verifica el kernel a nivel de delta. El script sólo debe
7// rechazar transferencias entre SKUs distintos; el sobregiro lo ataja el
8// post-check no-negativo del schema.
9if input.states.source.sku_id != input.states.dest.sku_id {
10 throw "no se puede transferir entre SKUs distintos: "
11 + input.states.source.sku_id + " != " + input.states.dest.sku_id;
12}
13
14[
15 #{ op: "set",
16 path: #{ entity: "Stock", id: input.ids.source, field: "cantidad" },
17 value: input.states.source.cantidad - input.params.cantidad },
18 #{ op: "set",
19 path: #{ entity: "Stock", id: input.ids.dest, field: "cantidad" },
20 value: input.states.dest.cantidad + input.params.cantidad },
21 #{ op: "create", entity: "MovimientoStock", id: input.params.transfer_id,
22 data: #{
23 id: input.params.transfer_id,
24 sku_id: input.states.source.sku_id,
25 cantidad: input.params.cantidad,
26 timestamp: input.params.timestamp,
27 } },
28]