Ir al contenido principal

Reporte Shipping Amount Worker

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

1) Nombre del reporte

  • Nombre: Reporte Shipping Amount Worker

  • Código / Alias:  report_shipping_amount_worker

  • Responsable:  Equipo de Reportes Cloud

  • Propósito (1 línea):

2) Alcance temporal

  • Campo(s) de fecha utilizados:

    • ose_fhemision (órdenes de servicio – tabla empresarial)

    • posting_date (POS Invoice – ERPNext)

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

    • Mensual, autogenerado dinámicamente.

    • Soporta casos especiales (enero y febrero), retrocediendo al 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: tabPOS Invoice

  • Alias (si aplica):  no aplica

  • Campos utilizados (clave → descripción): 

    • owner → Usuario creador (usado para obtener DNI).

    • posting_date → Fecha de emisión (rango).

    • name → Identificador del POS Invoice.

  • Condiciones (WHERE) aplicadas: 

    • docstatus = 1
    • posting_date >= inicio
    • posting_date <= fin
  • Tipo de unión con otras fuentes (JOIN y llave): No aplica.

  • Observaciones (ej. particiones, índices):  

    • Se aplican filtros dinámicos enviados como JSON.

    • Los DNI se extraen de owner antes de @.

    • Se descartan propietarios que no tengan DNI numérico.

  • Tabla / Recurso: emp_ordenservicio

  • Alias (si aplica):  no aplica

  • Campos utilizados (clave → descripción): 

    • ose_id → ID de orden.

    • usercreaid → Usuario creador (usado como clave principal).

    • ose_montofinal → Monto final.

    • ose_estadoentregado → Estado entrega.

    • ose_remitecontactofono → Platform WEB/REGISTRA.

    • ose_remitecontactomail → Confirmación.

    • ose_observacion_cambioprecio → Tipo de orden (exclusión).

    • ose_destinaempresa → Empresa de Destino
    • ose_remiteempresa → Empresa
    • ose_fhpreferencial → Fecha y hora preferencial

  • 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 = ' '
  • Tipo de unión con otras fuentes (JOIN y llave): No aplica.

  • Observaciones (ej. particiones, índices):  

    • Filtra órdenes eliminadas, anuladas y con destino específico.

    • Descarta órdenes de tipo “Retiro de mercaderia”.

    • Consolida solamente órdenes válidas y confirmadas.

  • Tabla / Recurso: emp_adicionales

  • Alias (si aplica):  no aplica

  • Campos utilizados (clave → descripción): 

    • adc_ordenservicioid → ID de orden enlazado.

  • Condiciones (WHERE) aplicadas: 

    • eliminado = '1'
    • adc_tipo = 'E'
    • adc_ordenservicioid IN (lista chunk)

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

  • Observaciones (ej. particiones, índices):  

    • Procesamiento en chunks de 5000 IDs.

    • Se generan maps (order_id => 1) para ver si una orden tuvo “entrega”.

  • Tabla / Recurso: emp_envio_aereo

  • Alias (si aplica):  no aplica

  • Campos utilizados (clave → descripción): 

      • ose_id → Orden asociada.

      • contenido → Clasificación (aéreo, terrestre).


  • Condiciones (WHERE) aplicadas: 

    • estado = '1'
    • ose_id IN (lista chunk)

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

  • Observaciones (ej. particiones, índices):  

    • Procesamiento masivo en chunks.

    • Se devuelve un diccionario por orden, manteniendo el objeto completo.

  • Tabla / Recurso: emp_persona

  • Alias (si aplica):  no aplica

  • Campos utilizados (clave → descripción): 

      • per_nrodocumento → DNI (clave principal).

      • per_nombrerzsoc, per_apellidopaterno, per_apellidomaterno → Generación del nombre completo.


  • Condiciones (WHERE) aplicadas: 

    • per_nrodocumento IN (chunk de DNIs)

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

  • Observaciones (ej. particiones, índices):  

    • Procesado en chunks de 500 registros.

    • Se genera nombre concatenado y sanitizado.

  • Tabla / Recurso: emp_usuario

  • Alias (si aplica):  no aplica

  • Campos utilizados (clave → descripción): 

      • usr_id → ID del usuario (clave).

      • usr_terminalid → Terminal asignado.

      • usr_alias, usr_rol → Metadatos del usuario.


  • Condiciones (WHERE) aplicadas: 

    • usr_id IN (chunk)

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

  • Observaciones (ej. particiones, índices):  

      • Procesamiento por lotes.

      • Regresa mapa usr_id => objeto usuario.

  • Tabla / Recurso: tabEmployee

  • Alias (si aplica):  no aplica

  • Campos utilizados (clave → descripción): 

      • passport_number → Documento (clave).

      • employment_type → Tipo de jornada (FULL/PART TIME).


  • Condiciones (WHERE) aplicadas: 

    • passport_number IN %(employees)s
    • ORDER BY name ASC

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

  • Observaciones (ej. particiones, índices):  

      • Se conecta mediante send-query-database.

      • Se retorna un mapa por número de documento.

  • Tabla / Recurso: emp_terminal

  • Alias (si aplica):  no aplica

  • Campos utilizados (clave → descripción): 

      • ter_id → Terminal ID.

      • ter_nombre → Nombre del terminal.


  • Condiciones (WHERE) aplicadas: 

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

  • Observaciones (ej. particiones, índices):  

      • Proceso por lotes de 500 IDs.

      • Devuelve diccionario para mapeo directo terminal–usuario.

 

4) Filtros globales del reporte

  • Inclusiones (must-have): 

    • Órdenes con estado válido, no eliminadas, no anuladas.

    • Registros de tipo WEB y REGISTRA según reglas.

    • Employees cuyo owner es un correo válido con DNI numérico.

  • Exclusiones (reglas de descarte):

    • Órdenes con type = 'Retiro de mercaderia'

    • Órdenes anuladas, eliminadas, destino = 74

    • POS Invoice owner sin correo válido o sin DNI numérico

    • Envíos aéreos con contenido = "TERRESTRE"

  • Reglas por estado / habilitado:

    • eliminado = 0 en órdenes

    • estado = 1 en aéreo

    • docstatus = 1 en POS

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

    • firstDate

    • secondDate


5) Transformaciones y Reglas de negocio

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

    • mes_de_emision = YYYY_MM desde firstDate

    • modalidad

      • FULL TIME si tipo_jornada == "JORNADA COMPLETA"

      • PART TIME en otro caso

    • Cálculo de conteos:

      • envios_aereos++ cuando aplica

      • reparto++ cuando orden existe en adicionales

      • store = cantidad POS Invoice por usuario

      • envia_ya para platform REGISTRA

      • shalom_pro para platform WEB

  • Mapeos de estado:

    • Aéreo: sólo contenido != "TERRESTRE" cuenta como envío aéreo.

    • POS Invoice agrupado por DNI extraído del email.

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

    • Si no hay user en orden → skip

    • DNI debe ser numérico

    • Uso de utils.safe() para evitar interrupciones.

  • Reglas condicionales (si X entonces Y):

    • Platform vacío → solo incluir si confirmed == true

    • Si un usuario no existe en alguna lista, se ignora o se crea con valores base.


6) Estructura de salida

  • Tabla/archivo destino: report_shipping_amount_worker

  • Particionado / sufijo:  Por mes_de_emisionYYYY_MM

  • Clave(s) primaria(s) o únicas: No definida; filas agregadas por usuario y mes.

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

    • mes_de_emision → VARCHAR → Mes correspondiente a la emisión del envío  
    • id_terminal → VARCHAR | NULL → Identificador de la terminal (puede no existir)  
    • terminal → VARCHAR → Nombre de la terminal asociada  
    • nombre_completo → VARCHAR → Nombre completo del usuario  
    • documento → VARCHAR → Documento del usuario (DNI/RUC)  
    • modalidad → VARCHAR → Modalidad laboral del usuario  
    • envios_aereos → INT → Cantidad total de envíos aéreos registrados  
    • repartos → INT → Total de repartos realizados  
    • store → INT → Cantidad de ventas o envíos generados en STORE  
    • envia_ya → INT → Cantidad de envíos registrados por ENVIA YA  shalom_pro → INT → Cantidad de envíos registrados por SHALOM PRO  
      created_date → DATETIME → Fecha de creación del registro  
      status → INT → Estado del registro (1 = activo, 0 = error)
  • Ordenamiento por defecto:


7) Frecuencia y operación

  • Frecuencia de actualización:

  • Ventana que recalcula (días/meses):

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

  • Tolerancia a fallos / reintentos:

  • Tiempos de ejecución esperados:


8) Calidad y controles

  • Validaciones previas/post:

  • Controles de duplicados:

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


9) Dependencias externas

  • APIs / servicios y endpoints:

  • Autenticación / headers:

  • Mapeos y contratos de datos:


10) Historial de cambios

2025-10-01 11:53 - Elian Franco Arroyo Rodas - Documentación inicial