Caso práctico
IOI-TECH – integración de POS y ERP para retail
IOI-TECH es un proveedor de servicios tecnológicos con sede en Riad (Arabia Saudí) y una segunda oficina en Yeda. Desde su fundación en 2018, la empresa ha llevado a cabo proyectos de transformación digital en Arabia Saudí y en el conjunto de Oriente Medio, al servicio de startups, pymes y grandes empresas globales de más de 20 sectores - desde el retail, la banca y las telecomunicaciones hasta el petróleo y gas, la sanidad y la Administración pública.
Su porfolio abarca planificación de recursos empresariales (SAP S/4HANA, SAP Business One, Oracle Fusion, Odoo), gestión de recursos humanos, alojamiento en la nube, desarrollo web y de portales, analítica de datos e IA, ciberseguridad, desarrollo móvil y automatización de ventas - junto con los servicios de implantación, formación y soporte asociados.
El ERP es la competencia central de IOI-TECH, y sus clientes del sector retail gestionan su negocio con SAP. Lo que les faltaba era una capa de comercio y de punto de venta que hablara el mismo idioma que el ERP. IOI-TECH eligió nopCommerce como base y se asoció con nosotros para construirla.
El proyecto
El reto
Los clientes de retail de IOI-TECH en Arabia Saudí y Oriente Medio llevan sus finanzas, su inventario y sus datos maestros en SAP Business One, mientras venden tanto a través de una tienda online como en tiendas físicas: varias sucursales, cajas registradoras y cajeros, cajones de efectivo que hay que contar y cuadrar, existencias por sucursal, listas de precios negociadas por cliente y productos que se venden en varias unidades de medida a la vez - unidad, caja, palé.
nopCommerce estándar no cubre nada de esto, y acoplar un producto POS independiente a la tienda web habría dado el resultado clásico: tres sistemas, tres versiones de la verdad y personal reintroduciendo productos, clientes y pedidos entre la tienda, la web y el ERP.
La solución
Diseñamos y construimos un conjunto de ocho plugins integrados para nopCommerce 4.50 sobre .NET 6 que convierten una instalación estándar de nopCommerce en una plataforma de retail omnicanal completa, conectada directamente con SAP Business One. Toda la lógica de negocio reside en el backend de la tienda; los terminales POS se comunican con él a través de una capa REST API dedicada, y la tienda se comunica con SAP a través del Service Layer. Una venta cobrada en caja, un pedido realizado en la web y un documento contabilizado en el ERP describen la misma transacción. Todo se entrega como plugins - nunca se bifurca el núcleo de nopCommerce, de modo que el cliente sigue pudiendo actualizarlo.
Integración con SAP Business One
El módulo de integración conecta nopCommerce con el Service Layer de SAP Business One mediante un cliente HTTP autenticado creado a medida, y cubre socios de negocio y grupos de socios, artículos y grupos de artículos, pedidos, facturas, albaranes, abonos, cobros, listas de precios, almacenes, grupos de IVA, divisas, centros de coste, dimensiones, comerciales y series de documentos.
- Control bidireccional por entidad. Los productos, los clientes, los proveedores, los pedidos, las entregas y los grupos de IVA tienen cada uno su propio interruptor de sincronización y su propia dirección - de SAP a nopCommerce, de nopCommerce a SAP o en ambos sentidos - de modo que cada cliente decide qué sistema es el dueño de cada dato.
- Tiempo real más programado. Un consumidor de eventos envía los cambios a SAP en el momento en que se producen - pedido realizado, pedido pagado, pedido cancelado o reembolsado, envío entregado, producto, cliente o proveedor creado, actualizado o eliminado - mientras que una tarea programada ejecuta la conciliación completa periódica.
- Mapeo en lugar de valores fijos en el código. Unas correspondencias gestionadas desde la administración vinculan las categorías, los roles de cliente, los roles de proveedor, las categorías fiscales y los almacenes de nopCommerce con sus equivalentes en SAP, con los códigos de socio de negocio y las dimensiones de cliente mantenidos por registro. Los pedidos se pueden contabilizar en SAP automáticamente o liberarse manualmente, y la numeración de documentos sigue las series de SAP del cliente.
- Operable en producción. Cada intercambio queda registrado y se puede consultar desde una tabla de administración, con limpieza automática por retención, de modo que un documento fallido se diagnostica desde el backend de la tienda y no desde el ERP.
Módulos de retail y POS
- Point Of Sale - el módulo central de retail. Sucursales y asignación de productos por sucursal, dispositivos POS y tipos de dispositivo, cajas con flujo de apertura, cierre y recuento de efectivo, movimientos del cajón de efectivo con motivos configurables, gestión de la fecha de negocio, búsqueda por código de barras, puntos de recogida en tienda, un motor de impresión de tickets basado en tokens con códigos QR, activación por clave de licencia para cada dispositivo y un conjunto de permisos POS específico con seguridad de la API acotada por dispositivo y por cajero.
- Inventory - traspasos de existencias entre sucursales y almacenes, para que el inventario de cada sucursal siga siendo exacto a medida que la mercancía se mueve.
- Price List - varias listas de precios con valores por producto, asignadas a clientes concretos y expuestas a través de la API, para precios mayoristas y B2B negociados junto al precio de venta al público.
- Product Unit Conversion - dimensiones de unidad y factores de conversión por producto sincronizados entre los sistemas conectados, de modo que el mismo producto se puede pedir, preparar y vender en distintas unidades.
- Split Payment - un mismo pedido liquidado con varios métodos de pago a la vez, con cada transacción registrada por separado para el cuadre de fin de día.
- Pay In Cash - cobro en efectivo en el mostrador, integrado en el flujo de caja y de cajón.
- Delivery Shipping - tarifas de envío por peso y por importe del pedido para la mercancía vendida en tienda pero entregada al cliente.
Enfoque de ingeniería
- Arquitectura de plugins limpia - entidades de dominio, servicios, factorías y DTOs separados por módulo; migraciones de esquema con FluentMigrator, de modo que la instalación y las actualizaciones son repetibles.
- Interfaz de administración construida con vistas Razor y view components nativos de nopCommerce, para que los responsables de la tienda trabajen en la interfaz que ya conocen.
- Una capa REST API para la aplicación del terminal POS, protegida con autenticación por token más atributos de autorización propios que acotan cada petición a un dispositivo con licencia y a un cajero autenticado.
- Entrega modular: cada plugin se instala por su cuenta y el conjunto se compone en una solución completa, de modo que un cliente puede empezar con la tienda web y el enlace con el ERP y añadir la capa POS más adelante.
El resultado
IOI-TECH cuenta ahora con una plataforma de retail repetible que configura para cada cliente en lugar de construirla a medida cada vez. Tienda, web y ERP comparten un único catálogo, una única cifra de existencias y un único historial de cliente; los pedidos y los pagos llegan a SAP sin que nadie los reescriba; los cajeros abren y cierran las cajas con un registro de auditoría completo de cada movimiento del cajón; y los clientes B2B se atienden con sus propias listas de precios y unidades de medida - todo ello dentro de una instalación de nopCommerce que se puede seguir actualizando.
Tecnologías
.NET
C#- ASP.NET Core MVC
- nopCommerce 4.50
Entity Framework Core- LinqToDB
SQL Server- FluentMigrator
- AutoMapper
- Razor Views
REST API- JWT
- FluentValidation
- QRCoder