Saltar al contenido
← Volver a proyectos

ServiFrescos — Gestión centralizada de productos y precios

Aplicación web que centraliza la gestión de productos, precios, usuarios y tiendas de Protinal Proagro, eliminando las discrepancias entre las bases de datos locales de cada tienda y la sede central.

ServiFrescos — Gestión centralizada de productos y precios

Stack

  • React
  • TypeScript
  • Django REST Framework
  • Docker
  • SQL Server
  • CSS
  • Figma

ServiFrescos es una aplicación web desarrollada como proyecto de pasantía y trabajo de grado para Protinal Proagro, C.A., orientada a centralizar la gestión de los productos y sus precios en las tiendas minoristas de la empresa.

El problema

Cada una de las once tiendas minoristas operaba con su propia base de datos local para gestionar productos y precios, y no existía ningún sistema que transmitiera los cambios entre ellas. La gerencia avisaba de cada ajuste por WhatsApp o por correo al encargado de cada tienda, que lo cargaba a mano en el terminal de punto de venta. Desde que salía el mensaje hasta que el cambio estaba aplicado pasaba un día completo de media.

Once transcripciones manuales dan once oportunidades de que la cifra llegue distinta, y de ahí nacían las discrepancias frecuentes entre las tiendas y la sede central.

La solución

Una aplicación web que centraliza la gestión en una base de datos central, administrable desde una interfaz amigable. Son cinco módulos: productos, precios, categorías (marcas, tipos y la jerarquía departamento → grupo → subgrupo), tiendas y usuarios.

La base central no sustituye a las locales de cada tienda: se conecta con ellas y les replica los cambios hechos desde la aplicación, de modo que las tiendas dejan de divergir de la sede sin tener que desmontar lo que ya tenían funcionando. La replicación no es instantánea ni pretende serlo: las tiendas consultan los cambios por HTTP a un intervalo configurable —puede ser de un minuto, o de un segundo— y a la empresa le bastaba con una hora, frente al día que tomaba la cadena de mensajes. Como los precios se cargan programados con antelación, lo que importa es que el cambio llegue antes de su fecha de efectividad, no que llegue al instante.

Funcionalidades destacadas:

  • Precios programados: al crear un precio se define la fecha y hora desde la que entra en vigencia, así que un ajuste puede quedar cargado con días de antelación y entrar en vigor a la misma hora en las once tiendas, en lugar de cuando cada encargado pueda atenderlo.
  • Permisos por módulo y por tienda: a cada usuario se le conceden permisos de consulta y de gestión módulo a módulo, y además se le asignan las tiendas a las que accede — lo que en la práctica decide de qué tiendas puede ver o tocar los precios.
  • Sin borrado desde la interfaz. Fue un requisito de la empresa: la gestión permite crear y actualizar, nunca eliminar. Un registro solo puede borrarlo el administrador de la base de datos por fuera de la aplicación, y únicamente si es estrictamente necesario.
  • Exportación a Excel: cualquier listado se exporta tal como se está viendo, con los filtros de búsqueda ya aplicados.

Formulario de creación de precio con el selector de fecha de efectividad abierto

Un precio nuevo no reemplaza al anterior: se programa. Hasta que llega su fecha de efectividad, el vigente sigue siendo el que estaba.

Listado de precios con filtros por tienda y por vigencia

El listado muestra a la vez el precio vigente y los que esperan turno, y cada registro conserva quién lo creó y por qué — el rastro que el proceso anterior, repartido entre once bases de datos, no tenía.

Pantalla de permisos de usuario, por módulo y por tienda

Consulta y gestión se conceden módulo a módulo; las tiendas asignadas acotan sobre qué precios puede actuar cada usuario.

Mi rol

Fui el único desarrollador del proyecto de principio a fin, en solitario y full stack: diseñé la interfaz y desarrollé el frontend, el backend y la base de datos centralizada.

  • Diseño (UI): prototipado de la interfaz en Figma.
  • Frontend: React, TypeScript y CSS.
  • Backend: API REST con Django REST Framework.
  • Base de datos: SQL Server centralizada, doce tablas propias. La de precios es el cruce del modelo —producto × tienda × fecha de efectividad, con esa terna como clave única—, y es lo que permite a la vez que cada tienda tenga su propio precio y que un mismo producto acumule precios futuros sin pisar al vigente.
  • Entorno: toda la aplicación —frontend, backend y base de datos— contenedorizada con Docker Compose, de modo que docker compose up -d levanta el sistema completo.

Estado del proyecto

El desarrollo alcanzó un estado avanzado y funcional, cubriendo el ciclo completo de la aplicación. La puesta en producción y la adopción en las tiendas quedaron fuera del período de pasantía, por lo que el proyecto no llegó a desplegarse en un entorno real.