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
No hay comentarios para mostrar
No hay comentarios para mostrar