# REPORTE PROGRAMACION SUPERVISORES

Fuente: /var/www/html/horario\_salida/app/Http/Controllers/RecursosController.php

## 1) Nombre del reporte

- Nombre: Reporte Programación Supervisores
- Código / Alias: report\_programacion\_supervisores
- Responsable: Equipo de Reportes Cloud
- Propósito (1 línea):

## 2) Alcance temporal

- Campo(s) de fecha utilizados:
- fecha\_inicio
- fecha\_fin

- Tipo de rango (diario / mensual / personalizado): Mensual
- Inclusión de horas (sí/no). Si sí: \[00:00:00 – 23:59:59\]
- Zona horaria: La del servidor

## 3) Origen de datos (tablas/APIs)

- Conexión / Base: RECURSOS HUMANOS
- Tabla / Recurso: tabProgramacion de Supervisores
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- name → Identificador del registro
- nombre\_supervisor →Nombre del Supervisor
- sucursal → Nombre de la Terminal/Sucursal
- fecha\_programada → Fecha programada
- supervisor → Codigó de empleado
- aprobación\_del\_informe → Estado de Aprobación
- prog\_supervisores → Tipo de Programación
- fecha\_1era\_reprogramacion → Fecha 1era Reprogramación
- fecha\_real\_de\_la\_supervicion → Fecha Real de la Supervisión
- zonaa\_nacional → Registro/tipo de Zona nacional
- creation → Fecha de creación del registro
- owner → Usuario que creó el registro
- tipo\_de\_emergencia → Tipo Emergenci(select)
- fecha → Fecha Programada
- subir\_archivo →Informe final(Archivo adjunto)
- id\_sucursal → IDe de Terminal/Sucursal
- adjuntar\_foto → Foto Adjunta
- adjuntar\_foto\_banner → Adjuntar una foto

- Condiciones (WHERE) aplicadas: Filtra en un rango definido por parámetros externos ($fecha\_inicio y $fecha\_fin)
- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Observaciones (ej. particiones, índices): No aplica

## 4) Filtros globales del reporte

- Inclusiones (must-have):
- Depende de lo que reciba dateUnlimited y el rango de fecha (first\_day y last\_day)

- Exclusiones (reglas de descarte): No aplica
- Reglas por estado / habilitado: No aplica
- Parámetros externos (si el usuario puede filtrarlo): Sí, el usuario puede incluir la fecha inicio y fecha fin en el rango de búsqueda.

## 5) Transformaciones y Reglas de negocio

- Derivaciones de campos (cómo se calculan): No aplica
- Mapeos de estado: No aplica
- Reglas de validación (p.ej., sólo registros validados): No aplica

- Reglas condicionales (si X entonces Y):
- Si $dateUnlimited == "TODOS" → recorrer todos los años desde 2021.
- Si $dateUnlimited == "12" → generar rangos mes a mes desde la fecha pivote 2023-09-01.
- Si $dateUnlimited == "8" → tomar últimos 8 meses.
- Si no se cumple ninguno → tomar mes actual y posiblemente diciembre del año anterior.


## 6) Estructura de salida

- Tabla/archivo destino: report\_programacion\_supervisores
- Particionado / sufijo: no aplica
- Clave(s) primaria(s) o únicas: no aplica
- Columnas del reporte (nombre → tipo → descripción):
- id → INT AUTO\_INCREMENT PRIMARY KEY → id de la fila
- identificador → VARCHAR(50) NULL → identificador único
- nombre\_supervisor → VARCHAR(255) NULL → nombre del supervisor
- sucursal → VARCHAR(100) NULL → sucursal asignada
- fecha\_programada → VARCHAR(100) NULL → fecha programada
- supervisor → VARCHAR(255) NULL → supervisor asignado
- aprobacion\_del\_informe → VARCHAR(255) NULL → aprobación del informe
- tipo\_de\_programacion → VARCHAR(255) NULL → tipo de programación
- fecha\_1era\_reprogramacion → VARCHAR(100) NULL → fecha de la primera reprogramación
- fecha\_real\_de\_la\_supervicion → VARCHAR(100) NULL → fecha real de la supervisión
- zona\_nacional → VARCHAR(100) NULL → zona nacional
- creado\_el → VARCHAR(100) NULL → fecha de creación
- creado\_por → VARCHAR(100) NULL → usuario que creó el registro
- tipo\_de\_emergencia → VARCHAR(255) NULL → tipo de emergencia
- fecha → VARCHAR(100) NULL → fecha general
- informe\_final → VARCHAR(255) NULL → informe final
- id\_sucursal → VARCHAR(50) NULL → identificador de la sucursal
- adjuntar\_foto → VARCHAR(255) NULL → archivo de foto adjunto
- adjuntar\_foto\_banner → VARCHAR(255) NULL → archivo de foto banner adjunto
- created\_date → DATETIME DEFAULT CURRENT\_TIMESTAMP → fecha y hora de creación
- status → tinyint(4) DEFAULT '1' → estado del registro


- Ordenamiento por defecto: No aplica ORDER BY

## 7) Frecuencia y operación

- Frecuencia de actualización: Al ejecutarse la función updateProgSupervisores()
- Ventana que recalcula (días/meses):
- Depende de dateUnlimited:
- "TODOS" → recalcula desde 2021 hasta la fecha actual.
- "12" → recalcula desde un pivote (2023-09-01) mes por mes hasta hoy.
- "8" → últimos 8 meses.
- Vacío o default → solo el mes actual (con excepción de enero/febrero que arrastra diciembre del año anterior).



- Tamaño de lote / paginado (chunking):
- Se usa array\_chunk($result, 900) → divide la data en lotes de 900 registros antes de insertarlos en BD.

- Tolerancia a fallos / reintentos: Se manejan excepciones con try/catch y \\PDOException
- Tiempos de ejecución esperados: No se especifica

## 8) Calidad y controles

- Validaciones previas/post:
- Previas:
- Se valida si la tabla existe antes de insertar ($verify = $this-&gt;verifyExistTable(...)).
- Si no existe, se inserta un registro en error\_reports y se hace continue → es una validación previa para garantizar que la tabla destino esté lista.
- Se maneja el caso especial de enero/febrero para incluir datos del año anterior → valida consistencia temporal.



- Post:
- Tras cada inserción en lote (insert($arr)), se hace commit() de la transacción.
- Si hay error (catch (\\PDOException $e)), se hace rollBack() y se registra el fallo en emp\_reportes\_validation.


- Controles de duplicados:
- En la lógica de creación de tablas particionadas (CREATE TABLE {$db\_name}), que evita que se inserten datos de un rango en la misma tabla dos veces.

- Métricas de completitud (qué se monitorea):
- Se insertan logs en emp\_reportes\_validation con campos:
- report → nombre del reporte.
- first\_date, second\_date → ventana procesada.
- created\_date → cuándo se ejecutó.
- status → 1 (éxito) o 0 (error).



## 9) Dependencias externas

ERPNext – Programación de Supervisores

- APIs / servicios y endpoints: method/send-query-database
- Autenticación / headers:
- Se envían headers básicos:
- $options = \[
- 'headers' =&gt; \[
- "Accept" =&gt; "application/json",
- "Content-Type" =&gt; "application/json"
- \]
- \];



- No aparece un Authorization: Bearer &lt;token&gt; ni otra forma de autenticación explícita.

- Mapeos y contratos de datos:
- name as identificador,
- nombre\_supervisor,
- sucursal,
- fecha\_programada,
- supervisor,
- aprobación\_del\_informe as aprobacion\_del\_informe,
- prog\_supervisores as tipo\_de\_programacion,
- fecha\_1era\_reprogramacion,
- fecha\_real\_de\_la\_supervicion,
- zonaa\_nacional as zona\_nacional,
- creation as creado\_el,
- owner as creado\_por,
- tipo\_de\_emergencia,
- fecha,
- subir\_archivo as informe\_final,
- id\_sucursal,
- adjuntar\_foto,
- adjuntar\_foto\_banner


## 10) Historial de cambios

2025-09-19 18:00 - Elian Franco Arroyo Rodas - Documentación inicial