Diagramas · 04
Linaje con transform
transform es la única forma de crear un lote a partir de otro. Quema las entradas, acuña las salidas y registra los lotes padre; cada BatchTransformed equivale a un TransformationEvent de EPCIS 2.0.
Dividir, fusionar y procesar son una misma operación
flowchart LR
subgraph SPLIT["Reagrupación (división) · no requiere rol · mismo producto y unidad · se conserva la cantidad"]
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 o la cantidad"]
P1["#2 trigo 60 t"] --> P2["#7 harina 45 t"]
endLos lotes padre se consultan en la cadena
flowchart TB
F7["parentsOf(7) → [2]"] --> F2["parentsOf(2) → [1]"] --> F1["parentsOf(1) → []"]Un retiro del mercado recorre parentsOf hacia atrás, hasta el origen, y los eventos BatchTransformed hacia adelante, hasta cada lote derivado. Una auditoría de balance de masa compara las cantidades de entrada y salida de cada etapa de procesamiento con la proporción certificada.
Reglas que aplica la implementación de referencia
| Regla | Dónde |
|---|---|
Las entradas deben existir, no estar dadas de baja y pertenecer a from (o quien llama debe tener la aprobación de from) | transform, _update |
| La reagrupación (mismo producto, misma unidad, Σ entradas = Σ salidas) no requiere rol | verificación isRebatch |
Cualquier otro caso requiere 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 |