Demo funcional datos ficticios Cliente: Restaurante con varias sedes y tienda de repuestos para cascos (prospectos)

Inventario, ventas y cierre de caja para restaurantes y tiendas

Resultado: Un sistema que sabe cuánto tienes en cada sede, descuenta insumos por receta y le deja al contador el archivo listo.

evidencia: 396 pruebas en verde y dos revisiones adversariales de seguridad; demo con datos ficticios, disponible a pedido ⓘ

396 pruebas automáticas ⓘ
0 hallazgos críticos o altos ⓘ
2 modos: restaurante y tienda ⓘ
Restocore · demo

Ilustración animada del punto de venta de Restocore: tres productos entran al pedido, el pago es por Nequi, se registra la venta, sale un recibo, los insumos de la receta bajan en la sede y el tablero muestra las ventas por sede

Vista de Restocore Sede Occidente sáb · 15:24
demo · datos ficticios

Para el dueño

Resultado para el negocio

  • Dos negocios distintos con el mismo dolor.
  • Demo funcional, lista para un piloto. 396 pruebas automáticas y una revisión de seguridad sin hallazgos críticos ni altos. Probado con datos ficticios. Todavía no hay un cliente operando con él.
  • Puedo pasar de una conversación de ventas a un producto con usuarios, roles, respaldos y pruebas. Y sé qué no construir: el POS con facturación electrónica se deja a un proveedor autorizado.

En una línea

Un sistema que sabe cuánto tienes en cada sede, descuenta insumos por receta y le deja al contador el archivo listo. Hoy es una demo funcional lista para un piloto. Todavía no hay un cliente operando con él, y lo digo desde el principio.

Contexto

Primero construí el sistema de inventario de mi propia tienda, Empire Essence, para no pagar un CRM externo. Funcionaba para un solo negocio y con campos de perfumería. Cuando empecé a hablar con dueños de restaurantes y tiendas, escuché el mismo dolor una y otra vez. Ahí nació Restocore: un producto aparte, pensado desde el comienzo para varias sedes y varios tipos de negocio.

Dos prospectos me ayudaron a darle forma:

  • Un grupo de restaurantes con varias sedes. Usaban un software que no les cumplía y buscaban opciones antes de que se les venciera el contrato.
  • Una tienda de repuestos para cascos. Vendía en mostrador y llevaba el inventario y el cierre de caja a mano.

El problema

Los dos negocios son distintos, pero se quejaban de lo mismo:

  • No saben cuánto tienen en cada sede sin ir a contar.
  • El cierre de caja se hace en cuaderno o en Excel, y nadie lo puede revisar después.
  • El contador recibe los datos tarde y desordenados.
  • En el restaurante, cada plato vendido debería descontar sus ingredientes. Hoy nadie lo hace, así que las pérdidas no se ven.

Lo que pidió el restaurante, palabra por palabra: estabilidad, inventario robusto, compras, una base de clientes para domicilios y una pantalla fácil de manejar.

El enfoque

Antes de escribir código decidí qué no construir. Un POS con facturación electrónica ante la DIAN no se hace desde cero: es regulado, caro de mantener y ya existen proveedores autorizados. Restocore trabaja al lado del POS, no en su lugar. Importa las ventas del POS por archivo y se encarga de lo que el POS no resuelve bien: inventario, recetas, compras, cierre y datos limpios.

Segunda decisión: un solo código para dos tipos de negocio. Cada instalación escoge su modo. Restaurante usa recetas, domicilios y sugerido de compra. Tienda usa variantes con SKU y venta de mostrador. Así cada mejora sirve a los dos.

Tercera decisión: la IA solo donde ahorra trabajo real, y siempre con una persona al final. El ejemplo es la lectura de facturas.

Qué construí

  • Inventario por sede con kardex: cada entrada y salida queda registrada con quién la hizo.
  • Ventas de mostrador o por receta, con descuento automático de insumos.
  • Compras, costo promedio y sugerido de compra.
  • Cierre Z guardado por sede y por día.
  • Importación de ventas del POS por archivo.
  • Usuarios con roles. Administrador, caja y bodega. La caja no ve costos ni puede borrar movimientos. Cada usuario solo ve las sedes que tiene asignadas.
  • Respaldos diarios con restauración probada en pruebas automáticas.
  • Exportación a Excel para que el dueño saque sus datos sin pedirme permiso.
  • Comprobante de ventas para el contador, en beta. El formato final se confirma con el contador de cada cliente.
  • Un agente que lee la factura del proveedor, en foto o PDF, valida NIT, sumas, IVA y cantidades, y propone la compra. Una persona la revisa lado a lado y la confirma. Nada se guarda sin esa confirmación.
  • Un instalador para el computador o servidor del cliente, con respaldo y forma de revertir una actualización.

Cierre del día, exportaciones y respaldos

Cierre Z. Un cierre por sede y por día: totales por medio de pago (cinco medios), ventas, descuentos, base, efectivo contado, la diferencia y quién cerró. Una vez guardado, las ventas posteriores de ese día quedan bloqueadas, y una venta y un cierre no se pueden cruzar. Los cierres anteriores quedan para consulta.

Comprobante para Siigo (beta). Para el contador: un comprobante contable diario por sede y rango de fechas, con débitos por medio de pago y créditos a ingresos e IVA, controlado contra la Z guardada. Hasta 500 filas por Excel sin partir un día, y un ZIP cuando son varios. Faltan la plantilla del contador y la prueba de importación en Siigo, por eso sigue en beta.

Exportar a Excel. Inventario, movimientos por fechas, compras, ventas y recetas, con números, fechas y pesos en formato real. Solo el administrador.

Respaldos. Una copia diaria consistente por la API de SQLite, con verificación de integridad y rotación de 14 días. En Windows, una tarea programada a las 12:30 y al iniciar sesión, más una copia verificada con SHA-256 a una carpeta sincronizada (OneDrive o Drive). El comando de restauración pide confirmación, valida el archivo y revoca las sesiones. Una prueba automática crea datos, respalda, borra movimientos y restaura el contenido exacto.

Importación del POS. El administrador sube el CSV o XLSX del POS (hasta 5 MiB), mapea las columnas una vez por sede, empareja los productos con equivalencias guardadas, revisa una vista previa (totales, descuentos, negativos, productos sin receta, líneas rechazadas y duplicadas) y confirma en una sola transacción. Cada línea lleva una huella para no importarse dos veces, y la importación completa se puede deshacer con movimientos de ajuste.

Fuera del alcance, a propósito. La facturación electrónica y el POS siguen con un proveedor autorizado. No se procesan pagos. Una instalación por empresa.

Demo y estado

  • Estado: demo funcional, lista para piloto. Datos ficticios.
  • Pruebas: 396 pruebas automáticas aprobadas.
  • Seguridad: dos revisiones adversariales. La última, del 19 de octubre de 2026, no encontró hallazgos críticos ni altos. Los medios y bajos se corrigieron.
  • Pendiente: el ensayo de instalación en el equipo real del primer cliente y la medición del agente de facturas con facturas reales.

La propuesta para el primer cliente arranca con una sede piloto y 30 días de medición. Con esos números se decide si se amplía a las demás.

Lo que aprendí

  • Una revisión honesta vale más que una propuesta bonita. La primera versión de mi propuesta prometía inicio de sesión, respaldos y exportación que el producto no tenía. Una revisión adversarial lo encontró antes de enviarla. Construí esas piezas antes de prometerlas.
  • Decir qué no haces da confianza. Cuando explico que no reemplazo el POS ni la facturación electrónica, el dueño se relaja. Sabe que no le voy a cambiar todo.
  • Los datos del cliente mandan. El formato contable, las reglas del cierre y las recetas se confirman con su gente. Yo no las adivino.

Qué se rompió y cómo lo encontré

  • Mi primera propuesta prometía cosas que el producto no tenía. Inicio de sesión, respaldos y exportación a Excel estaban en la propuesta antes de existir en el código. Una revisión adversarial de la propuesta (7 de octubre de 2026) lo atrapó antes de enviarla. Construí esas piezas, con pruebas, antes de volver a prometerlas.
  • La revisión de seguridad encontró puertas abiertas. El 12 de octubre la revisión encontró que no había límite al tamaño de las peticiones HTTP, ni autorización por sede, y que las sesiones sobrevivían al cerrar sesión. Corregido: límite de 256 KiB por petición, cada usuario ve solo sus sedes, sesiones revocadas al salir y al cambiar rol o clave, espera progresiva ante intentos fallidos. La evidencia de antes y después quedó en el proyecto.
  • La importación del POS y el agente de facturas tenían siete hallazgos. Una segunda revisión adversarial, el 14 de octubre, encontró siete problemas en el manejo de archivos (tamaño, tipo, filas descomprimidas). Los siete corregidos, con 33 pruebas de regresión.

¿Tu negocio tiene este dolor?

Si llevas el inventario en Excel o en un cuaderno, o si tu cierre de caja depende de una sola persona, hablemos. Te muestro la demo sobre tu caso antes de cotizar nada.

Escríbeme por LinkedIn

Cómo fluye un día

De la primera venta al archivo que abre el contador. Cada paso deja un registro con su autor.

  1. 01

    Vender

    Caja registra la venta o se importa el archivo del POS. Cada producto descuenta su receta del inventario de esa sede.

  2. 02

    Comprar

    Compras desde la factura del proveedor: el agente la arma, una persona confirma lado a lado, y se actualizan el kardex y el costo promedio.

  3. 03

    Contar

    Bodega cuenta; las diferencias se vuelven movimientos de ajuste, nunca ediciones silenciosas.

  4. 04

    Cerrar

    Un cierre Z por sede y por día: totales por medio de pago, efectivo contado, diferencia y quién cerró. Las ventas posteriores de ese día quedan bloqueadas.

  5. 05

    Exportar

    Excel de inventario, movimientos, compras, ventas y recetas, más el comprobante para Siigo (beta) controlado contra la Z guardada.

  6. 06

    Respaldar

    Copia diaria consistente con verificación de integridad, rotación de 14 días y copia SHA-256 a una carpeta sincronizada. La restauración se prueba, no se supone.

Quién puede hacer qué

Tres roles por instalación. Caja y bodega solo ven las sedes que tienen asignadas; lo exige el servidor, no la pantalla.

AdministradorCajaBodega
Registrar ventas y domicilios sísíno
Ver existencias sísísí
Ver costos y márgenes sínono
Compras y conteos sínosí
Recetas y catálogo sínono
Cierre Z sísíno
Exportar a Excel y Siigo sínono
Usuarios y sedes sínono
Borrar movimientos nonono

Nadie borra movimientos: las correcciones son movimientos nuevos con autor. Eso es lo que hace auditable el kardex.

Para el equipo que contrata

Notas técnicas

Arquitectura
Aplicación web en Python con HTMX y plantillas en el servidor; modo restaurante o tienda por instalación; instalador para el computador Windows del cliente o un servidor Ubuntu (systemd, Caddy, UFW).
Datos
Una base SQLite por instalación; sedes aisladas con autorización por sede; cada movimiento guarda su autor; respaldos diarios con copia SHA-256 a una carpeta sincronizada y restauración probada; exportación a Excel.
Pruebas
396 pruebas automáticas (pytest), incluidas regresiones de seguridad de dos revisiones adversariales (12 y 14 de octubre de 2026); agente de facturas evaluado con 10 facturas ficticias: 8 listas, 2 marcadas, 0 erradas.
Dónde corre la IA y sus guardas
Solo en el agente de facturas: Claude lee una foto o PDF, revisa NIT, totales, IVA y cantidades y propone la compra; una persona confirma lado a lado; nada se guarda sin ese clic; tope diario de 40 facturas.
Costo mensual de operación
Corre en el computador o servidor del cliente, así que el plan básico no necesita nube; costo de IA solo cuando se leen facturas; la nube administrada y los respaldos van en otro plan.
Repositorio y estado
Repositorio privado. Demo funcional, lista para piloto. Todavía sin clientes en producción; falta el ensayo de instalación en la máquina del primer cliente.

Con qué

PythonFastAPISQLiteHTMXClaude APIPowerShell

Siguiente caso

Demo funcional Rutas de entrega para una flota de 6 vehículos en Bogotá Ver el caso→

¿Qué tarea repite tu equipo todos los días?

Cuéntamela en un mensaje. Te respondo con una idea concreta de lo que se puede automatizar, o con un no honesto.

Respondo personalmente. Normalmente en uno o dos días hábiles. · Bogotá, Colombia

Hablemos Casos→