Pipeline de integración de órdenes de Shopify a SAP Service Layer:
Invoice de reserva, pago con tarjeta o transferencia por transacción,
solicitud de traslado, traslado de stock y entrega.
- Invoice igual a lo cobrado; fulfillments limitados a lo facturado
- Estados terminales integrated, timeout, ignored y cancelled
- Idempotencia contra SAP: adopta documentos existentes en vez de duplicar
- Reintentos de red en el cliente de Shopify
- Secretos fuera de los JSON de tienda (${VARIABLE} resuelta desde .env)
- Herramientas de consulta, integración puntual y carga de pruebas
- Documentación en docs/ (flujo, casos especiales, mapeo, configuración)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
3.2 KiB
Análisis de tiempos del pipeline Shopify → SAP
Fecha de medición: 2026-09-25. Entorno: SAP Service Layer (SBODemoCL) en la misma
red/VPN, Shopify Admin API por internet.
Latencias individuales medidas (llamadas aisladas)
| Llamada | Tiempo promedio |
|---|---|
| SAP GET (misma red/VPN) | ~0.056 s |
| Shopify GET orden completa | ~0.469 s |
Ciclo real completo (20 órdenes, snobbycl, sin RUT)
| Métrica | Valor |
|---|---|
| Duración total | 87 s |
| Promedio por orden | ~4.3 s |
| Intervalo configurado ("rapido") | 600 s |
| Margen usado | ~14% del ciclo |
Esta medición corresponde a órdenes sin RUT (ninguna llamó a BusinessPartners),
caso "tienda" completo: Invoice → Payment → InventoryTransferRequest → StockTransfer
→ Delivery, con sus referencias cruzadas.
Ruta más larga: tienda + RUT nuevo (creación de BusinessPartner)
16 llamadas en total:
| # | Servicio | Llamada | Tiempo aprox. |
|---|---|---|---|
| 1 | Shopify | GET orders/{id}.json |
~0.47 s |
| 2 | SAP | GET BusinessPartners (buscar por RUT) |
~0.06 s |
| 3 | SAP | POST BusinessPartners (crear, RUT no existía) |
~0.40 s |
| 4 | SAP | POST Invoices |
~0.35 s |
| 5 | SAP | POST IncomingPayments |
~0.35 s |
| 6 | SAP | POST InventoryTransferRequests |
~0.35 s |
| 7 | SAP | GET Invoices (leer referencias) |
~0.06 s |
| 8 | SAP | PATCH Invoices (agregar ref. ITR) |
~0.35 s |
| 9 | SAP | GET InventoryTransferRequests (traer líneas completas) |
~0.06 s |
| 10 | SAP | POST StockTransfers |
~0.35 s |
| 11 | SAP | GET Invoices (leer referencias) |
~0.06 s |
| 12 | SAP | PATCH Invoices (agregar ref. StockTransfer) |
~0.35 s |
| 13 | SAP | GET StockTransfers (traer líneas completas) |
~0.06 s |
| 14 | SAP | POST DeliveryNotes |
~0.35 s |
| 15 | SAP | GET Invoices (leer referencias) |
~0.06 s |
| 16 | SAP | PATCH Invoices (agregar ref. Delivery) |
~0.35 s |
Subtotales
| Tipo | Cantidad | Tiempo total |
|---|---|---|
| Shopify GET | 1 | ~0.47 s |
| SAP GET | 6 | ~0.36 s |
| SAP POST | 6 | ~2.15 s |
| SAP PATCH | 3 | ~1.05 s |
| Total | 16 | ~4.0-4.6 s |
Coincide con lo medido en vivo (~4.3 s/orden en snobbycl sin RUT — a esa ruta le
faltan las llamadas 2 y 3 de la tabla, por eso da un poco menos que esta ruta
completa con creación de BusinessPartner).
Caso CD (solo ITR, sin StockTransfer ni Delivery, sin RUT): ~5 llamadas, bastante más rápido que el caso tienda completo.
Capacidad estimada por ciclo
Con ~4.3-4.6 s/orden real, dejando colchón de seguridad (~70-80% del intervalo usado, el resto para variabilidad de red, reintentos por 401, rate limit de Shopify):
| Modo | Intervalo | Teórico máx. | Recomendado con margen |
|---|---|---|---|
| rapido | 600 s | ~139 órdenes | ~95-110 |
| full | 1800 s | ~418 órdenes | ~290-330 |
Configuración aplicada
max_orders_per_cycle = 50 para ambas tiendas (snobbycl y
on-chile-distributor-prod), muy por debajo de la capacidad real medida —
deja margen amplio para picos de tráfico o llamadas más lentas de lo normal.
Con 50 órdenes/ciclo y ~4.6 s/orden en el peor caso (todas con RUT nuevo), un ciclo tardaría ~230 s, menos del 40% del intervalo "rapido" de 600 s.