Ir al contenido principal

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->utils->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