Capítulo 4: AggregationEvent — Packing y Unpacking
Qué es un AggregationEvent
El AggregationEvent registra relaciones jerárquicas entre objetos: cuando items se agrupan en un contenedor (packing) o se separan de él (unpacking). Es el evento que permite responder preguntas como “¿qué hay dentro de este pallet?” o “¿en qué caja fue empacado este producto?”.
Relación padre-hijo
La estructura fundamental es:
Padre (parentID) → Contenedor físico
├── Hijo 1 (childEPCs) → Item o sub-contenedor
├── Hijo 2
└── Hijo N
Ejemplos concretos:
| Padre | Hijos | Escenario |
|---|---|---|
| Pallet (SSCC) | Cajas (SGTIN) | Palletización en almacén |
| Caja (SGTIN) | Items individuales (SGTIN) | Empaque de productos |
| Contenedor (GRAI) | Pallets (SSCC) | Carga de contenedor marítimo |
Campos específicos del AggregationEvent
| Campo | Tipo | Descripción |
|---|---|---|
parentID | string | EPC del contenedor padre (SSCC o SGTIN) |
childEPCs | string[] | Lista de EPCs hijos serializados |
childQuantityList | object[] | Hijos no serializados (por cantidad) |
action | string | ADD, DELETE u OBSERVE |
El resto de campos (eventTime, bizStep, disposition, readPoint, etc.) son iguales que en ObjectEvent.
Las 3 acciones
| Acción | bizStep típico | Significado |
|---|---|---|
| ADD | packing | Se agregan hijos al padre. Se crea o se amplía la jerarquía. |
| DELETE | unpacking | Se quitan hijos del padre. Se deshace la jerarquía. |
| OBSERVE | inspecting | Se constata la jerarquía existente sin modificarla. |
Ejemplo: Packing (ADD)
Un operario empaca 3 productos serializados en un pallet identificado por SSCC:
{
"type": "AggregationEvent",
"eventTime": "2026-03-21T08:00:00Z",
"eventTimeZoneOffset": "-03:00",
"parentID": "urn:epc:id:sscc:0614141.1234567890",
"childEPCs": [
"urn:epc:id:sgtin:0614141.107340.2026001",
"urn:epc:id:sgtin:0614141.107340.2026002",
"urn:epc:id:sgtin:0614141.107340.2026003"
],
"action": "ADD",
"bizStep": "packing",
"disposition": "in_progress",
"readPoint": { "id": "urn:epc:id:sgln:0614141.07346.LINEA1" }
}
Desglose del SSCC
urn:epc:id:sscc:0614141.1234567890
─────── ──────────
│ │
│ └─ Referencia serial (único por unidad logística)
└────────── Company Prefix
El SSCC (Serial Shipping Container Code) identifica de forma única una unidad logística: un pallet, una caja de transporte, un roll container.
Ejemplo: Unpacking (DELETE)
En destino, el receptor abre el pallet y separa los productos:
{
"type": "AggregationEvent",
"eventTime": "2026-03-22T15:00:00Z",
"eventTimeZoneOffset": "-05:00",
"parentID": "urn:epc:id:sscc:0614141.1234567890",
"childEPCs": [
"urn:epc:id:sgtin:0614141.107340.2026001",
"urn:epc:id:sgtin:0614141.107340.2026002",
"urn:epc:id:sgtin:0614141.107340.2026003"
],
"action": "DELETE",
"bizStep": "unpacking",
"disposition": "in_progress",
"readPoint": { "id": "urn:epc:id:sgln:0693750.12345.RECEP1" }
}
Después de este evento, los hijos ya no están asociados al padre. El pallet queda “vacío” lógicamente.
Jerarquías multi-nivel
EPCIS soporta jerarquías anidadas mediante múltiples AggregationEvents:
Contenedor marítimo (GRAI)
├── Pallet A (SSCC) ← AggregationEvent #1 (padre: contenedor)
│ ├── Caja A1 (SGTIN) ← AggregationEvent #2 (padre: pallet A)
│ │ ├── Item 1
│ │ └── Item 2
│ └── Caja A2 (SGTIN)
│ ├── Item 3
│ └── Item 4
└── Pallet B (SSCC)
└── Caja B1 (SGTIN)
├── Item 5
└── Item 6
Cada nivel de agrupación es un AggregationEvent separado. Para reconstruir la jerarquía completa, se consultan todos los AggregationEvents que tienen como padre cada contenedor.
Ejemplo del nivel más bajo (items en caja):
{
"type": "AggregationEvent",
"eventTime": "2026-03-21T07:30:00Z",
"eventTimeZoneOffset": "-03:00",
"parentID": "urn:epc:id:sgtin:0614141.207340.CAJA-A1",
"childEPCs": [
"urn:epc:id:sgtin:0614141.107340.2026001",
"urn:epc:id:sgtin:0614141.107340.2026002"
],
"action": "ADD",
"bizStep": "packing",
"disposition": "in_progress",
"readPoint": { "id": "urn:epc:id:sgln:0614141.07346.LINEA1" }
}
Ejemplo del nivel intermedio (cajas en pallet):
{
"type": "AggregationEvent",
"eventTime": "2026-03-21T07:45:00Z",
"eventTimeZoneOffset": "-03:00",
"parentID": "urn:epc:id:sscc:0614141.1234567890",
"childEPCs": [
"urn:epc:id:sgtin:0614141.207340.CAJA-A1",
"urn:epc:id:sgtin:0614141.207340.CAJA-A2"
],
"action": "ADD",
"bizStep": "packing",
"disposition": "in_progress",
"readPoint": { "id": "urn:epc:id:sgln:0614141.07346.LINEA1" }
}
childQuantityList: productos sin serializar
No todos los productos tienen número de serie individual. Para granel o productos por lote, se usa childQuantityList:
{
"type": "AggregationEvent",
"eventTime": "2026-03-21T09:00:00Z",
"eventTimeZoneOffset": "-03:00",
"parentID": "urn:epc:id:sscc:0614141.9876543210",
"childQuantityList": [
{
"epcClass": "urn:epc:class:lgtin:0614141.107340.LOTE2026A",
"quantity": 500.0,
"uom": "KGM"
},
{
"epcClass": "urn:epc:class:lgtin:0614141.107341.LOTE2026B",
"quantity": 200.0,
"uom": "KGM"
}
],
"action": "ADD",
"bizStep": "packing",
"disposition": "in_progress",
"readPoint": { "id": "urn:epc:id:sgln:0614141.07346.SILO3" }
}
epcClass: identifica la clase de producto + lote (LGTIN), no una unidad individualquantity: cantidad numéricauom: unidad de medida (KGM = kilogramos, LTR = litros, EA = unidades)
Se puede mezclar childEPCs y childQuantityList en el mismo evento si algunos hijos están serializados y otros no.
Flujo completo
Un flujo típico de packing → transporte → unpacking:
1. Fabricante: AggregationEvent ADD (packing items en pallet)
2. Fabricante: ObjectEvent OBSERVE (shipping del pallet)
3. [Tránsito]
4. Distribuidor: ObjectEvent OBSERVE (receiving del pallet)
5. Distribuidor: AggregationEvent DELETE (unpacking items del pallet)
El pallet viaja como una sola unidad (un SSCC en los eventos de shipping/receiving), pero gracias al AggregationEvent sabemos exactamente qué items contiene.
Próximo capítulo
En el capítulo 5 veremos TransactionEvent (vincular productos con documentos comerciales) y TransformationEvent (registrar procesos de manufactura).