Ir al contenido principal

REPORTE ABASTECIMIENTO TIENDA

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

1) Nombre del reporte

  • Nombre: Reporte Abastecimiento Tienda

  • Código / Alias:  report_abastecimiento_tienda

  • Responsable:  Equipo de Reportes Cloud

  • Propósito (1 línea):


2) Alcance temporal

  • Campo(s) de fecha utilizados:

    • first_date y second_date (rango de fechas determinado dinámicamente por obtainRangeDaysByYear)

    • created_date (fecha de creación del registro)

  • Tipo de rango (diario / mensual / personalizado): Mensual, ya que se obtiene un rango de días por mes (obtainRangeDaysByYear($year, $last_month, $first_month))

  • Inclusión de horas (sí/no).: Sí [00:00:00 – 23:59:59]

  • Zona horaria: La del servidor


3) Origen de datos (tablas/APIs)

  • Conexión / Base: CAPACITACION

  • Tabla / Recurso: report_abastecimiento_tienda

  • Alias (si aplica): No aplica

  • Campos utilizados (clave → descripción):

    • id → Identificador único del registro (clave primaria).

    • name → Nombre o código del producto.

    • item_group → Categoría o grupo del ítem.

    • item_name → Nombre completo del ítem o producto.

    • warehouse → Almacén o tienda donde se gestiona el stock.

    • stock → Cantidad disponible actual en inventario.

    • month-entry-0 → Entradas del mes actual.

    • month-entry-1 → Entradas del mes anterior.

    • month-entry-2 → Entradas de hace dos meses.

    • month-entry-3 → Entradas de hace tres meses.

    • month-out-0 → Salidas del mes actual.

    • month-out-1 → Salidas del mes anterior.

    • month-out-2 → Salidas de hace dos meses.

    • month-out-3 → Salidas de hace tres meses.

    • productValueProm → Valor promedio del producto según movimientos.

    • valueLastBuy → Valor de la última compra registrada.

    • lastInspection → Fecha de la última supervisión o inspección.

    • daysInspection → Días transcurridos desde la última inspección.

    • cantidad_supervisiones → Número de supervisiones realizadas.

    • cantidad_reconciliaciones → Número de reconciliaciones o revisiones.

    • sucursal → Sucursal asociada al registro.

    • departamento → Departamento de la sucursal o zona.

    • id_terminal → Identificador de terminal o punto de venta.

    • created_date → Fecha y hora de creación del registro.

    • status → Estado del registro (activo/inactivo).

  • Condiciones (WHERE) aplicadas:

    • Trae los registros generados dentro del rango de fechas determinado por first_day y last_day, correspondiente al mes actual o a los meses previos que define el método obtainRangeDaysByYear.

  • Tipo de unión con otras fuentes (JOIN y llave): No aplica. Las inserciones se realizan directamente en la tabla destino sin combinación con otras fuentes.

  • Observaciones (ej. particiones, índices): 

    • Se agrega un índice en el campo status mediante ALTER TABLE.

    • Las tablas se crean dinámicamente con estructura fija por rango temporal.

    • Motor de base de datos: InnoDB con charset latin1.



4) Filtros globales del reporte

  • Inclusiones (must-have): Registros de la tabla "tienda" dentro del rango de fechas del mes actual

  • Exclusiones (reglas de descarte): No se aplica exclusión explícita

  • Reglas por estado / habilitado: Solo se indexa el campo status para controlar estado activo/inactivo

  • Parámetros externos (si el usuario puede filtrarlo): Año ($year) y meses ($last_month, $first_month) se obtienen del sistema (no parametrizables por usuario)


5) Transformaciones y Reglas de negocio

  • Derivaciones de campos (cómo se calculan): Los campos month-entry y month-out son generados mensualmente por iteración sobre el rango

  • Mapeos de estado: 

    • status = 1 → Registro actualizado correctamente

    • status = 0 → Error en carga / validación fallida

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

    • Validación de existencia de tabla con verifyExistTable()

    • Inserción en error_reports en caso de fallo

    • Registro de validaciones en emp_reportes_validation

  • Reglas condicionales (si X entonces Y):

    • Si la tabla no existe → se crea

    • Si se detecta error en inserción → se graba el fallo y continúa siguiente rango


6) Estructura de salida

  • Tabla/archivo destino: report_abastecimiento_tienda (creada dinámicamente)

  • Particionado / sufijo: Implícito mensual (por rango de fechas)

  • Clave(s) primaria(s) o únicas: id (INT AUTO_INCREMENT PRIMARY KEY)

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

    • id → INT AUTO_INCREMENT → Identificador único autoincremental  

    • name → VARCHAR(255) → Nombre del producto o registro  

    • item_group → VARCHAR(150) → Grupo o categoría del ítem  

    • item_name → VARCHAR(255) → Nombre completo del artículo  

    • warehouse → VARCHAR(150) → Almacén de procedencia del producto  

    • stock → DOUBLE → Stock actual disponible  

    • month-entry-0 ... month-entry-3 → DOUBLE → Entradas mensuales de los últimos 4 meses  

    • month-out-0 ... month-out-3 → DOUBLE → Salidas mensuales de los últimos 4 meses  

    • productValueProm → DOUBLE → Valor promedio del producto  

    • valueLastBuy → DOUBLE → Valor correspondiente a la última compra registrada  

    • lastInspection → DATE → Fecha de la última inspección realizada  

    • daysInspection → INT → Días transcurridos desde la última inspección  

    • cantidad_supervisiones → INT → Total de supervisiones realizadas  

    • cantidad_reconciliaciones → INT → Total de reconciliaciones registradas  

    • sucursal → VARCHAR(150) → Sucursal o tienda correspondiente  

    • departamento → VARCHAR(150) → Departamento asociado al registro  

    • id_terminal → VARCHAR(100) → Identificador del terminal relacionado  

    • created_date → DATETIME → Fecha y hora de creación del registro  

    • status → TINYINT(1) → Estado lógico del registro (1 = activo / 0 = inactivo)


  • Ordenamiento por defecto: no aplica


7) Frecuencia y operación

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

  • Ventana que recalcula (días/meses): 1 mes (por rango obtenido)

  • Tamaño de lote / paginado (chunking): 300 registros (array_chunk($data_report, 300))

  • Tolerancia a fallos / reintentos: Registro de errores y continuación (try/catch)

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


8) Calidad y controles

  • Validaciones previas/post:

    • Creación/verificación de tabla

    • Validación de inserciones en emp_reportes_validation


  • Controles de duplicados: no aplica

  • Métricas de completitud (qué se monitorea): Validación de registros exitosos vs. con error (campo status)


9) Dependencias externas

  • APIs / servicios y endpoints:

    • $this->reportcontroller->obtainRangeDaysByYear()

    • $this->reportcontroller->verifyExistTable()

    • $this->reportcontroller->consultaSql()

    • $this->report() (función interna que obtiene los datos de “tienda”)

  • Autenticación / headers: No aplica

  • Mapeos y contratos de datos: Inserciones controladas en emp_reportes_validation y error_reports


10) Historial de cambios

2025-10-18 10:34 - Elian Franco Arroyo Rodas - Documentación inicial