Ir al contenido principal

REPORTE SHIPPING AMOUNT INFORMATION

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

1) Nombre del reporte

  • Nombre:  Reporte Shipping Amount Information

  • Código / Alias: report_shipping_amount_information

  • Responsable:  Equipo de Reportes Cloud

  • Propósito (1 línea):  


2) Alcance temporal

  • Campo(s) de fecha utilizados: 

    • ose_fhemision (fecha de emisión de orden de servicio)

    • Rango: firstDatesecondDate

    • Para POS Invoices: posting_date

  • Tipo de rango (diario / mensual / personalizado):  

    • Mensual dinámico, con:

      • Rango de meses recalculado según:

        • Mes actual

        • Mes anterior

        • Existencia de tabla histórica del año previo

      • Si no existe tabla histórica → agrega diciembre 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)

  • Tabla / Recurso: emp_usuario

  • Alias (si aplica): No aplica

  • Campos utilizados (clave → descripción):

    • usr_id → Código del usuario

    • usr_terminalid → Terminal asignada

    • usr_alias → Alias visible

    • usr_rol → Rol del sistema

  • Condiciones (WHERE) aplicadas: Ninguna (consulta completa)

  • Tipo de unión con otras fuentes (JOIN y llave): No aplica (consulta aislada)

  • Observaciones (ej. particiones, índices): Resultado indexado por usr_id.

  • Tabla / Recurso: emp_ordenservicio

  • Alias (si aplica): No aplica

  • Campos utilizados (clave → descripción):

    • ose_id → id del envío

    • ose_termorigenatencion → terminal origen

    • ose_termdestinoentrega → terminal destino

    • ose_fhemision → fecha emisión

    • ose_montofinal → monto final

    • ose_estadoentregado → estado entrega

    • ose_existencia_actual

    • ose_remitecontactofono → platform

    • ose_remitecontactomail → confirmed

    • ose_observacion_cambioprecio → type

    • ose_destinaempresa

    • ose_remiteempresa

    • ose_fhpreferencial

    • usercreaid → usuario creador

  • Condiciones (WHERE) aplicadas: 

    • ose_fhemision BETWEEN firstDate 00:00:00 AND endDate 23:59:59

    • ose_estado = 1

    • eliminado = 0

    • ose_termdestinoentrega != 74

    • ose_estadoPago NOT IN ('AN','DA')

    • ose_tipoanulado = ''

    • Regla adicional en código:

      • Excluir type = 'Retiro de mercaderia'

      • Incluir registros según lógica de platform/confirmed

  • Tipo de unión con otras fuentes (JOIN y llave): No aplica

  • Observaciones (ej. particiones, índices): 

    • Se usa para construir métricas diarias por usuario.

    • Filtra manualmente registros inválidos post-consulta.

  • Tabla / Recurso: emp_adicionales

  • Alias (si aplica): No aplica

  • Campos utilizados (clave → descripción):

    • adc_ordenservicioid

    • adc_costo

    • terminalcrea

  • Condiciones (WHERE) aplicadas: 

    • eliminado = 1

    • adc_tipo = 'E'

    • adc_ordenservicioid IN (ids)

  • Tipo de unión con otras fuentes (JOIN y llave): Relación implícita con emp_ordenservicio.id

  • Observaciones (ej. particiones, índices): 

    • Suma costo por OS.

    • Agrupa destinos.

  • Tabla / Recurso: emp_envio_aereo

  • Alias (si aplica): No aplica

  • Campos utilizados (clave → descripción):

    • ose_id

    • contenido

  • Condiciones (WHERE) aplicadas: 

    • estado = 1

    • ose_id IN (ids)

  • Tipo de unión con otras fuentes (JOIN y llave): Relación implícita con orden de servicio.

  • Observaciones (ej. particiones, índices): Identifica si un OS fue enviado por vía aérea o terrestre.

  • Tabla / Recurso: emp_incidencias

  • Alias (si aplica): No aplica

  • Campos utilizados (clave → descripción):

    • inc_id

    • inc_idos

  • Condiciones (WHERE) aplicadas: 

    • inc_idos IN (?)

    • inc_descripcion = 'CONTIENE PRODUCTOS PROHIBIDOS'

    • eliminado NULL OR 0

  • Tipo de unión con otras fuentes (JOIN y llave): implícito con OS

  • Observaciones (ej. particiones, índices): Identifica rechazos aéreos.

  • Tabla / Recurso: emp_historial_envia_ya

  • Alias (si aplica): No aplica

  • Campos utilizados (clave → descripción):

    • inc_ose_idid

  • Condiciones (WHERE) aplicadas: 

    • ose_id IN (?)

    • origen = 'TOTEM'

  • Tipo de unión con otras fuentes (JOIN y llave): No aplica

  • Observaciones (ej. particiones, índices): No aplica

  • Tabla / Recurso: deliveries

  • Alias (si aplica): No aplica

  • Campos utilizados (clave → descripción):

    • os_id

  • Condiciones (WHERE) aplicadas: 

    • status_service = 1

    • status = 1

    • ose_id IN (ids)

  • Tipo de unión con otras fuentes (JOIN y llave): No aplica

  • Observaciones (ej. particiones, índices): identificar entregas relacionadas a Rakki.

4) Filtros globales del reporte

  • Inclusiones (must-have):

    • Órdenes con estado válido (ose_estado = 1, eliminado = 0)

    • Registros POS con docstatus = 1

    • Usuarios existentes en emp_usuario

  • Exclusiones (reglas de descarte):

    • ose_tipoanulado != ""

    • ose_estadoPago IN ('AN','DA')

    • "Retiro de mercaderia"

    • Destino 74

    • Air con contenido TERRESTRE en métrica aérea.

  • Reglas por estado / habilitado:

    • Aéreos sólo con estado = 1

    • Adicionales sólo con adc_tipo = 'E' AND eliminado = 1

  • Parámetros externos (si el usuario puede filtrarlo):

    • Rango de fecha dinámico según calendario.

    • El usuario del endpoint no ingresa parámetros.


5) Transformaciones y Reglas de negocio

  • Derivaciones de campos (cómo se calculan):

    • Cálculo de:

      • envíos

      • entregas

      • montos corporativos/comerciales

      • métricas aéreas (enviado/recibido)

      • métricas terrestres

      • totems

      • métrica rakki

    • Agrupación por usuario → día

  • Mapeos de estado:

    • Empresa → corporativo / comercial

    • Plataforma:

      • REGISTRA → envia_ya

      • WEB → shalom_pro

  • Reglas de validación (p.ej., sólo registros validados): no aplica

  • Reglas condicionales (si X entonces Y):

    • Si plataforma es vacía pero confirmado → incluir.

    • Si contenido != “TERRESTRE” → se considera envío aéreo.

    • Si order.delivered != 1 → contar como aereo_entregado_no.


6) Estructura de salida

  • Tabla/archivo destino: report_shipping_amount_information_YYYY_MM

  • Particionado / sufijo:  YYYY_MM

  • Clave(s) primaria(s) o únicas: 

    • No se define explícitamente, pero combinación:

      • dia_de_emision + documento + id_terminal

  • Columnas del reporte (nombre → tipo → descripción):

    • dia_de_emision → DATE → Fecha de emisión del envío según POS Invoice u Orden de Servicio  
    • id_terminal → INT → Identificador numérico de la terminal asignada al usuario  
    • terminal → VARCHAR(255) → Nombre de la terminal donde opera el usuario  
    • usuarioid → INT → Identificador del usuario en el sistema principal  
    • document → VARCHAR(20) → Documento de identidad del usuario (DNI/RUC)  
    • codigo → VARCHAR(50) → Código interno o legajo del empleado  
    • n_completos → VARCHAR(255) → Nombre completo del usuario según el sistema empresarial  
    • usr_fullname → VARCHAR(255) → Nombre completo del usuario según ERPNext  
    • alia → VARCHAR(100) → Alias o nombre corto asignado al usuario  
    • puesto → VARCHAR(100) → Cargo o puesto laboral del colaborador  
    • modalidad → VARCHAR(50) → Modalidad laboral (planilla, locación, part-time, etc.)  
    • cantidad_envios → INT → Cantidad total de órdenes de servicio registradas por el usuario  
    • cantidad_entregas → INT → Total de órdenes entregadas confirmadas por el usuario  
    • monto_total → DECIMAL → Monto total de las órdenes procesadas por el usuario  
    • cantidad_rechazado → INT → Número total de envíos rechazados  
    • monto_rechazado → DECIMAL → Monto asociado a las órdenes rechazadas  
    • envia_ya → INT → Cantidad de envíos registrados por la plataforma ENVIA YA  
    • shalom_pro → INT → Cantidad de envíos procesados mediante SHALOM PRO  
    • total_corporativo → INT → Total de envíos clasificados como corporativos (empresa)  
    • total_comercial → INT → Total de envíos clasificados como comerciales (persona natural)  
    • terrestre_enviado → INT → Cantidad de envíos terrestres realizados  
    • terrestre_recibido → INT → Cantidad de entregas terrestres recibidas  
    • aereo_enviado → INT → Total de envíos aéreos emitidos según contenido declarado  
    • aereo_entregado → INT → Envíos aéreos entregados correctamente  
    • aereo_entregado_no → INT → Envíos aéreos que no llegaron a entregarse  
    • aereo_recojo → INT → Envíos aéreos con solicitud de recojo en origen  
    • rechazo_aereo → INT → Cantidad de incidencias por productos prohibidos en transporte aéreo  
    • total_totem → INT → Total de envíos generados mediante terminal TOTEM  
    • contador_rakki → INT → Total de envíos asignados a RAKKI  
    • monto_rakki → DECIMAL → Monto total asociado a envíos gestionados por RAKKI  
    • contador_store → INT → Cantidad de transacciones realizadas vía STORE  
    • monto_store → DECIMAL → Monto total generado por ventas STORE  
    • cantidad_pos → INT → Número de POS Invoices asociados al usuario  
    • monto_pos → DECIMAL → Monto total facturado mediante POS Invoice  
    • s1 → INT → Cantidad de envíos generados durante la semana 1 del mes  
    • s2 → INT → Cantidad de envíos generados durante la semana 2 del mes  
    • s3 → INT → Cantidad de envíos generados durante la semana 3 del mes  
    • s4 → INT → Cantidad de envíos generados durante la semana 4 del mes  
    • lunes → INT → Total de envíos realizados el día lunes  
    • martes → INT → Total de envíos realizados el día martes  
    • miercoles → INT → Total de envíos realizados el día miércoles  
    • jueves → INT → Total de envíos realizados el día jueves  
    • viernes → INT → Total de envíos realizados el día viernes  
    • sabado → INT → Total de envíos realizados el día sábado  
    • domingo → INT → Total de envíos realizados el día domingo  
    • created_date → DATETIME → Fecha y hora de creación del registro agregado  
    • status → VARCHAR → Estado del proceso (ej. “success”, “partial”, “error”)  
    • id_registro → INT → Identificador incremental interno del registro consolidado  
    • plataforma_filtro → VARCHAR → Plataforma asignada dinámicamente (envia_ya / shalom_pro)  
    • tipo_envio → VARCHAR → Clasificación del transporte (terrestre / aéreo)  
    • grupo_empresa → VARCHAR → Clasificación del cliente según RUC (corporativo / comercial)  

  • Ordenamiento por defecto: usort(rows by dia_de_emision ASC)


7) Frecuencia y operación

  • Frecuencia de actualización: PENDIENTE (Esperando info de Eduardo)

  • Ventana que recalcula (días/meses): últimos 1–2 meses o histórico si falta tabla.

  • Tamaño de lote / paginado (chunking): lotes de 5000 IDs

  • Tolerancia a fallos / reintentos:

    • safe() captura errores y retorna vacío

    • Logging con metadata del error

  • Tiempos de ejecución esperados: PENDIENTE (Esperando info de Eduardo)


8) Calidad y controles

  • Validaciones previas/post:

    • Validación de tabla histórica del mes/año anterior.

    • Manejo de excepciones por cada rango (try/catch)

    • Reintentos: indirectos mediante safe()

  • Controles de duplicados: clave usuario/día evita duplicidad natural

  • Métricas de completitud (qué se monitorea):

    • registros de POS

    • órdenes de servicio

    • entregas

    • aéreos

    • totems


9) Dependencias externas

  • APIs / servicios y endpoints:

    • Endpoint: method/send-query-database

    • Autenticación: interna (implícita)

    • Headers: manejados por framework

  • Autenticación / headers:

    • Endpoint: /api/sale/report/shipping_amount

    • Parámetros:

      • startDate

      • endDate

  • Mapeos y contratos de datos:

    • ERPNext retorna arrays planos con POS invoices.

    • STORE API retorna { success, data }.

10) Historial de cambios

2025-11-17 13:39 - Elian Franco Arroyo Rodas - Documentación inicial