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:
firstDate→secondDate -
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)
3.1 Conexión / Base: EMPRESARIAL
-
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.
3.2 Conexión / Base: EMPRESARIAL
-
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.
-
3.3 Conexión / Base: EMPRESARIAL
-
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.
-
3.4 Conexión / Base: EMPRESARIAL
-
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.
3.5 Conexión / Base: EMPRESARIAL
-
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.
3.6 Conexión / Base: CENTOS
-
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
3.7 Conexión / Base: Rakky
-
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
No hay comentarios para mostrar
No hay comentarios para mostrar