Módulo Boletas de Pago

Boleta Mensual(Obtener Proceso de Descarga (1)) - [obtener]

🧾 Descripción

Este servicio permite buscar y obtener información detallada de una denuncia registrada en el ERP, usando un código aleatorio generado para consulta pública.

La función:

Es un servicio de consulta directa, sin dependencias entre módulos.


🚀 Endpoint

POST /obtener

📥 Request Body

{ "codigo": "ABC12345" }

🔐 Seguridad

No requiere token especial más allá del utilizado internamente por apiService() o ServiceErp().
La autenticación se maneja dentro del sistema ERP.


🧠 Flujo del Servicio (resumen real)

  1. Recibe el parámetro: codigo = $request->codigo

  2. Construye un request hacia el ERP: GET Denuncias?fields=[...]&filters=[["codigo_aleatorio","=",codigo]]

Campos obtenidos:

  1. Si no existe la denuncia → se responde:

{ "success": false, "message": "No se encontró la denuncia" }
  1. Si existe y tiene archivo, se concatena la URL base:


archivo_denuncia = BASE_CAPACITACION . archivo_denuncia
  1. Se devuelve la primera denuncia encontrada, ya que el código es único.


📤 Response 200 – Ejemplo

{ "success": true, "message": "Encontrado", "data": { "name": "DEN-00045", "creation": "2025-01-15 09:12:20", "estado_denuncias": "Atendido", "fecha_atendido": "2025-01-20", "fecha_proceso": "2025-01-18", "archivo_denuncia": "https://servidor.com/files/denuncias/archivo.pdf", "respuesta_de_denuncia_atendido": "Se revisó la información y se procedió..." } }

❗ Posibles Errores

1. No se encuentra la denuncia

{ "success": false, "message": "No se encontró la denuncia" }

2. Error del ERP

{ "success": false, "message": "Error message from ERP" }

3. Código vacío o inválido

{ "success": false, "message": "No se encontró la denuncia" }

📚 Schemas Usados

Denuncias (GET)

Campos usados:

{ "name": "string", "creation": "datetime", "estado_denuncias": "string", "fecha_atendido": "date", "fecha_proceso": "date", "archivo_denuncia": "string|null", "respuesta_de_denuncia_atendido": "string|null" }

🗃 Lógica del Servicio (Pseudo-código)

codigo = request.codigo body = { limit = None fields = [name, creation, estado_denuncias, fecha_atendido, fecha_proceso, archivo_denuncia, respuesta...] filters = [["codigo_aleatorio", "=", codigo]] } response = GET Denuncias using ServiceErp if !response.valor or response.response is empty: return error "No se encontró la denuncia" denuncia = response.response[0] if denuncia.archivo_denuncia != "": denuncia.archivo_denuncia = BASE_CAPACITACION + denuncia.archivo_denuncia return success with denuncia

Utilidades(Consultar Utilidades (1)) - [getYearUtilidades]

🧾 Descripción

Este servicio obtiene:

  1. La lista de años registrados en el ERP (tabla Year), ordenados de forma descendente.

  2. Valida si el empleado tiene utilidades asignadas para al menos un año (tabla Utilidades).

El objetivo es determinar si el empleado cuenta con utilidades cargadas y retornar la lista de años disponibles para consulta.


🚀 Endpoint

POST /get-year-utilidades


📥 Parámetros de entrada (Request Body)

{ "employee": "EMP-0001" }

Campos

Campo Tipo Obligatorio Descripción
employee string ID del empleado para validar si tiene utilidades.

🔐 Seguridad

Utiliza autenticación mediante ServiceErp() (token interno del ERP).
No requiere permisos adicionales, ya que solo consulta información.


🧠 Flujo del Servicio (explicación real)

1️⃣ Obtener los años disponibles (tabla Year)

Llama al ERP: GET Year?limit=None&fields=["name"]


2️⃣ Validar si el empleado tiene utilidades registradas

Consulta al ERP: GET Utilidades?limit=None&fields=["name"]&filters=[["empleado","=", employee]]


📤 Response 200 – Ejemplo

Caso 1 — El empleado NO tiene utilidades

{ "valor": false, "msn": "Hemos verificado que no tiene utilidades asignadas. Para más detalles, consultar con el área de RRHH", "data": ["2024", "2023", "2022"] }

Caso 2 — El empleado SÍ tiene utilidades

{ "valor": true, "msn": "Hemos verificado que no tiene utilidades asignadas. Para más detalles, consultar con el área de RRHH", "data": ["2024", "2023", "2022"] }

📌 Nota: El mensaje es el mismo en ambos escenarios, siguiendo el comportamiento del código original.


❗ Posibles Errores

Caso Respuesta
Error al obtener años del ERP years → [] (no rompe el flujo)
Error de conexión con el ERP years → []
El empleado no tiene utilidades "valor": false
El empleado sí tiene utilidades "valor": true"

📚 Tablas usadas (schemas)

📄 Year (GET)

Campos usados: { "name": "string" }

📄 Utilidades (GET)

Campos usados: { "name": "string" }


🗃 Lógica en pseudo-código

employee = request.employee years = GET Year years = list of names sort years desc utilidades = GET Utilidades where empleado = employee if utilidades.count == 0: return { valor: false, msn: "...", data: years } return { valor: true, msn: "...", data: years }

Utilidades(Obtener Proceso de Descarga (1, 2, 3,4,5)) - [show]

🧾 Descripción

Este servicio permite consultar el último registro almacenado en la tabla historial_procesos_app según:

Es usado para validar si un empleado ya realizó o no un proceso específico dentro del aplicativo.


🚀 Endpoint

POST /show


📥 Parámetros de Entrada (Request Body)

{ "empleado": "EMP-0001", "proceso": "descargaContratoTrabajo", "anio": 2025, "mes": 1 }

🔎 Descripción de parámetros

Parámetro Tipo Obligatorio Descripción
empleado string Código del empleado a consultar
proceso string Nombre del proceso a buscar
anio int Año del proceso (filtrado opcional)
mes int Mes del proceso (filtrado opcional)

🔐 Seguridad

Utiliza conexión directa a la base de datos dbapp.
No requiere token ERP, pero depende de la autenticación interna del backend.


🧠 Flujo del Servicio (Resumen real)

  1. Validar parámetros obligatorios

    • Si no se envía empleado → retorna error

    • Si no se envía proceso → retorna error

  2. Construir filtros dinámicos

    • Base: empleado + proceso

    • Si llega año → se agrega al WHERE

    • Si llega mes → se agrega al WHERE

  3. Consultar la tabla interna
    Query sobre:


    historial_procesos_app ORDER BY fecha DESC LIMIT 1

    Utiliza first() para obtener el último registro.

  4. Validar si existe registro

    • Si no existe, devuelve mensaje informando que no se encontró el proceso.

  5. Retornar información del proceso encontrado
    Incluye toda la fila obtenida desde la base de datos.


📤 Response 200 – Ejemplos

✅ Caso exitoso

{ "valor": true, "msn": "Proceso encontrado.", "data": { "id": 1524, "empleado": "EMP-0001", "proceso": "descargaContratoTrabajo", "year": 2025, "month": 1, "fecha": "2025-01-03 09:32:11" } }

❌ Faltan parámetros

{ "valor": false, "msn": "Falta empleado." }

{ "valor": false, "msn": "Falta proceso." }

❌ No existe el proceso

{ "valor": false, "msn": "No se encontró el proceso." }


❗ Posibles Errores

  1. No se envía empleado

    { "valor": false, "msn": "Falta empleado." }

  2. No se envía proceso

    { "valor": false, "msn": "Falta proceso." }

  3. No se encontró el registro

    { "valor": false, "msn": "No se encontró el proceso." }

  4. Error interno de base de datos
    (Puede retornar error 500 desde DB, manejado por Laravel)


📚 Estructura usada (historial_procesos_app)

{ "empleado": "string", "proceso": "string", "year": "int", "month": "int", "fecha": "datetime" }


🗃 Lógica en Pseudo-código

if empleado is empty → return error if proceso is empty → return error where = [ empleado = input.empleado, proceso = input.proceso ] if anio present: where.year = input.anio if mes present: where.month = input.mes result = DB.historial_procesos_app .where(where) .orderBy(fecha desc) .first() if result is null: return error "No se encontró el proceso" return success + result

CTS(Url CTS PDF (1)) - [pdfCTS]

🧾 Descripción

Genera el PDF de la Compensación por Tiempo de Servicios (CTS) de un empleado para un periodo específico (mes y año).
El servicio consulta la información almacenada en el ERP y retorna el archivo PDF ya renderizado desde una vista Blade (pdf/cts).

También valida si la descarga está habilitada según la fecha definida por la empresa:

Si el usuario intenta descargar antes de esas fechas, el servicio lo bloquea.


🚀 Endpoint

GET /pdf-cts/{employee}/{month}/{year}

Parámetros

Parámetro Tipo Descripción
employee string ID del empleado
month string/int 5 ó 11 (Mayo / Noviembre)
year string/int Año del cálculo CTS

🔐 Seguridad

Este servicio requiere una autenticación interna mediante apiService() para consumir los datos del ERP.
No necesita token del cliente, pero sí credenciales válidas para el ERP.


🧠 Flujo del Servicio (resumen real)

1️⃣ Validación del Mes

Convierte el mes recibido:

Valor recibido Se interpreta como
"5" "MAYO"
"11" "NOVIEMBRE"

2️⃣ Validación de Fecha de Bloqueo

El servicio verifica si la fecha actual está dentro del periodo permitido:

Si aún no llega la fecha → se retorna:

{ "valor": false, "msn": "CTS no habilitado" }

3️⃣ Obtiene la CTS del ERP

Se consulta la API del ERP:

Compensacion por Tiempo de Servicios ?limit=None &order_by=creation desc &filters=[ ["empleado","=","<employee>"], ["mes","=","<MAYO/NOVIEMBRE>"], ["año","=","<year>"] ] &fields=[ ...campos... ]

Se recuperan campos como:

Si no existen registros → retorna:

{ "valor": false, "msn": "No cuenta con CTS para ese Periodo" }

4️⃣ Genera el PDF

Si existe el registro, el servicio envía la información a la vista:

resources/views/pdf/cts.blade.php

Luego devuelve el PDF:

return PDF::loadView("pdf/cts", $dataPdf) ->setPaper('a4', 'wrapper') ->stream();

📥 Request Body

No utiliza body.


📤 Response – Ejemplo exitoso

El servicio no retorna JSON cuando es exitoso, sino un PDF vía stream, por lo que la respuesta es un archivo.

Ejemplo conceptual: <PDF STREAM - CTS Mayo 2024>


❗ Posibles Errores

1. CTS no habilitado por fecha

{ "valor": false, "msn": "CTS no habilitado" }

2. CTS inexistente para el periodo

{ "valor": false, "msn": "No cuenta con CTS para ese Periodo" }

3. Parámetros mal enviados

{ "valor": false, "msn": "Parametros No Validos" }

4. Error interno del ERP

Retorna el error capturado del servicio apiService().


📚 Schemas involucrados

Compensación por Tiempo de Servicios (CTS)

Campos usados:

{ "dias_ausencias": int, "dias_de_licencia_sin_goce": int, "dias_de_descanso_medico": int, "descuento_de_dias_de_ausencia": number, "promedio_remunerativo": number, "name": string, "nombre_de_compañia": string, "ruc": string, "ubicacion": string, "nombre_completo": string, "mes": "MAYO/NOVIEMBRE", "año": string, "cuenta_de_banco": string, "nombre_de_banco": string, "asignacion_familiar": number, "gratificacion_entre_seis": number, "horas_extras_entre_seis": number, "horas_nocturnas_entre_seis": number, "remuneracion_computable_cts": number, "meses_computables_cts": number, "pago_meses": number, "dias_computables_cts": number, "pago_dias": number, "cts_total_a_pagar": number, "tipo_de_documento": string, "dni": string }

🗃 Lógica en pseudo-código

convert month to MAYO/NOVIEMBRE fechaBloqueo = (month == MAYO) ? "year-05-15" : "year-11-15" if hoy <= fechaBloqueo: return CTS no habilitado data = GET CTS where empleado, mes, año if data empty: return no CTS available pdf = render view pdf/cts with data return pdf stream

Reconocimiento de deuda( Url Reconocimiento de deuda PDF (1) ) - [debtRecognition]

🧾 Descripción

Este servicio valida si un empleado tiene un Reconocimiento de Deuda pendiente de firma, y en caso afirmativo, genera y descarga el archivo PDF del documento, incluyendo el detalle de cuotas asociadas.

El servicio consume directamente información del ERP, consultando tanto el documento principal como sus tablas hijas (detalles de deuda por mes).


🚀 Endpoint

POST /debt-recognition

📥 Parámetros

Recibe como parámetro directo el ID del empleado:

{ "employee": "EMP-0001" }

🔐 Seguridad

El servicio requiere autenticación interna vía dbErp() para consultas SQL y usa PDF::loadView() para generar el documento final.


🧠 Flujo del Servicio (resumen real)

1. Verifica si existe un Reconocimiento de Deuda pendiente

Consulta en el ERP:

Si no encuentra ningún registro:

{ "valor": false, "msn": "Usted no cuenta con un reconocimiento de deuda pendiente de firmar." }

2. Obtiene los datos del Reconocimiento de Deuda

Si existe un documento pendiente:


3. Obtiene el detalle (tabla hija) del reconocimiento

Consulta:

Los campos recuperados:

{ "ano": "", "mes": "", "monto": "" }

4. Construye la data final

Une:


5. Genera el documento PDF

Renderiza la vista:

pdf/Doctype/ReconocimientoDeDeuda/reconocimiento_de_deuda.blade.php

Y retorna la descarga del PDF.


📤 Response – Archivo PDF

El servicio retorna directamente un PDF generado con domPDF:


Content-Type: application/pdf Content-Disposition: attachment; filename="ReconocimientoDeDeuda.pdf"

No devuelve un JSON en caso de éxito, sino una descarga directa del documento.


❗ Posibles Errores

1. No existe reconocimiento pendiente

{ "valor": false, "msn": "Usted no cuenta con un reconocimiento de deuda pendiente de firmar." }

2. Error en la consulta ERP

{ "valor": false, "msn": "Error al obtener datos" }

3. Error inesperado en PDF o datos

{ "valor": false, "msn": "Error inesperado" }

📚 Schemas usados

Reconociemientos de Deuda (principal)

{ "name": "string", "empleado": "string", "monto_total": "decimal", "fecha": "date", "reconocimiento_escaneado_firmado": "string|null" }

table_reconocimiento_deuda (detalle)

{ "ano": "number", "mes": "string", "monto": "decimal" }

🗃 Pseudocódigo del Servicio

filters = { docstatus: 0, empleado: employee } recognition = GET ReconociemientosDeDeuda WHERE sin archivo firmado if recognition vacío: return error detail = GET table_reconocimiento_deuda WHERE parent = recognition.name dataComplete = { dataEmployee: recognition, dataTable: detail } return PDF(dataComplete)