Todos los proyectos
Núm. 12
Ventas e inventario
Punto de venta e inventario en Streamlit
- Mi rol
- Autor único
- Periodo
- Nov 2025
El problema
Un negocio pequeño necesita registrar ventas, saber qué tiene en existencia y entregar un ticket, sin pagar un sistema de punto de venta. Quise resolverlo con una app web sencilla sobre una base de datos real.
Qué construí
Lo hice solo, en 10 commits del 2 al 23 de noviembre de 2025.
- Una app Streamlit con 7 módulos: panel principal, ventas, productos, compras, gastos, reportes y configuración.
- Login con contraseñas en bcrypt, cookie de sesión firmada con expiración y 2 roles, administrador y cajero. Un modo kiosco oculta compras, gastos, reportes y configuración a quien no es administrador.
- Ventas con carrito, IVA configurable y ticket en PDF generado con ReportLab.
- Compras que actualizan existencias y costo (último o promedio ponderado), registro de gastos, reportes por periodo con gráficas, exportación a CSV y un respaldo en ZIP de 7 tablas.
- Acceso a PostgreSQL con SQLAlchemy y transacciones con commit o rollback automático.
Arquitectura
Resultados
No hay métricas de uso que reportar. Lo verificable es el código: los flujos de venta, compra y reporte, y el control de acceso por rol.
Límites conocidos
- Todo vive en un solo
app.pyde 2,363 líneas. Separar datos, dominio e interfaz es lo primero que haría. - El esquema de la base se creó a mano y no está en el repositorio (
init_dbno hace nada), así que no se puede levantar desde cero sin reconstruirlo. - No hay tests.
- El README presenta el login como opcional o en progreso, aunque ya está implementado.