Registro de ventas
Captura rápida por cliente y producto, con cálculo automático del total.
Sistema de ventas, inventario y cuentas por cobrar para una distribuidora con reparto en ruta, donde el registro diario dependía de anotaciones a mano.

01
Un negocio de distribución vive de dos números: qué salió y qué se cobró. En esta distribuidora ambos se anotaban a mano al final del día, y cuadrarlos era un ejercicio de memoria que se hacía cada noche.
El sistema registra ventas por cliente, descuenta inventario, lleva el saldo de quienes compran al crédito y permite consultar el histórico sin depender de un cuaderno.
02
El producto salía en ruta y volvía como efectivo, producto no vendido o deuda, sin un registro que uniera las tres cosas.
Las cuentas por cobrar eran el punto más débil: los saldos vivían en notas dispersas, y una deuda olvidada era dinero perdido sin que nadie lo notara.
03
04
Desarrollé una aplicación web con backend en Node.js/Express y SQLite, y un frontend en JavaScript modular sin framework, priorizando una carga inmediata y un flujo de captura corto.
El registro de una venta descuenta inventario y actualiza el saldo del cliente en la misma operación, de forma que las tres vistas del negocio siempre coincidan.
La autenticación con JWT y contraseñas cifradas permite separar lo que puede hacer la administración de lo que puede hacer el personal de ruta.
05
06
| Tecnología | Función |
|---|---|
| JavaScript (ES Modules) | Interfaz sin framework, con carga mínima |
| Node.js + Express | API REST y reglas de negocio |
| SQLite (better-sqlite3) | Base de datos embebida, respaldable como un archivo |
| JWT + bcrypt | Sesiones y credenciales seguras |
| CSS | Interfaz responsiva construida desde cero, sin dependencias |
07
Captura rápida por cliente y producto, con cálculo automático del total.
Entradas de producto y descuento automático al vender, con existencias siempre visibles.
Saldo por cliente, registro de abonos y consulta del histórico de deuda.
Ficha con datos de contacto, historial de compras y estado de cuenta.
Consulta de ventas y cobros por rango de fechas para cerrar el día o el mes.
Roles separados para administración y operación diaria.
08
Research — Observé el ciclo real de un día de reparto antes de escribir código.
Requirements — Reduje el registro de una venta al mínimo de campos posibles.
Architecture — Backend y base de datos ligeros, pensados para correr en una sola máquina.
UI/UX — Interfaz sin framework para mantener la carga y la complejidad bajas.
Development — Construcción por módulos: primero ventas, luego inventario, después cobros.
Testing — Validación con datos reales del negocio antes de reemplazar el cuaderno.
Deployment — Puesta en marcha con respaldo del archivo de base de datos.
09
Para un panel administrativo de este tamaño, un framework habría añadido peso y proceso de build sin resolver un problema real. ES Modules y CSS propio dieron una interfaz rápida y fácil de mantener por una sola persona.
Venta, inventario y saldo se actualizan juntos. Separarlos habría sido más flexible, pero abría la puerta a estados inconsistentes: producto descontado sin venta registrada, o venta sin deuda asociada.
Que toda la base de datos sea un archivo hace que el respaldo sea una copia, no un procedimiento. Para un negocio sin personal técnico, eso es la diferencia entre tener respaldos y hablar de ellos.
10
11
Cuando el sistema compite contra el papel, la velocidad de captura importa más que la cantidad de funciones.
Modelar bien el negocio al inicio —qué es una venta, qué es un abono, qué es una deuda— ahorra semanas de correcciones después.
Empezar por el módulo que más duele (las cuentas por cobrar) hace que el sistema se gane la confianza del usuario desde el primer día.
Siguiente proyecto
ID Inventory — Operación sin conexiónContacto
Estoy abierto a oportunidades profesionales, colaboraciones y proyectos donde la tecnología resuelva una necesidad concreta.