# Nexus POS — Guia de Pantallas para Equipo de Diseno

**Fecha:** 2026-03-27
**Proyecto:** Nexus Autoparts — Modulo POS + Inventario
**Tech:** PWA instalable (HTML/CSS/JS) con CSS custom properties para theming

---

## Resumen

- **10 pantallas** a disenar (7 existentes + 3 pendientes)
- **15 componentes reutilizables**
- **6 estados/variantes** por pantalla
- **Sistema de temas** via CSS variables (cada cliente puede tener su propio tema)

---

## 1. Pantallas Existentes (redisenar)

### 1.1 Login (PIN Pad)

**Archivo:** `login.html`
**Usuarios:** Todos los empleados
**Dispositivo:** Desktop + tablet

**Descripcion:** Pantalla de entrada al sistema. El empleado ingresa un PIN de 4 digitos para identificarse. No hay usuario/contrasena — solo PIN.

**Elementos:**
- Logo del negocio (configurable por tenant)
- Titulo "Nexus POS" (o nombre del negocio)
- Subtitulo "Ingresa tu PIN"
- 4 dots de progreso (se llenan al ingresar digitos)
- Teclado numerico 3x4: [1-9], [Borrar], [0], [OK]
- Area de mensaje de error ("PIN incorrecto", "Dispositivo bloqueado")
- Los botones deben ser grandes (72px minimo) para uso tactil

**Interacciones:**
- Auto-submit al ingresar 4 digitos
- Soporte de teclado fisico (0-9, Backspace, Enter)
- Animacion al llenar cada dot
- Shake animation en error

**Estados:**
- Default (vacio)
- Ingresando (1-3 dots llenos)
- Verificando (spinner o loading)
- Error (mensaje + shake)
- Bloqueado (mensaje de cooldown 15 min)

---

### 1.2 Catalogo

**Archivo:** `catalog.html`
**Usuarios:** Cajero, Admin, Dueno
**Dispositivo:** Desktop (landscape) + tablet

**Descripcion:** El inventario del negocio presentado como catalogo navegable. El cajero busca partes aqui y las agrega al carrito. Al terminar, salta al POS para cobrar.

**Layout:**
```
+------------------------------------------+--------+
| [Buscar parte...]  [Filtros]   [Carrito 3]|        |
+------------------------------------------+        |
| Categorias | Marcas |          CARRITO    |
|            |        |          SIDEBAR    |
| +--------+ +--------+ +--------+         |
| | Balatas| | Discos | | Bujias |  Item 1 |
| | Bosch  | | Brembo | | NGK    |  Item 2 |
| | $385   | | $720   | | $85    |  Item 3 |
| | Stock:8| | Stock:3| | Stock:0|         |
| |[+Cart] | |[+Cart] | |[Agot.] |  Total  |
| +--------+ +--------+ +--------+ [Cobrar]|
+------------------------------------------+--------+
```

**Elementos:**
- Barra de busqueda con icono de barcode scanner
- Chips de filtro: Categoria, Marca (fabricante), Solo en stock
- Grid de tarjetas de producto:
  - Imagen (placeholder si no hay)
  - Nombre de la parte
  - Numero de parte (font mono)
  - Marca/fabricante
  - Precio (segun tier del empleado)
  - Badge de stock: verde (OK), amarillo (bajo minimo), rojo (agotado)
  - Boton "Agregar al carrito"
- Paginacion
- Carrito sidebar (slide-in desde la derecha):
  - Lista de items con cantidad editable
  - Subtotal por item
  - Subtotal, IVA, Total
  - Boton "Ir a cobrar" (prominente)
  - Boton "Vaciar carrito"
- Seccion "Buscar en bodegas" (cuando hay internet):
  - Disponibilidad externa con precio y bodega

**Interacciones:**
- F1 enfoca busqueda
- Enter en resultado agrega al carrito
- Barcode scanner: detecta entrada rapida + Enter
- Click en tarjeta abre detalle, doble-click agrega

---

### 1.3 Punto de Venta (POS)

**Archivo:** `pos.html`
**Usuarios:** Cajero, Admin, Dueno
**Dispositivo:** Desktop (landscape) — pantalla principal de trabajo

**Descripcion:** La pantalla de cobro. Aqui se procesan ventas, cotizaciones y apartados. Optimizada para velocidad — todo operable por teclado.

**Layout:**
```
+----------------------------+-----------------------------+
| [F1 Buscar parte...]       | Cliente: Taller Juarez      |
| [F2 Buscar cliente...]     | RFC: TAJJ850101XXX          |
|                            | Credito: $15,000 disp.      |
| Resultados de busqueda:    | Vehiculo: Suburban 2018     |
| - Balatas Bosch $385  [+]  | Ult. compra: filtro 3 meses |
| - Balatas TRW  $310   [+]  |-----------------------------|
|                            | #  Parte    Cant  Precio  ST|
|                            | 1  Balatas    2    $385  $770|
|                            | 2  Discos     1    $720  $720|
|                            | 3  Liquido    1     $95   $95|
|                            |-----------------------------|
|                            | Subtotal:          $1,585.00|
|                            | Descuento (5%):      -$79.25|
|                            | IVA 16%:             $241.12|
|                            | TOTAL:             $1,746.87|
|                            |-----------------------------|
| Si tiene permiso:          | [F3 Cobrar] [F4 Cotizacion] |
| Costo: $220 Margen: 43%   | [Apartado]  [Credito]       |
+----------------------------+-----------------------------+
```

**Elementos principales:**
- Panel izquierdo:
  - Busqueda de partes (F1)
  - Busqueda de cliente (F2) con autocompletado
  - Lista de resultados con boton agregar
- Panel derecho:
  - Banner de cliente (nombre, RFC, credito disponible, vehiculo, ultima compra)
  - Tabla de items de la venta:
    - Numero de parte
    - Nombre
    - Cantidad (editable inline)
    - Precio unitario
    - Descuento % (editable, valida contra maximo del empleado)
    - Subtotal
    - **Si tiene permiso pos.view_cost:** columnas de Costo y Margen% (ocultas para cajeros)
  - Barra de totales: Subtotal, Descuento, IVA, TOTAL (fuente grande mono)
  - Botones de accion:
    - [F3] Cobrar (primario, prominente)
    - [F4] Cotizacion
    - Apartado
    - Credito
    - [F5] Ultima venta
    - [F6] Abrir cajon

**Modal de pago (al presionar F3):**
```
+--------------------------------+
| COBRAR — Total: $1,746.87     |
|--------------------------------|
| [Efectivo] [Transfer] [Tarjeta] [Mixto] |
|                                |
| Efectivo:                      |
| Recibido: [$ 2,000.00]        |
| Cambio:     $253.13           |
|                                |
| [  ] Facturar (CFDI)          |
|                                |
|          [Confirmar pago]      |
+--------------------------------+
```

- Tab Efectivo: campo de monto recibido, calculo automatico de cambio
- Tab Transferencia: campo de referencia bancaria
- Tab Tarjeta: campo de referencia de terminal
- Tab Mixto: multiples campos (ej: $1,000 efectivo + $746.87 transferencia)
- Checkbox "Facturar" (genera CFDI)

**Preview de ticket (despues de cobrar):**
- Layout termico 58/80mm
- Datos del negocio (RFC, direccion)
- Folio de venta
- Items con cantidad, precio, subtotal
- Totales
- Forma de pago
- Fecha y hora
- Boton imprimir / PDF

**Atajos de teclado (mostrar en footer o tooltip):**
```
F1=Buscar  F2=Cliente  F3=Cobrar  F4=Cotizacion
F5=Ult.Venta  F6=Cajon  +/-=Cantidad  *=Descuento
Enter=Agregar  Delete=Quitar  Esc=Cerrar modal
Flechas=Navegar items
```

---

### 1.4 Inventario

**Archivo:** `inventory.html`
**Usuarios:** Almacenista, Admin, Dueno
**Dispositivo:** Desktop + tablet

**Descripcion:** Gestion completa del inventario. Tabs para cada operacion.

**Tabs:**

**Tab 1 — Productos:**
- Tabla: parte#, nombre, marca, stock, costo, precio1/2/3, ubicacion
- Busqueda por nombre/numero
- Boton "Nuevo producto" (abre modal)
- Click en row abre detalle/edicion
- Badge de stock por colores

**Tab 2 — Entradas (Compras):**
- Formulario: seleccionar producto, cantidad, costo unitario, # factura proveedor
- Tabla de entradas recientes

**Tab 3 — Ajustes:**
- Formulario: seleccionar producto, cantidad (+/-), razon (obligatorio)
- Tabla de ajustes recientes

**Tab 4 — Transferencias:**
- Formulario: producto, sucursal origen, sucursal destino, cantidad
- Tabla de transferencias recientes

**Tab 5 — Toma Fisica:**
- Dos fases:
  1. Captura: tabla editable (producto → cantidad contada)
  2. Revision: comparar esperado vs contado, mostrar diferencias
  3. Boton "Aprobar ajustes"

**Tab 6 — Alertas:**
- Lista con severidad:
  - Rojo: stock en cero
  - Amarillo: bajo minimo
  - Azul: sobre maximo

**Tab 7 — Reportes:**
- Botones para cada reporte:
  - Inventario valorizado
  - Clasificacion ABC
  - Sin movimiento (>60 dias)
  - Stock bajo minimo
  - Comparativo sucursales

**Modal Crear/Editar Producto:**
- Numero de parte (obligatorio)
- Nombre (obligatorio)
- Marca/fabricante
- Unidad (PZA, JGO, LT, etc.)
- Costo
- Precio 1 (mostrador), Precio 2 (taller), Precio 3 (mayoreo)
- Tasa de impuesto (default 16%)
- Stock minimo y maximo
- Ubicacion en almacen (ej: "Pasillo 3, Anaquel B")
- Codigo de barras (auto-generado o manual)
- Imagen
- Stock inicial

---

### 1.5 Clientes

**Archivo:** `customers.html`
**Usuarios:** Admin, Dueno, Contador
**Dispositivo:** Desktop

**Descripcion:** Gestion de clientes con informacion fiscal, credito y vehiculos.

**Layout:**
```
+---------------------------+-------------------------+
| [Buscar cliente...]       |                         |
| [+ Nuevo]                 |   PANEL DE DETALLE      |
|                           |   (slide-in)            |
| Nombre    RFC     Tier    |                         |
| Taller J. TAJJ... Taller |   Nombre: Taller Juarez |
| Mech.Exp  MEEX... Mostrad|   RFC: TAJJ850101XXX    |
| AutoServ  AUTO... Mayoreo|   Credito: $10,000      |
|                           |   Saldo: $3,200         |
|                           |   Disponible: $6,800    |
|                           |                         |
|                           |   Vehiculos:            |
|                           |   - Suburban 2018       |
|                           |   - Tsuru 2015          |
|                           |                         |
|                           |   Compras recientes:    |
|                           |   - Balatas $770 (3d)   |
|                           |   - Filtro $120 (30d)   |
|                           |                         |
|                           |   [Estado de cuenta]    |
+---------------------------+-------------------------+
```

**Modal Estado de Cuenta:**
```
+----------------------------------------------+
| Estado de Cuenta — Taller Juarez             |
|----------------------------------------------|
| Fecha    | Concepto  | Cargo | Abono | Saldo |
| 01-abr   | Factura   | 5,800 |       | 5,800 |
| 08-abr   | Pago      |       | 3,000 | 2,800 |
| 15-abr   | Factura   | 2,300 |       | 5,100 |
|----------------------------------------------|
| Saldo actual: $5,100                         |
+----------------------------------------------+
```

**Modal Crear/Editar Cliente:**
- Nombre (obligatorio)
- RFC (13 caracteres)
- Razon social
- Regimen fiscal (catalogo SAT)
- Uso CFDI (catalogo SAT)
- Codigo postal
- Email, telefono, direccion
- Tier de precio: Mostrador (1), Taller (2), Mayoreo (3)
- Limite de credito
- Vehiculos (JSON array): marca, modelo, ano, VIN, placas

---

### 1.6 Facturacion

**Archivo:** `invoicing.html`
**Usuarios:** Admin, Dueno, Contador
**Dispositivo:** Desktop

**Descripcion:** Cola de facturacion electronica (CFDI). Muestra el status de cada factura y permite procesar, cancelar, y ver XML.

**Elementos:**
- Tarjetas de resumen: Pendientes, Timbradas, Fallidas, Canceladas
- Filtros: status, fecha
- Tabla de cola CFDI:
  - Folio provisional
  - Tipo (Ingreso/Egreso/Pago)
  - Cliente
  - Total
  - Status badge:
    - Azul: Pending
    - Amarillo: Sending
    - Verde: Stamped
    - Rojo: Failed
    - Gris: Cancelled
  - UUID fiscal (si timbrada)
  - Acciones: Ver detalle, Cancelar
- Boton "Procesar cola" (prominente)

**Modal Detalle CFDI:**
- XML preview (syntax highlighted)
- Datos del comprobante
- UUID, sello, cadena original (si timbrado)

**Modal Cancelacion:**
- Motivo SAT (selector):
  - 01: Con errores con relacion
  - 02: Con errores sin relacion
  - 03: No se llevo a cabo
  - 04: Operacion nominativa
- Campo UUID de sustitucion (solo si motivo 01)
- Boton confirmar cancelacion

---

### 1.7 Contabilidad

**Archivo:** `accounting.html`
**Usuarios:** Contador, Dueno
**Dispositivo:** Desktop

**Descripcion:** Modulo contable con catalogo de cuentas, polizas automaticas, y reportes financieros.

**Tabs:**

**Tab 1 — Catalogo de Cuentas:**
- Arbol colapsable con indentacion:
  ```
  v 100 Activo
    v 110 Caja
    v 111 Bancos
    v 120 Clientes
    v 130 Inventarios
  v 200 Pasivo
    v 210 Proveedores
    v 220 IVA Trasladado
  ```
- Cada cuenta muestra: codigo, nombre, saldo actual
- Boton "Nueva subcuenta"
- Cuentas de sistema (is_system) no editables

**Tab 2 — Polizas:**
- Filtros: fecha desde/hasta, tipo (ingreso/egreso/diario)
- Tabla: #poliza, fecha, tipo, descripcion, cargo total, abono total
- Click en poliza abre detalle con lineas
- Boton "Nueva poliza manual"
- Badge "Auto" para polizas generadas automaticamente

**Tab 3 — Balanza de Comprobacion:**
- Selector: ano + mes
- Tabla: cuenta, saldo inicial, cargos, abonos, saldo final
- Totales al fondo (deben cuadrar)

**Tab 4 — Estado de Resultados:**
- Selector de periodo
- Ingresos (ventas)
- (-) Costo de ventas
- = Utilidad bruta
- (-) Gastos operativos
- = Utilidad operativa

**Tab 5 — Balance General:**
- Activos (bancos, clientes, inventarios)
- Pasivos (proveedores, IVA)
- Capital (capital social + resultado del ejercicio)
- Activo = Pasivo + Capital (debe cuadrar)

**Tab 6 — Antiguedad de Saldos:**
- Tabla por cliente:
  - Cliente, Corriente, 1-30 dias, 31-60 dias, 61-90 dias, 90+ dias
- Highlight en rojo si >90 dias

**Tab 7 — Periodos Fiscales:**
- Tabla: ano, mes, status (abierto/cerrado), cerrado por, fecha cierre
- Boton "Cerrar periodo" (solo dueno)
- Confirmacion antes de cerrar

---

## 2. Pantallas Pendientes (por construir)

### 2.1 Dashboard del Dueno

**Archivo:** `dashboard.html`
**Usuarios:** Dueno
**Dispositivo:** **Movil (primary)** + Desktop

**Descripcion:** Vista ejecutiva del negocio. El dueno lo ve en su celular.

**Elementos movil:**
```
+-------------------------+
| Refaccionaria Lopez     |
| Hoy, 15 abril 2026     |
|-------------------------|
| Ventas hoy              |
| $45,200  +12% vs ayer  |
| [===========----] 75%   |
| Meta: $60,000           |
|-------------------------|
| Cajas activas           |
| Caja 1 — Maria          |
| 23 ventas | $28,400     |
| Margen: 34%             |
|                         |
| Caja 2 — Pedro          |
| 15 ventas | $16,800     |
| Margen: 29% ⚠          |
|-------------------------|
| Alertas (3)             |
| ! Descuento $500 Maria  |
| ! Bujias NGK: stock 3   |
| ! Balatas: agotado       |
|-------------------------|
| Esta semana             |
| L  M  M  J  V  S  D    |
| 42 38 45 45  -  -  -   |
|         (miles)         |
+-------------------------+
```

**Para multi-sucursal:**
- Toggle entre sucursales o vista consolidada
- Comparativo entre sucursales

---

### 2.2 Configuracion

**Archivo:** `config.html`
**Usuarios:** Dueno, Admin
**Dispositivo:** Desktop

**Tabs:**

**Tab 1 — Datos del Negocio:**
- Nombre, RFC, razon social, regimen fiscal
- Direccion, codigo postal
- Logo
- Link a Horux para CSD (credenciales SAT)

**Tab 2 — Sucursales:**
- Lista de sucursales (nombre, direccion, telefono)
- Crear/editar sucursal

**Tab 3 — Empleados:**
- Lista: nombre, email, rol, sucursal, descuento max, activo
- Crear/editar empleado con asignacion de rol y permisos
- Roles: Dueno, Admin, Cajero, Almacenista, Contador

**Tab 4 — Tema:**
- Selector de tema predefinido
- Preview en vivo
- (Los temas los define el equipo de diseno)

---

### 2.3 Reportes

**Archivo:** `reports.html`
**Usuarios:** Dueno, Admin, Contador
**Dispositivo:** Desktop

**Secciones:**

**Ventas:**
- Ventas por periodo (dia/semana/mes/ano) con grafica
- Ventas por empleado
- Ventas por categoria
- Ventas por cliente
- Ticket promedio y tendencia

**Inventario:**
- Inventario valorizado
- Clasificacion ABC
- Productos sin movimiento
- Stock bajo minimo
- Comparativo entre sucursales

**Financieros:**
- (Links a Contabilidad: balanza, estado de resultados, balance)
- Flujo de efectivo
- Cortes de caja historicos

---

## 3. Componentes Reutilizables

El equipo de diseno debe crear estos componentes como sistema de diseno:

| # | Componente | Usado en | Notas |
|---|-----------|----------|-------|
| 1 | **PIN Pad** | Login | Teclado 3x4, dots de progreso, botones grandes |
| 2 | **Barra de busqueda** | Catalogo, POS, Inventario, Clientes | Con icono scanner, debounce 300ms |
| 3 | **Carrito sidebar** | Catalogo | Slide-in derecha, items con qty editable |
| 4 | **Modal de pago** | POS | 4 tabs: Efectivo, Transferencia, Tarjeta, Mixto |
| 5 | **Selector de cliente** | POS | Autocompletado dropdown, banner con vehiculo |
| 6 | **Badge de stock** | Catalogo, Inventario | Verde=OK, Amarillo=bajo, Rojo=agotado |
| 7 | **Badge de status CFDI** | Facturacion | 5 colores segun estado |
| 8 | **Tabla paginada** | Todas | Header sticky, rows hover, paginacion, busqueda |
| 9 | **Modal generico** | Todas | Header, body scrollable, footer con acciones |
| 10 | **Panel deslizante** | Clientes | Slide-in lateral, cierra con Esc o click fuera |
| 11 | **Ticket termico** | POS | Layout 58/80mm, monospaciado, logo arriba |
| 12 | **Arbol colapsable** | Contabilidad | Indentacion, expand/collapse, iconos |
| 13 | **Tabs de navegacion** | Inventario, Contabilidad | Horizontal, badge con conteo |
| 14 | **Chips de filtro** | Catalogo | Toggle on/off, multiples activos |
| 15 | **Toast/notificacion** | Todas | Exito (verde), Error (rojo), Info (azul), Warning (amarillo) |
| 16 | **Tarjeta de metrica** | Dashboard | Numero grande, label, tendencia (flecha up/down) |
| 17 | **Grafica de barras** | Dashboard, Reportes | Barras verticales con labels |
| 18 | **Calculadora de cambio** | Modal de pago | Input monto, muestra cambio en tiempo real |
| 19 | **Selector de periodo** | Contabilidad, Reportes | Ano + Mes dropdowns |
| 20 | **Etiqueta codigo barras** | Inventario | Formato imprimible para impresora de etiquetas |

---

## 4. Estados y Variantes

Cada pantalla debe disenarse en estos estados:

| Estado | Visual | Donde |
|--------|--------|-------|
| **Default** | Contenido normal | Todas |
| **Vacio** | Ilustracion + texto "No hay datos" + CTA | Catalogo, Clientes, Inventario |
| **Cargando** | Skeleton placeholders o spinner | Tablas, listas, reportes |
| **Error** | Toast rojo con mensaje + retry | Fallas de API |
| **Sin conexion** | Banner amarillo "Modo offline — funciones limitadas" | Header global |
| **Exito** | Toast verde "Venta completada" / "Pago registrado" | Post-accion |
| **Confirmacion** | Modal "Estas seguro?" con motivo | Cancelar venta, cerrar caja, ajustar stock |
| **Permiso denegado** | Seccion oculta o deshabilitada | Costos/margen para cajeros, precios para almacenistas |

---

## 5. Sistema de Temas (CSS Variables)

Cada tenant puede tener su propio tema. El equipo de diseno define los valores:

```css
:root[data-theme="default"] {
    /* Colores principales */
    --color-primary: #1a73e8;
    --color-secondary: #5f6368;
    --color-accent: #ff6b35;

    /* Fondos */
    --color-bg: #ffffff;
    --color-surface: #f8f9fa;
    --color-surface-hover: #e8eaed;

    /* Texto */
    --color-text: #202124;
    --color-text-secondary: #5f6368;
    --color-text-muted: #9aa0a6;

    /* Bordes */
    --color-border: #dadce0;

    /* Semanticos */
    --color-success: #34a853;
    --color-warning: #f9ab00;
    --color-error: #ea4335;
    --color-info: #4285f4;

    /* Tipografia */
    --font-display: 'Sora', sans-serif;
    --font-body: 'Plus Jakarta Sans', sans-serif;
    --font-mono: 'JetBrains Mono', monospace;

    /* Forma */
    --radius: 8px;
    --radius-lg: 12px;
    --shadow: 0 1px 3px rgba(0,0,0,0.12);
    --shadow-lg: 0 4px 12px rgba(0,0,0,0.15);
}
```

**Variantes sugeridas a disenar:**
- Light (default)
- Dark
- High contrast (accesibilidad)

---

## 6. Notas Tecnicas para el Equipo

- **Responsive:** Desktop-first. POS y Catalogo en landscape. Dashboard movil-first.
- **Impresion:** Ticket termico necesita CSS `@media print` especifico para 58mm y 80mm.
- **Offline:** Mostrar indicador visual cuando no hay conexion. Ocultar features que requieren internet (buscar en bodegas).
- **Permisos:** Algunas columnas/secciones se ocultan segun el rol del empleado. Disenar con y sin esas columnas.
- **F-keys:** El POS es operable 100% por teclado. Los shortcuts deben ser visibles pero no intrusivos (tooltips o footer).
- **Barcode scanner:** El scanner USB escribe caracteres rapido + Enter. No requiere UI especial, solo que el campo de busqueda este enfocado.
