# Análisis Exhaustivo de `Map<String, dynamic>` en el Proyecto

Este documento detalla todos los usos del tipo `Map<String, dynamic>` encontrados en los archivos `.dart` del proyecto, incluyendo variables, listas, parámetros y tipos de retorno de funciones.

---

### `lib/widgets/shift_card.dart`

#### 1. Tipo de Retorno de Función: `Map<String, dynamic> _calculateDuration()`
*   **Propósito:** Calcula la duración de un turno en horas y devuelve también una cadena de texto para el tiempo de descanso.
*   **Estructura del `Map` devuelto:**
    ```dart
    {
      'hours': int,
      'breakTime': String,
    }
    ```

---

### `lib/services/mock_service.dart`

#### 1. Parámetro de Función: `Future<void> createWorkerProfile(Map<String, dynamic> data)`
*   **Propósito:** Simula la creación de un perfil de trabajador. Acepta un `Map` llamado `data` que contiene la información del perfil del nuevo trabajador.
*   **Estructura Inferida (por su uso):**
    ```dart
    {
      'full_name': String,
      'bio': String,
      'preferred_locations': List<String>,
      'max_distance_miles': double,
      'skills': List<String>,
      'industries': List<String>,
    }
    ```

---

### `lib/screens/auth/profile_setup_screen.dart`

#### 1. Variable: `static const List<Map<String, dynamic>> _steps`
*   **Propósito:** Define los pasos en el asistente de creación de perfiles.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'title': String,
      'icon': IconData
    }
    ```

#### 2. Argumento de Función: (Anónimo) en `mockService.createWorkerProfile`
*   **Propósito:** Recopila y envía los datos del perfil del nuevo usuario al servicio mock.
*   **Estructura:**
    ```dart
    {
      'full_name': String,
      'bio': String,
      'preferred_locations': List<String>,
      'max_distance_miles': double,
      'skills': List<String>,
      'industries': List<String>
    }
    ```

---

### `lib/screens/worker/benefits_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _benefitsData`
*   **Propósito:** Contiene los datos de simulación (mock) para los diferentes beneficios del trabajador.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'title': String,
      'current': int,
      'total': int,
      'color': Color,
      'description': String,
      'history': List<Map<String, dynamic>>, // <- Lista anidada
      'requestLabel': String,
      'notice': String?,
    }
    ```
    *   **Estructura anidada de `history`:**
        ```dart
        {
          'date': String,
          'status': String
        }
        ```

#### 2. Parámetro de Función: `void _handleRequest(Map<String, dynamic> benefit)`
*   **Propósito:** Maneja la acción cuando un usuario solicita un beneficio.
*   **Estructura:** La misma que los elementos de `_benefitsData`.

#### 3. Parámetro de Widget: `final Map<String, dynamic> benefit`
*   **Propósito:** El widget `_BenefitCard` recibe un `Map` para mostrar los detalles de un beneficio.
*   **Estructura:** La misma que los elementos de `_benefitsData`.

---

### `lib/screens/worker/worker_profile_screen.dart`

#### 1. Variable: `final Map<String, dynamic> _user`
*   **Propósito:** Almacena datos básicos de identificación del usuario.
*   **Estructura:**
    ```dart
    {
      'full_name': String,
      'email': String,
    }
    ```

#### 2. Variable: `final Map<String, dynamic> _profile`
*   **Propósito:** Almacena estadísticas y atributos detallados del perfil del trabajador.
*   **Estructura:**
    ```dart
    {
      'level': String,
      'photo_url': String?,
      'total_shifts': int,
      'average_rating': double,
      'on_time_rate': int,
      'no_show_count': int,
      'cancellation_count': int,
      'reliability_score': int,
      'phone': String,
      'skills': List,
    }
    ```

---

### `lib/screens/worker/worker_profile/onboarding/emergency_contact_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _contacts`
*   **Propósito:** Almacena una lista de los contactos de emergencia.
*   **Estructura de cada elemento:**
    ```dart
    {
      'name': String,
      'phone': String,
      'relationship': String
    }
    ```

#### 2. Parámetro de Función: `Widget _buildContactForm(int index, Map<String, dynamic> contact)`
*   **Propósito:** Construye el widget del formulario para un contacto.
*   **Estructura:** La misma que los elementos de `_contacts`.

---

### `lib/screens/worker/worker_profile/onboarding/personal_info_screen.dart`

#### 1. Variable: `final Map<String, dynamic> _user`
*   **Propósito:** Almacena los datos básicos del usuario para el formulario.
*   **Estructura:**
    ```dart
    {
      'full_name': String,
      'email': String,
      'photo_url': String?,
    }
    ```

---

### `lib/screens/worker/worker_profile/finances/time_card_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _timesheets`
*   **Propósito:** Almacena una lista de registros de hojas de tiempo (timesheets).
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'shift_id': String,
      'date': String, // ISO 8601
      'actual_start': String,
      'actual_end': String,
      'total_hours': double,
      'hourly_rate': double,
      'total_pay': double,
      'status': String,
      'shift_title': String,
      'client_name': String,
      'location': String,
    }
    ```

#### 2. Parámetro de Función: `Widget _buildShiftHistory(List<Map<String, dynamic>> timesheets)`
*   **Propósito:** Construye la sección de historial de turnos.
*   **Estructura:** Una lista donde cada elemento tiene la estructura de `_timesheets`.

#### 3. Parámetro de Función: `Widget _buildTimesheetCard(Map<String, dynamic> timesheet)`
*   **Propósito:** Construye la tarjeta para una sola hoja de tiempo.
*   **Estructura:** La misma que los elementos de `_timesheets`.

---

### `lib/screens/worker/worker_profile/finances/bank_account_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _accounts`
*   **Propósito:** Almacena una lista de las cuentas bancarias vinculadas.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': int,
      'bank': String,
      'type': String,
      'last4': String,
      'isPrimary': bool,
    }
    ```

#### 2. Parámetro de Función: `Widget _buildAccountCard(Map<String, dynamic> account)`
*   **Propósito:** Construye la tarjeta para una sola cuenta bancaria.
*   **Estructura:** La misma que los elementos de `_accounts`.

---

### `lib/screens/worker/worker_profile/level_up/trainings_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _courses`
*   **Propósito:** Almacena una lista de cursos de capacitación.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'title': String,
      'description': String,
      'duration_minutes': int,
      'xp_reward': int,
      'thumbnail_url': String?,
      'progress_percent': int,
      'completed': bool,
    }
    ```

---

### `lib/screens/worker/worker_profile/level_up/leaderboard_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _profiles`
*   **Propósito:** Almacena los datos de los perfiles para la tabla de clasificación.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'name': String,
      'photo_url': String?,
      'xp': int,
      'level': String,
      'user_id': String,
    }
    ```

#### 2. Variable: `final sortedProfiles = List<Map<String, dynamic>>.from(_profiles)`
*   **Propósito:** Crea una copia mutable de la lista de perfiles para ordenarla.
*   **Estructura:** Los elementos tienen la misma estructura que `_profiles`.

#### 3. Parámetro de Función: `Widget _buildPodium(List<Map<String, dynamic>> topThree)`
*   **Propósito:** Construye la sección del podio con los 3 mejores perfiles.
*   **Estructura:** Una lista donde cada mapa tiene la estructura de un elemento de `_profiles`.

#### 4. Parámetro de Función: `Map<String, dynamic> profile` (en `_buildPodiumItem`)
*   **Propósito:** Construye el item para un perfil en el podio.
*   **Estructura:** La misma que un elemento de `_profiles`.

#### 5. Parámetro de Función: `Widget _buildRestList(List<Map<String, dynamic>> rest, ...)`
*   **Propósito:** Construye la lista para el resto de los perfiles.
*   **Estructura:** Una lista donde cada mapa tiene la estructura de un elemento de `_profiles`.

---

### `lib/screens/worker/worker_profile/onboarding/attire_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _attireOptions`
*   **Propósito:** Define las opciones de vestimenta que un trabajador puede seleccionar.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'label': String,
      'icon': IconData,
      'imageUrl': String,
    }
    ```

---

### `lib/screens/worker/worker_profile/support/faqs_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _faqData`
*   **Propósito:** Almacena los datos de las preguntas frecuentes, organizados por categoría.
*   **Estructura de cada elemento (categoría):**
    ```dart
    {
      'category': String,
      'questions': List<Map<String, dynamic>>, // <- Lista anidada
    }
    ```
    *   **Estructura anidada de `questions`:**
        ```dart
        {
          'q': String, // Pregunta
          'a': String, // Respuesta
        }
        ```

---

### `lib/screens/worker/worker_profile/support/messages_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _conversations`
*   **Propósito:** Contiene los datos de simulación para las conversaciones de chat.
*   **Estructura de cada elemento (conversación):**
    ```dart
    {
      'sender_id': String,
      'sender_name': String,
      'lastMessage': String,
      'lastTime': DateTime,
      'unread': int,
      'messages': List<Map<String, dynamic>>, // <- Lista anidada
    }
    ```
    *   **Estructura anidada de `messages`:**
        ```dart
        {
          'content': String,
          'sender_id': String,
        }
        ```

#### 2. Variable: `Map<String, dynamic>? _selectedChat`
*   **Propósito:** Almacena la conversación que el usuario ha seleccionado para ver.
*   **Estructura:** La misma que un elemento de `_conversations`.

---

### `lib/screens/worker/payments_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _recentPayments`
*   **Propósito:** Almacena registros detallados de pagos recientes.
*   **Estructura de cada elemento:**
    ```dart
    {
      'date': String,
      'title': String,
      'location': String,
      'address': String,
      'workedTime': String,
      'amount': double,
      'status': String,
      'hours': int,
      'rate': int, // Debería ser double
    }
    ```

---

### `lib/screens/worker/worker_profile/compliance/documents_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _requiredDocs`
*   **Propósito:** Almacena la lista de documentos de cumplimiento requeridos.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'name': String,
      'description': String,
      'status': String,
    }
    ```

#### 2. Parámetro de Función: `Widget _buildDocumentCard(Map<String, dynamic> doc)`
*   **Propósito:** Construye la tarjeta de UI para un solo documento.
*   **Estructura:** La misma que los elementos de `_requiredDocs`.

---

### `lib/screens/worker/worker_profile/compliance/tax_forms_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _forms`
*   **Propósito:** Almacena la lista de formularios de impuestos.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'title': String,
      'subtitle': String,
      'description': String,
      'status': String,
      'icon': String, // Emoji
    }
    ```

#### 2. Parámetro de Función: `Widget _buildFormCard(Map<String, dynamic> form)`
*   **Propósito:** Construye la tarjeta de UI para un solo formulario.
*   **Estructura:** La misma que los elementos de `_forms`.

---

### `lib/screens/worker/availability_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _timeSlots`
*   **Propósito:** Define las propiedades de los diferentes rangos horarios para la disponibilidad.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'label': String,
      'time': String,
      'icon': IconData,
      'bg': Color,
      'iconColor': Color,
    }
    ```

---

### `lib/screens/worker/worker_profile/compliance/certificates_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _certificates`
*   **Propósito:** Almacena la lista de certificados de cumplimiento del trabajador.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'name': String,
      'icon': IconData,
      'color': Color,
      'description': String,
      'status': String,
      'expiry': String?, // ISO 8601
    }
    ```

#### 2. Parámetro de Función: `Widget _buildCertificateCard(Map<String, dynamic> cert)`
*   **Propósito:** Construye la tarjeta de UI para un solo certificado.
*   **Estructura:** La misma que los elementos de `_certificates`.

#### 3. Parámetro de Función: `void _showUploadModal(BuildContext context, Map<String, dynamic>? cert)`
*   **Propósito:** Muestra un modal para subir un certificado.
*   **Estructura:** La misma que los elementos de `_certificates`.

---

### `lib/screens/worker/worker_profile/compliance/taxforms/form_i9_screen.dart`

#### 1. Variable: `final Map<String, dynamic> _formData`
*   **Propósito:** Almacena el estado de los campos del formulario I-9.
*   **Estructura:**
    ```dart
    {
      'lastName': String,
      'firstName': String,
      'middleInitial': String,
      'otherLastNames': String,
      'address': String,
      'aptNumber': String,
      'city': String,
      'state': String?,
      'zipCode': String,
      'dateOfBirth': String,
      'ssn': String,
      'email': String,
      'phone': String,
      'citizenshipStatus': String,
      'uscisNumber': String,
      'i94Number': String,
      'foreignPassportNumber': String,
      'countryOfIssuance': String,
      'expirationDate': String,
    }
    ```

---

### `lib/screens/worker/worker_profile/compliance/taxforms/form_w4_screen.dart`

#### 1. Variable: `final Map<String, dynamic> _formData`
*   **Propósito:** Almacena el estado de los campos del formulario W-4.
*   **Estructura:**
    ```dart
    {
      'firstName': String,
      'lastName': String,
      'address': String,
      'cityStateZip': String,
      'ssn': String,
      'filingStatus': String,
      'multipleJobs': bool,
      'qualifyingChildren': int,
      'otherDependents': int,
      'otherIncome': String,
      'deductions': String,
      'extraWithholding': String,
    }
    ```

---

### `lib/screens/worker/worker_profile/level_up/krow_university_screen.dart`

#### 1. Variable: `final Map<String, dynamic> _profile`
*   **Propósito:** Almacena un subconjunto de datos del perfil relevantes para la universidad.
*   **Estructura:**
    ```dart
    {
      'level': String,
      'xp': int,
      'badges': List<String>,
    }
    ```

#### 2. Variable: `final List<Map<String, dynamic>> _levels`
*   **Propósito:** Define los diferentes niveles de Krower y sus propiedades.
*   **Estructura de cada elemento:**
    ```dart
    {
      'name': String,
      'xpRequired': int,
      'icon': IconData,
      'colors': List<Color>,
    }
    ```

#### 3. Variable: `final List<Map<String, dynamic>> _categories`
*   **Propósito:** Define las categorías para los cursos.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'label': String,
      'icon': IconData,
    }
    ```

#### 4. Variable: `final List<Map<String, dynamic>> _courses`
*   **Propósito:** Almacena la lista de cursos disponibles.
*   **Estructura de cada elemento:**
    ```dart
    {
      'id': String,
      'title': String,
      'description': String,
      'category': String,
      'duration_minutes': int,
      'xp_reward': int,
      'level_required': String,
      'is_certification': bool,
      'progress_percent': int,
      'completed': bool,
    }
    ```

#### 5. Parámetro de Función: `Widget _buildCoursesList(List<Map<String, dynamic>> courses)`
*   **Propósito:** Construye la lista de widgets de cursos.
*   **Estructura:** Una lista donde cada mapa tiene la estructura de un elemento de `_courses`.

---

### `lib/screens/worker/earnings_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _recentPayments`
*   **Propósito:** Almacena resúmenes de pagos recientes.
*   **Estructura de cada elemento:**
    ```dart
    {
      'date': String,
      'amount': double,
      'shifts': int,
      'status': String,
    }
    ```

---

### `lib/screens/worker/clock_in_screen.dart`

#### 1. Variable: `final List<Map<String, dynamic>> _recentActivity`
*   **Propósito:** Almacena una lista de actividades recientes de fichaje.
*   **Estructura de cada elemento:**
    ```dart
    {
      'date': DateTime,
      'start': String,
      'end': String,
      'hours': String,
    }
    ```
