# 📍 Dónde y Cómo Importar Trabajadores

## 🗂️ Estructura del Menú en Filament Admin

Después de los cambios, el menú lateral quedó organizado así:

```
📁 Gestión de Trabajadores
   ├─ 👥 Trabajadores (sort: 1) ← AQUÍ SE IMPORTA
   └─ 📄 Actualizaciones de Datos (sort: 2) ← AQUÍ SE REVISAN CAMBIOS
```

## 🎯 Flujo de Trabajo Completo

### 1️⃣ **IMPORTAR DATOS BASE** (Primera vez o actualización masiva)

**Dónde:** `/admin/user-workers`

**Pasos:**

1. Accede al panel admin: `http://informados.test/admin`
2. En el menú lateral: **Gestión de Trabajadores** → **Trabajadores**
3. Verás una tabla con todos los trabajadores
4. En la esquina superior derecha, encontrarás **2 botones**:

```
┌─────────────────────────────────────────────────────────────┐
│  Trabajadores                                    [Descargar] [Importar] │
├─────────────────────────────────────────────────────────────┤
│  🔍 Buscar...                                               │
│  ┌─────┬──────────┬─────────┬─────────┬─────────┐         │
│  │ Reg │ Nombre   │ DNI     │ Email   │ Rol     │         │
│  ├─────┼──────────┼─────────┼─────────┼─────────┤         │
│  │...  │...       │...      │...      │...      │         │
└─────────────────────────────────────────────────────────────┘
```

**Botón 1: "Descargar Plantilla"**
- Click aquí para descargar un Excel vacío con las columnas correctas
- Usa este Excel como base para llenar tus datos

**Botón 2: "Importar Trabajadores"**
- Click aquí para abrir el modal de importación
- Selecciona tu archivo Excel con los datos
- El sistema procesará y mostrará un resumen:
  - ✅ Filas importadas exitosamente
  - ❌ Filas con errores (si las hay)

### 2️⃣ **GENERAR ENLACES DE ACTUALIZACIÓN** (Para que trabajadores actualicen sus datos)

**Opción A: Generar enlace individual (Desarrollo)**

```
http://informados.test/dev/generar-codigo/{registro}
```

Ejemplo:
```
http://informados.test/dev/generar-codigo/T001234
```

Esto devuelve JSON con:
```json
{
  "register": "T001234",
  "codigo": "codigo_encriptado...",
  "url": "http://informados.test/trabajadores/actualizar/codigo_encriptado..."
}
```

**Opción B: Generar enlaces masivos (Producción)**

Puedes crear un comando Artisan o usar Tinker:

```php
php artisan tinker

// Generar enlaces para todos los trabajadores
use App\Models\UserWorker;

$workers = UserWorker::all();
foreach ($workers as $worker) {
    $key = "bitlab_CV_2020";
    $iv = "bitlab_YOP_2020";
    $string = "BitLab&{$worker->register}";
    $encrypt_method = "AES-256-CBC";
    $key_hash = hash('sha256', $key);
    $iv_hash = substr(hash('sha256', $iv), 0, 16);
    $codigo = base64_encode(openssl_encrypt($string, $encrypt_method, $key_hash, 0, $iv_hash));

    $url = url("/trabajadores/actualizar/{$codigo}");

    echo "{$worker->register}: {$url}\n";

    // Aquí podrías enviar email, SMS, etc.
    // Mail::to($worker->email)->send(new WorkerDataUpdateLink($url));
}
```

### 3️⃣ **TRABAJADORES ACTUALIZAN SUS DATOS** (Formulario Web Móvil)

**Dónde:** URL única encriptada

El trabajador accede a su enlace único:
```
http://informados.test/trabajadores/actualizar/{codigo_encriptado}
```

**Qué ve el trabajador:**

```
┌──────────────────────────────────────────┐
│  📱 Actualización de Datos               │
│     JUAN CARLOS GARCÍA PÉREZ             │
├──────────────────────────────────────────┤
│  Registro: T001234    DNI: 12345678      │
├──────────────────────────────────────────┤
│  [📍 Personales]  [🎓 Educación]         │
├──────────────────────────────────────────┤
│  Tab Personales:                         │
│  - Dirección completa                    │
│  - Distrito, Provincia, Departamento     │
│  - 🗺️ Mapa interactivo (arrastrar pin)  │
│  - Teléfonos (fijo y celular)            │
│  - Contacto de emergencia                │
│                                          │
│  Tab Educación:                          │
│  - Nivel educativo                       │
│  - Institución                           │
│  - Carrera                               │
│  - Estado (Completo/Incompleto)          │
│  - 📎 Cargar documentos                  │
│                                          │
│  [💾 Guardar Datos Personales]           │
└──────────────────────────────────────────┘
```

**¿Qué pasa al guardar?**
- ✅ Los datos se guardan en `worker_data_updates` (historial)
- ✅ Se auto-aprueban y aplican a `user_workers` (perfil del trabajador)
- ✅ El trabajador ve mensaje de éxito

### 4️⃣ **REVISAR ACTUALIZACIONES** (Admin)

**Dónde:** `/admin/worker-data-updates`

**Pasos:**

1. En el menú lateral: **Gestión de Trabajadores** → **Actualizaciones de Datos**
2. Verás una tabla con todas las actualizaciones
3. Tabs disponibles:
   - **Todas**: Todas las actualizaciones
   - **Pendientes**: Requieren aprobación manual (si desactivaste auto-aprobación)
   - **Aprobadas**: Aprobadas manualmente
   - **Auto-aprobadas**: Aprobadas automáticamente ✅ (configuración actual)
   - **Rechazadas**: Rechazadas con notas

**Qué puedes hacer:**
- 👁️ Ver detalles de cada actualización
- ✅ Aprobar manualmente (si está pendiente)
- ❌ Rechazar con notas
- 🗑️ Eliminar registros antiguos
- 📊 Filtrar por estado, tipo, fecha, trabajador

## 📊 Diagrama de Flujo Completo

```
┌─────────────────────────────────────────────────────────────────┐
│ 1. IMPORTACIÓN INICIAL                                          │
│    Admin → /admin/user-workers → [Importar]                     │
│    📥 Sube Excel con datos base de trabajadores                 │
│    ✅ Campos básicos + dirección + contacto + educación         │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│ 2. GENERACIÓN DE ENLACES                                        │
│    Admin → Genera URLs encriptadas para cada trabajador         │
│    🔗 /trabajadores/actualizar/{codigo_encriptado}              │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│ 3. ENVÍO A TRABAJADORES                                         │
│    📧 Email / 📱 SMS / 💬 WhatsApp con enlace único             │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│ 4. TRABAJADOR ACTUALIZA                                         │
│    Trabajador → Accede al enlace desde su móvil                 │
│    📱 Formulario mobile-first con mapa interactivo              │
│    ✏️ Actualiza: Dirección, GPS, Teléfonos, Emergencia, Educación│
│    📎 Sube documentos educativos (PDF, JPG, PNG)                │
│    💾 Guarda cambios → Auto-aprobación                          │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│ 5. REVISIÓN (OPCIONAL)                                          │
│    Admin → /admin/worker-data-updates                           │
│    👁️ Revisa historial completo de cambios                      │
│    📊 Filtra, exporta, analiza                                  │
└─────────────────────────────────────────────────────────────────┘
```

## 🔧 Configuración Actual

### Auto-aprobación: ✅ ACTIVADA

Los cambios se aplican **automáticamente** al perfil del trabajador cuando guarda.

**Para desactivar auto-aprobación:**

Edita: `app/Http/Controllers/PublicWorkerDataController.php`

**Datos Personales** (línea ~130):
```php
// Comentar esta línea:
// $update->autoApprove();

// Ahora requiere aprobación manual en /admin/worker-data-updates
```

**Datos Educativos** (línea ~220):
```php
// Comentar esta línea:
// $update->autoApprove();
```

### Ubicación de archivos subidos:

```
storage/app/public/worker-documents/{registro}/
```

Ejemplo:
```
storage/app/public/worker-documents/T001234/
   ├─ titulo_universitario.pdf
   ├─ certificado_estudios.pdf
   └─ constancia_trabajo.jpg
```

## 📋 Resumen Rápido

| Acción | Ubicación | Usuario |
|--------|-----------|---------|
| **Importar datos base** | `/admin/user-workers` → Botón "Importar" | Admin |
| **Descargar plantilla Excel** | `/admin/user-workers` → Botón "Descargar" | Admin |
| **Generar enlace (dev)** | `/dev/generar-codigo/{registro}` | Admin |
| **Formulario trabajador** | `/trabajadores/actualizar/{codigo}` | Trabajador |
| **Revisar actualizaciones** | `/admin/worker-data-updates` | Admin |

## ✅ Checklist de Implementación

- [x] Migraciones ejecutadas
- [x] Importador actualizado con nuevos campos
- [x] Formulario web móvil funcionando
- [x] Mapa interactivo Leaflet integrado
- [x] Auto-aprobación configurada
- [x] Filament Resource para revisión
- [ ] Ejecutar migraciones (requiere PHP 8.3+)
- [ ] Preparar Excel con datos de trabajadores
- [ ] Importar trabajadores
- [ ] Generar enlaces encriptados
- [ ] Enviar enlaces a trabajadores
- [ ] Probar formulario desde móvil
- [ ] Revisar actualizaciones en admin panel

## 🆘 ¿Necesitas Ayuda?

- **Crear comando para generar enlaces masivos**: Puedo crear un `php artisan workers:generate-links`
- **Integrar envío de emails**: Puedo agregar notificaciones automáticas
- **Ajustar validaciones**: Puedo modificar las reglas de validación
- **Personalizar el importador**: Puedo agregar más columnas o cambiar mapeos
