Capítulo 3: ObjectEvent — El Evento Fundamental

Por: Artiko
epcisobjecteventeventosjson-ldepcsgtintrazabilidad

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ónSignificadoEjemplo
OBSERVESe observó el estado actual de los objetosLectura RFID al pasar por un portal, inventario
ADDLos objetos se agregan a un proceso o contextoCommissioning (primera activación), ingreso a almacén
DELETELos objetos se retiran de un proceso o contextoDecommissioning (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

CampoTipoRequeridoDescripción
typestringSiSiempre "ObjectEvent"
eventTimedatetimeSiTimestamp ISO 8601 con timezone
eventTimeZoneOffsetstringSiOffset de la zona horaria (ej: "-03:00")
epcListstring[]Si*Lista de URIs EPC de los objetos
quantityListobject[]Si*Alternativa para productos no serializados
actionstringSiOBSERVE, ADD o DELETE
bizStepstringNoPaso de negocio (CBV)
dispositionstringNoEstado resultante (CBV)
readPointobjectNoGLN del punto exacto de lectura
bizLocationobjectNoGLN de la ubicación de negocio
bizTransactionListobject[]NoDocumentos de negocio asociados
sourceListobject[]NoOrigen (owning/possessing party)
destinationListobject[]NoDestino (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

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)

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:

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.