PROYECTO_03

Ya lávame

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
  • Python 3.12
  • PySide6 (Qt 6)
  • SQLite
  • python-escpos
  • pywin32
  • PyInstaller
  • Inno Setup

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.

  1. Toca al trabajador que atendió el carro. La lista sale de Admin → Trabajadores.
  2. Toca el tipo de vehículo: sedán, SUV, camioneta, moto… Cada uno tiene su precio base en el catálogo.
  3. Marca los extras que se hicieron (cera, teflón, restaurador…). El total se recalcula al momento.
  4. Escribe con el teclado numérico en pantalla lo que pagó el cliente; la app calcula el cambio.
  5. 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ñaPara quéDetalle
Corte de cajaArqueo al cierreTotal recaudado, coches lavados y el detalle de cada servicio del día, por trabajador
HistorialConsultar días anterioresTodos los lavados con fecha, trabajador, vehículo, servicio, costo, recibido y cambio
DeudoresClientes que pagan despuésAlta 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
AdminSolo con contraseñaPrecios 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.

ModoCuándoQué pide
windowsImpresora instalada en Windows (por defecto)El nombre en el spooler, p. ej. POS-58; va por pywin32
serialPuerto serie o USB-seriePuerto (COM3, /dev/ttyUSB0) y baudios (9600)
networkImpresora de redIP y puerto, normalmente 9100
usbUSB directo, sin driverVendor y product id (0x0416 / 0x5011); requiere libusb
fileDiagnósticoEscribe 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.

TablaQué guarda
configuracionClave-valor: nombre del negocio, contraseña de admin, pie del ticket, impresora, escala
serviciosPrecio por (categoria_vehiculo, tipo_servicio), único por pareja
historialCada lavado: fecha, trabajador, vehículo, servicio, costo, recibido y cambio
trabajadoresNombres únicos del personal
deudores · pagos_deudoresDeuda 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/ y assets/ se resuelven contra la raíz del proyecto, o junto al .exe cuando 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.db anterior a la carpeta de datos después de instalar.

DIAGRAMAS

PRECIO SUMA COBRAR Trabajador quién lavó Vehículo sedán · SUV · camioneta · moto Extras cera · teflón · restaurador Total y cambio teclado numérico en pantalla Asignar deuda si el cliente paga después SQLite · historial se guarda primero Ticket + cajón ESC/POS · drawer kick
01 Un cobro, de la pantalla al cajón
BYTES Ticket ESC/POS logo · doble alto · corte · ESC p Admin → Impresora modo · papel 58/80 · cajón windows spooler · pywin32 serial COM3 · 9600 network IP : 9100 usb vendor · product file diagnóstico Impresora térmica + cajón de dinero
02 Un ticket, cinco caminos a la impresora
LEE · GUARDA SQL PRIMER ARRANQUE Pantallas Qt Nuevo · Corte · Historial · Deudores · Admin database.py la única capa que toca la base lavado.db SQLite · C:\ProgramData\YaLavame\data historial_lavados.json versión anterior Respaldo copiar el archivo configuracion · servicios · historial · trabajadores · deudores · pagos_deudores
03 Todo en un archivo
1 2 · dist/ OPCIONAL src/ + assets/ Python 3.12 · PySide6 PyInstaller SistemaAutolavado.spec Inno Setup 6 installer/YaLavame.iss YaLavame_Setup_1.3.0.exe no requiere Python Archivos de Programa la app · accesos directos ProgramData\YaLavame data\lavado.db · escribible Arranque automático modo kiosko al iniciar sesión
04 Del código al mostrador

01 04

CAPTURAS

Pantalla de cobro: selección de trabajador, tipo de vehículo y servicios extra, con el resumen de pago y el estado de la impresora
Cobro de un servicio
Pantalla de corte del día con total recaudado, carros lavados y detalle de servicios
Corte del día
Pantalla de administración con precios por vehículo, trabajadores, seguridad y configuración
Administración

01 01