PROYECTO_03
Ya lávame — Punto de venta
Punto de venta táctil para un autolavado: vino a sustituir la libreta con la que cobraban.
- TIPO
- Escritorio · Punto de venta
- ESTADO
- EN PRODUCCIÓN
- DIAGRAMAS
- 4
- CAPTURAS
- 3
YaLavame_Setup_1.3.0.exe Windows · no requiere Python
01 Qué es
Punto de venta táctil para un autolavado, en producción. Sustituye el cobro con libreta por un flujo completo: se elige quién lavó, qué vehículo y qué servicios, se cobra, se imprime el ticket en la impresora térmica y se abre el cajón. Está pensado para operar con el dedo en una pantalla táctil, sin teclado ni mouse, y para que cualquier empleado lo use sin explicación.
- Una sola app de escritorio en Python + PySide6 (Qt 6) con base de datos SQLite local: sin servidor, sin internet, sin configuración.
- Cinco pestañas: Nuevo (cobro), Corte de caja, Historial, Deudores y Admin (esta última con contraseña).
- Ticket ESC/POS con logo, apertura del cajón por hardware y cinco formas de conectar la impresora.
- Instalador de Windows con arranque automático en modo kiosko; el mismo núcleo corre en Linux.
02 Cobrar un servicio
Es la pantalla en la que vive la terminal todo el día. Todo son tarjetas grandes; no hay menús escondidos ni campos que exijan teclado físico.
- Toca al trabajador que atendió el carro. La lista sale de Admin → Trabajadores.
- Toca el tipo de vehículo: sedán, SUV, camioneta, moto… Cada uno tiene su precio base en el catálogo.
- Marca los extras que se hicieron (cera, teflón, restaurador…). El total se recalcula al momento.
- Escribe con el teclado numérico en pantalla lo que pagó el cliente; la app calcula el cambio.
- Toca Cobrar: se guarda en el historial, sale el ticket y se abre el cajón. Si el cliente se va a deber, toca Asignar deuda y elige al deudor en vez de cobrar.
03 Las demás pantallas
| Pestaña | Para qué | Detalle |
|---|---|---|
| Corte de caja | Arqueo al cierre | Total recaudado, coches lavados y el detalle de cada servicio del día, por trabajador |
| Historial | Consultar días anteriores | Todos los lavados con fecha, trabajador, vehículo, servicio, costo, recibido y cambio |
| Deudores | Clientes que pagan después | Alta con deuda inicial, agregar deuda, registrar abono, historial de pagos y borrar; los montos se pueden ocultar con un botón cuando hay gente mirando |
| Admin | Solo con contraseña | Precios por vehículo y servicio, trabajadores, cambio de contraseña, nombre del negocio y pie del ticket, impresora, escala de pantalla y cajón |
La primera vez que arranca, la app pide el nombre del negocio y la contraseña de administrador que elija el dueño; no hay contraseña de fábrica en producción. Si se pierde, scripts/fix_password.py la restablece desde la máquina.
04 Impresión y cajón
El ticket no se «imprime» como documento: se construye con comandos ESC/POS a bajo nivel a través de python-escpos, y el mismo código sirve para cualquier forma de conectar la impresora. El logo va rasterizado al ancho del papel; el nombre del negocio y el total en doble alto y ancho; al final, corte de papel y, si está activado, la secuencia drawer kick (ESC p) que abre el cajón.
| Modo | Cuándo | Qué pide |
|---|---|---|
windows | Impresora instalada en Windows (por defecto) | El nombre en el spooler, p. ej. POS-58; va por pywin32 |
serial | Puerto serie o USB-serie | Puerto (COM3, /dev/ttyUSB0) y baudios (9600) |
network | Impresora de red | IP y puerto, normalmente 9100 |
usb | USB directo, sin driver | Vendor y product id (0x0416 / 0x5011); requiere libusb |
file | Diagnóstico | Escribe los bytes ESC/POS a un archivo para revisarlos |
- Papel de 58 mm (384 puntos) u 80 mm (576 puntos); el ancho decide a cuánto se escala el logo.
- Botones de Impresión de prueba y Probar conexión en Admin → Impresora, para dejar la terminal lista antes de ponerla en el mostrador.
- El cajón también se puede abrir a mano desde Admin, sin imprimir nada.
- Si la impresora no soporta corte automático, el ticket termina con tres saltos de línea en vez de fallar.
05 Interfaz táctil
- Modo kiosko: arranca a pantalla completa con su propio login por contraseña y teclado en pantalla; nada de la barra de Windows queda a la vista.
- Teclados numérico y alfanumérico propios como componentes Qt, para no depender del teclado táctil del sistema.
- Escala automática: el factor sale de la altura de la pantalla respecto a una base y se acota entre un mínimo y un máximo, con un margen para que los botones de abajo no se salgan en pantallas chicas. Desde Admin se fija a mano para monitores de 13" o muy grandes, y aparte se ajusta el tamaño de las tarjetas.
- Tema claro forzado con paleta propia: se ve igual aunque Windows esté en modo oscuro, sin textos invisibles. Toda la apariencia vive en una hoja de estilos Qt (QSS) central.
- Iconos vectoriales en SVG generados en código, nítidos en cualquier resolución.
06 Datos
Todo vive en un archivo SQLite, lavado.db. La capa de datos (database.py) es la única que lo toca; las pantallas piden y guardan a través de ella. En el primer arranque, si existe el historial_lavados.json de la versión anterior, se importa a la tabla de historial sin que el usuario haga nada.
| Tabla | Qué guarda |
|---|---|
configuracion | Clave-valor: nombre del negocio, contraseña de admin, pie del ticket, impresora, escala |
servicios | Precio por (categoria_vehiculo, tipo_servicio), único por pareja |
historial | Cada lavado: fecha, trabajador, vehículo, servicio, costo, recibido y cambio |
trabajadores | Nombres únicos del personal |
deudores · pagos_deudores | Deuda total por cliente y cada abono con fecha y monto |
07 Instalar y compilar
En el mostrador va el instalador de Windows (botón de arriba): no requiere Python. Crea accesos directos y, si se marca, el arranque automático al iniciar sesión para que la terminal encienda directo en el punto de venta.
> pip install -r requirements.txt # PySide6, pywin32, python-escpos, pyserial, Pillow
> python src\main_qt.py # o doble clic en inicio.bat; en Linux: ./run_app.sh
> build_installer.bat # 1) PyInstaller con SistemaAutolavado.spec 2) Inno Setup con installer\YaLavame.iss
> # resultado: installer\output\YaLavame_Setup_1.3.0.exe- Las rutas a
data/yassets/se resuelven contra la raíz del proyecto, o junto al.execuando corre empaquetado (sys.frozen): funciona desde cualquier carpeta. - El núcleo es multiplataforma: Qt y SQLite corren igual en Windows y Linux; en Linux solo hay que elegir impresora serie, red o USB en vez del spooler.
- Para conservar datos al reinstalar, basta copiar el
lavado.dbanterior a la carpeta de datos después de instalar.