# Documentación API de Gestión de Jornada Laboral
## Índice
- [Obtener información de las jornadas por fechas](#obtener-jornada)
- [Obtener el detalle de la jornada específica](#obtener-detalle)
- [Vista Previa del Formulario de Gestión](#vista-previa-del-formulario-de-registro)
- [Guardar Gestión](#guardar-justificación)
- [Obtener Disponibilidad Empleado](#obtener-informacion)
- [Obtener Información Estado Jornada](#obtener-informacion)
## Links
- DATOSPERSONALES_URL: "http://192.168.253.6:8012/api/",
- APIMARCACIONES_URL: "http://192.168.253.6:8181/",
## Obtener información por fechas de la jornada
Este endpoint permite recuperar la información de las jornadas laborales de un empleado especificado por su identificación, filtrado por fechas de inicio y fin.
#### HTTP Request
`GET ${APIMARCACIONES_URL}/GetJornadaLaboral/{identificacion}`
#### URL Parameters
| Parameter | Type | Description |
|-----------------|-----------|--------------------------------------------------------|
| `identificacion`| `string` | Identificación del empleado cuya jornada se consulta. |
| `start` | `DateTime`| Fecha de inicio del rango para consultar la jornada. |
| `end` | `DateTime`| Fecha de fin del rango para consultar la jornada. |
### Response
El endpoint responde con una lista de objetos `JornadaLaboralDTO`, cada uno representando un día de trabajo dentro del rango especificado, incluyendo detalles sobre la jornada laboral, recesos, y si se trata de un fin de semana o día festivo.
#### JornadaLaboralDTO Object
| Field | Type | Description |
|--------------------|---------------|----------------------------------------------------------------|
| `idJornada` | `int` | Identificador de la jornada laboral. |
| `Fecha` | `DateTime` | Fecha de la jornada laboral. |
| `FechaPlazoSolicitud` | `DateTime` | Fecha límite para solicitudes relacionadas con la jornada. |
| `Jornada` | `JornadaDTO` | Detalles de la jornada laboral. |
| `Receso` | `RecesoDTO` | Detalles de los recesos durante la jornada. |
| `FinSemanaFeriado` | `bool` | Indica si la jornada cae en un fin de semana o día festivo. |
| `Tipo` | `int` | -1 = error , 0= neutro, 1=positivo. |
### Errors
En caso de error, el servidor devuelve un código de estado HTTP 500 y un mensaje descriptivo del error.
### Example
```http
GET ${APIMARCACIONES_URL}/GetJornadaLaboral/12345678?start=2023-01-01&end=2023-03-31
[
{
"idJornada": 52080,
"fecha": "2024-09-11T00:00:00",
"fechaPlazoSolicitud": "2024-09-13T00:00:00",
"jornada": {
"inicio": "07:42",
"fin": "16:34",
"duracion": null,
"estadoIngreso": "Ingreso normal",
"estadoSalida": "Salida normal",
"estadoJornada": "Jornada completa de labores",
"estado": "Jornada completa de labores",
"tipo": 1,
"tipoIngreso": 1,
"tipoSalida": 1,
"iniciorecuperar": 0,
"finrecuperar": 0,
"accion": "",
"gestionJ": null,
"gestionR": null,
"justificacion": null,
"recuperacion": null
},
"receso": {
"inicio": "12:44",
"fin": "13:07",
"duracion": "00:23",
"codigo": null,
"estado": "Jornada completa de receso",
"tipo": 1,
"tiempoRecuperar": 0,
"accion": "",
"gestionJ": null,
"gestionR": null,
"justificacion": null,
"recuperacion": null
},
"horario": null,
"tipo": 1,
"finSemanaFeriado": false
},
{
"idJornada": 28130,
"fecha": "2024-07-30T00:00:00",
"fechaPlazoSolicitud": "2024-07-31T00:00:00",
"jornada": {
"inicio": "07:52",
"fin": "17:32",
"duracion": null,
"estadoIngreso": "Ingreso normal",
"estadoSalida": "Salida normal",
"estadoJornada": "Jornada completa de labores",
"estado": "Jornada completa de labores",
"tipo": 1,
"tipoIngreso": 1,
"tipoSalida": 1,
"iniciorecuperar": 0,
"finrecuperar": 0,
"accion": "",
"gestionJ": null,
"gestionR": null,
"justificacion": null,
"recuperacion": null
},
"receso": {
"inicio": "12:42",
"fin": "13:05",
"duracion": "00:23",
"codigo": null,
"estado": "Jornada completa de receso",
"tipo": 1,
"tiempoRecuperar": 0,
"accion": "",
"gestionJ": null,
"gestionR": null,
"justificacion": null,
"recuperacion": null
},
"horario": null,
"tipo": 1,
"finSemanaFeriado": false
},
```
## Obtener detalle específico de la jornada laboral
Este endpoint proporciona información detallada sobre la jornada laboral de un empleado en un día específico, incluyendo horarios, recesos, justificaciones y posibles gestiones asociadas.
### HTTP Request
`GET ${APIMARCACIONES_URL}/GetDetalleJornadaLaboral/{idJornada}`
### URL Parameters
| Parameter | Type | Description |
|-------------|------|---------------------------------------------------|
| `idJornada` | `int`| Identificador de la jornada laboral a consultar. |
### Response
El endpoint responde con un objeto `JornadaLaboralDTO` que contiene información completa sobre la jornada laboral, recesos, horarios, y las justificaciones o recuperaciones necesarias si existen problemas o modificaciones requeridas en la jornada.
#### JornadaDTO Object
| Field | Type | Description |
|------------------|---------------|-------------------------------------------------------------|
| `Inicio` | `string` | Hora de inicio de la jornada laboral. |
| `Fin` | `string` | Hora de fin de la jornada laboral. |
| `Duracion` | `string` | Duración total de la jornada laboral. |
| `EstadoIngreso` | `string` | Estado del ingreso (ej. "Ingreso atrasado"). |
| `EstadoSalida` | `string` | Estado de la salida (ej. "Salida normal"). |
| `EstadoJornada` | `string` | Estado general de la jornada (ej. "Jornada completa"). |
| `Estado` | `string` | Estado general adicional de la jornada. |
| `Tipo` | `int` | Tipo numérico que representa el estado general de la jornada.|
| `TipoIngreso` | `int` | Tipo numérico que representa el estado del ingreso. |
| `TipoSalida` | `int` | Tipo numérico que representa el estado de la salida. |
| `Iniciorecuperar`| `int` | Minutos a recuperar al inicio de la jornada. |
| `Finrecuperar` | `int` | Minutos a recuperar al final de la jornada. |
| `gestionJ` | `GestionDTO` | Gestión relacionada con la justificación de la jornada. |
| `gestionR` | `GestionDTO` | Gestión relacionada con la recuperación de la jornada. |
| `Justificacion` | `SolicitudDTO`| Detalles de la justificación de la jornada. |
| `Recuperacion` | `SolicitudDTO`| Detalles de la recuperación de la jornada. |
#### RecesoDTO Object
| Field | Type | Description |
|--------------------|---------------|-----------------------------------------------------------------|
| `Inicio` | `string` | Hora de inicio del receso. |
| `Fin` | `string` | Hora de fin del receso. |
| `Duracion` | `string` | Duración total del receso. |
| `Codigo` | `string` | Código identificador del receso. |
| `Estado` | `string` | Estado general del receso (ej. "Receso no utilizado"). |
| `Tipo` | `int` | Tipo numérico que representa el estado general del receso. |
| `TiempoRecuperar` | `int` | Minutos a recuperar del receso. |
| `gestionJ` | `GestionDTO` | Gestión relacionada con la justificación del receso. |
| `gestionR` | `GestionDTO` | Gestión relacionada con la recuperación del receso. |
| `Justificacion` | `SolicitudDTO`| Detalles de la justificación del receso. |
| `Recuperacion` | `SolicitudDTO`| Detalles de la recuperación del receso. |
### Errores
Si la jornada especificada no se encuentra o si hay errores en la recuperación de los datos, se devuelve un error HTTP 500 con un mensaje descriptivo.
### Example
```http
GET ${DATOSPERSONALES_URL}/GetDetalleJornadaLaboral/65310
{
"idJornada": 65310,
"fecha": "2024-10-04T00:00:00",
"fechaPlazoSolicitud": "2024-10-08T00:00:00",
"jornada": {
"inicio": "09:39",
"fin": "19:06",
"duracion": null,
"estadoIngreso": "Ingreso atrasado",
"estadoSalida": "Salida normal",
"estadoJornada": "Jornada incompleta de labores",
"tipo": -1,
"gestionR": {
"id": 7,
"descripcion": "Entrada tardía laboral",
"metodo": "INGRESO",
"tipo": "L"
}
},
"receso": {
"inicio": "12:44",
"fin": "13:07",
"duracion": "00:23",
"estado": "Jornada completa de receso",
"tipo": 1
},
"horario": {
"horaInicio": "09:30",
"horaFin": "18:00",
"recesoInicio": "12:00",
"recesoFin": "15:00"
},
"tipo": -1,
"finSemanaFeriado": false
}
```
## Vista Previa del Formulario de Gestión
### HTTP Request
`POST ${APIMARCACIONES_URL}/RegistroEntradaSalida/AppVistaPreviaFormulario`
#### Descripción
Este endpoint procesa los datos de gestión de jornda labora y genera el PDF de la justificación/recuperación.
#### Cuerpo de la Petición
```json
{
"idpersona": int, //id de tbl_persona
"entrada": "string", // Hora de inicio
"salida": "string", // Hora fin
"fecha": "string", // Fecha del evento
"fechar": "string?", // Fecha de recuperación (opcional)
"tipo": "string", // Tipo de registro (J = Justificación, R = Recuperación)
"subtipo": int, // Subtipo del registro, enviado desde el frontend
"observacion": "string" // Observaciones adicionales
}
```
#### Respuestas
- **200 OK**: La solicitud fue procesada correctamente y el contenido en PDF ha sido insertado.
- **409 Conflict**: Error en el procesamiento de la solicitud. Devuelve un mensaje de error.
## Guardar Gestión
### POST ${DATOSPERSONALES_URL}/api/RegistroEntradaSalida/AppPostGuardarJustificacion
#### Descripción
Este endpoint acepta datos de justificación/recuperación y los almacena en la nueva estructura. Además, envía correos electrónicos de notificación sobre la solicitud ingresada.
#### Cuerpo de la Petición
```json
{
"idpersona": int,
"entrada": "string", // Hora de inicio
"salida": "string", // Hora fin
"fecha": "string", // Fecha del evento
"fechar": "string?", // Fecha de recuperación (opcional)
"tipo": "string", // Tipo de registro (J = Justificación, R = Recuperación)
"subtipo": int, // Subtipo del registro, enviado desde el frontend
"observacion": "string" // Motivo de la no marcación
}
```
#### Respuestas
- **200 OK**: La solicitud fue procesada correctamente. La respuesta incluye detalles del registro almacenado y un mensaje de éxito.
```json
{
"JornaLaboral": {
"idpersona": int,
"entrada": "string",
"salida": "string",
"fecha": "string",
"fechar": "string?",
"tipo": "string",
"subtipo": int,
"observacion": "string"
},
"strEstado": "EXITO",
"strMensaje": "Solicitud de justificación realizada con éxito."
}
```
- **409 Conflict**: Error en el procesamiento de la solicitud. Devuelve un mensaje de error con detalles adicionales.
```json
{
"strEstado": "NOEXITO",
"strMensaje": "Error en AppPostGuardarJustificación: [detalle del error]"
}
```
## Obtener Disponibilidad Empleado
### HTTP Request
`POST GET ${APIMARCACIONES_URL}/Horario/GetHorariosRangoFechas/{identificacion}/{fechaInicio}/{fechaFin}`
#### Descripción
Este endpoint recibir la identificación de una persona, una fecha de inicio y una fecha de fin y obtener sus horarios por cada día y conocer si tal día tiene vacación.
#### Parámetros de Entrada
- `identificacion`: String. Identificación del empleado cuyo horario y estado de vacaciones se desea consultar.
- `fechaInicio`: DateTime. Fecha de inicio del rango para consultar horarios y vacaciones.
- `fechaFin`: DateTime. Fecha de fin del rango para consultar horarios y vacaciones.
### Validaciones
- El rango entre `fechaInicio` y `fechaFin` no debe exceder los 30 días.
#### Respuestas
- **200 OK**: La respuesta retorna una lista de objetos, donde cada objeto representa un día dentro del rango especificado y contiene la siguiente información.
```json
{
"fecha": "2024-10-01",
"horario": {
"horaInicio": "08:00:00",
"horaFin": "16:30:00",
"recesoInicio": "12:00:00",
"recesoFin": "15:00:00"
},
"vacacion": false
},
{
"fecha": "2024-10-02",
"horario": {
"horaInicio": "08:00:00",
"horaFin": "16:30:00",
"recesoInicio": "12:00:00",
"recesoFin": "15:00:00"
},
"vacacion": true
},
```
### Consideraciones Generales
- Prueba exhaustivamente todos los endpoints para asegurar que manejan correctamente tanto los casos de éxito como los de error.
## Obtener Información de Tipos de Jornada
Este endpoint proporciona la información sobre los diferentes tipos de jornadas disponibles, incluyendo su identificador, descripción y el color asociado.
### HTTP Request
`GET ${APIMARCACIONES_URL}/Gestion/GetTipoJornadaInfo`
### Headers
No se requieren headers especiales para esta solicitud.
### Response
La respuesta es un array de objetos, donde cada objeto representa un tipo de jornada con su correspondiente identificador, descripción y color asociado.
```json
[
{
"id": -1,
"descripcion": "Error",
"color": "#EF4444"
},
{
"id": 0,
"descripcion": "Neutral",
"color": "#6B7278"
},
{
"id": 1,
"descripcion": "Correcto",
"color": "#22C55E"
},
{
"id": 2,
"descripcion": "Procesando",
"color": "#fc8a31"
},
{
"id": 3,
"descripcion": "Ejecutando",
"color": "#FDE047"
},
{
"id": 4,
"descripcion": "Gestionado",
"color": "#14B8A6"
}
]