Diagramas · 04
Linaje a través de transform
transform es la única forma de crear un lote a partir de un lote. Quema las entradas, acuña las salidas y registra los progenitores; BatchTransformed se corresponde uno a uno con un TransformationEvent de EPCIS 2.0.
La división, la fusión y el procesamiento son una misma operación
flowchart LR
subgraph SPLIT["Reagrupación (división) · no requiere rol · mismo producto básico y misma unidad · cantidad conservada"]
W1["#1 trigo 250 t"] --> W2["#2 trigo 60 t"]
W1 --> W3["#3 trigo 40 t"]
end
subgraph MERGE["Reagrupación (fusión)"]
M1["#4 café 10 t"] --> M3["#6 café 25 t"]
M2["#5 café 15 t"] --> M3
end
subgraph PROC["Procesamiento · TRANSFORMER_ROLE · cambia el producto básico o la cantidad"]
P1["#2 trigo 60 t"] --> P2["#7 harina 45 t"]
endLos progenitores pueden consultarse en la cadena
flowchart TB
F7["parentsOf(7) → [2]"] --> F2["parentsOf(2) → [1]"] --> F1["parentsOf(1) → []"]Una retirada de producto recorre parentsOf hacia atrás hasta el origen y los eventos BatchTransformed hacia adelante hasta cada lote derivado. Una auditoría de balance de masas compara las cantidades de entrada y de salida de cada paso de procesamiento con la proporción certificada.
Reglas que aplica la referencia
| Regla | Dónde |
|---|---|
Las entradas deben existir, no estar retiradas y estar en poder de from (o de quien llama, aprobado por from) | transform, _update |
| La reagrupación (mismo producto básico, misma unidad, Σ entradas = Σ salidas) no necesita rol | comprobación isRebatch |
Cualquier otro caso necesita TRANSFORMER_ROLE | transform |
Cada salida registra parents = inputIds y issuer = msg.sender | almacenamiento |
Los hooks ven OP_TRANSFORM para las entradas y las salidas | contexto de _update |