# REPORTE TERMINALES

Fuente:/var/www/html/emprsarial-sys/app/Models/Reportes/Reports.php

## 1) Nombre del reporte

- Nombre: Reporte Terminales
- Código/Alias: report\_terminals
- Responsable: Equipo de Reportes Cloud
- Propósito:

## 2) Alcance temporal

- Campo(s) de fecha utilizados:
- "fecha" =&gt; date("Y-m-d") (fecha del día de ejecución).
- "created\_date" =&gt; date("Y-m-d H:i:s") (fecha y hora exacta de ejecución).
- "fecha\_creacion" =&gt; $valor-&gt;fhcrea desde la BD.

- Tipo de rango (diario / mensual / personalizado): Diario
- Inclusión de horas (sí/no).
- "created\_date" \[00:00:00 – 23:59:59\]

- Zona horaria: La del servidor

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

### 3.1 Conexión / Base: empresarial  
  


- Tabla: emp\_terminal
- Alias: ter
- Campos utilizados (clave → descripción):
- Todos los campos de la tabla emp\_terminal (emp\_terminal \*)

- Condiciones (WHERE) aplicadas: (Terminales habilitadas que no estén eliminadas)
- ter\_habilitado = 1 (Filtra terminales habilitadas)
- eliminado = 0 (Filtra terminales que no estén eliminadas)

- Tipo de unión con otras fuentes (JOIN y llave):
- LEFT JOIN emp\_liqui\_cons con ON con.ter\_id = ter.ter\_id
- LEFT JOIN emp\_persona per ON per.per\_nrodocumento = con.emp\_nro\_ruc


- Observaciones (ej. particiones, índices): De la tabla principal emp\_terminal trae todas los campos con la condición de que la terminal esté habilitada poro no haya sido eliminada.

### 3.2 Conexión / Base: empresarial 

- Tabla / Recurso: emp\_liqui\_cons
- Alias (si aplica): con
- Campos utilizados (clave → descripción):
- emp\_nro\_ruc (numero RUC)
- correo (dirección de correo)
- comision (monto de comision)
- pinpad\_pre (Precio PINPAD)
- pinpad\_cant (cantidad de PINPADS)
- igv (IGV)


- Condiciones (WHERE) aplicadas:
- con.ter\_id = ter.ter\_id

- Tipo de unión con otras fuentes (JOIN y llave):
- LEFT JOIN emp\_liqui\_cons con ON con.ter\_id = ter.ter\_id


- Observaciones (ej. particiones, índices):
- Si la tabla emp\_liqui\_cons no encuentra un el valor del campo ter\_id el los valores que se setearan en el campo seran iguales a NULL


### 3.3 Conexión / Base: empresarial

- Tabla / Recurso: emp\_persona
- Alias (si aplica): per
- Campos utilizados (clave → descripción):
- per\_nombrerzsoc (Nombre RUC)


- Condiciones (WHERE) aplicadas:
- per.per\_nrodocumento = con.emp\_nro\_ruc


- Tipo de unión con otras fuentes (JOIN y llave):
- LEFT JOIN emp\_persona per on(per.per\_nrodocumento = con.emp\_nro\_ruc)

- Observaciones (ej. particiones, índices):
- Si la tabla emp\_persona no encuentra un el valor del campo ter\_id el los valores que se setearan en el campo seran iguales a NULL


### 3.4 Conexión / Base: empresarial

- Tabla / Recurso: emp\_ciudad\_ubigeo
- Alias (si aplica): No se asigna un alias a la tabla
- Campos utilizados (clave → descripción):
- ubi\_id (ID)
- ubi\_departamento (Departamento)
- ubi\_provincia (Provincia)
- ubi\_distrito (Distrito)


- Condiciones (WHERE) aplicadas: No aplica condiciones
- Tipo de unión con otras fuentes (JOIN y llave): No aplica unión con otra tabla
- Observaciones (ej. particiones, índices): Ninguna

### 3.5 Conexión / Base: ERP

- Tabla / Recurso: tabTabla de Sucursales
- Alias (si aplica): tbs
- Campos utilizados (clave → descripción):
- id (ID)
- parent ()

- Condiciones (WHERE) aplicadas: No aplica condiciones
- Tipo de unión con otras fuentes (JOIN y llave):
- LEFT JOIN `tabZonas Nacional` tbz on (tbz.name = tbs.parent)


- Observaciones (ej. particiones, índices): Ninguna

##  

## 4) Filtros globales del reporte

- Inclusiones (must-have):
- Todos los registros de la tabla emp\_terminal


- Exclusiones (reglas de descarte):
- Terminales deshabilitadas
- Terminales eliminadas
- Terminales sin supervisor asignado


- Reglas por estado / habilitado:
- ter.ter\_habilitado = 1 (solo terminales habilitados.)
- ter.eliminado = 0 (excluye eliminados.)


- Parámetros externos (si el usuario puede filtrarlo): No aplica

## 5) Transformaciones y Reglas de negocio

- Derivaciones de campos (cómo se calculan):
- tipo -&gt; 1/0 Transforma a “AGENTE” / “AGENCIA”
- conexion -&gt; 1/0 Transforma a “SI” / “NO”
- habilitado\_os -&gt; 1/0 Transforma a “SI” / “NO”
- habilitado -&gt; 1/0 Transforma a “SI” / “NO”
- reparto -&gt; 1/0 Transforma a “SI” / “NO”
- departamento -&gt; busca en ubigeosJSON el ubig\_id y lo deriva en string
- provincia -&gt; busca en ubigeosJSON el ubig\_id y lo deriva en string
- distrito -&gt; busca en ubigeosJSON el ubig\_id y lo deriva en string
- razon\_social -&gt; se transforman a null en si no hay void
- ruc -&gt; se transforman a null en si no hay void
- correo -&gt; se transforman a null en si no hay void


- Mapeos de estado:
- habilitado → 1 = "SI", 0 = "NO"
- habilitado\_os → 1 = "SI", 0 = "NO"
- reparto → igual. → 1 = "SI", 0 = "NO"
- tipo\_destino → 1 = "SI", 0 = "NO"

- Reglas de validación (p.ej., sólo registros validados):
- where ter.ter\_habilitado=1 and ter.eliminado=0 → Solo terminales activos.
- WHERE ter.ter\_supervisor IS NOT NULL → Solo terminales con supervisor asignado.

- Reglas condicionales (si X entonces Y):
- Si ter\_estado\_agente == 1 → tipo = AGENTE.
- Si ter\_tipo\_local == Concesionario → tipo = CONCESIONARIO, sino AGENCIA.
- Si ter\_tipo\_conexion == 1 → "SI", sino "NO".
- Si existe clave en $supervisores\_json o $sups\_group → asigna supervisor, sino "".


## 6) Estructura de salida

- Tabla/archivo destino: report\_terminals
- Particionado / sufijo: No se incluye
- Clave(s) primaria(s) o únicas: No se especifica
- Columnas del reporte (nombre → tipo → descripción):
- fecha → DATE → Fecha de ejecución/corte del reporte.
- terminal\_id → INT → Identificador único del terminal.
- terminal\_nombre → VARCHAR →Nombre del terminal.
- tipo → VARCHAR → Clasificación: AGENTE / CONCESIONARIO / AGENCIA.
- codigo → VARCHAR →Código del terminal.
- direccion → VARCHAR → Dirección física.
- ubigeo → VARCHAR → Código de ubigeo.
- departamento → VARCHAR → Departamento (map a ubigeo).
- provincia → VARCHAR → Provincia (map a ubigeo).
- distrito → VARCHAR → Distrito (map a ubigeo).
- telefono → VARCHAR → Teléfono del terminal.
- horario\_atencion → VARCHAR → Horario de atención.
- documento\_administrador → VARCHAR → DNI/RUC del administrador.
- abreviatura → VARCHAR → Abreviatura del terminal.
- fecha\_creacion → DATETIME → Fecha de creación del terminal.
- usuario\_creacion → VARCHAR → Usuario que creó el registro.
- serie\_comprobantes → VARCHAR → Serie de comprobantes asociados.
- serie\_os → VARCHAR → Serie de órdenes de servicio.
- zona → VARCHAR → Zona a la que pertenece.
- conexion → VARCHAR(2) → SI / NO según ter\_tipo\_conexion.
- tipo\_destino → VARCHAR → Categoría: Destinos 24h / 48h / etc.
- habilitado\_os → VARCHAR(2) → SI / NO según habilitación OS.
- habilitado → VARCHAR(2) → SI / NO según habilitación terminal.
- razon\_social → VARCHAR → Razón social asociada.
- ruc → VARCHAR(11) → Número de RUC.
- correo → VARCHAR → Correo asociado.
- comision → DECIMAL → Comisión asociada al terminal.
- pinpad → VARCHAR → Tipo o configuración de pinpad.
- cantidad → INT → Cantidad de pinpads.
- igv → DECIMAL → Porcentaje de IGV.
- reparto → VARCHAR(2) → SI / NO según habilitación de reparto.
- supervisor → VARCHAR → Supervisor directo (de Branch).
- n\_zona → VARCHAR → Zona obtenida del JSON de terminales.
- sup\_supervisor → VARCHAR → Supervisor de Zonas Nacional.
- sup\_zona → VARCHAR → Zona del supervisor de Zonas Nacional.
- salida\_terminal → VARCHAR → Información sobre salida de terminal.
- subgrupo\_embarque → VARCHAR → Subgrupo de embarque.
- created\_date → DATETIME → Fecha/hora de generación del reporte.


- Ordenamiento por defecto: No Aplica

## 7) Frecuencia y operación

- Frecuencia de actualización: Diaria
- Ventana que recalcula (días/meses): No aplica
- Tamaño de lote / paginado (chunking): Está comentado
- si la tabla de terminales es muy grande, el proceso dividiría en bloques de 900 registros para insertar

- Tolerancia a fallos / reintentos: No hay aplica
- Tiempos de ejecución esperados: No especifica

## 8) Calidad y controles

- Validaciones previas/post:
- where ter.ter\_habilitado=1 and ter.eliminado=0" ( solo se procesan terminales activos y no eliminados.)

- Controles de duplicados: Sobrescritura de registros, tomando ter\_id e identificador
- Métricas de completitud (qué se monitorea): indirectas, basadas en is\_null, reemplazos por valores vacíos, y banderas SI/NO que aseguran datos legibles.

## 9) Dependencias externas

- ERPNext – Zona Nacional
- APIs / servicios y endpoints: api/method/send-query-database
- Autenticación / headers: no especifica
- Contrato:
- Entrada: parámetros filters, sql\_query, tables enviados al API.
- Salida: JSON estructurado (response) → se transforma en arrays asociativos ($supervisores\_json, $sups\_group) y se usa para enriquecer la data local.



## 10) Historial de cambios

2025-09-12 04:24 - Elian franco Arroyo Rodas - Documentación inicial