# Sistema de Punto de Venta de Master · Ale Ponce

Este es un sistema de Punto de Venta (POS) simple y eficiente, diseñado para gestionar las operaciones de un negocio de belleza. La aplicación permite administrar clientes, ventas, productos, y citas de forma centralizada.

## Características Principales

- **Dashboard:** Visualización rápida de estadísticas clave como ingresos totales, número de servicios y gráficos de rendimiento.
- **Gestión de Ventas Avanzada:** 
  - **Múltiples productos por venta**: Agregue varios servicios/cursos en una sola transacción
  - **Sistema de descuentos**: Descuentos por porcentaje o monto fijo con motivo
  - **Cálculo automático de totales**: Subtotal, descuento y total final en tiempo real
  - **Programación de citas**: Fecha y hora integradas en el flujo de ventas
  - **Generación de tickets**: Recibos optimizados para impresión térmica de 58mm con notas automáticas para anticipos
  - **Exportación a CSV**: Historial completo de ventas exportable
- **Gestión de Clientes:** Registro y consulta de clientes, con expediente completo incluyendo historial de servicios y cursos.
- **Gestión de Productos:** Administración completa de servicios y cursos con precios actualizables.
- **Configuración:**
  - Ajuste de los datos del negocio para los recibos
  - Gestión de credenciales de usuario
  - Administración de múltiples usuarios (crear, editar, eliminar)
- **Autenticación:** Sistema de inicio de sesión seguro para proteger el acceso a la información.
- **Roles de Usuario:** Perfiles de Administrador (acceso total) y Usuario (acceso limitado).

## Instalación y Despliegue

### Opción 1: Instalación Local (Desarrollo)

#### Prerrequisitos
- Node.js v18 o superior
- npm o yarn

#### Pasos
1. **Clonar el repositorio**:
   ```bash
   git clone <url-del-repositorio>
   cd ap_pos
   ```

2. **Instalar dependencias**:
   ```bash
   npm install
   ```

3. **Ejecutar la aplicación**:
   ```bash
   npm start
   ```

4. **Acceder a la aplicación**:
   - URL: `http://localhost:3111`
   - En la primera ejecución serás redirigido a `/setup.html` para crear el usuario administrador

#### Base de datos
- Se crea automáticamente un archivo SQLite (`ap-pos.db`) en el directorio raíz
- Los datos se mantienen localmente en este archivo

### Opción 2: Despliegue con Docker

El sistema está diseñado para ser desplegado fácilmente utilizando Docker y Docker Compose, asegurando un entorno consistente y aislado.

#### Prerrequisitos

- Tener instalado [Docker](https://docs.docker.com/get-docker/)
- Tener instalado [Docker Compose](https://docs.docker.com/compose/install/)

#### Pasos para el despliegue

1. **Clona o descarga** este repositorio en tu máquina local.

2. **Configura las variables de entorno**:
   ```bash
   cp .env.example .env
   # Edita el archivo .env con una clave secreta segura
   ```

3. **Levanta** el contenedor:
   ```bash
   # Usar imagen desde Docker Hub (recomendado para producción)
   docker-compose up -d
   
   # O construir localmente (para desarrollo)
   docker-compose up -d --build
   ```

4. **Verifica que esté funcionando**:
   ```bash
   docker-compose ps
   docker-compose logs ap-pos
   ```

5. **Accede a la aplicación**:
   - URL: `http://localhost:3111`
   - En la primera ejecución serás redirigido a `/setup.html` para crear el usuario administrador

#### Persistencia de datos

- La base de datos SQLite se almacena en un volumen Docker persistente
- Los datos se mantienen entre reinicios y actualizaciones del contenedor
- Para más información sobre Docker, consulta [DOCKER.md](./DOCKER.md)

## Novedades de la Versión 1.5.1

### 🐛 **Correcciones Críticas**
- **Fechas corregidas**: Resuelto bug que mostraba "undefined" en fechas de tickets
- **Función esc() mejorada**: Corregida regex que causaba corrupción de fechas
- **Validación de fechas**: Sistema robusto para manejo de fechas en tickets

### 🎨 **Mejoras de Interfaz**
- **Tickets alineados**: Todo el contenido del ticket alineado a la izquierda para mejor legibilidad
- **Interface compacta**: Productos más compactos para reducir scroll necesario
- **Auto-colapso**: Categorías de productos se colapsan automáticamente tras agregar items
- **Botón limpieza removido**: Eliminado botón de limpiar formulario por simplicidad

### 📱 **Favicons Integrados**
- **Iconos profesionales**: Soporte completo para favicons en todos los dispositivos
- **Apple Touch Icon**: Optimizado para dispositivos iOS
- **Web Manifest**: Configuración PWA para instalación en dispositivos
- **Multi-resolución**: Iconos 16x16, 32x32, 192x192, 512x512 para todas las pantallas

### ⚡ **Optimizaciones UX**
- **Cache-busting**: Sistema de versiones para actualizaciones inmediatas
- **Fechas robustas**: Validación completa de fechas con padding automático
- **Navegación fluida**: Mejor experiencia de usuario en productos y formularios

> **💡 Tip para limpiar formularios**: 
> - **Mac**: Presiona `Cmd + Shift + R` para refrescar y limpiar formularios
> - **Windows/Linux**: Presiona `Ctrl + Shift + R` para refrescar y limpiar formularios

---

## Historial - Versión 1.5.5

### 🎫 **Mejoras en Tickets de Anticipo**
- **Notas automáticas**: Los tickets de anticipo incluyen automáticamente notas sobre compromiso de tiempo y política de cancelación
- **Optimización 58mm**: Tickets optimizados específicamente para impresoras térmicas de 58mm con mejor aprovechamiento del espacio
- **Formato mejorado**: Capitalización automática de títulos de servicios y mejor espaciado visual

---

## Historial - Versión 1.5.0

### 🎫 **Reorganización de Interface**
- **Subpestañas en Ventas**: Nueva estructura con "💰 Ventas" y "🎫 Tickets"  
- **Dashboard limpio**: Movida sección de movimientos a subpestaña de Tickets
- **Navegación mejorada**: Interfaz más organizada y lógica

### 💳 **Sistema de Anticipos Avanzado**
- **Anticipos manuales**: Aplicar anticipos no registrados con confirmación
- **Checkbox de seguridad**: Confirmación obligatoria para anticipos manuales
- **Integración completa**: Anticipos se aplican como descuentos automáticamente
- **Control de duplicación**: Sistema previene aplicar el mismo anticipo múltiples veces

### 👥 **Gestión de Clientes Mejorada**
- **Público General**: Sistema automático para ventas sin cliente específico
- **Campo opcional**: Cliente ya no es obligatorio en ventas
- **Tickets genéricos**: Soporte para ventas a público general

### 🎨 **Mejoras Visuales**
- **Header sólido**: Eliminado gradiente por color sólido negro
- **Precios alineados**: Grid layout mejorado para mejor presentación
- **Orden de servicios**: Clean Girl → Elegant → Mystery → Seduction con sus retoques
- **Interfaz consistente**: Colores y estilos uniformes

### ⚡ **Optimizaciones Técnicas**
- **Base de datos mejorada**: Campo sort_order para control de ordenamiento
- **Subpestañas funcionales**: JavaScript para navegación entre secciones
- **Validaciones reforzadas**: Mejor control de formularios y datos
