# 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/

<div align="left" dir="ltr" id="bkmrk-funcionalidad-m%C3%A9todo"><table><colgroup><col width="153"></col><col width="83"></col><col width="189"></col><col width="177"></col></colgroup><tbody><tr><td>Funcionalidad

</td><td>Método

</td><td>Endpoint

</td><td>Parámetros

</td></tr><tr><td>Autenticación

</td><td>POST

</td><td>api/login-app-markings

</td><td>user, password, domain

</td></tr><tr><td>Obtener Dominios

</td><td>GET

</td><td>api/domains

</td><td>-

</td></tr><tr><td>Guardar Registro

</td><td>POST

</td><td>api/login-app-markings

</td><td>user, version

</td></tr><tr><td>Validar Token

</td><td>POST

</td><td>api/validate-token

</td><td>token

</td></tr></tbody></table>

</div>### Modelos de Datos

#### Domains.dart

\- token: String

\- domain: String

\- id: int

#### Station.dart

\- id: int

\- name: String

\- latitude: double

\- longitude: double

### Funciones Principales

<div align="left" dir="ltr" id="bkmrk-funci%C3%B3n-descripci%C3%B3n-"><table><colgroup><col width="169"></col><col width="240"></col><col width="193"></col></colgroup><tbody><tr><td>Función

</td><td>Descripción

</td><td>Parámetros

</td></tr><tr><td>loginS()

</td><td>Autentica el usuario en el sistema

</td><td>Map&lt;String, dynamic&gt; body

</td></tr><tr><td>saveRegister()

</td><td>Guarda el registro de versión

</td><td>String? user

</td></tr><tr><td>obtainDomain()

</td><td>Obtiene los dominios disponibles

</td><td>-

</td></tr><tr><td>obtainDomain() (BLoC)

</td><td>Solicita dominios en el BLoC

</td><td>BuildContext context

</td></tr></tbody></table>

</div>### Tablas Relacionadas (Backend)

- login\_app\_markings: Tabla de autenticación
- domains: Tabla de dominios/clientes
- stations: Tabla de estaciones

### Flujo Principal

1. Usuario abre la aplicación
2. Se cargan los dominios disponibles
3. Usuario ingresa credenciales
4. Sistema valida contra API
5. Se guarda sesión en SharedPreferences
6. 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

<div align="left" dir="ltr" id="bkmrk-funci%C3%B3n-descripci%C3%B3n--1"><table><colgroup><col width="177"></col><col width="367"></col></colgroup><tbody><tr><td>Función

</td><td>Descripción

</td></tr><tr><td>obtenerResumen()

</td><td>Obtiene el resumen de marcaciones del usuario

</td></tr><tr><td>cargarDatosUsuario()

</td><td>Carga información del perfil

</td></tr><tr><td>cargarEstadisticas()

</td><td>Obtiene estadísticas de asistencia

</td></tr><tr><td>cerrarSesion()

</td><td>Cierra la sesión del usuario

</td></tr></tbody></table>

</div>### 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/

<div align="left" dir="ltr" id="bkmrk-funcionalidad-m%C3%A9todo-1"><table><colgroup><col width="127"></col><col width="69"></col><col width="288"></col><col width="117"></col></colgroup><tbody><tr><td>Funcionalidad

</td><td>Método

</td><td>Endpoint

</td><td>Parámetros

</td></tr><tr><td>Buscar Asistencia

</td><td>POST

</td><td>api/search-markings-attendance-by-user-date

</td><td>date, user, token

</td></tr></tbody></table>

</div>### Modelos de Datos

#### SearchModel (search\_model.dart)

\- date: String

\- markings: List&lt;Marking&gt;

\- type: String (Entrada, Salida)

\- time: DateTime

\- status: String

\- location: String

### Funciones Principales

<div align="left" dir="ltr" id="bkmrk-funci%C3%B3n-descripci%C3%B3n--2"><table><colgroup><col width="132"></col><col width="256"></col><col width="213"></col></colgroup><tbody><tr><td>Función

</td><td>Descripción

</td><td>Parámetros

</td></tr><tr><td>searcAsistence()

</td><td>Busca asistencias por fecha

</td><td>String date

</td></tr><tr><td>selectDate()

</td><td>Selecciona una fecha del calendario

</td><td>DateTime date

</td></tr><tr><td>filterByRange()

</td><td>Filtra por rango de fechas

</td><td>DateTime start, DateTime end

</td></tr></tbody></table>

</div>### 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/

<div align="left" dir="ltr" id="bkmrk-funcionalidad-m%C3%A9todo-2"><table><colgroup><col width="110"></col><col width="98"></col><col width="207"></col><col width="187"></col></colgroup><tbody><tr><td>Funcionalidad

</td><td>Método

</td><td>Endpoint

</td><td>Parámetros

</td></tr><tr><td>Crear Marcación

</td><td>POST

</td><td>api/marking

</td><td>type\_marking, user, station, file\_id, token, motive

</td></tr><tr><td>Buscar Marcaciones

</td><td>POST

</td><td>api/search-markings-attendance-by-user

</td><td>date, user, token

</td></tr><tr><td>Obtener Datos Actuales

</td><td>POST

</td><td>api/markings-date-now-by-user

</td><td>user, token

</td></tr><tr><td>Validar Geovalla

</td><td>POST

</td><td>api/verify-latitude-longitude-geofence

</td><td>latitude, longitude, station, token

</td></tr><tr><td>Validar QR

</td><td>POST

</td><td>api/method/rr\_hh.recursos\_humanos.doctype.asistencia.api.validate\_qr\_by\_station

</td><td>qr\_id, station\_id, fecha

</td></tr><tr><td>Validar Uso Fuera de Sede

</td><td>POST

</td><td>api/method/rr\_hh.recursos\_humanos.doctype.asistencia.api.validate\_use\_number

</td><td>number, token

</td></tr></tbody></table>

</div>### 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

<div align="left" dir="ltr" id="bkmrk-funci%C3%B3n-descripci%C3%B3n--3"><table><colgroup><col width="143"></col><col width="237"></col><col width="221"></col></colgroup><tbody><tr><td>Función

</td><td>Descripción

</td><td>Parámetros

</td></tr><tr><td>generateMarcacion()

</td><td>Genera una nueva marcación

</td><td>String type, String file, String motive

</td></tr><tr><td>validateGeocerca()

</td><td>Valida si está dentro de la geovalla

</td><td>num latitude, num longitude

</td></tr><tr><td>validateQR()

</td><td>Valida un código QR

</td><td>String scanQR, String fecha

</td></tr><tr><td>validateToken()

</td><td>Verifica validez del token

</td><td>-

</td></tr><tr><td>showMarcaciones()

</td><td>Obtiene marcaciones por fecha

</td><td>String fecha

</td></tr><tr><td>obtainDataMarcaciones()

</td><td>Obtiene marcaciones actuales

</td><td>-

</td></tr><tr><td>validateFueraSede()

</td><td>Valida si puede usar función fuera de sede

</td><td>-

</td></tr></tbody></table>

</div>### Opciones de Marcación

1. Por QR: Escaneo de código QR
2. Por Geolocalización: Validación de ubicación GPS
3. Por Cámara: Captura de foto como evidencia
4. 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

<div align="left" dir="ltr" id="bkmrk-funci%C3%B3n-descripci%C3%B3n--4"><table><colgroup><col width="184"></col><col width="323"></col></colgroup><tbody><tr><td>Función

</td><td>Descripción

</td></tr><tr><td>obtenerDatosUsuario()

</td><td>Obtiene información completa del usuario

</td></tr><tr><td>actualizarPerfil()

</td><td>Actualiza los datos del perfil

</td></tr><tr><td>cambiarContraseña()

</td><td>Cambia la contraseña del usuario

</td></tr><tr><td>cargarFoto()

</td><td>Carga la foto de perfil

</td></tr></tbody></table>

</div>### 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