Documentación detallada de cada módulo: MÓDULO 1: LOGIN Información General Nombre del módulo: Login Descripción: Módulo de autenticación y acceso a la aplicación. Punto de entrada: Pantalla inicial de la aplicación Estado: Disponible Rutas Ruta principal: /LoginView Nombre constante: LoginView.name Tipo: Widget con estado (StatefulWidget) Ubicación en el Sistema Menú: Pantalla inicial (sin menú) Opción: N/A Acceso: Automático al iniciar la aplicación Estructura de Carpetas y Archivos - Frontend lib/src/Pages/Login/ ├── LoginNew.dart                          # Pantalla principal de login ├── Bloc/ │   └── login_bloc.dart                    # Lógica de negocio (BLoC) ├── Models/ │   ├── domains.dart                       # Modelo de dominios │   └── station.dart                       # Modelo de estación └── Service/ └── login_service.dart                 # Servicio de comunicación con API Backend - Endpoints API Base URL: https://sistemacargonew.gppcargo.com/ Funcionalidad Método Endpoint Parámetros Autenticación POST api/login-app-markings user, password, domain Obtener Dominios GET api/domains - Guardar Registro POST api/login-app-markings user, version Validar Token POST api/validate-token token Modelos de Datos Domains.dart - token: String - domain: String - id: int Station.dart - id: int - name: String - latitude: double - longitude: double Funciones Principales Función Descripción Parámetros loginS() Autentica el usuario en el sistema Map body saveRegister() Guarda el registro de versión String? user obtainDomain() Obtiene los dominios disponibles - obtainDomain() (BLoC) Solicita dominios en el BLoC BuildContext context Tablas Relacionadas (Backend) login_app_markings: Tabla de autenticación domains: Tabla de dominios/clientes stations: Tabla de estaciones Flujo Principal Usuario abre la aplicación Se cargan los dominios disponibles Usuario ingresa credenciales Sistema valida contra API Se guarda sesión en SharedPreferences Se redirige a HomeView Preferencias Locales Almacenadas username: Usuario guardado password: Contraseña guardada stateUserSaveLogin: Booleano para recordar credenciales ultimaPagina: Última página visitada     MÓDULO 2: HOME Información General Nombre del módulo: Home / Inicio Descripción: Panel principal con resumen de marcaciones, información del usuario y navegación a otros módulos. Estado: Disponible Rutas Ruta principal: /HomeView Nombre constante: HomeView.name Tipo: Widget con estado (StatefulWidget) Ubicación en el Sistema Menú: Menú desplegable (Drawer) Opciones: Mi Perfil Marcaciones Asistencia Términos y Condiciones Cerrar Sesión Estructura de Carpetas y Archivos - Frontend lib/src/Pages/Home/ ├── home_view.dart                         # Pantalla principal ├── Bloc/ │   └── home_bloc.dart                     # Lógica de negocio ├── Models/ │   └── resumen.dart                       # Modelo de resumen de marcaciones ├── Services/ │   └── home_services.dart                 # Servicios de API └── Widgets/ ├── boxes.dart                         # Cajas de información ├── drawer.dart                        # Menú desplegable ├── newPost.dart                       # Componente de nuevas publicaciones ├── post_target.dart                   # Componente de publicaciones dirigidas └── tile.dart                          # Componentes tipo lista Backend - Servicios El módulo Home utiliza servicios de otros módulos: LoginService: Para validar sesión PerfilService: Para obtener datos del usuario AsistenciaService: Para estadísticas de asistencia Modelos de Datos AttendanceResume (resumen.dart) - totalMarcaciones: int - marcacionesHoy: int - estadoActual: String - horaUltimaActividad: DateTime Person (person.dart) - id: int - userid: String - nombre: String - apellido: String - email: String - telefono: String Funciones Principales Función Descripción obtenerResumen() Obtiene el resumen de marcaciones del usuario cargarDatosUsuario() Carga información del perfil cargarEstadisticas() Obtiene estadísticas de asistencia cerrarSesion() Cierra la sesión del usuario Componentes Visuales Header: Información del usuario y bienvenida Cajas de Estadísticas: Resumen de marcaciones Drawer: Menú de navegación lateral Confetti Animation: Animación de celebración Tablas Relacionadas (Backend) users: Información de usuarios markings: Historial de marcaciones attendance: Asistencia del usuario     MÓDULO 3: ASISTENCIA Información General Nombre del módulo: Asistencia Descripción: Módulo para visualizar y gestionar asistencia con búsqueda por fecha y calendario interactivo. Estado: Disponible Rutas Ruta principal: /AsistenciaView Nombre constante: AsistenciaView.name Tipo: Widget con estado (StatefulWidget) Ubicación en el Sistema Menú: Accesible desde Home → Drawer → Asistencia Ubicación: Tercera opción en el menú principal Estructura de Carpetas y Archivos - Frontend lib/src/Pages/Asistencia/ ├── asistencia_view.dart                   # Pantalla principal ├── Bloc/ │   └── asistencia_bloc.dart               # Lógica de negocio ├── Models/ │   └── search_model.dart                  # Modelo de búsqueda ├── Services/ │   └── asistencia_service.dart            # Servicios de API └── Widgets/ ├── box_asistant.dart                  # Cajas de asistencia ├── calendart.dart                     # Calendario interactivo └── openCamera.dart                    # Acceso a cámara Backend - Endpoints API Base URL: https://sistemacargonew.gppcargo.com/ Funcionalidad Método Endpoint Parámetros Buscar Asistencia POST api/search-markings-attendance-by-user-date date, user, token Modelos de Datos SearchModel (search_model.dart) - date: String - markings: List - type: String (Entrada, Salida) - time: DateTime - status: String - location: String Funciones Principales Función Descripción Parámetros searcAsistence() Busca asistencias por fecha String date selectDate() Selecciona una fecha del calendario DateTime date filterByRange() Filtra por rango de fechas DateTime start, DateTime end Características Calendario interactivo: Selección visual de fechas Búsqueda por fecha: Obtiene marcaciones de un día específico Visualización de historial: Lista detallada de entradas/salidas Indicadores de estado: Puntual, Tarde, Ausente Tablas Relacionadas (Backend) markings: Registros de marcaciones attendance: Registro de asistencia users: Información del usuario     MÓDULO 4: MARCACIONES Información General Nombre del módulo: Marcaciones Descripción: Módulo para realizar marcaciones de entrada/salida con opciones de QR, geolocalización, cámara y registro de motivos. Estado: Disponible Permisos requeridos: Cámara, GPS, Almacenamiento Rutas Ruta principal: /MarcacionesGPP Nombre constante: MarcacionesGPP.name Tipo: Widget con estado (StatefulWidget) Ubicación en el Sistema Menú: Accesible desde Home → Drawer → Marcaciones Ubicación: Segunda opción en el menú principal Estructura de Carpetas y Archivos - Frontend lib/src/Pages/Marcaciones/ ├── marcaciones_view_GPP.dart              # Pantalla principal (511 líneas) ├── Bloc/ │   └── marcaciones_Bloc.dart              # Lógica de negocio ├── Logic/ │   └── marcaciones_Logic.dart             # Lógica de procesamiento ├── Models/ │   ├── marcaciones_Model.dart             # Modelo de marcación │   └── marcaciones_obtain.dart            # Modelo de datos obtenidos ├── Services/ │   └── Marcaciones_Services.dart          # Servicios de API (120 líneas) └── Widgets/ └── (Widgets específicos del módulo) Backend - Endpoints API Base URL: https://sistemacargonew.gppcargo.com/ Base URL (RRHH): https://rrhh.gppcargo.com/ Funcionalidad Método Endpoint Parámetros Crear Marcación POST api/marking type_marking, user, station, file_id, token, motive Buscar Marcaciones POST api/search-markings-attendance-by-user date, user, token Obtener Datos Actuales POST api/markings-date-now-by-user user, token Validar Geovalla POST api/verify-latitude-longitude-geofence latitude, longitude, station, token Validar QR POST api/method/rr_hh.recursos_humanos.doctype.asistencia.api.validate_qr_by_station qr_id, station_id, fecha Validar Uso Fuera de Sede POST api/method/rr_hh.recursos_humanos.doctype.asistencia.api.validate_use_number number, token Modelos de Datos MarcacionesObtain - id: int - user: String - type: String (Entrada, Salida) - timestamp: DateTime - latitude: double - longitude: double - station: int - motive: String - status: String MarcacionesModel - typeMarking: String - userId: String - stationId: int - fileId: String - motive: String - token: String Funciones Principales Función Descripción Parámetros generateMarcacion() Genera una nueva marcación String type, String file, String motive validateGeocerca() Valida si está dentro de la geovalla num latitude, num longitude validateQR() Valida un código QR String scanQR, String fecha validateToken() Verifica validez del token - showMarcaciones() Obtiene marcaciones por fecha String fecha obtainDataMarcaciones() Obtiene marcaciones actuales - validateFueraSede() Valida si puede usar función fuera de sede - Opciones de Marcación Por QR: Escaneo de código QR Por Geolocalización: Validación de ubicación GPS Por Cámara: Captura de foto como evidencia Con Motivo: Registro de razón de marcación Validaciones ✅ Verificación de permisos de cámara ✅ Verificación de permisos de GPS ✅ Validación de token ✅ Validación de geovalla (geofence) ✅ Validación de QR por estación ✅ Validación de uso fuera de sede Tablas Relacionadas (Backend) markings: Registros de marcaciones users: Información de usuarios stations: Estaciones de trabajo qr_codes: Códigos QR registrados geofence: Áreas permitidas marking_motives: Motivos de marcación     MÓDULO 5: PERFIL Información General Nombre del módulo: Perfil / Mi Cuenta Descripción: Módulo para visualizar y editar información personal del usuario. Estado: Disponible Rutas Ruta principal: /PerfilGPP Nombre constante: PerfilGPP.name Tipo: Widget con estado (StatefulWidget) Ubicación en el Sistema Menú: Accesible desde Home → Drawer → Mi Perfil Ubicación: Primera opción en el menú principal Estructura de Carpetas y Archivos - Frontend lib/src/Pages/Perfil/ ├── perfilnewGpp.dart                      # Pantalla principal ├── Bloc/ │   └── perfil_bloc.dart                   # Lógica de negocio ├── Models/ │   ├── perfil.dart                        # Modelo de datos del perfil │   └── person.dart                        # Modelo de persona ├── Services/ │   └── perfil_service.dart                # Servicios de API └── Widgets/ ├── header.dart                        # Encabezado con foto └── list_deteails.dart                 # Lista de detalles Backend - Servicios Los servicios de perfil se integran con: LoginService: Para validación de credenciales Endpoints de usuario en api/user o similar Modelos de Datos PerfilDatos (perfil.dart) - id: int - nombre: String - apellido: String - email: String - telefono: String - departamento: String - puesto: String - fechaIngreso: DateTime - fotoUrl: String - estado: String Person (person.dart) - id: int - userid: String - nombre: String - apellido: String - email: String - telefono: String - departamento: String - rol: String Funciones Principales Función Descripción obtenerDatosUsuario() Obtiene información completa del usuario actualizarPerfil() Actualiza los datos del perfil cambiarContraseña() Cambia la contraseña del usuario cargarFoto() Carga la foto de perfil Información Mostrada Foto de perfil Nombre completo Email Teléfono Departamento Puesto Fecha de ingreso Estado del usuario Tablas Relacionadas (Backend) users: Información de usuarios employees: Datos de empleados departments: Departamentos     MÓDULO 6: TÉRMINOS Y CONDICIONES Información General Nombre del módulo: Términos y Condiciones Descripción: Módulo para visualizar y aceptar términos y condiciones de uso. Estado: Disponible Rutas Ruta principal: /TerminosView (inferido) Nombre constante: TerminosView.name Tipo: Widget con estado (StatefulWidget) Ubicación en el Sistema Menú: Accesible desde Home → Drawer → Términos y Condiciones Ubicación: Última opción en el menú principal Estructura de Carpetas y Archivos - Frontend lib/src/Pages/TerminosYCondiciones/ ├── termino_View.dart                      # Pantalla principal ├── Bloc/ │   └── (Lógica de negocio) └── Services/ └── (Servicios específicos) Funciones Principales Visualizar términos y condiciones Aceptar términos Rechazar y cerrar sesión Información Asociada Versión de términos Fecha de última actualización Estado de aceptación del usuario