main
Antes se abría un login por orden (un cliente por orden, con la sesión guardada solo en la instancia) y nunca se cerraba. Ahora el B1SESSION se guarda por conexión (URL + base + usuario) en un caché del proceso, se renueva solo si SAP responde 401 y se cierra con Logout al terminar el proceso (SAPServiceLayerClient.cerrar_sesiones). Probado contra SAP: 6 clientes de ambas tiendas hacen 1 login; una sesión inválida provoca 1 login tras el 401; la integración de 3 órdenes con SAP bloqueado para escrituras hace 1 login. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Integración Shopify → SAP Business One
Descarga órdenes de tiendas Shopify y crea en SAP Business One (Service Layer) los documentos de venta:
Invoice (reserva), pago con tarjeta o transferencia, solicitud de traslado (ITR) y, si se despacha desde una
tienda física, traslado de stock y entrega. Una tienda = un archivo en config/stores/.
Tiendas actuales: snobbycl y on-chile-distributor-prod.
Puesta en marcha
python -m venv .venv && .venv/bin/pip install -r requirements.txt
cp .env.example .env # completar tokens y contraseñas de cada tienda
- Copiar
config/stores/_example.jsonaconfig/stores/<tienda>.jsony completarlo (docs/configuracion_tienda.md). Los secretos van como${VARIABLE}y su valor en.env. - Ejecutar el scheduler:
.venv/bin/python main.py(ventanas y frecuencia enscheduler.json; una sola instancia a la vez, con lock).
Variables opcionales: LOG_LEVEL, APP_TIMEZONE (zona para mostrar horas, ej. America/Santiago).
Cómo funciona (resumen)
- Cada ciclo baja cabeceras nuevas (desde
max(id en BD, initial_since_id)) a SQLite (data/shopify_sap.db). - Toma las órdenes no terminales, trae el detalle y las transacciones de pago, y crea los documentos en SAP. Retoma donde quedó si un documento falló, y adopta documentos que ya existan en SAP para no duplicar.
- Estados:
pending,not_eligible,in_progress,error(se reintentan) eintegrated,timeout,ignored,cancelled(terminales).
Herramientas (tools/, ejecutar con .venv/bin/python -m tools.<nombre>)
| Herramienta | Uso |
|---|---|
consultar |
resumen, descargadas, integradas, errores, orden --name "#8064" (solo lectura) |
integrar_ordenes |
dry-run o integración (--apply) de órdenes puntuales |
probar_pago |
payload del pago sobre la Invoice real |
descargar_ordenes_especiales |
guarda en download/ el JSON de los casos especiales |
cargar_items_faltantes, entrada_mercancia_ordenes |
artículos y stock para pruebas |
Las herramientas que escriben en SAP son dry-run por defecto y requieren --apply.
Documentación (docs/)
| Documento | Contenido |
|---|---|
flujo_pipeline.md |
flujo caso por caso y reglas vigentes |
casos_especiales.md |
casos fuera del flujo normal, con órdenes de ejemplo de cada tienda |
mapeo_campos.md |
campos de Shopify → SAP por documento |
configuracion_tienda.md |
guía del archivo de cada tienda, payment_methods y secretos |
esquema_base_datos.md |
tablas y estados de SQLite |
pendientes.md |
roadmap, decisiones abiertas y pruebas pendientes |
analisis_tiempos.md |
capacidad y tiempos por orden |
Languages
Python
100%