Ezeden por dentro: precios, stock y B2B que funcionan con reglas

Una tienda con miles de productos de varios proveedores no se puede tarifar ni controlar a mano, y una sola cifra errónea en el archivo de un proveedor puede hacer que se venda a pérdidas. El hub de Ezeden convierte precios, stock, accesorios y condiciones B2B en reglas que el gestor define una vez y revisa antes de aplicarlas.

Ezeden por dentro: precios, stock y B2B que funcionan con reglas
Ver proyecto:
ezeden.com.ua
ezeden.com.ua

El reto

Ezeden vende miles de productos de muchos proveedores, y los precios y el stock de un catálogo así no se pueden llevar a mano. Los precios de compra llegan en euros, dólares y grivnas, los archivos de los proveedores a veces traen errores y el stock del proveedor va por detrás de la realidad. Las empresas quieren sus propios precios y un presupuesto en condiciones. El objetivo era un sistema en el que el dueño fija la política una sola vez - margen, redondeo, cuánto stock reservar - y el software la aplica a cada producto, mientras que todo lo que se sale de lo normal se detiene y espera a una persona.

Precios: reglas en lugar de hojas de cálculo

El margen se define con reglas. Una regla se aplica a todo el catálogo, a una marca, a una categoría con sus subcategorías, a un proveedor, a un rango de precio de compra, a un grupo de variantes o a un solo producto, y su fórmula puede ser un porcentaje, un importe fijo o un margen mínimo. Si coinciden varias, gana la de mayor prioridad; con la misma prioridad, la más concreta.

Cada canal de venta - la tienda y los marketplaces - puede tener su propio ajuste en porcentaje. El tipo de cambio oficial del Banco Nacional de Ucrania se descarga cada día, con un coeficiente opcional encima, y en cualquier momento se puede introducir uno manual. Los precios pueden quedarse sin redondear o redondearse a grivnas enteras, a ,99 o a la decena más próxima, por defecto y por regla.

Antes de guardar una regla, la vista previa muestra todos los productos afectados con el precio actual y el propuesto. En cada producto, la pestaña de precios responde a por qué este precio: qué regla, qué tipo de cambio, qué ajuste de canal, paso a paso. Cada cambio queda en el historial del producto con su autor: una regla, un tipo de cambio, un gestor o el archivo de un proveedor.

Retención de saltos sospechosos

Si un precio fuera a cambiar más de un umbral - un 30 % por defecto, el cambio no se aplica. Espera en una cola con el valor antiguo y el propuesto hasta que un gestor lo confirma o lo rechaza. Así se detectan por igual un archivo de proveedor roto, una errata en una regla o un movimiento brusco de la divisa; un tipo de cambio que se dispara se retiene de la misma manera. El gestor también puede fijar un precio a mano y bloquearlo frente a reglas y tipos de cambio.

Promociones con un precio anterior honesto

Una promoción tiene precio y fechas, para todos los canales o para uno, y la tienda muestra una cuenta atrás. El precio tachado es el precio público más bajo de los 30 días anteriores al inicio de la promoción, que además se indica debajo como “precio anterior”. Si el precio se subió poco antes de la rebaja, no cuenta como rebaja y no se tacha nada. La promoción se fecha desde el día en que empezó, aunque su importe en grivnas varíe después con el euro, de modo que un descuento del 25 % sigue mostrándose como del 25 %.

Stock: un registro, no una cifra

El hub lleva un registro: la última cifra que envió el origen más cada movimiento desde entonces - entradas, bajas, devoluciones, reservas. Lo que se puede vender es el stock físico menos las reservas activas.

Al hacer un pedido la mercancía queda reservada al instante. El envío consume la reserva, la cancelación la libera y un pedido online sin pagar la libera solo pasado un número de horas.

Cada canal puede tener su propio colchón, guardándose una cantidad fija o un porcentaje, y un umbral por debajo del cual considera que no hay producto. La comprobación del carrito y la reserva del pedido siguen la misma regla, así que nadie puede pedir más de lo que el canal puede vender. La importación lleva además un freno de seguridad: si un origen manda de golpe cero unidades para una gran parte de los productos, se retiene en lugar de vaciar la tienda.

Cada producto está en uno de cinco estados: en stock; próxima entrada (ahora no hay, pero la tienda lo tiene siempre en stock); bajo pedido (no hay, pero se puede pedir al fabricante); agotado; y descatalogado. Si un producto se puede pedir se indica una vez por proveedor o por marca, y solo se marcan las excepciones. Un modelo descatalogado muestra sus alternativas en lugar del botón “Comprar”.

Accesorios compatibles a partir de las características

Los vínculos entre productos y accesorios se generan con reglas, no se teclean a mano. Una regla se lee como una frase: los productos de este grupo encajan con los de aquel cuando estas características coinciden - comparten un valor, no son menores, no son mayores o se diferencian como mucho en una tolerancia. Las unidades se convierten, así que milímetros y centímetros se comparan bien, y una regla que compara cosas incompatibles se rechaza al guardarla.

Los vínculos se recalculan cada noche, y la vista previa enseña qué encontraría una regla para un SKU concreto. Los vínculos hechos por un gestor nunca se sobrescriben, y una pareja generada con la que no esté de acuerdo se puede descartar para siempre. Los productos que una regla no puede decidir porque falta un dato van a una cola; como opción, desactivada por defecto, la IA puede leer la documentación del fabricante en busca de ese dato, pero lo que encuentra espera a un gestor y nunca decide qué encaja con qué.

Un portal para clientes profesionales

Un cliente puede tener precios personales: pertenecer a un grupo de precio - distribuidor, socio, etc. - y tener condiciones propias sobre una marca, una categoría o un producto. Se aplica la condición más concreta, y nunca por encima del precio público. La tienda muestra ese precio como “Tu precio”, y la misma cifra llega al carrito y al pedido.

Una cuenta de empresa funciona como una organización, con sus datos fiscales, sus direcciones de entrega y personas con roles: el propietario, que gestiona la ficha; el comprador, que hace pedidos; y el observador, que solo ve el historial.

El cliente pide un presupuesto desde el carrito o el gestor lo prepara en el panel. Cada emisión es una versión congelada con fecha de validez y su propio PDF. El cliente lo acepta o lo rechaza en su cuenta, y un presupuesto aceptado se convierte en pedido a los precios presupuestados. Si en ese momento falta stock, el presupuesto sigue aceptado, se anota lo que falta y espera en la cola del gestor hasta que llega la mercancía.

Nadie tiene que vigilarlo

Cada cinco minutos se comprueban la base de datos, las colas, las tareas fallidas, los conectores, los retrasos de importación, el disco, el buscador, la tienda y las copias de seguridad. Un problema abre una alerta por correo y Telegram, si empeora se escala y cuando se resuelve se avisa. Cada persona del equipo conecta sus propios chats de Telegram en un par de clics y elige qué recibir - pedidos nuevos, informes de importación, alertas, un resumen por la mañana - y puede limitarlo al horario laboral; lo que llega fuera de horario se guarda, no se pierde.

La base de datos y las fotos y documentos originales se copian cada noche a un almacenamiento de objetos aparte y se conservan al menos 30 días. Cada trimestre se hace una prueba de restauración en una copia temporal, sin tocar la tienda en marcha, y una restauración se puede lanzar desde el panel y deshacer.

Un espacio de trabajo para los gestores

El panel muestra solo las colas de tareas con algo pendiente - precios retenidos, pedidos nuevos, pagos fallidos, opiniones, traducciones, importaciones retenidas - y cada rol ve solo las suyas. Todas las tablas del panel están en directo: cuando una importación, una tarea en segundo plano u otro gestor cambia algo, cada pantalla abierta con esos datos se actualiza sola. Un único buscador encuentra pedidos, productos, clientes y presupuestos, y solo responde con lo que la persona tiene permiso para ver. Cada cambio queda en el historial con su autor, y una importación o una edición masiva completa se puede revertir.

Tecnologías

- Hub: Laravel 13 + Inertia + React 19 + Ant Design
- Tienda: Laravel 13 + Inertia + React 19, renderizado en servidor
- Datos: MySQL 8.4, Redis 7
- Trabajo en segundo plano: Laravel Horizon (colas), Reverb (panel en directo)
- Integraciones: tipos del Banco Nacional de Ucrania, bot de Telegram, almacenamiento compatible con S3 para copias
- Infraestructura: Docker Compose, GitLab CI/CD

Resultado

Precios, stock, accesorios y condiciones comerciales son reglas que el dueño puede leer y cambiar sin un programador, y cada precio de la web se puede explicar paso a paso. Los cambios fuera de lo normal se detienen y esperan a una persona en lugar de llegar al cliente. Los clientes profesionales tienen sus propios precios y presupuestos en condiciones, y el equipo se entera de los problemas por Telegram y no por los clientes.

Casos Relacionados

Tienda en Telegram: un vendedor con IA, una mini app y el pago sin salir del chat

Tienda en Telegram: un vendedor con IA, una mini app y el pago sin salir del chat

Muchos clientes prefieren escribir a una tienda por Telegram antes que rellenar un formulario en una web, y ninguna tienda puede tener a alguien contestando de madrugada. Esta plataforma lleva al chat un vendedor con IA, el catálogo y el pago, mientras el equipo lo ve todo en directo y puede intervenir con un clic.

Un catálogo que se construye solo: parsers, tarifas de proveedores e importaciones que se pueden deshacer

Un catálogo que se construye solo: parsers, tarifas de proveedores e importaciones que se pueden deshacer

Miles de productos de varias fuentes significan copiar datos sin parar: modelos nuevos, características que cambian, fotos nuevas, tarifas en formatos distintos. El hub detrás de la tienda Ezeden se encarga de ese trabajo: lee las fuentes por sí mismo, enseña qué cambiaría y no deja que una importación estropee el catálogo.

Tienda Ezeden: buscador, compra y pedidos repetidos pensados para vender

Tienda Ezeden: buscador, compra y pedidos repetidos pensados para vender

Un catálogo técnico grande pierde compradores en tres puntos: un buscador que no encuentra nada, una compra que pide demasiado y ningún motivo para volver. La tienda de Ezeden se construyó para cerrar esos tres huecos, desde la caja de búsqueda hasta el segundo pedido.

Un catálogo, todos los canales de venta: Rozetka, Prom, Epicentr, Google y KeyCRM desde un solo hub

Un catálogo, todos los canales de venta: Rozetka, Prom, Epicentr, Google y KeyCRM desde un solo hub

Una tienda que además vende en tres marketplaces y en Google mantiene cinco copias de su catálogo, y cada cambio de precio tiene que llegar a todas. El hub de Ezeden guarda un solo catálogo y habla el idioma de cada canal, sin borrar ni recrear nunca un anuncio que ya vende.