Ir al contenido
Logotipo de mrdc.tech
mrdc.tech
Guatemalan based, for all the world

Manual de usuario · Sincronización multi-tienda

Sincronización de Puntos de Venta con un Servidor Central en Odoo

Cómo un servidor central Odoo 19 concentra las ventas, compras, inventarios y mermas de todas las tiendas con punto de venta Odoo 18, y cómo distribuye hacia ellas el catálogo de productos, categorías, combos y la configuración de cada caja.

Servidor central: Odoo 19 · módulo mrdc_sync_manager Tiendas: Odoo 18 Community · módulo mrdc_sync_user Autor: Rodrigo Contreras — mrdc.tech

1.Cómo usar este manual

Una guía completa para el personal de operaciones, encargados de tienda y equipo de TI que administra la red de puntos de venta.

Este manual documenta el sistema de sincronización que conecta un servidor central Odoo 19 con las instancias de punto de venta Odoo 18 instaladas en cada tienda. Está escrito para tres lectores distintos:

  • El encargado de operaciones, que necesita entender qué viaja entre las tiendas y el central, cuándo, y cómo verificar que todo llegó (capítulos 11 a 18).
  • El equipo de TI, que instala y configura ambos módulos, administra las llaves API y resuelve incidencias (capítulos 5 a 10 y 19 a 22).
  • El personal de tienda, que solo necesita saber qué botones existen en su instancia y qué significa cada estado (capítulos 13 a 16).

Todas las capturas de pantalla provienen de un ambiente real con los dos módulos instalados y sincronizando datos entre sí. Los nombres técnicos de campos y botones aparecen tal como se ven en pantalla, en este formato cuando son valores o rutas técnicas.

Convención importante. En todo el manual, «el central» es el servidor Odoo 19 donde se concentra la información (módulo mrdc_sync_manager) y «la tienda» es cada instancia Odoo 18 con punto de venta (módulo mrdc_sync_user).

2.Qué es el sincronizador y cómo funciona

Un servidor concentra; muchas tiendas operan. Cada dato viaja en una sola dirección y con una clave que lo identifica sin ambigüedad.

Cada tienda opera de forma autónoma: su punto de venta funciona aunque no haya internet hacia el central, porque la base de datos es local. La sincronización ocurre después de los hechos: cuando se cierra una sesión de caja, cuando se valida una recepción de compra, cuando se cuenta un inventario. El central, por su parte, es el dueño del catálogo: los productos, los precios, las categorías y la configuración de cada caja se definen una sola vez en el central y se empujan hacia todas las tiendas.

Servidor central — Odoo 19 módulo mrdc_sync_manager Catálogo maestro · Contabilidad · Inventario consolidado Cola de envíos · Log de todo lo recibido Tienda 1 — Odoo 18 módulo mrdc_sync_user POS · compras · inventario local Tienda 2 — Odoo 18 módulo mrdc_sync_user POS · compras · inventario local Tienda N — Odoo 18 módulo mrdc_sync_user POS · compras · inventario local ▼ Del central hacia las tiendas productos · precios · categorías · combos · config. de cajas ▲ De las tiendas hacia el central ventas por sesión · compras · recepciones · inventarios · mermas Toda la comunicación viaja por HTTPS con llaves API. Cada lado guarda una cola de envíos y un log de lo recibido.
Arquitectura general. El catálogo baja del central a las tiendas (azul); la operación diaria de cada tienda sube al central (dorado). Ningún dato se «comparte en vivo»: cada evento genera una petición que viaja, se procesa y queda registrada en ambos lados.

El mecanismo: colas, endpoints y registros

La comunicación funciona igual en ambas direcciones, con tres piezas:

  1. Una cola de envíos en el lado que emite. Cada evento (cerrar una sesión, sincronizar un producto) crea un registro en la cola con el destino, el contenido en formato JSON y un estado: PendingIn ProgressCompleted o Failed. Si el envío falla, el registro queda con el error y puede reintentarse.
  2. Un receptor (endpoint) en el lado que recibe: una ruta HTTP protegida con llave API que valida el contenido, crea o actualiza los documentos y responde éxito o error.
  3. Un log en el lado que recibe, donde queda escrito cada mensaje recibido: cuándo llegó, qué contenía y qué se respondió. Es la bitácora que se consulta cuando algo no cuadra.
Reintentos seguros. Los flujos críticos son idempotentes: si el mismo mensaje llega dos veces (por un reintento tras un corte de internet, por ejemplo), el receptor detecta que ya lo procesó y no duplica nada. Esto aplica a sesiones de venta, recepciones de compra, devoluciones e inventarios. Las dos excepciones se explican en el capítulo 20.

3.Los dos módulos y su alcance

Un módulo por lado, diseñados como espejo el uno del otro.

MRDC - Sync Manager (central)MRDC - Sync User (tienda)
ServidorOdoo 19 (servidor principal)Odoo 18 Community (una instancia por tienda)
Módulo técnicomrdc_sync_managermrdc_sync_user
EnvíaProductos, precios, categorías POS, combos, períodos de compra, configuración de cajas y métodos de pago, correos de proveedores, traslados entre almacenes Sesiones de venta cerradas, órdenes de compra, recepciones y devoluciones de compra, inventarios físicos, mermas (scrap)
RecibeTodo lo que envían las tiendas, y lo convierte en documentos contables y de inventario realesTodo lo que envía el central, y lo aplica a su catálogo y su punto de venta
Menú en pantallaPunto de Venta → Sincronizador API (Import Master Data, Instances, Sync Queue, Log)Punto de Venta → Sincronizador API (Sync, Log)
Dependencias Odoopoint_of_sale, purchase, stock, mrp, auth_api_key, deltatech_stock_inventory point_of_sale, purchase, mrp, auth_api_key, pos_multicert_felgt, deltatech_stock_inventory
Módulos complementariosMódulo de liquidaciones de caja (si se usa la liquidación), localización contablemrdc_montegua_stock (campo «Costo Estático»), mrdc_montegua_purchase (correos de compra a proveedores)
Los complementos no son opcionales en la práctica. El receptor de productos de la tienda escribe siempre el campo «Costo Estático» (de mrdc_montegua_stock) y el receptor de correos de proveedores valida que exista mrdc_montegua_purchase. Si faltan, esas sincronizaciones fallan en cada intento. Al preparar una tienda nueva deben instalarse junto con mrdc_sync_user.

4.Los códigos que emparejan todo

El sistema nunca empareja por nombre: siempre usa una clave estable. Si una clave falta o no coincide, esa sincronización falla o cae a un genérico.

Antes de configurar nada conviene entender esta tabla. Es la causa de la mayoría de los problemas de sincronización — y de sus soluciones:

DatoClave de emparejamientoDónde se defineQué pasa si falta o no coincide
Punto de venta (caja)MRDC Code del PDV (único) En el PDV del central y de la tienda; deben ser idénticos (p. ej. MT081) Las ventas de esa caja se rechazan: «POS Configuration with ID X does not exist»
AlmacénMRDC Code del almacén (único) Formulario del almacén en ambos lados Compras, recepciones, inventarios, mermas y traslados fallan con «Almacén con código X no encontrado»
ProductoReferencia interna (default_code) Ficha del producto; la asigna el central y viaja con el producto En ventas, el importe cae al producto genérico de la compañía; en compras e inventarios, error
Método de pagoMRDC Code del método Método de pago del PDV en ambos lados (p. ej. CSH, VISA) El pago cae al método de pago genérico; además bloquea la sincronización de la configuración del PDV
Categoría POSMRDC Code de la categoría Lo asigna el central automáticamente al sincronizar (usa su propio ID) El producto llega a la tienda sin categoría o la sincronización reporta la categoría como faltante
ProveedorNIT (vat) Ficha del contacto en ambos lados La orden de compra se rechaza en el central: «Proveedor con NIT X no encontrado»
Sesión de ventaSync Session ID (ID de la sesión en la tienda) Automático; único por caja en el central Es la garantía de que una sesión no se registra dos veces
Recepción / devoluciónSync Reception ID + instancia + tipo AutomáticoGarantiza que los reintentos no dupliquen recepciones
Inventario físicoMRDC Sync ID + instancia AutomáticoGarantiza que los reintentos no dupliquen ajustes
Regla de oro. Cuando se abre una tienda nueva o se crea una caja nueva, lo primero es definir sus códigos: el MRDC Code de la caja, el del almacén y los de sus métodos de pago, idénticos en el central y en la tienda. Todo lo demás depende de ellos.

5.Puesta en marcha: lista de verificación

El orden importa: primero las llaves y los códigos, después el catálogo, y al final los flujos diarios.

En el servidor central (una sola vez)

  1. Instalar mrdc_sync_manager (instala también auth_api_key y deltatech_stock_inventory).
  2. Crear una llave API para las tiendas (capítulo 8).
  3. En la compañía, pestaña MRDC Sync: activar la sincronización y definir el producto genérico y el método de pago genérico (capítulo 6).
  4. Crear los almacenes de cada tienda con su MRDC Code y su cuenta analítica (capítulo 9).
  5. Crear los puntos de venta de cada tienda con su MRDC Code, su almacén, sus métodos de pago (cada uno con código) y su contacto de sincronización (capítulo 9).
  6. Registrar cada tienda como instancia (host, puerto, llave API de esa tienda) y probar la conexión (capítulo 6).
  7. Si se migra desde un servidor anterior: importar el catálogo con Import All Master Data (capítulo 10).

En cada tienda

  1. Instalar mrdc_sync_user y los complementos (mrdc_montegua_stock, mrdc_montegua_purchase).
  2. Crear la llave API local que usará el central para entrar (capítulo 8).
  3. En la compañía, pestaña MRDC Sync: host y puerto del central, llave API del central, número de instancia, e interruptores de qué se sincroniza (capítulo 7).
  4. Configurar el almacén con el mismo MRDC Code que en el central, y marcar una ubicación como puente de traslados (capítulo 7).
  5. Crear el contacto Consumidor Final con NIT CF si no existe (lo usa la configuración automática del PDV).
  6. Desde el central, sincronizar hacia la tienda: la configuración del PDV, las categorías y los productos (capítulo 11).
  7. Hacer una venta de prueba, cerrar la sesión y verificar que llega al central (capítulo 13).

6.Configuración del servidor central

Dos pantallas concentran todo: la pestaña MRDC Sync de la compañía y el registro de instancias.

6.1 El menú del sincronizador

Al instalar el módulo aparece, dentro de la aplicación Punto de Venta, el menú Sincronizador API con cuatro opciones. Solo lo ven los usuarios con el permiso Encargado del sincronizador (capítulo 8):

Menú Sincronizador API en el central
El menú en el central. Import Master Data (servidores origen para carga inicial), Instances (las tiendas conectadas), Sync Queue (la cola de envíos hacia las tiendas) y Log (todo lo recibido de las tiendas).

6.2 La pestaña MRDC Sync de la compañía

En Ajustes → Usuarios y empresas → Empresas, el formulario de la compañía tiene una pestaña nueva:

Pestaña MRDC Sync de la compañía en el central
Compañía del central. El interruptor maestro, el producto y método de pago genéricos, la lista de instancias conectadas y los cuatro botones de sincronización masiva del catálogo.
CampoPara qué sirve
Habilitar Sincronización MRDCInterruptor maestro. Si está apagado, ningún envío sale del central y los botones de sincronización dan error.
Producto Genérico para Sincronización MRDCCuando una venta llega de la tienda con una referencia de producto que el central no conoce, el importe se registra contra este producto para no perder la venta. Debe existir siempre.
Metodo de Pago Genérico para Sincronización MRDCIgual que el anterior, pero para métodos de pago sin código o desconocidos.
Instancias de Sincronización MRDCLa lista de tiendas conectadas: host, puerto y llave API de cada una. Es la misma información que el menú Instances.
Vigile el producto genérico. Que las ventas «no se pierdan» gracias al genérico es una red de seguridad, no una operación normal. Si en las facturas del central aparecen líneas del producto genérico, significa que alguna tienda vendió un producto que el central no tiene con esa referencia: hay que corregir el catálogo y sincronizar (capítulo 11).

6.3 Las instancias: una ficha por tienda

En Punto de Venta → Sincronizador API → Instances se registra cada tienda. El nombre se forma solo con el host y el puerto:

Lista de instancias en el central
Lista de instancias. Cada fila es una tienda a la que el central puede enviar datos. Las columnas de estado muestran el resultado de la última importación masiva, si se ha usado.
Formulario de una instancia
Ficha de la instancia. Host con el esquema completo (https://…), Port (443 para HTTPS), la API Key que la tienda espera recibir, y la compañía a la que pertenece. El botón Test Connection hace una llamada de prueba y muestra una notificación verde («Connection successful!») o roja con el motivo del fallo.
Pruebe la conexión después de cualquier cambio de host, puerto o llave. El botón usa exactamente el mismo canal que las sincronizaciones reales, así que una prueba verde garantiza que la red y la autenticación están bien.

7.Configuración de cada tienda

La tienda necesita saber tres cosas: a dónde enviar, con qué llave, y qué flujos tiene permitido enviar.

7.1 La pestaña MRDC Sync de la compañía de la tienda

Pestaña MRDC Sync de la compañía en la tienda
Compañía de la tienda. A la izquierda, la conexión al central; a la derecha, los interruptores por tipo de documento y sus variantes «en Vivo».
CampoPara qué sirve
MRDC - SyncInterruptor maestro de la tienda. Apagado, no se genera ni envía nada.
MRDC - Sync Host / PortDirección del servidor central, con esquema (https://…) y puerto (443 en producción).
MRDC - Sync API KeyLa llave API del central que esta tienda usa para autenticarse al enviar.
MRDC - Instance IDEl número de instancia que identifica a esta tienda dentro del central (el ID de su ficha en Instances). Viaja en compras, recepciones e inventarios para el emparejamiento.

7.2 Qué se sincroniza y cuándo: los interruptores

Cada familia de documentos tiene un interruptor maestro y una variante «en Vivo»:

InterruptorDocumentoCon «en Vivo» activoSin «en Vivo»
MRDC - Sync Sesiones del POSCierres de sesión de caja Se envía en el instante del cierreLo envía el automatismo dentro de los siguientes 10 minutos
MRDC - Sync ComprasÓrdenes de compra y sus recepciones Orden y recepción se envían al momentoLos recoge el automatismo
MRDC - Sync ScrapsMermas / desechos Al validar el desechoPor automatismo
MRDC - Sync InventariosInventarios físicos Al validar el inventarioPor automatismo
No apague un interruptor dejando envíos pendientes. Si hay peticiones en la cola de un tipo cuyo interruptor está apagado, esas peticiones no se envían pero tampoco se descartan: se quedan al frente de la fila y pueden bloquear los envíos válidos (la cola procesa 30 por corrida, empezando por los más antiguos). Si necesita apagar un tipo de sincronización, primero deje que su cola se vacíe o marque como completados los registros que ya no deban salir. Vea el capítulo 20.

7.3 El menú en la tienda

Menú Sincronizador API en la tienda
El menú en la tienda tiene dos entradas: Sync (la cola de envíos hacia el central) y Log (todo lo que el central le ha enviado a esta tienda). Solo lo ve el grupo Encargado.

7.4 El almacén y la ubicación puente

Almacén de la tienda con MRDC Code
Almacén de la tienda. El campo MRDC Code (aquí MT081) debe ser idéntico al del almacén espejo en el central. El nombre puede diferir; el código no.
Ubicación puente con Is Translated Location
La ubicación puente. Una ubicación interna marcada con Is Translated Location. Los traslados que llegan del central entran «desde» esta ubicación, y los que salen hacia otras tiendas salen «hacia» ella. Debe existir exactamente una por tienda.

8.Llaves API y seguridad

Cada lado guarda una llave propia y conoce la del otro. Los permisos de pantalla se manejan con dos grupos.

8.1 Cómo se autentica la comunicación

Todas las rutas del sincronizador exigen la cabecera API-KEY, verificada por el módulo auth_api_key. La configuración es cruzada:

  • En el central se crea una llave API (en Ajustes → Técnico → Auth API Key) asociada a un usuario interno. Esa llave se escribe en el campo MRDC - Sync API Key de cada tienda.
  • En cada tienda se crea su propia llave API local. Esa llave se escribe en la ficha de la instancia correspondiente en el central (campo API Key).

Las llaves conviene tratarlas como contraseñas: generarlas largas y aleatorias, guardarlas en el gestor de contraseñas del equipo de TI y rotarlas si se sospecha una filtración (basta actualizar la llave en ambos lados).

Una ruta de la tienda es pública. El receptor de configuración de PDV de la tienda (/mrdc_sync/sync_pos_config) no exige llave API por diseño (se usa durante el aprovisionamiento inicial). En producción, las instancias de tienda no deben quedar expuestas a internet sin restricción: limite el acceso por firewall o proxy inverso a las IP del servidor central.

8.2 Grupos de permisos

Ambos módulos crean la categoría de permisos «Sincornizador API» en la ficha del usuario, con dos niveles:

  • Usuario — nivel base, sin pantallas propias.
  • Encargado — ve el menú Sincronizador API, el campo MRDC Sync en los documentos y los botones de sincronización manual (Sincronizar Sesión, Sincronizar Compra, Sincronizar Inventario, Procesar Sincronización…).
La protección real es de menú. Las reglas de acceso a los modelos del sincronizador no restringen por grupo: cualquier usuario interno podría leer o modificar la cola por vías técnicas (importaciones, API). Asigne el grupo Encargado únicamente al personal de confianza y trate las llaves API como el verdadero perímetro de seguridad.

9.Cajas, métodos de pago y almacenes

La ficha de cada caja en el central es la fuente de verdad: de ahí sale la configuración que se replica a la tienda.

9.1 El punto de venta en el central

Punto de venta en el central con bloque MRDC Sync
La caja en el central. En los ajustes del PDV, el bloque MRDC Sync reúne: Código de Sincronización (el MRDC Code, único), Contacto de Sincronización (el cliente al que se facturan las ventas de esta caja), Instancia de Sincronización (a qué tienda pertenece), el correo del usuario de sincronización y los datos del establecimiento (dirección, municipio, departamento, nombre comercial, número de establecimiento) que la tienda usa para su diario de facturación FEL. En la cabecera está el botón Sincronizar Punto de Venta.

El botón Sincronizar Punto de Venta envía toda esta configuración a la tienda. Con ese mensaje, la tienda se aprovisiona sola:

  1. Crea (o encuentra) el usuario local con el correo indicado.
  2. Crea (o actualiza) el diario de ventas POS «nombre» Ventas FEL con los datos del establecimiento para la facturación electrónica.
  3. Crea (o encuentra) el almacén y el punto de venta con el mismo MRDC Code.
  4. Crea los métodos de pago con sus diarios de caja o banco, respetando los códigos.
  5. Asigna el cliente por defecto (el contacto con NIT CF).
Todos los métodos de pago necesitan código. Si algún método de pago de la caja no tiene MRDC Code, el botón se detiene con el mensaje «No se tiene asignado un codigo en el metodo de pago: …». Asigne el código y vuelva a intentar. Además, un método de pago de efectivo no puede compartirse entre dos cajas: si ocurre, la tienda lo reporta como advertencia y conserva el que tenía.

9.2 Métodos de pago

Método de pago con MRDC Code en el central
Método de pago en el central. El campo MRDC Code (aquí CSH para efectivo) es la clave con la que los pagos de las tiendas encuentran su método en el central. Códigos típicos: CSH efectivo, VISA, BAC
Método de pago con MRDC Code en la tienda
El mismo método en la tienda, con el mismo código. Los crea automáticamente la sincronización de la caja; solo hay que tocarlos si se agrega un método nuevo.

9.3 Almacenes

Almacén en el central con MRDC Code y cuenta analítica
Almacén de la tienda en el central. Además del MRDC Code, el campo Analytic Account hace que toda orden de compra sincronizada de esta tienda se registre con su distribución analítica al 100 %: así los reportes por tienda salen solos.

10.Carga inicial desde un servidor origen

Para estrenar el central sin capturar el catálogo a mano: se importa todo desde una instancia existente.

Cuando el servidor central es nuevo (por ejemplo, en la migración desde un servidor anterior), el catálogo completo puede importarse desde cualquier instancia que tenga el módulo de tienda instalado. Para eso se marca la instancia con Is Source Server:

Instancia marcada como Source Server con pestaña Import Actions
Servidor origen. Con Is Source Server activo aparecen el listón verde, el botón azul Import All Master Data y la pestaña Import Actions con importadores individuales agrupados: datos base (categorías de producto, unidades de medida, proveedores), configuración POS (categorías, métodos de pago, cajas), inventario (almacenes, productos, listas de materiales, combos) y compras (tarifas de proveedor).

Import All Master Data ejecuta todos los importadores en orden de dependencias: categorías de producto → unidades de medida → categorías POS → métodos de pago → almacenes → cajas → proveedores → productos → tarifas de proveedor → listas de materiales → combos. Al terminar escribe en la pestaña Last Sync Info la fecha, el estado (Success, Partial o Error) y un resumen con el conteo por entidad.

  • Los productos se importan en lotes de 100 con confirmación parcial: una importación grande que se interrumpa conserva lo ya procesado.
  • Los importadores concilian, no duplican: buscan cada registro por su clave (código, NIT, referencia interna) y lo actualizan si ya existe.
  • Si una caja del origen tiene sesiones abiertas en el central, sus métodos de pago y su almacén no se tocan (queda una advertencia); ciérrelas y repita la importación.
Consejo. Después de una carga inicial, revise tres cosas antes de operar: que los impuestos de los productos sean los de la compañía del central, que las cajas tengan su instancia y su contacto de sincronización asignados, y que los almacenes tengan su cuenta analítica.

11.Catálogo: productos y categorías hacia las tiendas

El catálogo se administra una sola vez, en el central. Las tiendas lo reciben — nunca lo editan.

11.1 Categorías del punto de venta

Desde la pestaña MRDC Sync de la compañía, el botón Sincronizar Todas las Categorias envía el árbol completo a todas las instancias en dos pasos automáticos: primero crea todas las categorías y después les asigna su categoría padre. También puede sincronizarse una categoría individual desde su propio formulario:

Categoría POS en el central con botón Sincronizar Categoria
Categoría en el central. El botón Sincronizar Categoria la envía a todas las tiendas. Si aún no tiene MRDC Code, el sistema le asigna uno automáticamente en ese momento.
Categoría POS en la tienda con MRDC Code de solo lectura
La categoría en la tienda. El MRDC Code llega asignado y es de solo lectura: el emparejamiento nunca depende del nombre, así que renombrar una categoría en el central la renombra en las tiendas sin duplicarla.

11.2 Productos

Hay tres formas de enviar productos, para tres situaciones distintas:

AcciónDónde estáCuándo usarla
Sincronizar Todos los ProductosCompañía → pestaña MRDC Sync Carga completa: envía todos los productos almacenables y consumibles, con imagen, precios, costos, unidades, proveedores y lista de materiales. Es el envío más pesado.
Sincronizar Productos FaltantesCompañía → pestaña MRDC Sync La opción recomendada para el día a día. Consulta a cada tienda qué productos tiene, envía solo los que faltan y corrige las categorías de los que están mal clasificados, sin tocar precios ni proveedores de los demás. Termina con un resumen por tienda: «N nuevos, M categorías corregidas» o «al día».
Sync MRDC (botón del producto) o la acción Sync Products to MRDC sobre una selecciónFicha del producto / lista de productos Cambios puntuales: un precio nuevo, un producto corregido, un lote de productos seleccionados a mano.
Producto en el central con botones de sincronización
Producto en el central. Arriba, los botones Sync MRDC y Sync Período Compra. El producto viaja con su referencia interna, nombre, precio de venta, costo, «Costo Estático», imagen, unidades, categoría POS, proveedores y lista de materiales.
Lista de productos en el central
El catálogo en el central. Sobre una selección de la lista, el menú Acciones ofrece Sync Products to MRDC, Sync Product Combos to MRDC y Sync Purchase Period to MRDC.
Lista de productos recibidos en la tienda
El mismo catálogo, recibido en la tienda. Referencias internas, precios e imágenes idénticos a los del central.
La sincronización de un producto es un reemplazo, no una mezcla. Al recibir un producto, la tienda borra y recrea su lista de proveedores y su lista de materiales, y fuerza los impuestos a los de su propia compañía. Cualquier ajuste local que alguien haya hecho en la tienda se pierde en el siguiente envío. Es la conducta correcta —el catálogo se administra en el central— pero hay que saberlo: nunca edite catálogo en la tienda.

11.3 Verificar que llegó

Log de la tienda con el detalle de un envío de productos
El log de la tienda guarda cada mensaje recibido con su JSON completo y la respuesta. En un envío de productos, la respuesta lista cada producto sincronizado; si algo no emparejó (una categoría inexistente, un producto sin referencia), aquí queda el detalle exacto.

12.Combos, períodos de compra y proveedores

Tres flujos más del catálogo, cada uno con su botón y su regla.

12.1 Combos

Los productos de tipo combo (promociones que agrupan varios productos con precios extra por opción) se sincronizan con Sincronizar Todos los Combos (compañía) o con el botón Sync Product Combos de cada combo. La tienda los recibe con inteligencia de conciliación: reutiliza las opciones existentes en lugar de duplicarlas y nunca borra opciones que aparezcan en ventas históricas.

Primero los productos, después los combos. Un combo cuyos componentes aún no existen en la tienda se reporta como parcial (nivel de error en el log de la tienda) y no borra nada. Sincronice los productos faltantes y reenvíe los combos.

12.2 Períodos de compra: controlar cuándo puede comprar la tienda

El central puede definir, por producto, una ventana de fechas fuera de la cual las tiendas no pueden confirmar órdenes de compra de ese producto. Se configura en la ficha del producto del central (grupo Período de compra (MRDC Sync): Fecha inicio de compra y Fecha fin de compra) y se envía con el botón Sync Período Compra. Las fechas vacías eliminan la restricción.

Producto en la tienda con el período de compra recibido
El producto en la tienda, pestaña Compra: el grupo Período de compra muestra las fechas recibidas del central. El personal de la tienda las ve pero no las administra.
Orden de compra bloqueada por período en la tienda
El bloqueo en acción. Una cotización en la tienda con un producto fuera de su ventana muestra el aviso rojo con el detalle («del 2026-09-01 al 2026-12-31») y el botón Confirmar orden se rechaza con el mismo mensaje. Basta un producto fuera de período para bloquear toda la orden.

12.3 Correos de compra de los proveedores

Proveedor en el central con los campos de compra
Proveedor en el central. Los campos Proveedor de Compra, Enviar Email de Compra y Email de Compra, junto con el enlace Sincronizar Correos de Compra, distribuyen a las tiendas la configuración de a qué correo enviar las órdenes. El emparejamiento es por NIT (o por nombre si el NIT falta). También existe como acción masiva sobre la lista de contactos.

13.Ventas: el cierre de sesión del POS

El flujo más importante del sistema: cada cierre de caja en la tienda se convierte, en el central, en una sesión real con su factura, sus pagos y su descarga de inventario.

13.1 Qué pasa en la tienda

  1. El cajero cierra su sesión de punto de venta con el procedimiento normal de Odoo.
  2. Al validar el cierre, el módulo arma automáticamente un resumen de la sesión: ventas agregadas por producto, pagos por método de pago, y por separado las devoluciones y sus pagos. Solo necesita que la caja tenga su MRDC Code.
  3. Se crea la petición en la cola (Punto de Venta → Sincronizador API → Sync). Con Sesiones del POS en Vivo activo, se envía en el acto; si no, la envía el automatismo en los siguientes 10 minutos.
  4. El campo MRDC Sync de la sesión queda apuntando a esa petición: es la marca de «esta sesión ya se envió».
Cola de envíos de la tienda
La cola de la tienda. Cada fila es un envío: sesiones, compras, recepciones, inventarios, mermas. La columna Status dice si ya llegó (Completed) o si falló (Failed); Try Count cuenta los intentos.
Detalle del payload de una sesión en la cola de la tienda
El contenido del envío. La pestaña Payload muestra el JSON exacto que viajó: el código de la caja, las fechas de apertura y cierre, las ventas por producto y los pagos por método. Ante cualquier duda de «qué se envió», la respuesta está aquí.
Recuperación automática. Si una sesión se cerró sin generar su envío (por ejemplo, la caja no tenía código ese día), el automatismo «Sincronizar Sesiones Pendientes» la detecta y la encola después. También existe el botón Sincronizar Sesión en el formulario de la sesión cerrada, visible para el grupo Encargado.

13.2 Qué construye el central al recibirla

  1. Identifica la caja por su MRDC Code; de ella toma la compañía, el almacén, el diario y el Contacto de Sincronización (el cliente de la factura).
  2. Crea una sesión de POS real, marcada con el Sync Session ID de la tienda para nunca duplicarla.
  3. Crea las órdenes de venta del POS: una con las ventas y, si hubo devoluciones, otra separada que se factura como nota de crédito.
  4. Cada línea encuentra su producto por referencia interna; los desconocidos caen al producto genérico. Cada pago encuentra su método por MRDC Code; los desconocidos caen al método genérico.
  5. Se factura y se cierra la sesión: eso genera la factura, los pagos, el asiento de cierre con las líneas de valoración de inventario, y los movimientos de stock que descargan el almacén de la tienda en el central.
Sesiones sincronizadas en el central
Sesiones en el central. Cada cierre de tienda aparece como una sesión más, con el nombre de la caja y su correlativo.
Detalle de una sesión sincronizada en el central
Una sesión sincronizada, cerrada. Desde aquí se navega a sus órdenes, pagos y movimientos como en cualquier sesión de POS normal.
Factura generada por la sesión sincronizada
La factura resultante, contabilizada a nombre del contacto de sincronización de la caja, con los productos reales de la venta y el IVA calculado con los impuestos de la compañía.
Log del central con la sesión recibida
El log del central registra la recepción: «Sesión Sincronizada POS», con el JSON recibido y la respuesta enviada a la tienda.

13.3 Las fechas se respetan

Todo lo que el central construye queda fechado con la fecha real de la sesión en la tienda, no con el día en que llegó el mensaje: el asiento de cierre, los pagos, la diferencia de caja y la valoración de inventario. Una sesión del viernes que se sincroniza el lunes queda contabilizada el viernes. La única excepción: si esa fecha cae en un período contable ya bloqueado, la valoración se registra con la fecha actual y queda una advertencia (capítulo 21).

Reintentar nunca duplica. Si la misma sesión llega dos veces, el central responde «ya fue sincronizada y cerrada» sin crear nada. Si un cierre quedó a medias por un error, el siguiente intento limpia los restos y lo completa. Las sesiones son, además, el único tipo de envío que la tienda reintenta indefinidamente hasta lograrlo.

14.Compras: órdenes, recepciones y devoluciones

La tienda compra localmente; el central recibe la orden, la recepción y las devoluciones, con la analítica de la tienda y las fechas reales.

14.1 El orden obligatorio del flujo

  1. La orden de compra viaja primero. Se envía con el botón Sincronizar Compra de la orden, o automáticamente cuando la orden ya tiene recepción parcial o total. El central la crea buscando al proveedor por NIT y al almacén por su código; le aplica la cuenta analítica del almacén y conserva la fecha de confirmación de la tienda.
  2. La recepción viaja después, sola. Al validar la recepción en la tienda, si la orden ya está Completed, se envía automáticamente. El central ajusta las cantidades de su recepción pendiente (lo no recibido queda en cero y genera el pendiente automáticamente), la valida con la fecha contable de la tienda y guarda el emparejamiento.
  3. Las devoluciones al proveedor (albarán con «Return Picking») viajan igual al validarse, y el central crea la devolución enlazada a la orden de compra original.
Si la orden falló, la recepción espera. La recepción solo se envía cuando su orden de compra está Completed. Un error típico: el proveedor no existe en el central con ese NIT → la orden queda Failed → las recepciones se acumulan. La solución es crear el proveedor en el central (mismo NIT) y reintentar la orden con Sincronizar Ahora; las recepciones salen solas en la siguiente corrida del automatismo.
Orden de compra sincronizada en la tienda
La orden en la tienda, confirmada y con su campo MRDC Sync apuntando al envío. Las cantidades y precios viajan agregados por producto.
Recepción validada en la tienda
La recepción en la tienda, validada y sincronizada. Si después de validar se corrigen cantidades, el módulo genera automáticamente un envío de actualización para que el central quede igual.
Orden de compra recibida en el central
La orden en el central: mismo nombre de origen, proveedor emparejado por NIT, y la distribución analítica de la tienda aplicada a las líneas.
Recepción validada en el central
La recepción en el central, validada con las cantidades reales reportadas por la tienda y fechada con la fecha de la tienda.

15.Traslados entre almacenes

Un traslado interno validado en el central mueve, además, el inventario de las tiendas involucradas — sin intervención de nadie en la tienda.

15.1 Cómo funciona

  1. En el central se crea y valida un traslado interno normal entre el almacén origen y el almacén destino (por ejemplo, de la bodega central a una tienda).
  2. Al quedar validado, el módulo identifica a qué instancia pertenece cada almacén (por la cadena MRDC Code del almacén → caja con ese código → instancia de la caja) y crea hasta dos envíos: Sync Transfer Out hacia la tienda origen (que descarga su stock) y Sync Transfer In hacia la tienda destino (que lo carga).
  3. La tienda que recibe crea un traslado desde su ubicación puente hacia su stock —o al revés para las salidas— y lo valida automáticamente. El inventario de la tienda queda actualizado sin que nadie toque nada.
Traslado interno validado en el central
El traslado en el central. Validado el movimiento, los campos Transfer Out / Transfer In enlazan los envíos generados. El botón Procesar Sincronización permite generarlos a mano si hiciera falta; nunca crea duplicados.
Traslado recibido y validado automáticamente en la tienda
El traslado en la tienda, creado y validado solo. El campo MRDC Sync Code (aquí «MRDC In - 5») es la marca de idempotencia que evita procesarlo dos veces.
Nunca reenvíe un «Sync Transfer In» completado. Es una de las dos operaciones que no son idempotentes: cada reenvío suma el stock otra vez en la tienda destino. Por eso el sistema los crea una sola vez y jamás los reencola solo. Si un Transfer In quedó Failed, corrija la causa y reintente ese registro una única vez, verificando el resultado en la tienda.
Red de seguridad. Un automatismo del central revisa cada 15 minutos los traslados internos validados que quedaron sin sincronizar (por ejemplo, los validados mediante el asistente de pendientes) y les genera sus envíos.

15.2 Caso práctico: el traslado entre dos tiendas se validó con la instancia equivocada

Es el incidente más común de este flujo, y lo documentamos completo con un caso real. La situación: se validó un traslado del almacén de una tienda (PDV1) al de otra (PDV2). El PDV1 apuntaba correctamente a su servidor (Servidor 1), pero el PDV2 tenía en su Instancia de Sincronización el servidor equivocado: apuntaba al Servidor 6, cuando la tienda del PDV2 en realidad opera en el Servidor 3.

El resultado: la tienda del PDV1 descargó su inventario correctamente, pero la mercadería «entró» en la tienda del Servidor 6 —que no tenía nada que ver— y la tienda verdadera del PDV2 (Servidor 3) nunca recibió nada. El traslado quedó Hecho en el central y ya no se puede desvalidar.

Lista de instancias con los tres servidores
Las tres tiendas involucradas, registradas como instancias en el central. En este caso de ejemplo: el Servidor 1 es …:8097 (la tienda del PDV1), el Servidor 3 es …:8095 (la tienda real del PDV2) y el Servidor 6 es …:8094 (la tienda que recibió por error).
PDV2 con la instancia de sincronización equivocada
La causa. El PDV2 («15001 Pasaje Santo Tomas», código MT128) tiene en Instancia de Sincronización el Servidor 6 (…:8094) — pero esa tienda opera en el Servidor 3. Con este dato, el central le avisó del traslado a la tienda equivocada.
Traslado PDV1 a PDV2 validado
El traslado del incidente: de MT081 (PDV1) hacia MT128 (PDV2), validado. En el central el movimiento entre almacenes es correcto; el problema es a qué tiendas se les avisó.
Registro de la cola con el host del servidor equivocado
La evidencia en la cola. El registro «Sync Transfer In» del traslado, pestaña Connection Info: el envío salió hacia el Servidor 6 (…:8094). Esta pestaña es la forma más rápida de confirmar a qué servidor se fue realmente un envío.
La tienda del Servidor 6 recibió el traslado por error
El efecto en la tienda equivocada. En el Servidor 6 apareció el traslado automático «MRDC In», validado solo: su inventario subió con mercadería que nunca le correspondió. Mientras tanto, el Servidor 3 —el verdadero destino— no recibió nada.

La corrección son tres pasos, en este orden exacto. El orden no es un capricho: mientras la configuración siga mal, todo lo que se haga «pega» en el mismo servidor equivocado que el traslado original — y eso es precisamente lo que se aprovecha para anular el daño exactamente donde ocurrió.

Paso 1 — Revertir el traslado, ANTES de tocar la configuración

Sobre el traslado equivocado, pulse Devolver. En el asistente use Devolver todo (prellena todos los productos con sus cantidades exactas) y valide la devolución que se genera: el traslado inverso, de PDV2 hacia PDV1.

Asistente Devolver con el botón Devolver todo
El asistente de devolución. Devolver todo garantiza que el reverso lleva exactamente los mismos productos y cantidades que el traslado original — sin capturar nada a mano.
Traslado inverso validado
El reverso validado: mismas cantidades, dirección invertida (MT128 → MT081). Como la configuración sigue con el error, sus avisos viajan a los mismos servidores que el original — que es justo lo que se busca.
¿Por qué revertir primero? Porque el reverso hereda la misma configuración rota que el original, y la anula en espejo: la salida del reverso viaja al Servidor 6 y le descuenta exactamente la mercadería que había recibido por error, y la entrada del reverso viaja al Servidor 1 y le repone al PDV1 lo que había descargado. Resultado: las tres tiendas y el central quedan como antes del incidente. Si corrigiera la configuración antes de revertir, el reverso viajaría al Servidor 3 (que nunca recibió nada) y le dejaría inventario negativo, mientras el Servidor 6 se quedaría con la mercadería fantasma.
Servidor 6 con la entrada y la salida anuladas
El Servidor 6, saldado. Tras el reverso, la tienda equivocada muestra el par completo: el «MRDC In» que recibió por error y el «MRDC Out» que lo anuló, ambos automáticos. Su inventario de esos productos vuelve a cero.

Paso 2 — Corregir el punto de venta

Ahora sí: en el PDV2, cambie la Instancia de Sincronización al servidor correcto (Servidor 3) y verifique de paso la cadena completa de mapeo: el MRDC Code del almacén y el Código de Sincronización del PDV deben ser el mismo, y la instancia debe apuntar al host de la tienda verdadera.

PDV2 apuntando ya al servidor correcto
La configuración corregida: el PDV2 ya apunta al Servidor 3 (…:8095). Desde este momento, todo traslado que toque el almacén MT128 avisará a la tienda correcta.

Paso 3 — Hacer el traslado correcto

Cree y valide un traslado nuevo, idéntico al original (PDV1 → PDV2). Esta vez la salida viaja al Servidor 1 —que vuelve a descargar— y la entrada viaja al Servidor 3, que recibe y valida automáticamente. La mercadería queda, por fin, en la tienda que era.

Traslado definitivo validado
El traslado definitivo, validado ya con la configuración buena.
El Servidor 3 recibió el traslado correcto
El Servidor 3, por fin con su mercadería. El traslado automático «MRDC In» del envío correcto, validado solo. En el caso real de esta demostración, su inventario quedó exactamente con las 6 y 4 unidades del traslado — ni más, ni menos.
La cola del central con los seis envíos del caso
La cola cuenta la historia completa: los avisos del traslado original (al Servidor 1 y al 6), los del reverso que lo anularon en los mismos servidores, y los del traslado definitivo (al Servidor 1 y al 3). Todos en Completed — la trazabilidad del incidente y de su corrección queda escrita.

Verificación final — antes de dar el caso por cerrado, confirme las existencias de los productos involucrados en los tres lugares:

  • Tienda del PDV1 (Servidor 1): descargada una sola vez (el efecto del traslado definitivo).
  • Tienda equivocada (Servidor 6): en cero — la entrada errónea y su anulación se cancelan.
  • Tienda del PDV2 (Servidor 3): exactamente las cantidades del traslado.
Variante: la instancia estaba vacía (en lugar de apuntar a otro servidor). En ese caso el aviso nunca salió hacia ninguna tienda, y hay un efecto extra a conocer: el automatismo de 15 minutos reintenta los traslados sin sincronizar, así que en cuanto se corrige la configuración, el traslado viejo y su reverso se envían solos a la tienda correcta — llegan como una entrada y una salida iguales y se cancelan. No es un error: es el sistema poniéndose al día. La receta es la misma: revertir antes de corregir, y verificar existencias al final.
Lo que NO se debe hacer: intentar «reencaminar» el traslado original reenviando su registro de la cola después de corregir la configuración, sin haberlo revertido. El receptor de traslados suma stock en cada llamada (capítulo 15.1): esa vía deja mercadería duplicada — en la tienda equivocada y en la correcta. La receta es siempre la de esta sección: revertir → corregir → rehacer.

16.Inventarios físicos y mermas

La tienda cuenta; el central refleja el mismo ajuste, guardando tanto lo contado como la existencia teórica que la tienda tenía al momento de contar.

16.1 Inventario físico

  1. En la tienda se crea el inventario (menú de ajustes de inventario), se inicia y se capturan las cantidades contadas.
  2. Al pulsar Validar, el módulo toma una fotografía de cada línea —producto, cantidad contada y cantidad teórica del momento— y la envía junto con el ajuste.
  3. El central crea un inventario espejo (nombre «… - MRDC Sync [id]»), aplica las cantidades y lo valida. Los servicios y los combos se omiten automáticamente.
Inventario físico validado en la tienda
El conteo en la tienda, validado y con su campo MRDC Sync. También existe el botón Sincronizar Inventario para el reenvío manual.
Inventario espejo en el central con la teórica reportada
El inventario en el central. La columna On Hand muestra la teórica reportada por la tienda (no la local): las filas donde el conteo difiere de la teórica se pintan en rojo, las que coinciden en gris. Así el análisis de diferencias se hace en el central con los números reales de la tienda.

16.2 Mermas (scrap)

Los desechos registrados y validados en la tienda viajan igual: producto, cantidad, motivo y almacén. El central registra el scrap y lo valida contra la ubicación de stock de esa tienda.

Merma validada y sincronizada en la tienda
Una merma en la tienda, validada y sincronizada al central.

17.La cola de sincronización y los reintentos

La cola es el tablero de control diario: aquí se ve qué salió, qué falló y por qué, y desde aquí se reintenta.

17.1 Anatomía de un registro de la cola

En ambos lados, cada envío es un registro con la misma estructura: nombre descriptivo, empresa, fecha, endpoint de destino, estado, número de intentos, y tres pestañas: Payload (lo que se envió), Response (lo que respondió el otro lado) y Connection Info (host, puerto y llave usados, de solo lectura):

Cola de envíos del central
La cola del central: envíos de catálogo, configuración y traslados hacia las tiendas, agrupables por estado y compañía.
Payload de un envío de traslado
Pestaña Payload de un envío de traslado: el JSON con los códigos de almacén y las líneas por producto. Los productos se agregan por referencia: dos líneas del mismo producto viajan sumadas.
Respuesta de un envío de traslado
Pestaña Response: la respuesta cruda del receptor. Cuando el estado es Failed, el motivo real está siempre aquí (el campo «Error Message» puede decir solo «Unknown error»).
Pestaña Connection Info de la tienda
Pestaña Connection Info en la tienda: con qué host, puerto y llave se hizo el envío. Útil para diagnosticar problemas de configuración sin revisar la compañía.

17.2 Cómo se reintenta

  • Automático (tienda): el automatismo «Sincronizar Cola Requests» corre cada 10 minutos y procesa hasta 30 registros no completados por corrida, los más antiguos primero. Cada tipo de envío se reintenta hasta 3 veces — excepto las sesiones de POS, que se reintentan sin límite hasta entrar.
  • Manual (ambos lados): el botón Sincronizar Ahora del registro, o la acción del mismo nombre sobre una selección en la vista de lista. Un registro Completed no se reenvía aunque se pulse el botón (con la excepción del capítulo 15: no lo intente con Transfer In).

18.Los registros de sincronización (logs)

Si la cola cuenta lo que salió, el log cuenta lo que llegó. Juntos reconstruyen cualquier historia.

Log del central
El log del central: cada mensaje recibido de las tiendas, con su nivel (Info, Warning, Error), su endpoint y su mensaje. Se puede agrupar por fecha, endpoint o nivel para auditar un día completo de operación.
Log de la tienda
El log de la tienda: todo lo que el central le ha enviado (configuración, categorías, productos, combos, períodos, traslados), con su JSON y su respuesta. Es de solo lectura.

Tres hábitos que ahorran horas:

  • Filtre por nivel Error y Warning al inicio del día: un envío «exitoso con advertencias» (por ejemplo, un método de pago saltado) solo se descubre aquí.
  • El JSON recibido es evidencia. Ante un «esta venta no cuadra», el payload guardado en el log muestra exactamente qué reportó la tienda y cuándo.
  • Los logs son historia valiosa. A partir de ellos puede reconstruirse información (por ejemplo, las cantidades teóricas de inventarios pasados). No los depure sin respaldo.

19.Automatizaciones programadas

Siete tareas programadas mantienen el sistema andando aunque nadie pulse un botón.

En cada tienda (cada 10 minutos)

AutomatismoQué hace
Sincronizar Cola RequestsEl motor: envía hasta 30 peticiones pendientes por corrida.
Sincronizar Sesiones PendientesEncola sesiones cerradas que quedaron sin envío.
Sincronizar ODC PendientesEncola órdenes de compra confirmadas que ya tienen recepción parcial o total.
Sincronizar Recepciones de Compra PendientesEncola recepciones y devoluciones validadas cuya orden ya sincronizó.
Sincronizar Scraps PendientesEncola mermas validadas sin envío.
Sincronizar Inventarios PendientesEncola inventarios validados sin envío.

En el central (cada 15 minutos)

AutomatismoQué hace
MRDC: Sync Pending Internal TransfersGenera los envíos Transfer Out / Transfer In de los traslados internos validados que quedaron sin sincronizar.

Consecuencia práctica: sin los interruptores «en Vivo», el retraso normal entre un evento en la tienda y su llegada al central es de hasta 20 minutos (una corrida para encolar y otra para enviar). Con «en Vivo», es inmediato y el automatismo queda como red de seguridad.

20.Resolución de problemas

Los errores del sincronizador casi siempre son de emparejamiento. Esta tabla los resume con su causa y su solución.

Síntoma / mensajeCausaSolución
«POS Configuration with ID X does not exist» La caja de la tienda tiene un MRDC Code que no existe en el central. Verifique el Código de Sincronización en ambos lados; deben ser idénticos. Reintente el envío.
«Proveedor con NIT X no encontrado» El proveedor de una compra no existe en el central con ese NIT. Cree el proveedor en el central con el mismo NIT y reintente la orden con Sincronizar Ahora. Las recepciones saldrán solas después.
«Almacén con código X no encontrado» El almacén no tiene MRDC Code, o difiere entre los dos lados. Complete el MRDC Code del almacén (idéntico en ambos lados) y reintente. Si el payload muestra false o VIRTUAL como código, el almacén de origen no tenía código al generarse el envío.
«No se tiene asignado un codigo en el metodo de pago: X» Un método de pago de la caja no tiene MRDC Code. Asigne el código en el método de pago del central y vuelva a Sincronizar Punto de Venta.
Error Message dice solo «Unknown error» El receptor devolvió un error, pero el mensaje detallado quedó en la respuesta. Abra la pestaña Response del registro: el motivo real está en el campo message del JSON.
Facturas del central con líneas del producto genérico Una tienda vendió productos cuya referencia el central no reconoce. Ejecute Sincronizar Productos Faltantes, revise el log de la tienda y corrija el catálogo. Las ventas ya registradas pueden reclasificarse manualmente si se requiere.
Envíos válidos que nunca salen de la cola de la tienda Peticiones antiguas de un tipo con el interruptor apagado ocupan los 30 espacios de cada corrida. Active el interruptor correspondiente para que salgan, o depure esos registros antiguos. Evite apagar interruptores con envíos pendientes.
Combos que llegan «partial» a la tienda Algún producto del combo no existe aún en la tienda. Sincronice productos faltantes y reenvíe los combos. Nada se pierde: el receptor no borra opciones ante un parcial.
La tienda dejó de recibir todo (errores de autenticación) La llave API cambió o expiró en alguno de los lados. Genere una llave nueva y actualícela en los dos lugares (compañía de la tienda ↔ ficha de la instancia en el central). Use Test Connection para confirmar.
El inventario espejo del central marca diferencias enormes El conteo de la tienda se hizo con el catálogo desalineado (referencias distintas). Verifique en el log el payload del inventario: la teórica reportada por la tienda viaja en él. Alinee el catálogo antes del siguiente conteo.
Un traslado se validó pero lo recibió otra tienda (o ninguna) El PDV del almacén destino tenía la Instancia de Sincronización apuntando a otro servidor (o vacía) al momento de validar. Siga el caso práctico del capítulo 15.2, en ese orden: revertir el traslado con «Devolver todo» (antes de tocar la configuración), corregir la instancia del PDV y rehacer el traslado. Nunca reenvíe el original sin revertirlo.
Advertencia de fecha en período bloqueado Llegó una sincronización con fecha dentro de un período contable ya cerrado. La valoración se registró con la fecha actual. Coordine los cierres contables con la operación (capítulo 21).

Las dos operaciones que exigen cuidado especial

  • Transfer In (capítulo 15): reenviar uno completado duplica stock en la tienda. Reintente solo registros fallidos, una vez, verificando el resultado.
  • Mermas: el receptor del central no guarda la marca de idempotencia del scrap, así que reenviar una merma ya procesada crearía un segundo descarte. El flujo normal (envío único automático al validar) es seguro; simplemente no reenvíe mermas completadas.

21.Buenas prácticas de operación

Reglas simples que mantienen el sistema sano.

  • El catálogo se edita solo en el central. Productos, precios, proveedores, listas de materiales, categorías y combos. Lo que se edite en una tienda se perderá en la siguiente sincronización.
  • Revisión diaria de 5 minutos: en el central, la cola sin Failed y el log sin errores; en cada tienda (o por muestreo), lo mismo. Un Failed atendido el mismo día es trivial; acumulado una semana, es una conciliación.
  • Toda tienda nueva empieza por los códigos (capítulo 4) y termina con una venta de prueba verificada en el central.
  • Coordine los cierres contables. Antes de bloquear un período en el central, confirme que no queden sesiones, recepciones o inventarios de ese período pendientes de sincronizar en las tiendas: las colas deben estar vacías. Así todo queda fechado en su día real.
  • Prefiera «Sincronizar Productos Faltantes» para el mantenimiento diario del catálogo; es el envío más liviano y no toca lo que ya está bien. Reserve «Sincronizar Todos los Productos» para cargas iniciales o correcciones masivas.
  • No borre registros de cola ni de log como limpieza rutinaria: son la evidencia y, en algunos casos, la única fuente para reconstruir datos históricos.
  • Cambios de configuración de cajas, siempre desde el central con «Sincronizar Punto de Venta». El sistema puede actualizar categorías disponibles de una caja incluso con la sesión abierta; los cambios se ven al recargar el POS.
  • Documente las llaves API y quién tiene el grupo Encargado en cada instancia.

22.Referencia rápida de endpoints

Para el equipo técnico: qué ruta atiende cada flujo. Todas responden JSON y exigen la cabecera API-KEY (salvo la anotada).

Rutas que atiende el servidor central (las tiendas le envían)

RutaPropósito
/mrdc_sync/pingPrueba de conexión.
/mrdc_sync/sync_pos_sessionRecibe un cierre de sesión: crea sesión, órdenes, factura (y nota de crédito si hay devoluciones), pagos y movimientos de stock.
/mrdc_sync/sync_pos_settlementRecibe la liquidación de caja (efectivo, tarjetas, depósitos, vouchers, fotos) y la adjunta a la sesión.
/mrdc_sync/sync_purchase_orderCrea/actualiza la orden de compra (proveedor por NIT, almacén por código, analítica de la tienda).
/mrdc_sync/sync_purchase_receptionValida la recepción con las cantidades y la fecha reales; genera pendientes automáticamente.
/mrdc_sync/sync_purchase_returnCrea y valida la devolución al proveedor enlazada a la orden.
/mrdc_sync/sync_stock_inventoryCrea y valida el inventario espejo (idempotente por ID y por instancia).
/mrdc_sync/sync_stock_scrapRegistra y valida la merma.
/mrdc_sync/sync_transfer_out / sync_transfer_in Notificación de salida (registro) y entrada (ajuste de stock) de traslados.
/mrdc_sync/sync_product, sync_product_combos Recepción de productos y combos (cuando otro servidor le empuja catálogo al central).
/mrdc_sync/export_*Trece rutas de lectura del catálogo (productos, combos, LdM, categorías, unidades, proveedores, tarifas, almacenes, cajas, métodos de pago) que alimentan la carga inicial y «Sincronizar Productos Faltantes».

Rutas que atiende cada tienda (el central le envía)

RutaPropósito
/mrdc_sync/pingPrueba de conexión (botón Test Connection).
/mrdc_sync/sync_pos_configAprovisiona la caja completa: usuario, diario FEL, almacén, PDV y métodos de pago. Única ruta sin llave API — restringir por red (capítulo 8).
/mrdc_sync/sync_pos_categories / update_pos_categories Crea categorías y les asigna padres / solo actualiza existentes.
/mrdc_sync/sync_productCrea o actualiza productos completos (reemplaza proveedores y LdM; fuerza impuestos locales).
/mrdc_sync/update_product_categoriesCorrige solo la categoría POS de productos, sin tocar precios.
/mrdc_sync/sync_product_combosCrea/actualiza combos con conciliación de opciones e ítems.
/mrdc_sync/sync_purchase_periodEscribe las ventanas de compra por producto.
/mrdc_sync/sync_supplierActualiza los correos de compra de proveedores (por NIT).
/mrdc_sync/sync_transfer_in / sync_transfer_out Recibe traslados y los valida automáticamente contra la ubicación puente.
/mrdc_sync/export_*Catorce rutas de lectura con las que el central consulta o importa el catálogo de la tienda (incluye la exportación paginada de productos).
Zona horaria y formatos. Las fechas viajan en hora local y se interpretan en America/Guatemala; los importes, en la moneda de la compañía. El transporte es JSON sobre HTTPS.
Logotipo de mrdc.tech
mrdc.tech
Guatemalan based, for all the world

Manual de Sincronización de Puntos de Venta — servidor central Odoo 19 y tiendas Odoo 18.
Implementación, soporte y desarrollo a la medida sobre Odoo: facturación electrónica de Guatemala, El Salvador y Panamá, pasarelas de pago, aplicaciones móviles e integraciones con inteligencia artificial.

mrdc.tech · info@mrdc.tech · +502 4288 7385