# REPORTE CENTRO DE COSTO AEREO

Fuente: /var/www/html/qareportes/app/Http/Controllers/Cloud/CentroCostosController.php

## 1) Nombre del reporte

- Nombre: Reporte Centro de Costo Aéreo
- Código / Alias: update\_centro\_costo\_aereo
- Responsable: Equipo de Reportes Cloud
- Propósito (1 línea):

## 2) Alcance temporal

- Campo(s) de fecha utilizados: fecha, fecha\_y\_hora\_de\_transferencia, start\_date, date, fecha (en distintas tablas)
- Tipo de rango (diario / mensual / personalizado): Mensual (usa utilitario range\_days() para generar primeros y últimos días de mes)
- Inclusión de horas (sí/no).: Sí \[00:00:00 – 23:59:59\]
- Zona horaria: La del servidor

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

3.1 Conexión / Base: CAPACITACION

- Tabla / Recurso: report\_centro\_costo\_aereo\_3
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- month → Mes correspondiente al periodo procesado
- cantidad\_aereo → Total de órdenes aéreas procesadas
- cantidad\_terrestre\_aereo → Total de órdenes aéreo–terrestres
- ventas\_aereo → Monto total facturado de órdenes aéreas
- ventas\_terrestre\_aereo → Monto total facturado de órdenes aéreo–terrestres
- ventas\_porcentaje → Suma ponderada de ventas
- compras → Total de compras materiales
- servicios → Total de servicios externos (ej. LATAM)
- planilla → Monto total de sueldos asociados al área
- movilidad → Gasto fijo de transporte asignado
- rentabilidad → Diferencia entre ingresos y egresos
- rentabilidad\_porcentaje → Rentabilidad expresada en porcentaje
- ano → Año del periodo procesado
- created\_date → Fecha de creación del registro


- Condiciones (WHERE) aplicadas:
- Los datos se registran mensualmente para cada rango de fechas generado por range\_days().
- No existen filtros directos sobre esta tabla (es generada dinámicamente).

- Tipo de unión con otras fuentes (JOIN y llave): No aplica (tabla principal de almacenamiento).
- Observaciones (ej. particiones, índices):
- Las tablas son dinámicas por año y mes (report\_centro\_costo\_aereo\_3\_YYYY\_MM).
- Posee campo autoincremental id como PK y created\_date con timestamp automático.


3.2 Conexión / Base: EMPRESARIAL

- Tabla / Recurso: emp\_envio\_aereo
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- ose\_id → Identificador de orden de servicio
- fecha → Fecha de envío
- estado → Estado del registro
- tipo\_mercaderia → Tipo de carga (AÉREO o TERRESTRE)
- contenido → Tipo de envío (utilizado para filtrar “TERRESTRE”)


- Condiciones (WHERE) aplicadas:
- estado = 1
- fecha BETWEEN first\_date AND second\_date
- contenido = 'TERRESTRE' (para clasificar envíos terrestres)

- Tipo de unión con otras fuentes (JOIN y llave): No se usa JOIN; relación posterior por campo ose\_id con otras tablas (emp\_detalle\_comppago, emp\_ordenservicio).
- Observaciones (ej. particiones, índices):
- Los datos se procesan en bloques de 100 registros (array\_chunk) para optimizar memoria.


3.3 Conexión / Base: EMPRESARIAL

- Tabla / Recurso: emp\_detalle\_comppago
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- dcp\_ose\_id → Identificador de orden de servicio vinculado al pago


- Condiciones (WHERE) aplicadas:
- dcp\_ose\_id IN (grupo de ose\_id válidos)

- Tipo de unión con otras fuentes (JOIN y llave): Relaciona directamente con emp\_envio\_aereo.ose\_id para identificar pagos válidos.
- Observaciones (ej. particiones, índices): Usada para filtrar las órdenes de servicio que cuentan con comprobante de pago.

3.4 Conexión / Base: EMPRESARIAL

- Tabla / Recurso: emp\_ordenservicio
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- ose\_id → Identificador de orden
- ose\_montofinal → Monto final facturado
- ose\_estado → Estado de la orden (1 = válida)
- ose\_estadoPago → Estado de pago
- ose\_tipoanulado → Tipo de anulación
- eliminado → Indicador lógico de eliminación


- Condiciones (WHERE) aplicadas:
- ose\_estado = 1
- eliminado = 0
- ose\_estadoPago NOT IN ('AN','DA')
- ose\_tipoanulado = ''
- ose\_id IN (grupo de órdenes válidas)

- Tipo de unión con otras fuentes (JOIN y llave): Vinculada con emp\_detalle\_comppago.dcp\_ose\_id (por campo ose\_id).
- Observaciones (ej. particiones, índices): Consulta agregada (SUM y COUNT) agrupada por lotes de 100 registros.

3.5 Conexión / Base: CAPACITACION

- Tabla / Recurso: tabMaterial Request
- Alias (si aplica): mr
- Campos utilizados (clave → descripción):
- fecha\_y\_hora\_de\_transferencia → Fecha de transferencia del material
- material\_request\_type → Tipo de solicitud (“Material Transfer”)
- status → Estado de la solicitud (“Transferred”)
- item\_code → Código del artículo
- qty → Cantidad solicitada


- Condiciones (WHERE) aplicadas:
- mr.fecha\_y\_hora\_de\_transferencia BETWEEN first\_date AND second\_date
- mr.material\_request\_type = 'Material Transfer'
- mr.status = 'Transferred'
- item\_code = '24141711'

- Tipo de unión con otras fuentes (JOIN y llave): LEFT JOIN tabMaterial Request Item (mri.parent = mr.name). Vinculada con emp\_detalle\_comppago.dcp\_ose\_id (por campo ose\_id).
- Observaciones (ej. particiones, índices): Consulta enviada mediante API send-query-database.

3.6 Conexión / Base: CAPACITACION

- Tabla / Recurso: tabMaterial Request Item
- Alias (si aplica): mri
- Campos utilizados (clave → descripción):
- fecha\_y\_hora\_de\_transferencia → Fecha de transferencia del material
- material\_request\_type → Tipo de solicitud (“Material Transfer”)
- status → Estado de la solicitud (“Transferred”)
- item\_code → Código del artículo
- qty → Cantidad solicitada


- Condiciones (WHERE) aplicadas:
- mr.fecha\_y\_hora\_de\_transferencia BETWEEN first\_date AND second\_date
- mr.material\_request\_type = 'Material Transfer'
- mr.status = 'Transferred'
- item\_code = '24141711'

- Tipo de unión con otras fuentes (JOIN y llave): LEFT JOIN tabMaterial Request Item (mri.parent = mr.name). Vinculada con emp\_detalle\_comppago.dcp\_ose\_id (por campo ose\_id).
- Observaciones (ej. particiones, índices): Consulta enviada mediante API send-query-database.

3.7 Conexión / Base: CAPACITACION

- Tabla / Recurso: tabSolicitud de Pagos
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- proveedor → Nombre del proveedor
- fecha → Fecha del documento
- monto → Monto total
- mes\_servicio → Mes del servicio
- año\_del\_servicio → Año del servicio


- Condiciones (WHERE) aplicadas:
- proveedor = 'LATAM AIRLINES PERU S.A.'
- fecha BETWEEN start\_date\_last\_month AND end\_date\_first\_month
- mes\_servicio = new\_month
- año\_del\_servicio = new\_year

- Tipo de unión con otras fuentes (JOIN y llave): No aplica.
- Observaciones (ej. particiones, índices): Consulta agrupada por proveedor (GROUP BY proveedor).

3.8 Conexión / Base: CAPACITACION

- Tabla / Recurso: tabSalary Slip
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- gross\_pay → Sueldo bruto (usado como net\_pay)
- employee\_name → Nombre del empleado
- employee → Código del empleado
- department → Departamento
- designation → Puesto del empleado
- area\_del\_trabajador → Área laboral


- Condiciones (WHERE) aplicadas:
- proveedor = 'LATAM AIRLINES PERU S.A.'
- fecha BETWEEN start\_date\_last\_month AND end\_date\_first\_month
- mes\_servicio = new\_month
- año\_del\_servicio = new\_year

- Tipo de unión con otras fuentes (JOIN y llave): No aplica.
- Observaciones (ej. particiones, índices): Consulta agrupada por proveedor (GROUP BY proveedor).

3.9 Conexión / Base: CAPACITACION

- Tabla / Recurso: tabCurrency Exchange
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- exchange\_rate → Tipo de cambio vigente
- date → Fecha de vigencia
- from\_currency, to\_currency → Monedas origen y destino
- for\_buying → Indicador para compras


- Condiciones (WHERE) aplicadas:
- for\_buying = 1
- date = fecha actual
- from\_currency = 'USD'
- to\_currency = 'PEN'

- Tipo de unión con otras fuentes (JOIN y llave): No aplica.
- Observaciones (ej. particiones, índices): Consulta simple que devuelve un único registro con el tipo de cambio vigente.

## 4) Filtros globales del reporte

- Inclusiones (must-have):
- Solo registros con estado = 1, ose\_estado = 1, eliminado = 0, ose\_tipoanulado = ''

- Exclusiones (reglas de descarte): ose\_estadoPago IN ('AN','DA')
- Reglas por estado / habilitado: Se procesan únicamente registros habilitados (status activos).
- Parámetros externos (si el usuario puede filtrarlo): fecha inicial y fecha final generadas dinámicamente según mes en ejecución.

## 5) Transformaciones y Reglas de negocio

- Derivaciones de campos (cómo se calculan):
- ventas\_porcentaje = (ventas\_aereo + ventas\_terrestre\_aereo) \* 0.5
- rentabilidad = ventas\_porcentaje - (compras + servicios + planilla + movilidad)
- rentabilidad\_porcentaje = rentabilidad / ventas\_porcentaje \* 100

- Mapeos de estado: Registros anulados o eliminados son descartados.
- Reglas de validación (p.ej., sólo registros validados): Solo se consideran órdenes válidas y no anuladas.
- Reglas condicionales (si X entonces Y): Si no hay ventas\_porcentaje, rentabilidad\_porcentaje = 0.

## 6) Estructura de salida

- Tabla/archivo destino: report\_centro\_costo\_aereo\_3
- Particionado / sufijo: Mensual (por fechas first\_day – last\_day)
- Clave(s) primaria(s) o únicas: id (auto incremental)
- Columnas del reporte (nombre → tipo → descripción):
- cantidad\_aereo INT Cantidad de órdenes aéreas
- cantidad\_terrestre\_aereo INT Cantidad de órdenes terrestres-aéreas
- ventas\_aereo FLOAT Monto total de ventas aéreas
- ventas\_terrestre\_aereo FLOAT Monto total de ventas terrestres
- ventas\_porcentaje FLOAT Porcentaje de ventas
- compras FLOAT Total de compras del mes
- servicios FLOAT Gastos de servicios LATAM
- planilla FLOAT Costo planilla aérea
- movilidad FLOAT Costo fijo movilidad
- rentabilidad FLOAT Utilidad operativa
- rentabilidad\_porcentaje FLOAT Margen de rentabilidad
- month VARCHAR Mes de referencia
- ano INT Año de referencia
- created\_date DATETIME Fecha de creación del registro
- status TINYINT Estado del registro

- Ordenamiento por defecto: ano, month

## 7) Frecuencia y operación

- Frecuencia de actualización: PENDIENTE (Esperando info de Eduardo)
- Ventana que recalcula (días/meses): Último mes del año en curso
- Tamaño de lote / paginado (chunking): Procesamiento en bloques de 100 registros (array\_chunk($group, 100))
- Tolerancia a fallos / reintentos: No definido, pero manejo seguro por iteración de chunks
- Tiempos de ejecución esperados: PENDIENTE (Esperando info de Eduardo)

## 8) Calidad y controles

- Validaciones previas/post: Validación de existencia de resultados antes de sumar montos y cantidades.
- Controles de duplicados: Agrupación por ose\_id y mapeo de arreglos asociativos evita duplicidad.
- Métricas de completitud (qué se monitorea): Conteo de órdenes, sumatoria de montos, y porcentaje de rentabilidad.

## 9) Dependencias externas

- APIs / servicios y endpoints: APICAPACITACION/method/send-query-database
- Autenticación / headers: Definidos en $this-&gt;utils-&gt;erp() (usa encabezados preconfigurados)
- Mapeos y contratos de datos:
- JSON con estructura {filters, where, sql\_query, tables}
- Formato de retorno: {valor, response}


## 10) Historial de cambios

2025-10-21 17:36 - Elian Franco Arroyo Rodas - Documentación inicial