# REPORTE CAMBIO DE NOMBRE

FUENTE: /var/www/html/qareportes/app/Http/Controllers/Cloud/ReportController.php

## 1) Nombre del reporte

- Nombre: Reporte Cambio de Precio
- Código/Alias: report\_cambio\_precio
- Responsable: Equipo de Reportes Cloud
- Propósito:

## 2) Alcance temporal

- Campo(s) de fecha utilizados (base):
- first\_date
- second\_date
- created\_date

- Tipo de rango: Personalizado (entre firstDate -&gt; Primer día del mes y secondDate -&gt; último día del mes)
- Inclusión de horas (sí/no). Si sí:
- first\_date \[00:00:00\]
- second\_date \[ 23:59:59\]

- Zona horaria: Servidor (igual a sistema)

## 3) Origen de datos (tablas/APIs)

### 3.1 Conexión / Base: Empresarial

- Tabla / Recurso: emp\_ordenservicio
- Alias (si aplica): no hay
- Campos utilizados (clave → descripción):
- ose\_estadoPago → Estado de pago de la guia
- ose\_id → ID de la GUIA
- ose\_fechaanulado → Fecha de anulacion
- ose\_fhpreferenciapartida → Fecha y hora de partida
- ose\_serieguiacliente → Serie Cliente
- ose\_nroguiacliente → Numero guia
- ose\_termorigenatencion → Terminal Origen
- ose\_termdestinoentrega → Terminal Destino
- ose\_remiteempresa → Nombre del remitente
- ose\_destinaempresa → Nombre Destinatario
- '0' → Contenido total
- '' → Contenido
- '0' → Peso
- '0' → volumen
- ose\_servpagotipo → Forma de pago
- ose\_montototal → Monto
- ose\_precio\_cambioprecio → Cambio de precio
- diferencia → Es el resultado de la resta entre ose\_montototal y ose\_precio\_cambioprecio
- ose\_tipoCP → Tipo comprobante
- ose\_serieguiacliente → Serie de la guia
- ose\_nroCP → Numero comprobante
- ose\_entregadopersonadni → Codigo de Entrega
- ose\_entregadopersonadni → Mensaje de codigo de Entrega
- ose\_entregadofecha a→ Fecha de entrega
- ose\_destina\_direccion\_entrega → Estado guia (Entregado en Agencia)
- ose\_movilidad\_reparto → Indica si tiene reparto o no
- ose\_guia\_remitente → null
- ose\_user\_cambioprecio → Usuario que realizó el cambio de precio
- ose\_user\_cambioprecio → Terminal del usuario que cambió precio
- ose\_fecha\_cambioprecio → Fecha del cambio de precio
- ose\_fecha\_cambioprecio → Hora del cambio de precio
- ose\_observacion\_cambioprecio → Observacion del cambio de precio
- usercreaid →Usuario que digite o creo la guia
- proforma\_user → valor: NULL / No asignado
- ose\_remitecontactofono → Contacto con cliente

- Condiciones (WHERE) aplicadas:
- ose\_estado = 1
- eliminado = 0
- ose\_estadoPago != 'DA'
- ose\_estado\_solicitudprecio = 1
- ose\_fecha\_cambioprecio → Primer y ultimo dia del mes (first\_date, second\_date)

- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Observaciones (ej. particiones, índices): No hay particiones o indices especificados

### 3.2 Conexión / Base: empresarial

- Tabla / Recurso: emp\_producto
- Alias (si aplica): No aplica
- Condiciones (WHERE) aplicadas: No aplica
- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Campos utilizados (clave → descripción):
- pro\_producto → tipo de producto
- pro\_id → ID del producto


Observaciones: Trae solo tipo del producto y su ID

### 3.3 Conexión / Base: empresarial

- Tabla / Recurso: emp\_atributos
- Alias (si aplica): No aplica
- Condiciones (WHERE) aplicadas:
- atr\_idpadre = 90

- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Campos utilizados (clave → descripción):
- atr\_nombre → Nombre del atributo
- atr\_valor → Valor del atributo


Observaciones: Trae solo tipo El nombre del atributo su valor

### 3.4 Conexión / Base: empresarial

- Tabla / Recurso: emp\_usuario
- Alias (si aplica): No aplica
- Condiciones (WHERE) aplicadas:
- whereIn('usr\_id', $strvalusr)
- Se tiene un chunk que procesa los datos en cantidades de 1000
- Solo trae a los usuarios en el cual su ID coincida dentro del grupo de 1000


- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Campos utilizados (clave → descripción):
- usr\_id → ID de usuario
- usr\_alias → Nombre del usurio
- usr\_terminalid → Terminal del usuario


Observaciones: Trae solo solo los usuario que coincidan dentro del chunk o grupo de 1000

### 3.5 Conexión / Base: empresarial

- Tabla / Recurso: emp\_os\_detalle
- Alias (si aplica): No aplica
- Condiciones (WHERE) aplicadas:
- osd\_eliminado = 0
- trae solo las OS que no hagay sido eliminadas

- whereIn('osd\_osid', $valdet)
- Solo trae las osd\_osid que se encuentren en el chunk de 1000


- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Campos utilizados (clave → descripción):
- osd\_unidad → Cantidad de paquetes
- osd\_osid → ID de la Guia
- osd\_descripcion → Descripción del producto (tipo producto)
- osd\_peso → Peso del producto
- osd\_volumen → Volumen del paquete


Observaciones:

### 3.6 Conexión / Base: empresarial

- Tabla / Recurso: emp\_persona
- Alias (si aplica): No aplica
- Condiciones (WHERE) aplicadas:
- whereIn('per\_nrodocumento', $strvalper)
- Solo trae las per\_nrodocumento que se encuentren en el chunk de 1000


- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Campos utilizados (clave → descripción):
- per\_nombrerzsoc → Nombre
- per\_apellidopaterno → Apellido paterno
- per\_apellidomaterno → Apellido materno
- per\_nrodocumento → Documento de indentidad


Observaciones:

### 3.7 Conexión / Base: empresarial

- Tabla / Recurso: emp\_cambio\_precio
- Alias (si aplica): No aplica
- Condiciones (WHERE) aplicadas:
- estado = 1
- whereIn('ose\_id', $valdet)
- Solo trae los registros que tengan el mismo ose\_id que se encuentren en el chunk de 1000


- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Campos utilizados (clave → descripción):
- urlimagen → Imagen cambio de precio
- ose\_id → ID registro cambio de precio


Observaciones:

### 3.8 Conexión / Base: empresarial

- Tabla / Recurso: emp\_incidencias
- Alias (si aplica): No aplica
- Condiciones (WHERE) aplicadas:
- inc\_tipo = EDITAR PRECIO
- whereIn('inc\_idos', $valinc)
- Solo trae los registros que tengan el inc\_idos que se encuentren en el chunk de 1000

- Tambien hay una funcion anonima dentro de un where que filtra los registros que tengan el campo “eliminado” con valor null ó 0

- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Campos utilizados (clave → descripción):
- inc\_idos → ID de la Guia con incidencia
- inc\_tipo → Tipo de incidencia


Observaciones:

### 3.9 Conexión / Base: empresarial

- Tabla / Recurso: emp\_soporte
- Alias (si aplica): No aplica
- Condiciones (WHERE) aplicadas:
- where("sop\_tipo", '=', 'editar\_volumen\_pro')
- whereIn('sop\_oseid', $valinc)
- Solo trae los registros que tengan el la misma Orden de servicio(sop\_oseid) que se encuentren en el chunk de 1000


- Tipo de unión con otras fuentes (JOIN y llave): No aplica
- Campos utilizados (clave → descripción):
- sop\_anterior → Tipo de Pago anterior al cambio
- sop\_oseid → Orden de servicvio


Observaciones:

## 4) Filtros globales del reporte

- Inclusiones (must-have):
- -&gt;where("ose\_estado", "=", 1) → Solo órdenes activas.
- -&gt;where("ose\_estado\_solicitudprecio", "=", 1) → Solo órdenes con solicitud de precio habilitada.
- -&gt;whereBetween("ose\_fecha\_cambioprecio", \[$first\_date, $second\_date\]) → Solo registros dentro del rango de fechas.

- Exclusiones (reglas de descarte):
- -&gt;where("eliminado", "=", 0) → descarta eliminados.
- -&gt;where("ose\_estadoPago", "!=", 'DA') → descarta órdenes con estado de pago “DA”.

- Reglas por estado / habilitado:
- El reporte solo toma órdenes vigentes/habilitadas (ose\_estado = 1).
- El cambio de precio debe estar activo (estado = '1' en emp\_cambio\_precio).
- Reglas para plataformas (ejemplo: "REGISTRA" → "ENVIA YA")

- Parámetros externos (si el usuario puede filtrarlo):
- Rango de fecha → $first\_date y $second\_date


## 5) Transformaciones y Reglas de negocio

- Derivaciones de campos (cómo se calculan):
- diferencia: Deriva de la resta entre los campos ose\_montototal - ose\_precio\_cambioprecio
- DATE\_FORMAT(ose\_fecha\_cambioprecio, '%Y-%m-%d') as fhcambioprecio → transforma la fecha a formato YYYY-MM-DD
- DATE\_FORMAT(ose\_fecha\_cambioprecio,'%H:%i:%s') as hrcambioprecio → extrae solo la hora.
- '0' as contenidototal, '0' as peso, '0' as volumen → inicializa siempre con 0.
- '' as contenido → siempre vacío.

- Mapeos de estado:
- ose\_estado = 1 → mapea que solo se consideren órdenes activas.
- ose\_estadoPago != 'DA' → descarta un estado de pago específico (probablemente "Desaprobado" o similar).
- ose\_estado\_solicitudprecio = 1 → asegura que esté aprobado para cambios de precio.
- En otras partes (como incidencias), se aplica estado = '1' que mapea a "activo/habilitado".

- Reglas de validación (p.ej., sólo registros validados):
- eliminado = 0 o whereNull/eliminado → garantiza que no entren registros eliminados.
- Validación de rango de fechas con whereBetween("ose\_fecha\_cambioprecio", \[$first\_date, $second\_date\]) → asegura que solo se tomen registros dentro del periodo válido para el reporte.
- En caso de error (catch), igual se inserta un log en emp\_reportes\_validation con status = 0.

- Reglas condicionales (si X entonces Y): Si el mes actual es enero o febrero → se amplía el rango incluyendo diciembre del año anterior

## 6) Estructura de salida

- Tabla/archivo destino: emp\_reportes\_validation
- Particionado / sufijo: No aplica
- Clave(s) primaria(s) o únicas: No aplica
- Columnas del reporte (nombre → tipo → descripción):
- report→VARCHAR → Nombre del reporte generado
- first\_date→DATE→Fecha de inicio del rango de consulta
- second\_date→DATE→Fecha de fin del rango de consulta
- created\_date→DATETIME→Fecha y hora en que se generó el log de validación
- status→INT / TINYINT→Estado de la ejecución (1 = OK, 0 = error)

- Ordenamiento por defecto: No aplica orderBy

## 7) Frecuencia y operación

- Frecuencia de actualización: Posible frecuencia: ejecución programada por CRON (cada día/mes)
- Ventana que recalcula (días/meses): Si es Enero o Febrero toma ambos meses. Pero a partir de Marzo comienza a tomar desde dos meses atrás.

- Tamaño de lote / paginado (chunking): array\_chunk(..., 1000) → paginado por 1000 registros para las tablas:
- emp\_usuario
- emp\_persona


- Tolerancia a fallos / reintentos:
- try/ catch
- Si la consulta falla, igual inserta un registro en emp\_reportes\_validation con status = 0

- Tiempos de ejecución esperados: No especifica

## 8) Calidad y controles

- Validaciones previas/post: Antes de insertar en la tabla emp\_reportes\_validation se valida que los datos de las tablas, pasen retornen true:
- emp\_ordenservicio
- emp\_producto
- emp\_atributos
- emp\_usuario
- emp\_os\_detalle
- emp\_persona
- emp\_cambio\_precio
- emp\_incidencias
- emp\_soporte

- Controles de duplicados: No aplica
- Métricas de completitud (qué se monitorea):
- Se monitorea si el proceso realmente generó información (count($response\_service) &gt; 0).
- También se marca con status = 1 o status = 0 según éxito o fallo, lo que sirve como métrica de calidad de ejecución.
- Se guarda el rango de fechas (first\_date, second\_date) como evidencia del periodo cubierto.


## 9) Dependencias externas

- APIs / servicios y endpoints: No consume API externamente. EL reporte depende de una función interna llamada reportCambioPrecio($first\_date, $second\_date) que tiene los parámetros de fecha.
- Autenticación / headers: No aplica
- Mapeos y contratos de datos:
- "report" → Identificador del reporte
- "first\_date" → Fecha inicial del rango procesado
- "second\_date" → Fecha final del rango procesado
- "created\_date"→ date("Y-m-d H:i:s"),// Fecha/hora de la ejecución
- "status" =&gt; 1 | 0 → Estado del proceso (1=ok, 0=falla)


## 10) Historial de cambios

2025-09-15 16:42 - Elian Franco Arroyo Roda - Documentación inicial