Capítulo 3: ObjectEvent — El Evento Fundamental
Qué es un ObjectEvent
El ObjectEvent es el tipo de evento más utilizado en EPCIS. Registra que algo le ocurrió a uno o más objetos identificados en un momento y lugar determinados. Cubre la gran mayoría de escenarios de trazabilidad: envíos, recepciones, inspecciones, ventas, destrucciones.
Si solo pudieras implementar un tipo de evento EPCIS, sería este.
Las 3 acciones
Todo ObjectEvent tiene un campo action que indica la naturaleza de la acción:
| Acción | Significado | Ejemplo |
|---|---|---|
| OBSERVE | Se observó el estado actual de los objetos | Lectura RFID al pasar por un portal, inventario |
| ADD | Los objetos se agregan a un proceso o contexto | Commissioning (primera activación), ingreso a almacén |
| DELETE | Los objetos se retiran de un proceso o contexto | Decommissioning (baja), destrucción |
La acción más común es OBSERVE: simplemente se constata que los objetos están en un lugar, en un momento, en un paso de negocio determinado.
Campos principales
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
type | string | Si | Siempre "ObjectEvent" |
eventTime | datetime | Si | Timestamp ISO 8601 con timezone |
eventTimeZoneOffset | string | Si | Offset de la zona horaria (ej: "-03:00") |
epcList | string[] | Si* | Lista de URIs EPC de los objetos |
quantityList | object[] | Si* | Alternativa para productos no serializados |
action | string | Si | OBSERVE, ADD o DELETE |
bizStep | string | No | Paso de negocio (CBV) |
disposition | string | No | Estado resultante (CBV) |
readPoint | object | No | GLN del punto exacto de lectura |
bizLocation | object | No | GLN de la ubicación de negocio |
bizTransactionList | object[] | No | Documentos de negocio asociados |
sourceList | object[] | No | Origen (owning/possessing party) |
destinationList | object[] | No | Destino (owning/possessing party) |
*Al menos uno de epcList o quantityList debe estar presente.
Ejemplo completo: ObjectEvent de shipping
Este es un documento EPCIS 2.0 completo en JSON-LD que registra el despacho de 2 unidades:
{
"@context": "https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld",
"type": "EPCISDocument",
"schemaVersion": "2.0",
"creationDate": "2026-03-21T10:00:00Z",
"epcisBody": {
"eventList": [
{
"type": "ObjectEvent",
"eventTime": "2026-03-21T09:00:00Z",
"eventTimeZoneOffset": "-03:00",
"epcList": [
"urn:epc:id:sgtin:0614141.107340.2026001",
"urn:epc:id:sgtin:0614141.107340.2026002"
],
"action": "OBSERVE",
"bizStep": "shipping",
"disposition": "in_transit",
"readPoint": { "id": "urn:epc:id:sgln:0614141.07346.1234" },
"bizLocation": { "id": "urn:epc:id:sgln:0614141.07346.0" },
"bizTransactionList": [
{
"type": "po",
"bizTransaction": "urn:epcglobal:cbv:bt:0614141073467:PO-2026-001"
}
]
}
]
}
}
Desglose del ejemplo
@context: el contexto JSON-LD de EPCIS 2.0, que permite usar valores cortos como"shipping"en lugar de URIs completastype: "EPCISDocument": todo documento EPCIS empieza con este wrapperepcisBody.eventList: array de eventos (puede contener múltiples eventos de distintos tipos)epcList: dos productos serializados identificados por SGTINaction: "OBSERVE": se observa que los productos están siendo despachadosbizStep: "shipping": el paso de negocio es un envíodisposition: "in_transit": después de este evento, los productos están en tránsitoreadPoint: el punto físico exacto donde se leyeron (puerta de carga #1234)bizLocation: la ubicación de negocio general (el almacén)bizTransactionList: el envío está vinculado a la orden de compra PO-2026-001
Cómo decodificar un SGTIN URI
El formato de un SGTIN es:
urn:epc:id:sgtin:0614141.107340.2026001
─────── ────── ───────
│ │ │
│ │ └─ Número de serie (único por unidad)
│ └──────── Indicador + referencia de item
└───────────────── Company Prefix (asignado por GS1)
- Company Prefix (
0614141): identifica a la empresa. Lo asigna GS1 al registrarse. - Item Reference (
107340): identifica el tipo de producto dentro de esa empresa. - Serial Number (
2026001): identifica la unidad individual. Debe ser único por combinación empresa+producto.
El SGTIN es la representación serializada de un GTIN (código de barras). Un GTIN identifica el tipo de producto; un SGTIN identifica cada unidad individual.
Evento de receiving (contraparte del shipping)
Cuando el destinatario recibe los mismos productos, genera un ObjectEvent de receiving:
{
"type": "ObjectEvent",
"eventTime": "2026-03-22T14:30:00Z",
"eventTimeZoneOffset": "-05:00",
"epcList": [
"urn:epc:id:sgtin:0614141.107340.2026001",
"urn:epc:id:sgtin:0614141.107340.2026002"
],
"action": "OBSERVE",
"bizStep": "receiving",
"disposition": "in_progress",
"readPoint": { "id": "urn:epc:id:sgln:0693750.12345.DOCK3" },
"bizLocation": { "id": "urn:epc:id:sgln:0693750.12345.0" },
"bizTransactionList": [
{
"type": "po",
"bizTransaction": "urn:epcglobal:cbv:bt:0614141073467:PO-2026-001"
}
],
"sourceList": [
{ "type": "owning_party", "source": "urn:epc:id:pgln:0614141.00000" }
],
"destinationList": [
{ "type": "owning_party", "destination": "urn:epc:id:pgln:0693750.00000" }
]
}
Observa que:
- Los mismos EPCs aparecen en ambos eventos (shipping y receiving)
- El
eventTimeZoneOffsetes diferente porque el destino está en otra zona horaria - El
readPointybizLocationson del receptor (otro GLN) - Se agregaron
sourceListydestinationListpara indicar transferencia de propiedad - La
bizTransactionListreferencia la misma orden de compra, vinculando ambos eventos
Campos opcionales avanzados
sensorElementList (IoT)
EPCIS 2.0 permite incluir datos de sensores directamente en los eventos:
"sensorElementList": [
{
"sensorReport": [
{
"type": "Temperature",
"value": 4.2,
"uom": "CEL",
"time": "2026-03-21T09:00:00Z"
}
]
}
]
Esto es útil para cadena de frío (farmacia, alimentos), donde se necesita registrar la temperatura al momento del evento.
certificationInfo
Para certificaciones asociadas al evento (orgánico, fair trade, etc.):
"certificationInfo": {
"certificationStandard": "https://ejemplo.com/organic",
"certificationAgency": "Organismo Certificador XYZ",
"certificationIdentification": "CERT-2026-001"
}
Extensiones de usuario
EPCIS permite agregar campos custom con namespace propio:
"example:lotNumber": "LOTE-2026-A",
"example:productionLine": "LINEA-3"
Las extensiones deben usar un prefijo registrado para evitar colisiones con otros sistemas.
Próximo capítulo
En el capítulo 4 veremos el AggregationEvent: cómo registrar que items se agrupan en cajas, cajas en pallets, y pallets en contenedores.