TPV Bar es un sistema de Terminal de Punto de Venta (TPV) diseñado específicamente para negocios de hostelería (bares, cafeterías, restaurantes) que requieren una solución simple, rápida y funcional para la emisión de tickets de venta.
A diferencia de los sistemas ERP complejos que incluyen gestión de inventario, análisis de ventas, reportes financieros y múltiples módulos de negocio, TPV Bar se enfoca exclusivamente en la operación del punto de venta. Su objetivo es proporcionar:
- ✅ Interfaz ágil y táctil para la venta rápida en mostrador
- ✅ Emisión inmediata de tickets con impresora térmica integrada
- ✅ Gestión de pago (efectivo con cambio automático y tarjeta)
- ✅ Cierre de caja por turno (5:00 AM - 5:00 AM)
- ✅ Historial de tickets para reimpresiones y consultas rápidas
- ❌ SIN gestión de inventario (stock, movimientos de almacén)
- ❌ SIN análisis financiero (reportes, estadísticas avanzadas)
- ❌ SIN gestión de clientes (solo identificación opcional)
- ❌ SIN funciones administrativas (roles, permisos, usuarios)
Un bar pequeño o mediano que:
- Necesita registrar ventas rápidamente
- Tiene mostrador con punto de venta táctil
- Desea imprimir tickets automáticamente
- Requiere abrir cajón después de cada pago
- Necesita cierre de caja simple por turno
- NO requiere gestión detallada de ventas ni inventario
- ✅ Interfaz gráfica completamente documentada con Javadoc
- ✅ Categorías de productos (Bebidas, Tapas, Comidas, Postres, Cafés, etc.)
- ✅ Grilla de productos con imágenes (4 columnas, optimizada para táctil)
- ✅ Ticket en tiempo real con cálculo automático de total
- ✅ Pago en efectivo (cálculo de cambio) y tarjeta
- ✅ Impresora térmica integrada (apertura de cajón automática)
- ✅ Cierre de caja por turnos (5:00 AM - 5:00 AM)
- ✅ Historial de últimos 10 tickets con reimpresión
- ✅ Caché de imágenes para rendimiento
- ✅ Base de datos SQLite con persistencia
- ✅ 100% código documentado con Javadoc
- Java 8+ (JDK)
- Maven 3.6+
- Windows/Linux/Mac
- Impresora térmica Premier ITP-58 III (opcional, para imprimir)
- Monitor táctil (recomendado para la mejor experiencia)
git clone https://github.com/eloygnz/tpv-bar.git
cd tpv-barmvn clean packageEsto genera el JAR ejecutable: target/tpv-bar.jar
Las imágenes de productos se ignoran en GitHub. Si las tienes (no incluidas por copyright):
mkdir -p imagenes/productos
# Copiar imágenes JPG (200x200px, quality 85) en este directorioSi no tienes imágenes, el sistema funciona con placeholders (color blanco).
Con Maven:
mvn exec:java -Dexec.mainClass="com.tubar.tpv.Main"Con JAR:
java -jar target/tpv-bar.jarWindows (batch script):
iniciar-windows.batLa base de datos SQLite se genera automáticamente al ejecutar el programa por primera vez.
- Ubicación:
basededatos/tpv.db - Tablas:
categorias,productos,clientes,tickets,lineas_ticket - Tamaño: ~50KB inicial
No necesitas hacer nada - DatabaseManager.java se encarga de todo.
tpv-bar/
├── src/main/
│ ├── java/com/tubar/tpv/
│ │ ├── Main.java # Punto de entrada
│ │ ├── modelo/ # Clases de datos (6 clases)
│ │ ├── dao/ # Data Access Objects (4 clases)
│ │ ├── database/ # Gestión de BD
│ │ ├── util/ # Utilidades (ImpresoraUtil)
│ │ └── vista/ # GUI (8 componentes)
│ └── resources/
│ └── basededatos/ # BD SQLite (ignorada en git)
│
├── pom.xml # Configuración Maven
├── .gitignore # Archivos ignorados en git
├── README.md # Este archivo
├── LICENSE # MIT License
│
└── LOCAL-DATA/ (local, no en git)
├── basededatos/tpv.db # BD generada automáticamente
├── imagenes/productos/ # Imágenes locales (ignoradas)
└── precios.sql # Scripts locales (ignorados)
-
Clonar y compilar:
git clone https://github.com/eloygnz/tpv-bar.git cd tpv-bar mvn clean package -
Ejecutar:
java -jar target/tpv-bar.jar
-
Interfaz:
- Izquierda: Selecciona categoría de productos
- Centro: Grilla de productos (click = +1, doble click = editar cantidad)
- Derecha: Ticket actual con total
- Arriba: Total general en grande
- Abajo: Botones: Abrir Cajón, Últimos Tickets, Ver Ventas Hoy
-
Comprar:
- Click en productos → se añaden al ticket
- Doble click en línea → edita cantidad (0 = eliminar)
- Click COBRAR → elige método (efectivo/tarjeta)
- Pago efectivo → abre cajón automáticamente
Si tienes impresora Premier ITP-58 III:
- Instala los drivers en Windows/Linux
- Configura como impresora predeterminada (o ajusta nombre en
ImpresoraUtil.java) - El programa enviará comandos automáticamente
Si no tienes impresora:
- El programa sigue funcionando sin errores
- Opción "Imprimir ticket" se desactiva gracefully
Toda la base de código está 100% documentada con Javadoc:
modelo/- 6 clases documentadasdao/- 4 clases DAO completamente documentadasutil/- ImpresoraUtil documentadovista/- 8 componentes GUI documentadosdatabase/- DatabaseManager documentado
Genera JavaDoc:
mvn javadoc:javadocAbre: target/site/apidocs/index.html
Edita database/DatabaseManager.java:
private static final String BD_URL = "jdbc:sqlite:basededatos/tpv.db";Edita util/ImpresoraUtil.java:
private static final String NOMBRE_IMPRESORA = "Premier ITP-58";Edita dao/TicketDAO.java en método calcularInicioTurno().
- ✅ Funcionalidad TPV completa
- ✅ Interfaz táctil optimizada
- ✅ Impresora térmica integrada
- ✅ Base de datos SQLite
- ✅ Documentación Javadoc 100%
-
Generalizar ImpresoraUtil - Leer configuración de impresora desde archivo de propiedades en lugar de hardcode
- Crear
config/printer.properties - Soportar múltiples impresoras (seleccionable)
- Configuración de comandos ESC/POS personalizables
- Crear
-
Sistema de Logging - Emitir mensajes en archivos en lugar de System.out/System.err
- Implementar SLF4j + Logback
- Archivo de log:
logs/tpv.log - Niveles: DEBUG, INFO, WARN, ERROR
- Rotación de logs diarios
- Log de todas las ventas (audit trail)
-
Control exhaustivo de excepciones
- Try-catch mejorados en todos los DAOs
- Dialogs informativos para errores de usuario
- Recovery automático cuando sea posible
- Logging de stack traces
-
Pruebas unitarias (JUnit 4+)
- Tests para modelos de datos
- Tests para DAOs (con BD en memoria H2)
- Tests para lógica de tickets
- Tests para cálculos (total, cambio, etc.)
- Cobertura mínima: 70%
-
Pruebas de integración
- Tests end-to-end de flujo de venta
- Tests de impresora (mock)
- Tests de cierre de caja
-
Gestión de productos desde interfaz
- CRUD de categorías
- CRUD de productos
- Edición de precios
- Cambio de estado (activo/inactivo)
-
Descuentos
- Descuento por línea
- Descuento global del ticket
- Códigos promocionales
-
Reportes avanzados
- Ventas por categoría
- Productos más vendidos
- Hora de mayor afluencia
- Exportar a CSV/PDF
-
Seguridad
- Autenticación de usuarios
- Rol de administrador vs cajero
- Auditoría de cambios
-
Backup automático
- Backup diario de BD
- Sincronización con servidor
-
Multi-idioma
- Soporte para español, inglés, catalán
-
Modo oscuro
- Tema oscuro para la noche
- v0.0.1 - Primera release con documentación completa
- Funcionalidad TPV completa
- Interfaz táctil optimizada
- Impresora térmica integrada
- Base de datos SQLite
- Documentación Javadoc en 100% del código
MIT License - Libre para usar, modificar y distribuir
eloygnz - 2026
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea rama de feature (
git checkout -b feature/AmazingFeature) - Commit cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre Pull Request
Si encuentras problemas:
- Revisa la consola de errores (System.out/System.err)
- Verifica que Java 8+ está instalado:
java -version - Verifica que Maven está instalado:
mvn -version - Limpia caché:
mvn clean - Abre issue en GitHub
¡Gracias por usar TPV Bar! 🍺📱