# REPORTE CENTRO COSTO DHL 2

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

## 1) Nombre del reporte

- Nombre: Reporte Centro Costo DHL 2
- Código / Alias: report\_centro\_costo\_dhl\_2
- Responsable: Equipo de Reportes Cloud
- Propósito (1 línea):

## 2) Alcance temporal

- Campo(s) de fecha utilizados: first\_date, second\_date
- Tipo de rango (diario / mensual / personalizado): Mensual (se recorren los meses del año actual y del año anterior)
- 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: EMPRESARIAL

- Tabla / Recurso: emp\_comppago\_dhl
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- ter\_id → Identificador del tercero asociado al envío.
- ter\_nombre → Nombre del tercero o cliente.
- cop\_montoTotal → Monto total del comprobante DHL.
- cop\_id → Identificador único del comprobante.
- cop\_fechaemision → Fecha de emisión del comprobante.

- Condiciones (WHERE) aplicadas:
- eliminado = 0
- cop\_fechaemision BETWEEN {first\_date} 00:00:00 AND {second\_date} 23:59:59

- Tipo de unión con otras fuentes (JOIN y llave): No aplica (consulta directa a tabla única).
- Observaciones (ej. particiones, índices):
- Se realiza una suma total (SUM(cop\_montoTotal)) y conteo (COUNT(cop\_id)) para obtener el monto total y cantidad de comprobantes emitidos en el rango.
- El resultado alimenta los campos ventas y qty\_envios del reporte.


3.2 Conexión / Base: CAPACITACION

- Tabla / Recurso: tabSolicitud de Pagos
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- monto → Monto del pago realizado.
- currency → Moneda del registro (USD o PEN).
- proveedor → Nombre del proveedor (filtrado por “DHL EXPRESS PERÚ S.A.C.”).
- mes\_servicio\_dhl → Mes del servicio facturado.
- año\_del\_servicio → Año del servicio facturado.
- concepto → Concepto del servicio (“Servicio Aéreo”).
- fecha → Fecha del registro del pago.

- Condiciones (WHERE) aplicadas:
- proveedor = 'DHL EXPRESS PERÚ S.A.C.'
- concepto = 'Servicio Aereo'
- mes\_servicio\_dhl = {mes\_en\_español}
- año\_del\_servicio = {año}

- Tipo de unión con otras fuentes (JOIN y llave): No aplica (consulta simple filtrada por múltiples campos).
- Observaciones (ej. particiones, índices):
- Se realiza una conversión de moneda: los montos en USD se multiplican por 4 para equipararse a PEN.
- El valor total obtenido se asigna al campo servicio\_dhl.
- La consulta es ejecutada mediante el endpoint method/send-query-database usando $this-&gt;utils-&gt;erp("POST", …).


3.3 Conexión / Base: CAPACITACION

- Tabla / Recurso: tabSalary Slip
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- gross\_pay → Total bruto pagado en la planilla.
- name → Identificador del registro de planilla.
- department → Departamento responsable (filtrado por “Proyectos - SE”).
- area\_del\_trabajador → Área asignada del trabajador (filtrado por “Aereo internacional - SE”).
- start\_date → Fecha de inicio del periodo de pago.


- Condiciones (WHERE) aplicadas:
- start\_date = {first\_date}
- department = 'Proyectos - SE'
- area\_del\_trabajador = 'Aereo internacional - SE'
- Agrupación por departamento (GROUP BY department).

- Tipo de unión con otras fuentes (JOIN y llave): No aplica (consulta directa a una tabla).
- Observaciones (ej. particiones, índices):
- Los resultados agregan:
- SUM(gross\_pay) → monto total pagado (planilla).
- COUNT(name) → cantidad de empleados (personas).

- Este valor se usa para calcular los costos de personal asociados al servicio DHL.


3.4 Conexión / Base: REPORTES

- Tabla / Recurso: report\_centro\_costo\_dhl\_2\_YYYY\_MM
- Alias (si aplica): No aplica
- Campos utilizados (clave → descripción):
- periodo → Mes del reporte (en español).
- qty\_envios → Cantidad total de envíos DHL.
- ventas → Monto total de ventas DHL.
- ventas\_90\_porciento → Proyección del 90% de las ventas.
- compras\_abastecimiento → Compras totales de abastecimiento (constante 0).
- servicio\_dhl → Monto de servicio DHL cargado desde ERP.
- planilla → Total de planilla asociado.
- rentabilidad → Diferencia entre ingresos y egresos.
- rentabilidad\_porciento → Porcentaje de rentabilidad.
- year → Año procesado.
- created\_date, status → Metadatos del registro.


- Condiciones (WHERE) aplicadas:
- Generación dinámica por mes usando {first\_date} y {second\_date} del rango procesado.

- Tipo de unión con otras fuentes (JOIN y llave): No aplica (carga por inserción de datos preprocesados).
- Observaciones (ej. particiones, índices):
- Se crean tablas mensuales dinámicamente (CREATE TABLE report\_centro\_costo\_dhl\_2\_YYYY\_MM).
- Se aplica un índice adicional: ALTER TABLE ADD INDEX status (status);
- Se registran logs de ejecución en emp\_reportes\_validation y error\_reports.


##  

## 4) Filtros globales del reporte

- Inclusiones (must-have):
- Solo registros con eliminado = 0
- Solo proveedor "DHL EXPRESS PERÚ S.A.C."

- Exclusiones (reglas de descarte): Registros sin monto (monto &lt;= 0)
- Reglas por estado / habilitado:
- status inicial = 1 (en tabla destino)
- Insert en emp\_reportes\_validation con status = 1 si proceso exitoso

- Parámetros externos (si el usuario puede filtrarlo):
- Fechas generadas dinámicamente por range\_days()
- No recibe input manual del usuario


## 5) Transformaciones y Reglas de negocio

- Derivaciones de campos (cómo se calculan):
- ventas\_90\_porciento = ventas \* 0.9
- rentabilidad = ventas\_90\_porciento - servicio\_dhl - planilla
- rentabilidad\_porciento = (rentabilidad / ventas\_90\_porciento) \* 100

- Mapeos de estado: status → 1 (activo)
- Reglas de validación (p.ej., sólo registros validados):
- Si obtain\_amount\_dhl\["status"\] == false, el proceso se detiene
- Reglas condicionales (si X entonces Y): Si rentabilidad == 0 → rentabilidad\_porciento = '0%'


## 6) Estructura de salida

- Tabla/archivo destino: report\_centro\_costo\_dhl\_2\_YYYY\_MM
- Particionado / sufijo: Mensual (\_YYYY\_MM)
- Clave(s) primaria(s) o únicas: id (AUTO\_INCREMENT)
- Columnas del reporte (nombre → tipo → descripción):
- id → INT → Identificador único del registro (PK)
- agencia → VARCHAR(255) → Nombre de la tienda o sucursal
- producto\_servicio → ENUM → Clasificación del ítem (producto / servicio)
- nombre\_articulo → VARCHAR(225) → Descripción o nombre completo del artículo
- stock\_inicial → FLOAT → Cantidad disponible al inicio del periodo
- unidades\_recibidas → FLOAT → Total de unidades ingresadas durante el periodo
- unidades\_vendidas → FLOAT → Total de unidades vendidas o despachadas
- merma → VARCHAR(20) → Cantidad perdida o deteriorada
- inventario\_final → FLOAT → Stock final calculado (stock\_inicial + recibidas - vendidas - merma)
- costo\_de\_compra → VARCHAR(20) → Costo unitario de adquisición
- precio\_venta → FLOAT → Precio unitario de venta
- valor\_inventario\_final → FLOAT → Valor monetario del inventario final
- valor\_venta → FLOAT → Ingreso total generado por ventas
- valor\_compra → FLOAT → Costo total de adquisición
- rentabilidad → FLOAT → Diferencia entre valor\_venta y valor\_compra
- ano → INT → Año correspondiente al periodo
- periodo → VARCHAR(20) → Nombre del mes o periodo (ej. “ENERO”)
- created\_date → DATETIME → Fecha y hora de creación del registro
- status → TINYINT → Estado lógico del registro (1=activo, 0=inactivo)


- Ordenamiento por defecto: ORDER BY year, periodo ASC

## 7) Frecuencia y operación

- Frecuencia de actualización: PENDIENTE (Esperando info de Eduardo)
- Ventana que recalcula (días/meses): 24 meses
- Tamaño de lote / paginado (chunking): 900 registros por inserción (array\_chunk)
- Tolerancia a fallos / reintentos: Transacciones con beginTransaction() y rollBack() ante error
- Tiempos de ejecución esperados: PENDIENTE (Esperando info de Eduardo)

## 8) Calidad y controles

- Validaciones previas/post:
- Verificación de existencia de tabla (exist\_table\_bd)
- Inserción de log en emp\_reportes\_validation

- Controles de duplicados: Implícitos por tabla nueva mensual (\_YYYY\_MM)
- Métricas de completitud (qué se monitorea):
- Conteo de registros insertados
- Estado de ejecución (status)


## 9) Dependencias externas

- APIs / servicios y endpoints: APICAPACITACION/method/send-query-database (ERPNext)
- Autenticación / headers: Controlados por $this-&gt;utils-&gt;erp() (maneja tokens internos)
- Mapeos y contratos de datos: Recibe y envía datos JSON (filters, where, sql\_query, tables)

##  

## 10) Historial de cambios

2025-10-21 18:15 - Elian Franco Arroyo Rodas - Documentación inicial