# DirexCRM - Resumen del Sistema

## Módulos Implementados

### 1. Clientes y Contactos
- Gestión de clientes con datos de facturación y envío
- Contactos vinculados con responsabilidades
- Estados: activo/inactivo
- URL: `/admin/clients`

### 2. Equipos Médicos
- Registro de equipos con atributos dinámicos
- Componentes y características técnicas
- Vinculación con clientes
- Estados: activo/inactivo/retirado
- URL: `/admin/devices`

### 3. Servicios Técnicos
- Servicios asociados a equipos y clientes
- Historial de eventos (timeline)
- Adjuntos (fotos, órdenes de servicio)
- Estados: abierto/en_proceso/cerrado
- URL: `/admin/services`

### 4. Tickets Kanban (Parcial)
- Sistema de tableros con listas
- Tickets con asignación, prioridad, vencimientos
- Estados: abierto/en_proceso/done
- URL: `/admin/tickets`
- ⚠️ Drag & Drop pendiente de implementar

### 5. Stock y Repuestos
- Gestión de repuestos con códigos únicos
- Lotes y movimientos de stock
- Compatibilidad de modelos
- Alertas de stock bajo mínimo
- URL: `/admin/spares`

### 6. Importaciones (Parcial)
- Pedidos a fábrica
- Estados: draft/ordered/paid/shipped/received/closed
- Items y cantidades
- ⚠️ Recursos de Filament pendientes

### 7. Remitos (Parcial)
- Envíos a clientes
- Items enviados
- Tracking y datos de envío
- ⚠️ Recursos de Filament pendientes

### 8. Contratos
- Contratos de mantenimiento
- Tipos y términos
- Fechas de inicio y fin
- URL: `/admin/contracts`

### 9. Facturación
- Gestión de facturas
- Estados: borrador/emitida/pendiente/pagada/vencida
- Vinculación con servicios y contratos
- URL: `/admin/invoices`

### 10. Auditoría
- Logs automáticos de cambios
- Tracking de movimientos críticos
- Registro de user_id, acción, cambios
- Tabla: `audit_logs`

## Roles y Permisos

### Roles Disponibles
- **admin**: Acceso total al sistema
- **service**: Gestión de servicios y tickets
- **ventas**: Clientes, contratos y facturación
- **stock**: Repuestos, importaciones y remitos
- **viewer**: Solo lectura

### Permisos por Módulo
Formato: `{módulo}.{acción}`
- **Acciones**: create, read, update, delete
- **Módulos**: clients, devices, services, tickets, spares, imports, shipments, contracts, invoices, reports, audit

## Dashboard

### Widgets Implementados
1. **Servicios Stats**
   - Servicios abiertos
   - En proceso
   - Cerrados hoy

2. **Tickets Stats**
   - Tickets abiertos
   - En proceso
   - Completados

3. **Stock Stats**
   - Repuestos totales
   - Stock bajo mínimo
   - Stock disponible

4. **Facturación Stats**
   - Facturas pendientes
   - Cobrado este mes
   - Vencidas

## Base de Datos

### Tablas Principales
- `clients` - Clientes
- `client_contacts` - Contactos
- `devices` - Equipos
- `device_attributes` - Atributos dinámicos
- `device_components` - Componentes
- `services` - Servicios
- `service_events` - Eventos de servicio
- `boards` - Tableros Kanban
- `board_lists` - Listas del tablero
- `tickets` - Tickets
- `ticket_comments` - Comentarios
- `spares` - Repuestos
- `spare_batches` - Lotes de repuestos
- `spare_movements` - Movimientos de stock
- `imports` - Importaciones
- `import_items` - Items de importación
- `shipments` - Remitos
- `shipment_items` - Items de remito
- `contracts` - Contratos
- `invoices` - Facturas
- `audit_logs` - Logs de auditoría
- `permissions` - Permisos (Spatie)
- `roles` - Roles (Spatie)
- `model_has_permissions` - Relación modelos-permisos
- `model_has_roles` - Relación modelos-roles
- `role_has_permissions` - Relación roles-permisos
- `media` - Archivos (Spatie MediaLibrary)

## Características Destacadas

### KPIs en Dashboard
- Métricas en tiempo real
- Alertas de stock bajo
- Tickets pendientes
- Facturas vencidas

### Sistema de Auditoría
- Registro automático de cambios
- Tracking de movimientos críticos
- Historial completo de acciones

### MediaLibrary
- Adjuntos en servicios
- Archivos en tickets
- Fotos y documentos

## Datos de Prueba

El seeder de demostración crea:
- 10 clientes con contactos
- 1-3 equipos por cliente
- 1 contrato por cliente
- 0-2 servicios por equipo
- 1 tablero Kanban con 3 listas
- 1-3 tickets por cliente seleccionado
- 20 repuestos con 1-2 lotes
- 1 importación en estado "ordered"
- 1 factura pendiente

## URLs Importantes

- Panel Admin: `/admin`
- Login: `/admin/login`
- Dashboard: `/admin/dashboard`
- Clientes: `/admin/clients`
- Equipos: `/admin/devices`
- Servicios: `/admin/services`
- Tickets: `/admin/tickets`
- Repuestos: `/admin/spares`
- Contratos: `/admin/contracts`
- Facturas: `/admin/invoices`

## Comandos Artisan Útiles

```bash
# Limpiar todo
php artisan optimize:clear

# Ver logs de auditoría
php artisan tinker
>>> App\Models\AuditLog::latest()->take(10)->get()

# Ver stock bajo mínimo
php artisan tinker
>>> App\Models\Spare::all()->filter(fn($s) => $s->isLowStock())->pluck('name')
```

