Capa de interoperabilidad · Prueba técnica de arquitectura

Anexo C. Catálogo de eventos

Tópico Clave Tipo Productor Consumidores Eventos
raw.erp.changes Tabla y llave Crudo, 7 días erp-adapter erp-adapter Cambios sin traducir
raw.wms.changes SKU y ubicación Crudo, 7 días wms-adapter wms-adapter Cambios sin traducir
andes.catalog.products.v1 sku Estado, compactado erp-adapter pricing, order, inventory ProductChanged
andes.pricing.prices.v1 sku|channel|priceList Estado, compactado erp-adapter pricing, order PriceChanged
andes.inventory.stock-levels.v1 sku|locationId Estado, compactado wms-adapter inventory StockLevelChanged
andes.sources.sync.v1 system Estado, compactado erp-adapter, wms-adapter pricing, inventory SourceSynced: hasta dónde está al día cada sistema de origen
andes.inventory.reservations.v1 orderId Hechos, 14 días inventory order StockReserved, ReservationConfirmed, ReservationReleased, ReservationExpired
andes.orders.events.v1 orderId Hechos, 30 días order webhook, oms-adapter, crm-adapter (después del MVP; no existe todavía) OrderCreated, OrderConfirmed, OrderCancelled, OrderDispatched, OrderDelivered
andes.payments.commands.v1 orderId Comandos, 7 días order payment PaymentRequested, RefundRequested
andes.payments.events.v1 orderId Hechos, 30 días payment order, webhook PaymentApproved, PaymentRejected, PaymentRefunded
andes.oms.commands.v1 orderId Comandos, 7 días order oms-adapter CreateOmsOrder, CancelOmsOrder
andes.oms.events.v1 orderId Hechos, 14 días oms-adapter order OmsOrderCreated, OmsOrderFailed
andes.fulfillment.events.v1 orderId Hechos, 30 días wms-adapter order, inventory DispatchStarted, DeliveryConfirmed
andes.audit.v1 correlationId Hechos, archivo permanente Todos Archivo de auditoría Registro de auditoría

Además, cada grupo consumidor de un tópico de hechos o de comandos tiene su <tópico>.<grupo>.retry y su <tópico>.<grupo>.dlq (11 pares). Particiones, réplicas, limpieza y retención de los 36 tópicos se declaran en el contrato AsyncAPI y de ahí se crean (ADR-017).

Dimensionamiento inicial: 12 particiones para los tópicos de estado de stock y precio, 6 para órdenes, pagos y despacho, 3 para comandos y crudos. Factor de replicación 3, min.insync.replicas 2, productores con acks=all e idempotencia activada.

Eventos que salen a los partners por webhook:

Requisito del enunciado Tipo del evento
Orden confirmada com.andesretail.order.confirmed.v1
Pago aprobado com.andesretail.payment.approved.v1
Pago rechazado com.andesretail.payment.rejected.v1
Despacho iniciado com.andesretail.fulfillment.dispatch-started.v1
Entrega confirmada com.andesretail.fulfillment.delivered.v1
Orden cancelada (adicional) com.andesretail.order.cancelled.v1

Ejemplo de webhook:

POST /andes/webhooks HTTP/1.1
Host: partner.example.com
Content-Type: application/cloudevents+json
X-Andes-Event-Id: evt_01JC8ZD3K7
X-Andes-Signature: t=1794334000,v1=5d41402abc4b2a76b9719d911017c592...

{
  "specversion": "1.0",
  "id": "evt_01JC8ZD3K7",
  "type": "com.andesretail.order.confirmed.v1",
  "source": "/order-service",
  "subject": "ord_01JC8ZB7Q2X9",
  "time": "2026-11-10T18:05:12Z",
  "datacontenttype": "application/json",
  "correlationid": "5e1d0c7a-93b2-4c41-8d0e-6a7f2b9c3d15",
  "data": {
    "orderId": "ord_01JC8ZB7Q2X9",
    "externalOrderId": "MKP-778899",
    "status": "CONFIRMED"
  }
}

La firma es HMAC-SHA256 (HMAC: firma con secreto compartido que permite verificar origen e integridad; SHA-256: el algoritmo de resumen criptográfico que usa) de t + "." + cuerpo con el secreto de la suscripción; el partner debe rechazar marcas de tiempo de más de 5 minutos. El partner responde 2xx en menos de 5 segundos o cuenta como fallo. La entrega es al menos una vez y el partner deduplica por id.