Ir al contenido principal

Lista de marcaciones generada (1) - [listMarkingsApp45]

🧾 Descripción

Este servicio obtiene y consolida todas las marcaciones de asistencia de un empleado en una fecha específica, combinando información de:

  • Employee Checkin (Entradas, salidas, refrigerios)

  • Attendance (Estado del día)

  • Cortes (Fechas especiales donde cambia el criterio de consulta)

  • Turnos del empleado (Shift Type)

Entrega una estructura lista para mostrar en una app móvil o web con:

  • Entrada

  • Salida a refrigerio

  • Retorno de refrigerio

  • Salida

  • Estado del día (Presente, Ausente, Teletrabajo, etc.)

  • Información del día: nombre, mes, fecha formateada.

El servicio también calcula dinámicamente si debe tomar estado_reporte o status, según si la fecha consultada pertenece al rango generado desde el último corte del mes.


🚀 Endpoint

POST /list-markings-app45


📥 Parámetros de Entrada (Request Body)

{ "usuario": "string", "empleado": "EMP-0001", "cookie": "token de sesión", "date": "YYYY-MM-DD" }
Campo Tipo Descripción
usuario string Usuario que solicita información (no se usa en lógica interna).
empleado string ID del empleado a consultar.
cookie string Cookie de sesión para consultas al ERP.
date string Fecha de la marcación.

🔐 Seguridad

  • dbErp()

  • ServiceErp()


🧠 Flujo del Servicio (Resumen Real)

1️⃣ Obtiene filtros según fecha

  • Si la fecha es >= 2022-11-10, consulta por fecha_consolidado.

  • Si es menor, consulta por rango horario (00:00:00 – 23:59:59).

2️⃣ Trae las marcaciones del empleado

Consulta tabEmployee Checkin (Entrada, Refrigerio, Salida).

3️⃣ Consulta estado de asistencia

Desde tabAttendance, validando solo documentos aprobados (docstatus = 1).

4️⃣ Obtiene configuración de cortes del mes

Sirve para determinar si el estado válido es:

  • estado_reporte (cuando está dentro del rango posterior al corte), ó

  • status (estado normal de Attendance)

5️⃣ Genera un rango de fechas desde el corte hasta fin de mes

Se usa para validar cambios de lógica.

6️⃣ Procesa marcaciones y las estructura así:

 

{ "entrada": {...}, "salida_refrigerio": {...}, "llegada_refrigerio": {...}, "salida": {...}, "asistencia": {...} }

 

7️⃣ Traduce estados a texto legible

Ejemplo:

ERP Texto entregado
Present Presente
Absent Ausente
Work From Home Trabajar desde casa
Half Day Medio día

📤 Response 200 – Ejemplo

{ "valor": true, "msn": "Lista de marcaciones generada correctamente", "data": { "entrada": { "empleado": "Juan Pérez", "hora_marcacion": "08:01 AM", "existe": 1 }, "salida_refrigerio": {...}, "llegada_refrigerio": {...}, "salida": {...}, "asistencia": { "fecha": "2025-01-15", "mes": "ENERO", "status": "PRESENTE", "nombre_fecha": "MIERCOLES 15 DE 2025" } } }

❗ Posibles Errores

1. Error al obtener marcaciones

{ "valor": false, "msn": "Error al traer asistencia", "data": [] }

2. Error al consultar Attendance o Cortes

{ "valor": false, "msn": "Fallo al traer asistencia.", "data": [] }

3. Error interno del servidor

{ "valor": false, "msn": "Error en listMarkingsApp45: <mensaje>", "error": "<stacktrace>" }


📚 Tablas / Recursos Usados

🔹 tabEmployee Checkin

Campos:

  • name

  • employee

  • employee_name

  • log_type

  • time

  • tardanza

  • salida_temprana

🔹 tabAttendance

  • status

  • estado_reporte

  • attendance_date

  • employee

🔹 tabCortes

  • dia_inicio

  • dia_final

🔹 tabShift Type

  • start_time

  • end_time


🧩 Lógica en Pseudocódigo

input: usuario, empleado, cookie, date calcular inicio y fin del día si date >= 2022-11-10: buscar checkin por fecha_consolidado else: buscar checkin por rango de horas consultar Attendance consultar Cortes del mes si cortes vacío → error generar fechas posteriores al corte determinar estado (status o estado_reporte) crear estructura de salida iterar marcaciones: si log_type == Entrada → entrada si log_type == Salida Refrigerio → salida_refrigerio etc. retornar JSON con todas las marcaciones y estado