Volver a proyectos
Nivel Junior 3,100+ LOC

Caja Registradora

Java 17 • JavaFX • MySQL • Apache PDFBox

#Java #JavaFX #Desktop #POS #PDF #Cliente Real
Screenshot de Caja Registradora
Stack:
Java
MySQL
Capturas del proyecto 10 imágenes

Sistema de punto de venta desktop entregado y usado en producción por Optiver, una óptica en Medellín. Automatiza el ciclo completo de venta: carrito con control de stock en tiempo real, emisión de facturas PDF con logo institucional, y un sistema de fidelización propio con puntos escalonados por monto de compra — todo desarrollado en 2 meses durante el primer año de programación.


🚀 Impacto y Números

  • Cliente real entregado: Aplicación en producción para Optiver (óptica, Medellín)
  • ~3,100 LOC en 22 clases Java con 7 vistas FXML y 7 módulos funcionales
  • 2 meses de desarrollo como proyecto de primer año — sin tutoriales de referencia directa
  • 0 dependencias de internet: aplicación 100% offline con MySQL local

⚡ Cómo está construido

Generación programática de facturas PDF

  • Apache PDFBox (bajo nivel): layout manual con PDPageContentStream — posicionamiento de texto por coordenadas absolutas, trazado de tablas con líneas vectoriales, carga del logo desde el classpath del JAR
  • Conversión de monto a letras: algoritmo recursivo propio que convierte hasta 999,999,999 COP a texto en español (“doscientos cincuenta y tres mil pesos”) — problema algorítmico no trivial resuelto autónomamente
  • Ruta configurable: directorio de guardado en resources/ruta.txt, sin recompilar

Sistema de fidelización por referidos

  • Escala de bonificación real: 1% en compras $180K–$300K COP, 1.5% en $300K–$700K, 2% en más de $700K
  • Validaciones de integridad: el referido no puede ser el mismo cliente activo; requiere confirmación de “trabajo completo” antes de otorgar puntos; canje valida puntos disponibles vs. costo del premio en tiempo real

Arquitectura MVC con JavaFX

  • Navegación SPA-style: MainController carga vistas dinámicamente con FXMLLoader e inyecta contexto de usuario entre controllers — usuarios con roles distintos ven módulos distintos
  • Queries parametrizadas: 100% de operaciones con PreparedStatement en 5 DAOs especializados — SQL Injection prevenido por construcción
  • ObservableList + ListChangeListener: sincronización reactiva entre tablas y formularios sin eventos manuales

🛠️ Stack

Core: Java 17, JavaFX 17, FXML Libs: Apache PDFBox 2.x, MySQL Connector/J 8 DB: MySQL 8 (JOINs entre 4 tablas: venta, cliente, usuario, detalle) Tools: Apache Ant, NetBeans IDE Patterns: MVC, DAO (JDBC puro), Observer (JavaFX), Composition


💼 Lo que este proyecto demuestra

Este proyecto demuestra que puedo:

  • Entregar software a un cliente real con requerimientos concretos de negocio — no solo una demo de portfolio
  • ✅ Integrar librerías no triviales de forma autónoma (PDFBox con layout de bajo nivel)
  • ✅ Implementar lógica de negocio real: escala de puntos, validaciones de integridad, control de stock
  • ✅ Aplicar MVC y DAO correctamente desde etapas muy tempranas de aprendizaje

Diferenciador clave: Fue requerido, construido y entregado a un negocio que lo usó en producción. La factura PDF con la conversión de montos a texto es la evidencia más clara de que el problema se resolvió de verdad, no en un sandbox.