{
  "openapi": "3.0.0",
  "info": {
    "title": "Sistema de Gestión de Talento Humano — Corporación Salom S.A.",
    "version": "1.0.0",
    "description": "Backend del sistema de gestión de reclutamiento",
    "contact": {
      "name": "Eruyn Morales",
      "email": "eruynandres8@gmail.com"
    }
  },
  "paths": {
    "/admin/bitacora": {
      "get": {
        "x-controller-name": "BitacoraController",
        "x-operation-name": "listar",
        "tags": [
          "BitacoraController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Listado de bitácora administrativa"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "buscar",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "seccion",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accion",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tipoUsuario",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "usuarioId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "registroId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "fechaDesde",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fechaHasta",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "BitacoraController.listar"
      }
    },
    "/admin/candidatos/{id}/cv": {
      "post": {
        "x-controller-name": "AdminController",
        "x-operation-name": "subirCvCandidatoAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "CV cargado desde panel administrativo"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "AdminController.subirCvCandidatoAdmin"
      },
      "delete": {
        "x-controller-name": "AdminController",
        "x-operation-name": "eliminarCvCandidato",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "CV eliminado correctamente"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "AdminController.eliminarCvCandidato"
      }
    },
    "/admin/candidatos/{id}/estado": {
      "patch": {
        "x-controller-name": "AdminController",
        "x-operation-name": "cambiarEstadoCandidato",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Estado de candidato actualizado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "estado"
                ],
                "properties": {
                  "estado": {
                    "type": "boolean"
                  },
                  "motivo": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "AdminController.cambiarEstadoCandidato"
      }
    },
    "/admin/candidatos/{id}": {
      "patch": {
        "x-controller-name": "AdminController",
        "x-operation-name": "editarCandidatoAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Datos del candidato actualizados"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "tipoDocumento": {
                    "type": "string"
                  },
                  "numeroDocumento": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "passwordNueva": {
                    "type": "string"
                  },
                  "nombre": {
                    "type": "string"
                  },
                  "apellido": {
                    "type": "string"
                  },
                  "genero": {
                    "type": "string"
                  },
                  "estadoCivil": {
                    "type": "string"
                  },
                  "fechaNacimiento": {
                    "type": "string"
                  },
                  "telefono": {
                    "type": "string"
                  },
                  "paisId": {
                    "type": "number"
                  },
                  "departamentoId": {
                    "type": "number"
                  },
                  "municipioId": {
                    "type": "number"
                  },
                  "direccion": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "AdminController.editarCandidatoAdmin"
      }
    },
    "/admin/candidatos": {
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "getCandidatos",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Listado de candidatos"
                }
              }
            }
          }
        },
        "operationId": "AdminController.getCandidatos"
      }
    },
    "/admin/configuracion/contratacion": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminObtenerConfiguracionContratacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Configuración general de contratación"
                }
              }
            }
          }
        },
        "operationId": "PostulacionesController.adminObtenerConfiguracionContratacion"
      }
    },
    "/admin/dashboard": {
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "getDashboard",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Resumen consolidado del sistema"
                }
              }
            }
          }
        },
        "operationId": "AdminController.getDashboard"
      }
    },
    "/admin/documentos-induccion/estadisticas": {
      "get": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "estadisticas",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Resumen de uso de documentos de inducción"
                }
              }
            }
          }
        },
        "operationId": "DocumentosInduccionController.estadisticas"
      }
    },
    "/admin/documentos-induccion/{id}/archivo": {
      "patch": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "reemplazarArchivo",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Reemplazar archivo de documento de inducción"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "DocumentosInduccionController.reemplazarArchivo"
      }
    },
    "/admin/documentos-induccion/{id}/descargar": {
      "get": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "descargar",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Descargar documento de inducción"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "DocumentosInduccionController.descargar"
      }
    },
    "/admin/documentos-induccion/{id}": {
      "patch": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "renombrar",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Renombrar documento de inducción"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "nombreOriginal"
                ],
                "properties": {
                  "nombreOriginal": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "DocumentosInduccionController.renombrar"
      },
      "get": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "obtenerDocumento",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Obtener documento de inducción"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "DocumentosInduccionController.obtenerDocumento"
      },
      "delete": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "eliminar",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Eliminar documento de inducción"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "DocumentosInduccionController.eliminar"
      }
    },
    "/admin/documentos-induccion": {
      "post": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "subir",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Subir documento de inducción"
                }
              }
            }
          }
        },
        "operationId": "DocumentosInduccionController.subir"
      },
      "get": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "listar",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Listar documentos de inducción"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "buscar",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "DocumentosInduccionController.listar"
      }
    },
    "/admin/perfil/contrasena": {
      "patch": {
        "x-controller-name": "AdminController",
        "x-operation-name": "cambiarContrasenaPerfilAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Contraseña administrativa actualizada"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "passwordActual",
                  "passwordNueva"
                ],
                "properties": {
                  "passwordActual": {
                    "type": "string"
                  },
                  "passwordNueva": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AdminController.cambiarContrasenaPerfilAdmin"
      }
    },
    "/admin/perfil/correo/enviar-codigo": {
      "post": {
        "x-controller-name": "AdminController",
        "x-operation-name": "enviarCodigoCorreoPerfilAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Código de verificación enviado"
                }
              }
            }
          }
        },
        "operationId": "AdminController.enviarCodigoCorreoPerfilAdmin"
      }
    },
    "/admin/perfil/correo/validar": {
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "validarCorreoPerfilAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Validación de correo del perfil administrativo"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "AdminController.validarCorreoPerfilAdmin"
      }
    },
    "/admin/perfil/correo/verificar": {
      "post": {
        "x-controller-name": "AdminController",
        "x-operation-name": "verificarCorreoPerfilAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Correo del personal verificado"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "codigo"
                ],
                "properties": {
                  "codigo": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AdminController.verificarCorreoPerfilAdmin"
      }
    },
    "/admin/perfil/datos": {
      "patch": {
        "x-controller-name": "AdminController",
        "x-operation-name": "actualizarDatosPerfilAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Datos del perfil administrativo actualizados"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "nombre",
                  "apellido",
                  "email"
                ],
                "properties": {
                  "nombre": {
                    "type": "string"
                  },
                  "apellido": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AdminController.actualizarDatosPerfilAdmin"
      }
    },
    "/admin/perfil": {
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "obtenerPerfilAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Perfil del personal autenticado"
                }
              }
            }
          }
        },
        "operationId": "AdminController.obtenerPerfilAdmin"
      }
    },
    "/admin/permisos/matriz": {
      "get": {
        "x-controller-name": "PermisosController",
        "x-operation-name": "obtenerMatriz",
        "tags": [
          "PermisosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Matriz de permisos por rol"
                }
              }
            }
          }
        },
        "operationId": "PermisosController.obtenerMatriz"
      }
    },
    "/admin/permisos/mios": {
      "get": {
        "x-controller-name": "PermisosController",
        "x-operation-name": "obtenerMisPermisos",
        "tags": [
          "PermisosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Permisos efectivos del personal autenticado"
                }
              }
            }
          }
        },
        "operationId": "PermisosController.obtenerMisPermisos"
      }
    },
    "/admin/personal/correo/validar": {
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "validarCorreoPersonalAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Validación de correo para personal autorizado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "AdminController.validarCorreoPersonalAdmin"
      }
    },
    "/admin/personal/dpi/validar": {
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "validarDpiPersonalAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Validación de DPI para personal autorizado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "dpi",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "AdminController.validarDpiPersonalAdmin"
      }
    },
    "/admin/personal/{id}/estado": {
      "patch": {
        "x-controller-name": "AdminController",
        "x-operation-name": "cambiarEstadoPersonalAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Estado del personal autorizado actualizado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "estado"
                ],
                "properties": {
                  "estado": {
                    "type": "boolean"
                  },
                  "motivo": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "AdminController.cambiarEstadoPersonalAdmin"
      }
    },
    "/admin/personal/{id}/permisos-adicionales": {
      "put": {
        "x-controller-name": "PermisosController",
        "x-operation-name": "actualizarPermisosAdicionalesCompatibilidad",
        "tags": [
          "PermisosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Accesos adicionales del personal actualizados"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "permisoIds"
                ],
                "properties": {
                  "permisoIds": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PermisosController.actualizarPermisosAdicionalesCompatibilidad"
      }
    },
    "/admin/personal/{id}/permisos-individuales": {
      "put": {
        "x-controller-name": "PermisosController",
        "x-operation-name": "actualizarPermisosIndividuales",
        "tags": [
          "PermisosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Accesos efectivos individuales del personal actualizados"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "permisoIdsEfectivos"
                ],
                "properties": {
                  "permisoIdsEfectivos": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PermisosController.actualizarPermisosIndividuales"
      }
    },
    "/admin/personal/{id}/reenviar-credenciales": {
      "post": {
        "x-controller-name": "AdminController",
        "x-operation-name": "reenviarCredencialesPersonalAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Credenciales temporales reenviadas correctamente"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "AdminController.reenviarCredencialesPersonalAdmin"
      }
    },
    "/admin/personal/{id}": {
      "patch": {
        "x-controller-name": "AdminController",
        "x-operation-name": "editarPersonalAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Personal autorizado actualizado correctamente"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "nombre",
                  "apellido",
                  "email",
                  "dpi",
                  "rolId",
                  "genero"
                ],
                "properties": {
                  "nombre": {
                    "type": "string"
                  },
                  "apellido": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "dpi": {
                    "type": "string"
                  },
                  "rolId": {
                    "type": "number"
                  },
                  "genero": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "AdminController.editarPersonalAdmin"
      }
    },
    "/admin/personal": {
      "post": {
        "x-controller-name": "AdminController",
        "x-operation-name": "crearPersonalAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Personal autorizado creado correctamente"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "nombre",
                  "apellido",
                  "email",
                  "dpi",
                  "rolId",
                  "genero"
                ],
                "properties": {
                  "nombre": {
                    "type": "string"
                  },
                  "apellido": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "dpi": {
                    "type": "string"
                  },
                  "rolId": {
                    "type": "number"
                  },
                  "genero": {
                    "type": "string"
                  },
                  "passwordTemporal": {
                    "type": "string"
                  },
                  "generarPasswordAutomatico": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AdminController.crearPersonalAdmin"
      },
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "listarPersonalAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Listado de personal autorizado"
                }
              }
            }
          }
        },
        "operationId": "AdminController.listarPersonalAdmin"
      }
    },
    "/admin/postulaciones/agenda-entrevistas": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminAgendaEntrevistas",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Agenda administrativa de entrevistas virtuales y presenciales"
                }
              }
            }
          }
        },
        "operationId": "PostulacionesController.adminAgendaEntrevistas"
      }
    },
    "/admin/postulaciones/resumen": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminResumenPostulaciones",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Resumen general de postulaciones para panel administrativo"
                }
              }
            }
          }
        },
        "operationId": "PostulacionesController.adminResumenPostulaciones"
      }
    },
    "/admin/postulaciones/via-rapida": {
      "post": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminCrearViaRapidaContratacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Crear o mover una postulación a contratación por vía rápida"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "candidatoId",
                  "vacanteId",
                  "motivo"
                ],
                "properties": {
                  "candidatoId": {
                    "type": "number"
                  },
                  "vacanteId": {
                    "type": "number"
                  },
                  "motivo": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "PostulacionesController.adminCrearViaRapidaContratacion"
      }
    },
    "/admin/postulaciones/{id}/contratacion/confirmar": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminConfirmarContratacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Confirmar contratación al superar período de prueba"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "confirmacionExplicita"
                ],
                "properties": {
                  "confirmacionExplicita": {
                    "type": "boolean"
                  },
                  "observaciones": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminConfirmarContratacion"
      }
    },
    "/admin/postulaciones/{id}/contratacion/confirmar-directa": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminConfirmarContratacionDirecta",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Confirmar contratación sin período de prueba"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "motivoConfirmacionDirecta",
                  "confirmacionExplicita"
                ],
                "properties": {
                  "motivoConfirmacionDirecta": {
                    "type": "string"
                  },
                  "confirmacionExplicita": {
                    "type": "boolean"
                  },
                  "observaciones": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminConfirmarContratacionDirecta"
      }
    },
    "/admin/postulaciones/{id}/contratacion/corregir-periodo": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminCorregirPeriodoPruebaContratacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Corregir un período de prueba iniciado por error"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "motivoCorreccion"
                ],
                "properties": {
                  "motivoCorreccion": {
                    "type": "string"
                  },
                  "observaciones": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminCorregirPeriodoPruebaContratacion"
      }
    },
    "/admin/postulaciones/{id}/contratacion/finalizar-periodo": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminFinalizarPeriodoPrueba",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Finalizar contratación durante período de prueba"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "motivoFinalizacion"
                ],
                "properties": {
                  "motivoFinalizacion": {
                    "type": "string"
                  },
                  "observaciones": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminFinalizarPeriodoPrueba"
      }
    },
    "/admin/postulaciones/{id}/contratacion/iniciar-periodo": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminIniciarPeriodoPruebaContratacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Registrar inicio de período de prueba de contratación"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "fechaInicioPeriodoPrueba": {
                    "type": "string"
                  },
                  "duracionPeriodoPruebaMeses": {
                    "type": "number"
                  },
                  "observaciones": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminIniciarPeriodoPruebaContratacion"
      }
    },
    "/admin/postulaciones/{id}/contratacion/revertir-confirmacion": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminRevertirConfirmacionContratacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Revertir una confirmación registrada por error"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "motivoReversion"
                ],
                "properties": {
                  "motivoReversion": {
                    "type": "string"
                  },
                  "observaciones": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminRevertirConfirmacionContratacion"
      }
    },
    "/admin/postulaciones/{id}/contratacion/revertir-finalizacion": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminRevertirFinalizacionPeriodoPrueba",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Revertir una finalización de período de prueba registrada por error"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "motivoReversionFinalizacion"
                ],
                "properties": {
                  "motivoReversionFinalizacion": {
                    "type": "string"
                  },
                  "observaciones": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminRevertirFinalizacionPeriodoPrueba"
      }
    },
    "/admin/postulaciones/{id}/control-llamadas/{numeroFase}/corregir-ultimo-intento": {
      "post": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminCorregirUltimoIntentoContacto",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Corregir el último intento de contacto registrado por error"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "numeroFase",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "motivo"
                ],
                "additionalProperties": true
              }
            }
          },
          "required": true,
          "x-parameter-index": 2
        },
        "operationId": "PostulacionesController.adminCorregirUltimoIntentoContacto"
      }
    },
    "/admin/postulaciones/{id}/control-llamadas/{numeroFase}/finalizar-falta-contacto": {
      "post": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminFinalizarFaltaContacto",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Finalizar postulación por falta de contacto después del plazo"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "numeroFase",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "required": false,
          "x-parameter-index": 2
        },
        "operationId": "PostulacionesController.adminFinalizarFaltaContacto"
      }
    },
    "/admin/postulaciones/{id}/control-llamadas/{numeroFase}/intentos-sin-respuesta": {
      "post": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminRegistrarIntentoSinRespuesta",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Registrar un intento de contacto sin respuesta"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "numeroFase",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "required": false,
          "x-parameter-index": 2
        },
        "operationId": "PostulacionesController.adminRegistrarIntentoSinRespuesta"
      }
    },
    "/admin/postulaciones/{id}/control-llamadas/{numeroFase}": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminGuardarControlLlamada",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Crear o actualizar coordinación de entrevista de una fase de postulación"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "numeroFase",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "required": true,
          "x-parameter-index": 2
        },
        "operationId": "PostulacionesController.adminGuardarControlLlamada"
      },
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminObtenerControlLlamada",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Obtener coordinación de entrevista de una fase de postulación"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "numeroFase",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.adminObtenerControlLlamada"
      }
    },
    "/admin/postulaciones/{id}/documentos-induccion/enviar": {
      "post": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "enviarDocumentosCandidato",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Enviar documentos de inducción al candidato"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "documentoIds"
                ],
                "properties": {
                  "documentoIds": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  },
                  "asunto": {
                    "type": "string"
                  },
                  "mensaje": {
                    "type": "string"
                  },
                  "reenviar": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "DocumentosInduccionController.enviarDocumentosCandidato"
      }
    },
    "/admin/postulaciones/{id}/documentos-induccion/estado": {
      "get": {
        "x-controller-name": "DocumentosInduccionController",
        "x-operation-name": "estadoEnvioDocumentosCandidato",
        "tags": [
          "DocumentosInduccionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Estado de envíos de documentos de inducción de una postulación"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "DocumentosInduccionController.estadoEnvioDocumentosCandidato"
      }
    },
    "/admin/postulaciones/{id}/entrevista-virtual/pdf": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminDescargarEntrevistaVirtualPdf",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "Previsualizar o descargar formulario de entrevista virtual en PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.adminDescargarEntrevistaVirtualPdf"
      }
    },
    "/admin/postulaciones/{id}/entrevista-virtual/reabrir": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminReabrirEntrevistaVirtual",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Reabrir formulario de entrevista virtual finalizado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.adminReabrirEntrevistaVirtual"
      }
    },
    "/admin/postulaciones/{id}/entrevista-virtual": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminGuardarEntrevistaVirtual",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Guardar borrador o finalizar formulario de entrevista virtual"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminGuardarEntrevistaVirtual"
      },
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminObtenerEntrevistaVirtual",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Obtener formulario de entrevista virtual de una postulación"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.adminObtenerEntrevistaVirtual"
      }
    },
    "/admin/postulaciones/{id}/estado": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminCambiarEstado",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Cambiar estado de postulación desde admin"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "estado"
                ],
                "properties": {
                  "estado": {
                    "type": "string"
                  },
                  "motivo": {
                    "type": "string"
                  },
                  "observaciones": {
                    "type": "string"
                  },
                  "faseActual": {
                    "type": "number"
                  },
                  "tipoCierre": {
                    "type": "string"
                  },
                  "aplicarRestriccion": {
                    "type": "boolean"
                  },
                  "diasRestriccion": {
                    "type": "number"
                  },
                  "esCorreccionAdministrativa": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminCambiarEstado"
      }
    },
    "/admin/postulaciones/{id}/quitar-restriccion": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminQuitarRestriccionCandidato",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Retirar la restricción activa del candidato mediante corrección administrativa"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "motivo"
                ],
                "properties": {
                  "motivo": {
                    "type": "string"
                  },
                  "observaciones": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminQuitarRestriccionCandidato"
      }
    },
    "/admin/postulaciones/{id}/referencias/laborales/{referenciaId}/no-contesto": {
      "patch": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminMarcarLaboralNoContesto",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Marcar referencia laboral como no contestó"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": false,
          "x-parameter-index": 2
        },
        "operationId": "ReferenciasPostulacionController.adminMarcarLaboralNoContesto"
      }
    },
    "/admin/postulaciones/{id}/referencias/laborales/{referenciaId}/pdf": {
      "get": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminDescargarReferenciaLaboralPdf",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "Previsualizar o descargar informe de referencia laboral en PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "nombreValidador",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ReferenciasPostulacionController.adminDescargarReferenciaLaboralPdf"
      }
    },
    "/admin/postulaciones/{id}/referencias/laborales/{referenciaId}/revertir-no-contesto": {
      "patch": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminRevertirLaboralNoContesto",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Revertir referencia laboral marcada como no contestó a pendiente"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ReferenciasPostulacionController.adminRevertirLaboralNoContesto"
      }
    },
    "/admin/postulaciones/{id}/referencias/laborales/{referenciaId}/solicitar-reemplazo": {
      "post": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminSolicitarReemplazoLaboral",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Registrar solicitud de reemplazo de referencia laboral"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": false,
          "x-parameter-index": 2
        },
        "operationId": "ReferenciasPostulacionController.adminSolicitarReemplazoLaboral"
      }
    },
    "/admin/postulaciones/{id}/referencias/laborales/{referenciaId}/volver-pendiente": {
      "patch": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminVolverLaboralPendiente",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Volver referencia laboral a estado pendiente desde admin"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ReferenciasPostulacionController.adminVolverLaboralPendiente"
      }
    },
    "/admin/postulaciones/{id}/referencias/laborales/{referenciaId}": {
      "patch": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminGuardarReferenciaLaboral",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Guardar verificación RRHH de una referencia laboral"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true,
          "x-parameter-index": 2
        },
        "operationId": "ReferenciasPostulacionController.adminGuardarReferenciaLaboral"
      }
    },
    "/admin/postulaciones/{id}/referencias/personales/{referenciaId}/no-contesto": {
      "patch": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminMarcarPersonalNoContesto",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Marcar referencia personal como no contestó"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": false,
          "x-parameter-index": 2
        },
        "operationId": "ReferenciasPostulacionController.adminMarcarPersonalNoContesto"
      }
    },
    "/admin/postulaciones/{id}/referencias/personales/{referenciaId}/pdf": {
      "get": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminDescargarReferenciaPersonalPdf",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "Previsualizar o descargar informe de referencia personal en PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "nombreValidador",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ReferenciasPostulacionController.adminDescargarReferenciaPersonalPdf"
      }
    },
    "/admin/postulaciones/{id}/referencias/personales/{referenciaId}/revertir-no-contesto": {
      "patch": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminRevertirPersonalNoContesto",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Revertir referencia personal marcada como no contestó a pendiente"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ReferenciasPostulacionController.adminRevertirPersonalNoContesto"
      }
    },
    "/admin/postulaciones/{id}/referencias/personales/{referenciaId}/solicitar-reemplazo": {
      "post": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminSolicitarReemplazoPersonal",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Registrar solicitud de reemplazo de referencia personal"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": false,
          "x-parameter-index": 2
        },
        "operationId": "ReferenciasPostulacionController.adminSolicitarReemplazoPersonal"
      }
    },
    "/admin/postulaciones/{id}/referencias/personales/{referenciaId}/volver-pendiente": {
      "patch": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminVolverPersonalPendiente",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Volver referencia personal a estado pendiente desde admin"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ReferenciasPostulacionController.adminVolverPersonalPendiente"
      }
    },
    "/admin/postulaciones/{id}/referencias/personales/{referenciaId}": {
      "patch": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminGuardarReferenciaPersonal",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Guardar verificación RRHH de una referencia personal"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "referenciaId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true,
          "x-parameter-index": 2
        },
        "operationId": "ReferenciasPostulacionController.adminGuardarReferenciaPersonal"
      }
    },
    "/admin/postulaciones/{id}/referencias/solicitar-laboral-adicional": {
      "post": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminSolicitarLaboralAdicional",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Registrar solicitud de referencia laboral adicional"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ReferenciasPostulacionController.adminSolicitarLaboralAdicional"
      }
    },
    "/admin/postulaciones/{id}/referencias": {
      "get": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "adminObtenerReferencias",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Consultar referencias de una postulación desde panel administrativo"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ReferenciasPostulacionController.adminObtenerReferencias"
      }
    },
    "/admin/postulaciones/{id}/solicitud-empleo/pdf": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminDescargarSolicitudEmpleoPdf",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "Descargar solicitud de empleo en PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.adminDescargarSolicitudEmpleoPdf"
      }
    },
    "/admin/postulaciones/{id}/via-rapida/retirar": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminRetirarViaRapida",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Retirar una vía rápida creada por error antes de iniciar contratación"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "motivo"
                ],
                "properties": {
                  "motivo": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.adminRetirarViaRapida"
      }
    },
    "/admin/postulaciones/{id}": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminDetallePostulacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Detalle de postulación para panel administrativo"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.adminDetallePostulacion"
      }
    },
    "/admin/postulaciones": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "adminListarPostulaciones",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Listado de postulaciones para panel administrativo"
                }
              }
            }
          }
        },
        "operationId": "PostulacionesController.adminListarPostulaciones"
      }
    },
    "/admin/reportes/catalogos": {
      "get": {
        "x-controller-name": "ReportesController",
        "x-operation-name": "catalogos",
        "tags": [
          "ReportesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Catálogos y opciones para el módulo de reportes"
                }
              }
            }
          }
        },
        "operationId": "ReportesController.catalogos"
      }
    },
    "/admin/reportes/estado/pdf": {
      "get": {
        "x-controller-name": "ReportesController",
        "x-operation-name": "reporteEstadoPdf",
        "tags": [
          "ReportesController"
        ],
        "responses": {
          "200": {
            "description": "Reporte de postulaciones por estado en PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "estado",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "buscar",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fechaDesde",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fechaHasta",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ReportesController.reporteEstadoPdf"
      }
    },
    "/admin/reportes/estado": {
      "get": {
        "x-controller-name": "ReportesController",
        "x-operation-name": "reporteEstado",
        "tags": [
          "ReportesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Reporte paginado de postulaciones por estado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "estado",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "buscar",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fechaDesde",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fechaHasta",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ReportesController.reporteEstado"
      }
    },
    "/admin/reportes/mensual/generar": {
      "post": {
        "x-controller-name": "ReportesController",
        "x-operation-name": "generarReporteMensual",
        "tags": [
          "ReportesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Genera o actualiza el resumen histórico mensual"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "anio",
                  "mes"
                ],
                "properties": {
                  "anio": {
                    "type": "number"
                  },
                  "mes": {
                    "type": "number",
                    "minimum": 1,
                    "maximum": 12
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "ReportesController.generarReporteMensual"
      }
    },
    "/admin/reportes/mensual/pdf": {
      "get": {
        "x-controller-name": "ReportesController",
        "x-operation-name": "reporteMensualPdf",
        "tags": [
          "ReportesController"
        ],
        "responses": {
          "200": {
            "description": "Reporte general mensual en PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "anio",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "mes",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ReportesController.reporteMensualPdf"
      }
    },
    "/admin/reportes/mensual": {
      "get": {
        "x-controller-name": "ReportesController",
        "x-operation-name": "reporteMensual",
        "tags": [
          "ReportesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Consulta o vista previa del reporte general mensual"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "anio",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "mes",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ReportesController.reporteMensual"
      }
    },
    "/admin/reportes/mensuales": {
      "get": {
        "x-controller-name": "ReportesController",
        "x-operation-name": "reportesMensuales",
        "tags": [
          "ReportesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Historial de reportes mensuales guardados"
                }
              }
            }
          }
        },
        "operationId": "ReportesController.reportesMensuales"
      }
    },
    "/admin/reportes/vacante/pdf": {
      "get": {
        "x-controller-name": "ReportesController",
        "x-operation-name": "reporteVacantePdf",
        "tags": [
          "ReportesController"
        ],
        "responses": {
          "200": {
            "description": "Reporte por vacante en PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "vacanteId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ReportesController.reporteVacantePdf"
      }
    },
    "/admin/reportes/vacante": {
      "get": {
        "x-controller-name": "ReportesController",
        "x-operation-name": "reporteVacante",
        "tags": [
          "ReportesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Reporte resumido de una vacante"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "vacanteId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ReportesController.reporteVacante"
      }
    },
    "/admin/roles/{id}/permisos": {
      "put": {
        "x-controller-name": "PermisosController",
        "x-operation-name": "actualizarPermisosRol",
        "tags": [
          "PermisosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Permisos del rol actualizados"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "permisoIds"
                ],
                "properties": {
                  "permisoIds": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PermisosController.actualizarPermisosRol"
      }
    },
    "/admin/roles": {
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "listarRolesAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Roles disponibles para personal autorizado"
                }
              }
            }
          }
        },
        "operationId": "AdminController.listarRolesAdmin"
      }
    },
    "/admin/vacantes/{id}/estado": {
      "patch": {
        "x-controller-name": "AdminController",
        "x-operation-name": "cambiarEstadoVacante",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Estado de vacante actualizado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "estado"
                ],
                "properties": {
                  "estado": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "AdminController.cambiarEstadoVacante"
      }
    },
    "/admin/vacantes/{id}/ocupacion": {
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "obtenerOcupacionVacante",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Detalle de ocupación de plazas de una vacante"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "AdminController.obtenerOcupacionVacante"
      }
    },
    "/admin/vacantes/{id}/publicar": {
      "patch": {
        "x-controller-name": "AdminController",
        "x-operation-name": "publicarVacante",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Visibilidad de vacante actualizada"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "publicada"
                ],
                "properties": {
                  "publicada": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "AdminController.publicarVacante"
      }
    },
    "/admin/vacantes/{id}": {
      "patch": {
        "x-controller-name": "AdminController",
        "x-operation-name": "editarVacante",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Vacante actualizada correctamente"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "AdminController.editarVacante"
      }
    },
    "/admin/vacantes": {
      "post": {
        "x-controller-name": "AdminController",
        "x-operation-name": "crearVacante",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Vacante creada correctamente"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "titulo",
                  "descripcion",
                  "cupos",
                  "salario",
                  "departamentoId",
                  "municipioId",
                  "jornadaId",
                  "periodicidadId"
                ],
                "properties": {
                  "titulo": {
                    "type": "string"
                  },
                  "descripcion": {
                    "type": "string"
                  },
                  "objetivo": {
                    "type": "string"
                  },
                  "cupos": {
                    "type": "number"
                  },
                  "salario": {
                    "type": "number"
                  },
                  "urgente": {
                    "type": "boolean"
                  },
                  "publicada": {
                    "type": "boolean"
                  },
                  "departamentoId": {
                    "type": "number"
                  },
                  "municipioId": {
                    "type": "number"
                  },
                  "jornadaId": {
                    "type": "number"
                  },
                  "periodicidadId": {
                    "type": "number"
                  },
                  "funciones": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "perfil": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "beneficios": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AdminController.crearVacante"
      },
      "get": {
        "x-controller-name": "AdminController",
        "x-operation-name": "listarVacantesAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Listado completo de vacantes para administración"
                }
              }
            }
          }
        },
        "operationId": "AdminController.listarVacantesAdmin"
      }
    },
    "/auth/admin/login": {
      "post": {
        "x-controller-name": "AdminController",
        "x-operation-name": "loginAdmin",
        "tags": [
          "AdminController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Login del personal autorizado"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "dpi",
                  "password"
                ],
                "properties": {
                  "dpi": {
                    "type": "string",
                    "description": "DPI o correo del personal"
                  },
                  "password": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AdminController.loginAdmin"
      }
    },
    "/auth/login": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "login",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Login exitoso. Devuelve JWT y datos del candidato.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "token": {
                      "type": "string"
                    },
                    "usuario": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "number"
                        },
                        "nombre": {
                          "type": "string"
                        },
                        "apellido": {
                          "type": "string"
                        },
                        "email": {
                          "type": "string"
                        },
                        "tipo": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Credenciales incorrectas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Cuenta desactivada o correo no verificado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "identificador",
                  "password"
                ],
                "properties": {
                  "identificador": {
                    "type": "string",
                    "description": "Correo, DPI o pasaporte del candidato",
                    "example": "3000000000002"
                  },
                  "password": {
                    "type": "string",
                    "example": "Prueba123"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.login"
      }
    },
    "/auth/olvide-contrasena": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "olvideContrasena",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Si el correo existe, se enviará un código.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "mensaje": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno, por ejemplo fallo al enviar correo.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "correo"
                ],
                "properties": {
                  "correo": {
                    "type": "string",
                    "format": "email",
                    "example": "eruynmorales8@gmail.com"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.olvideContrasena"
      }
    },
    "/auth/ping": {
      "get": {
        "x-controller-name": "AuthController",
        "x-operation-name": "ping",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "API de autenticación funcionando.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string"
                    },
                    "mensaje": {
                      "type": "string"
                    },
                    "timestamp": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "AuthController.ping"
      }
    },
    "/auth/recuperar-contrasena": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "recuperarContrasena",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Contraseña actualizada correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "mensaje": {
                      "type": "string",
                      "example": "Contraseña actualizada correctamente."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Código incorrecto, inválido, expirado o contraseña inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "correo",
                  "codigo",
                  "nuevaPassword"
                ],
                "properties": {
                  "correo": {
                    "type": "string",
                    "format": "email",
                    "example": "eruynmorales8@gmail.com"
                  },
                  "codigo": {
                    "type": "string",
                    "minLength": 6,
                    "maxLength": 6,
                    "example": "123456"
                  },
                  "nuevaPassword": {
                    "type": "string",
                    "minLength": 8,
                    "example": "Nueva123"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.recuperarContrasena"
      }
    },
    "/auth/reenviar-codigo": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "reenviarCodigo",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Nuevo código enviado si el correo existe y no está verificado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "mensaje": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno, por ejemplo fallo al enviar correo.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "correo"
                ],
                "properties": {
                  "correo": {
                    "type": "string",
                    "format": "email",
                    "example": "eruynmorales8@gmail.com"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.reenviarCodigo"
      }
    },
    "/auth/registro": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "registro",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Cuenta creada. Se envió código de verificación al correo.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "mensaje": {
                      "type": "string"
                    },
                    "tokenRegistro": {
                      "type": "string",
                      "description": "Token temporal para verificar el correo"
                    },
                    "expiraEnSegundos": {
                      "type": "number",
                      "example": 900
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Datos inválidos en el registro.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "El correo o documento ya están registrados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno, por ejemplo fallo al enviar correo.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "tipo_documento",
                  "numero_documento",
                  "correo",
                  "telefono",
                  "nombres",
                  "apellidos",
                  "genero",
                  "estado_civil",
                  "fecha_nacimiento",
                  "pais_nacimiento",
                  "departamento",
                  "municipio",
                  "direccion_detalle",
                  "password"
                ],
                "properties": {
                  "tipo_documento": {
                    "type": "string",
                    "enum": [
                      "DPI",
                      "PASAPORTE"
                    ],
                    "example": "DPI"
                  },
                  "numero_documento": {
                    "type": "string",
                    "minLength": 6,
                    "maxLength": 20,
                    "example": "3000000000002"
                  },
                  "correo": {
                    "type": "string",
                    "format": "email",
                    "example": "eruynmorales8@gmail.com"
                  },
                  "telefono": {
                    "type": "string",
                    "minLength": 8,
                    "maxLength": 20,
                    "example": "55555555"
                  },
                  "nombres": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80,
                    "example": "Eruyn"
                  },
                  "apellidos": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80,
                    "example": "Morales"
                  },
                  "genero": {
                    "type": "string",
                    "enum": [
                      "M",
                      "F"
                    ],
                    "example": "M"
                  },
                  "estado_civil": {
                    "type": "string",
                    "example": "SOLTERO"
                  },
                  "fecha_nacimiento": {
                    "type": "string",
                    "description": "Formato YYYY-MM-DD",
                    "example": "2003-01-15"
                  },
                  "pais_nacimiento": {
                    "type": "number",
                    "description": "ID del país",
                    "example": 1
                  },
                  "departamento": {
                    "type": "number",
                    "description": "ID del departamento",
                    "example": 1
                  },
                  "municipio": {
                    "type": "number",
                    "description": "ID del municipio",
                    "example": 1
                  },
                  "direccion_detalle": {
                    "type": "string",
                    "minLength": 10,
                    "example": "Barrio El Centro, Chiquimula"
                  },
                  "password": {
                    "type": "string",
                    "minLength": 8,
                    "example": "Prueba123"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.registro"
      }
    },
    "/auth/validar-documento": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "validarDocumento",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Valida documento y disponibilidad.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "valido": {
                      "type": "boolean"
                    },
                    "existe": {
                      "type": "boolean"
                    },
                    "mensaje": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "tipo_documento",
                  "numero_documento"
                ],
                "properties": {
                  "tipo_documento": {
                    "type": "string",
                    "enum": [
                      "DPI",
                      "PASAPORTE"
                    ],
                    "example": "DPI"
                  },
                  "numero_documento": {
                    "type": "string",
                    "example": "3000000000002"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.validarDocumento"
      }
    },
    "/auth/verificar-codigo-recuperacion": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "verificarCodigoRecuperacion",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Código de recuperación verificado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "mensaje": {
                      "type": "string",
                      "example": "Código verificado correctamente."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Código incorrecto, inválido o expirado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "correo",
                  "codigo"
                ],
                "properties": {
                  "correo": {
                    "type": "string",
                    "format": "email",
                    "example": "eruynmorales8@gmail.com"
                  },
                  "codigo": {
                    "type": "string",
                    "minLength": 6,
                    "maxLength": 6,
                    "example": "123456"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.verificarCodigoRecuperacion"
      }
    },
    "/auth/verificar-correo": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "verificarCorreo",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Correo verificado. Ya puede iniciar sesión.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "mensaje": {
                      "type": "string",
                      "example": "Correo verificado. Ya podés iniciar sesión."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Código incorrecto, inválido o expirado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Correo no encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "statusCode": {
                          "type": "number"
                        },
                        "name": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "correo",
                  "codigo"
                ],
                "properties": {
                  "correo": {
                    "type": "string",
                    "format": "email",
                    "example": "eruynmorales8@gmail.com"
                  },
                  "codigo": {
                    "type": "string",
                    "minLength": 6,
                    "maxLength": 6,
                    "example": "123456"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.verificarCorreo"
      }
    },
    "/candidatos/contrasena": {
      "patch": {
        "x-controller-name": "CandidatosController",
        "x-operation-name": "cambiarContrasena",
        "tags": [
          "CandidatosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Contraseña actualizada correctamente"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "passwordActual",
                  "passwordNueva"
                ],
                "properties": {
                  "passwordActual": {
                    "type": "string"
                  },
                  "passwordNueva": {
                    "type": "string",
                    "minLength": 8
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "CandidatosController.cambiarContrasena"
      }
    },
    "/candidatos/correo/confirmar": {
      "post": {
        "x-controller-name": "CandidatosController",
        "x-operation-name": "confirmarCambioCorreo",
        "tags": [
          "CandidatosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Correo actualizado correctamente"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "correoNuevo",
                  "codigo"
                ],
                "properties": {
                  "correoNuevo": {
                    "type": "string",
                    "format": "email"
                  },
                  "codigo": {
                    "type": "string",
                    "minLength": 6,
                    "maxLength": 6
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "CandidatosController.confirmarCambioCorreo"
      }
    },
    "/candidatos/correo/solicitar": {
      "post": {
        "x-controller-name": "CandidatosController",
        "x-operation-name": "solicitarCambioCorreo",
        "tags": [
          "CandidatosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Código enviado al nuevo correo"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "correoNuevo"
                ],
                "properties": {
                  "correoNuevo": {
                    "type": "string",
                    "format": "email"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "CandidatosController.solicitarCambioCorreo"
      }
    },
    "/candidatos/cv": {
      "post": {
        "x-controller-name": "CandidatosController",
        "x-operation-name": "subirCv",
        "tags": [
          "CandidatosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "CV subido correctamente"
                }
              }
            }
          }
        },
        "operationId": "CandidatosController.subirCv"
      },
      "get": {
        "x-controller-name": "CandidatosController",
        "x-operation-name": "getCv",
        "tags": [
          "CandidatosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Estado del CV del candidato"
                }
              }
            }
          }
        },
        "operationId": "CandidatosController.getCv"
      }
    },
    "/candidatos/perfil": {
      "patch": {
        "x-controller-name": "CandidatosController",
        "x-operation-name": "editarPerfil",
        "tags": [
          "CandidatosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Perfil actualizado correctamente"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "nombre": {
                    "type": "string"
                  },
                  "apellido": {
                    "type": "string"
                  },
                  "genero": {
                    "type": "string"
                  },
                  "estadoCivil": {
                    "type": "string"
                  },
                  "fechaNacimiento": {
                    "type": "string"
                  },
                  "telefono": {
                    "type": "string"
                  },
                  "paisId": {
                    "type": "number"
                  },
                  "departamentoId": {
                    "type": "number"
                  },
                  "municipioId": {
                    "type": "number"
                  },
                  "direccion": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "CandidatosController.editarPerfil"
      },
      "get": {
        "x-controller-name": "CandidatosController",
        "x-operation-name": "getPerfil",
        "tags": [
          "CandidatosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Perfil completo del candidato logueado"
                }
              }
            }
          }
        },
        "operationId": "CandidatosController.getPerfil"
      }
    },
    "/catalogos/departamentos": {
      "get": {
        "x-controller-name": "CatalogosController",
        "x-operation-name": "getDepartamentos",
        "tags": [
          "CatalogosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Lista de departamentos de Guatemala"
                }
              }
            }
          }
        },
        "operationId": "CatalogosController.getDepartamentos"
      }
    },
    "/catalogos/jornadas": {
      "get": {
        "x-controller-name": "CatalogosController",
        "x-operation-name": "getJornadas",
        "tags": [
          "CatalogosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Tipos de jornada laboral"
                }
              }
            }
          }
        },
        "operationId": "CatalogosController.getJornadas"
      }
    },
    "/catalogos/municipios/{deptoId}": {
      "get": {
        "x-controller-name": "CatalogosController",
        "x-operation-name": "getMunicipios",
        "tags": [
          "CatalogosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Municipios de un departamento"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "deptoId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "CatalogosController.getMunicipios"
      }
    },
    "/catalogos/paises": {
      "get": {
        "x-controller-name": "CatalogosController",
        "x-operation-name": "getPaises",
        "tags": [
          "CatalogosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Lista de países"
                }
              }
            }
          }
        },
        "operationId": "CatalogosController.getPaises"
      }
    },
    "/catalogos/periodicidades": {
      "get": {
        "x-controller-name": "CatalogosController",
        "x-operation-name": "getPeriodicidades",
        "tags": [
          "CatalogosController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Periodicidades de salario"
                }
              }
            }
          }
        },
        "operationId": "CatalogosController.getPeriodicidades"
      }
    },
    "/ping": {
      "get": {
        "x-controller-name": "PingController",
        "x-operation-name": "ping",
        "tags": [
          "PingController"
        ],
        "responses": {
          "200": {
            "description": "Ping Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PingResponse"
                }
              }
            }
          }
        },
        "operationId": "PingController.ping"
      }
    },
    "/postulaciones/disponibilidad/{vacanteId}": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "disponibilidadPostulacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Validar si el candidato puede postularse a una vacante"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "vacanteId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.disponibilidadPostulacion"
      }
    },
    "/postulaciones/mias": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "misPostulaciones",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Mis postulaciones"
                }
              }
            }
          }
        },
        "operationId": "PostulacionesController.misPostulaciones"
      }
    },
    "/postulaciones/{id}/cancelar": {
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "cancelarMiPostulacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Compatibilidad: eliminar postulación pendiente antes de revisión"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "motivo": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": false,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.cancelarMiPostulacion"
      }
    },
    "/postulaciones/{id}/referencias": {
      "post": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "guardarMisReferencias",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Guardar referencias personales y laborales desde portal candidato"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "ReferenciasPostulacionController.guardarMisReferencias"
      },
      "patch": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "actualizarMisReferencias",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Actualizar referencias desde portal candidato"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "ReferenciasPostulacionController.actualizarMisReferencias"
      },
      "get": {
        "x-controller-name": "ReferenciasPostulacionController",
        "x-operation-name": "obtenerMisReferencias",
        "tags": [
          "ReferenciasPostulacionController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Consultar referencias de la postulación desde portal candidato"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ReferenciasPostulacionController.obtenerMisReferencias"
      }
    },
    "/postulaciones/{id}/solicitud": {
      "post": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "guardarSolicitud",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Crear o guardar solicitud de empleo"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.guardarSolicitud"
      },
      "patch": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "actualizarSolicitud",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Actualizar solicitud de empleo"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "PostulacionesController.actualizarSolicitud"
      },
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "obtenerSolicitud",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Solicitud de empleo de mi postulación"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.obtenerSolicitud"
      }
    },
    "/postulaciones/{id}": {
      "get": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "detalleMiPostulacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Detalle de mi postulación"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.detalleMiPostulacion"
      },
      "delete": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "eliminarMiPostulacion",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Eliminar una postulación que aún no ha sido revisada"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PostulacionesController.eliminarMiPostulacion"
      }
    },
    "/postulaciones": {
      "post": {
        "x-controller-name": "PostulacionesController",
        "x-operation-name": "postular",
        "tags": [
          "PostulacionesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Crear postulación del candidato logueado"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "vacanteId"
                ],
                "properties": {
                  "vacanteId": {
                    "type": "number"
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "PostulacionesController.postular"
      }
    },
    "/vacantes/{id}": {
      "get": {
        "x-controller-name": "VacantesController",
        "x-operation-name": "getVacanteById",
        "tags": [
          "VacantesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Detalle de una vacante"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "VacantesController.getVacanteById"
      }
    },
    "/vacantes": {
      "get": {
        "x-controller-name": "VacantesController",
        "x-operation-name": "getVacantes",
        "tags": [
          "VacantesController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Listado de vacantes publicadas"
                }
              }
            }
          }
        },
        "operationId": "VacantesController.getVacantes"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Ingresá el token JWT obtenido desde POST /auth/login"
      }
    },
    "schemas": {
      "PingResponse": {
        "type": "object",
        "title": "PingResponse",
        "properties": {
          "greeting": {
            "type": "string"
          },
          "date": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "headers": {
            "type": "object",
            "properties": {
              "Content-Type": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        }
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://rrhh.corporacionsalom.com"
    }
  ]
}