tawasuyu

tawasuyu/nakui

> Excel-style reactive engine, on solid principles — exact Decimal, topological cascade, WAL, time-travel — in Rust, with a Llimphi UI.

Rust 82Markdown 14JSON 12TOML 101471 Definitions

⎇ 7041e0499f8449ae8d7bba2a65695d82cef05a9e 01_yachay/nakui/modules/inventory/scripts/transferir_stock.rhai 28 lines · 1.2 KB History raw

feat: nakui standalone — front-door ERP/Hoja/Grafo sobre Llimphi 7041e0499 · Sergio ·

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]