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)
3.1 Conexión / Base: ERP - CAPACITACION
-
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
ownerantes de @. -
Se descartan propietarios que no tengan DNI numérico.
-
3.2 Conexión / Base: EMPRESARIAL
-
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 Destinoose_remiteempresa→ Empresaose_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.
-
3.3 Conexión / Base: EMPRESARIAL
-
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”.
-
3.4 Conexión / Base: EMPRESARIAL
-
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.
-
3.5 Conexión / Base: EMPRESARIAL
-
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)
- 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
nombreconcatenado y sanitizado.
-
3.6 Conexión / Base: EMPRESARIAL
-
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)
- 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.
-
-
3.7 Conexión / Base: CAPACITACION
-
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.
-
-
3.8 Conexión / Base: EMPRESARIAL
-
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 = 0en órdenes -
estado = 1en aéreo -
docstatus = 1en 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_MMdesdefirstDate -
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_yapara platform REGISTRA -
shalom_propara 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_emision→YYYY_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