# Guía de Códigos QR para Empleados - AAT

## Descripción

Este sistema permite generar códigos QR únicos para cada empleado que, al ser escaneados, muestran toda la información del empleado sin necesidad de conexión a internet.

## Características

- ✅ **Generación automática**: Los códigos QR se generan automáticamente al crear empleados
- ✅ **Información completa**: Muestra todos los datos del empleado al escanear
- ✅ **QR Offline**: Información embebida en el código QR (sin internet)
- ✅ **QR Web**: Versión con página web para información detallada
- ✅ **Etiquetas imprimibles**: Genera etiquetas QR para imprimir
- ✅ **Regeneración**: Permite regenerar códigos QR si es necesario
- ✅ **API disponible**: Endpoint JSON para aplicaciones móviles

## Funcionalidades Implementadas

### 1. Lista de Empleados
- Nueva columna "QR Code" que muestra el código QR en miniatura
- Botón para descargar etiqueta QR
- Indicador visual si el empleado no tiene QR

### 2. Detalles del Empleado
- Sección dedicada al código QR
- Visualización del código QR
- Botones para descargar etiqueta y regenerar QR
- Generación automática si no existe

### 3. Escaneo de QR
- **QR Offline**: Información embebida directamente en el código QR
- **QR Web**: URL pública: `/qr/employee/{employee_id}`
- Vista móvil optimizada con toda la información
- Información personal, laboral y de seguridad social
- Contacto de emergencia
- Botón de contacto directo

### 4. API JSON
- Endpoint: `/qr/employee/api/{qr_code}`
- Respuesta JSON con todos los datos del empleado
- Ideal para aplicaciones móviles

## URLs de Acceso

### QR Offline
- **No requiere URL**: La información está embebida en el código QR
- **Funciona sin internet**: Escanea y ve la información inmediatamente

### Escaneo Web
```
https://tu-dominio.com/qr/employee/{employee_id}
```

### API JSON
```
https://tu-dominio.com/qr/employee/api/{employee_id}
```

### Descargar Etiqueta
```
https://tu-dominio.com/admin/employees/{id}/qr-label?type=offline
https://tu-dominio.com/admin/employees/{id}/qr-label?type=web
```

## Comandos Disponibles

### Generar QR para empleados existentes
```bash
php artisan employees:generate-qr-codes
```

### Probar funcionalidad QR
```bash
php artisan employees:test-qr
php artisan employees:test-qr {employee_id}
php artisan employees:test-offline-qr
php artisan employees:test-offline-qr {employee_id}
```

## Información Mostrada en el QR

### Datos Personales
- Nombre completo
- Tipo y número de documento
- Email y teléfono
- Dirección
- Fecha de nacimiento
- Género
- Tipo de sangre
- Estado civil

### Información Laboral
- Cargo
- Tipo de contrato
- Fecha de ingreso
- Fecha de retiro (si aplica)
- Salario

### Seguridad Social
- EPS
- ARL
- Fondo de pensiones
- Caja de compensación

### Contacto de Emergencia
- Nombre del contacto
- Teléfono de emergencia

## Estructura del Código QR

Los códigos QR siguen el formato: `EMP-XXXXXX`
- Prefijo: `EMP-` (identifica que es un empleado)
- Código: ID del empleado con ceros a la izquierda (6 dígitos)
- Ejemplo: `EMP-000001` para el empleado con ID 1

## Archivos Modificados/Creados

### Modelos
- `app/Models/Employee.php` - Agregados métodos para QR

### Controladores
- `app/Http/Controllers/QRScanController.php` - Métodos para empleados
- `app/Http/Controllers/Admin/EmployeeController.php` - Métodos QR

### Vistas
- `resources/views/admin/employees/index.blade.php` - Columna QR
- `resources/views/admin/employees/show.blade.php` - Sección QR
- `resources/views/admin/employees/qr-label.blade.php` - Etiquetas imprimibles
- `resources/views/qr/employee-info.blade.php` - Vista de escaneo
- `resources/views/qr/employee-not-found.blade.php` - Empleado no encontrado

### Rutas
- `routes/web.php` - Rutas públicas y admin para QR

### Comandos
- `app/Console/Commands/GenerateEmployeeQRCodes.php`
- `app/Console/Commands/TestEmployeeQR.php`
- `app/Console/Commands/TestOfflineQR.php`

## Instalación y Configuración

### 1. Verificar funcionalidad
```bash
php artisan employees:test-qr
php artisan employees:test-offline-qr
```

### 2. Generar QR para empleados existentes (opcional)
```bash
php artisan employees:generate-qr-codes
```

### 3. Probar escaneo
1. Ve a la lista de empleados
2. Haz clic en "Ver detalles" de un empleado
3. En la sección "Códigos QR" verás dos opciones:
   - **QR Offline**: Escanea directamente para ver información sin internet
   - **QR Web**: Abre página web con información detallada
4. Descarga las etiquetas según tu necesidad

## Notas Importantes

### Campo QR en Base de Datos
- **No se requiere campo en la base de datos**
- Los códigos QR se generan dinámicamente usando el ID del empleado
- Esto evita problemas de migración y mantiene la simplicidad
- Los códigos son consistentes y predecibles

### Seguridad
- Los QR son públicos y accesibles sin autenticación
- Contienen información sensible del empleado
- Considerar políticas de privacidad y uso
- **QR Offline**: La información está visible en el código QR
- **QR Web**: La información se muestra en una página web

### Rendimiento
- Los códigos QR se generan usando API externa (qrserver.com)
- Para mejor rendimiento, considerar generar QR localmente
- Las imágenes se cachean automáticamente

## Personalización

### Cambiar API de QR
En `app/Models/Employee.php`, método `getQRImageUrl()`:
```php
public function getQRImageUrl()
{
    $data = urlencode($this->getQRUrl());
    // Cambiar por tu API preferida
    return "https://tu-api-qr.com/generate?data={$data}&size=200x200";
}
```

### Modificar información mostrada
En `app/Models/Employee.php`, método `getQRData()`:
```php
public function getQRData()
{
    // Agregar o quitar campos según necesidades
    return [
        'id' => $this->id,
        'name' => $this->person->userIdentification->name,
        // ... más campos
    ];
}
```

## Soporte

Para problemas o preguntas:
- Revisar logs: `storage/logs/laravel.log`
- Ejecutar comando de prueba: `php artisan employees:test-qr`
- Verificar rutas: `php artisan route:list | grep qr`

---

**Desarrollado para AAT - Sistema de Gestión** 