Informe Técnico Exhaustivo

Sistema de Bolsa de Trabajo

1. Visión General y Arquitectura del Sistema
Propósito

El sistema es una plataforma de Bolsa de Trabajo diseñada para conectar a profesionales (candidatos) que buscan empleo con administradores o reclutadores. Permite a los candidatos registrarse, construir un perfil profesional detallado (incluyendo datos personales, formación, experiencia y documentos de respaldo) y a los administradores gestionar, valorar y contactar a estos candidatos.

Arquitectura

La aplicación sigue una arquitectura web clásica basada en PHP y MySQL. La lógica se divide en tres componentes principales:

  • Portal Público (index.php): Punto de entrada para el registro y acceso de usuarios.
  • Panel de Usuario (perfil.php): Área privada donde los candidatos gestionan toda la información de su perfil una vez que inician sesión.
  • Panel de Administración (admin_postulaciones.php): Interfaz protegida por contraseña para la gestión, visualización y comunicación con los candidatos registrados.

El sistema utiliza sesiones de PHP ($_SESSION) para manejar la autenticación de usuarios y mantener el estado entre las diferentes páginas.

2. Flujos de Proceso Principales
Flujo de Registro de un Nuevo Candidato
  1. El usuario accede a index.php y completa el formulario de registro.
  2. El script valida los datos y crea un registro en la tabla bolsa_usuarios_temp con un código de verificación y una fecha de expiración.
  3. Se envía un correo de verificación al email del usuario (enviarCorreoVerificacion()).
  4. El usuario ingresa el código recibido. El script lo valida contra la tabla bolsa_usuarios_temp.
  5. Si el código es correcto y no ha expirado, el script crea el registro final en bolsa_usuarios y un perfil básico en bolsa_perfiles_profesionales, y elimina el registro temporal.
Flujo de Gestión de Perfil
  1. Un usuario inicia sesión a través de index.php, lo que crea una sesión ($_SESSION['bolsa_id']).
  2. Es redirigido a perfil.php, que actúa como un panel de control con pestañas.
  3. El usuario navega por las pestañas para añadir o editar su "Información Personal", "Formación Académica", "Experiencia Laboral" y "Documentos".
  4. Cada sección tiene su propio formulario. Al guardar, los datos se envían a perfil.php (usando POST) y se ejecutan las sentencias INSERT o UPDATE en las tablas correspondientes.
Flujo de Administración
  1. El administrador accede a admin_postulaciones.php e ingresa una clave de acceso (hardcodeada en el script).
  2. Una vez dentro, puede ver un listado de todos los profesionales, con un resumen de su perfil y su estado de completitud.
  3. Desde el listado, puede:
    • Ver Detalles: Accede a una vista completa del perfil del usuario.
    • Verificar y Notificar: Es redirigido a verificar_perfil.php, donde se genera un correo para notificar al usuario sobre el estado de su perfil (completo o incompleto).
    • Valorar: Abre un modal para calificar al candidato, guardando la información en bolsa_valoraciones a través de guardar_valoracion.php.
    • Cambiar Estado: Modifica interactivamente el estado del usuario ('activo', 'inactivo', 'pendiente') a través de una llamada AJAX a cambiar_estado.php.
3. Estructura de Directorios y Archivos Clave

Basado en el análisis de los archivos, la estructura de directorios del proyecto es la siguiente:

(raíz del proyecto)/ └── bolsa/ ├── admin_postulaciones.php ├── index.php ├── perfil.php ├── logout.php ├── acceso_directo.php ├── verificar_perfil.php ├── enviar_correo.php ├── guardar_valoracion.php ├── cambiar_estado.php ├── crea_sql.php ├── include/ │ └── conecta_mysql.php ├── uploads/ │ ├── perfiles/ │ └── documentos/ └── img/ └── usuario_default.png
Rutas de Carga de Archivos
  • Fotos de Perfil: Se guardan en la ruta uploads/perfiles/. El script genera un nombre de archivo único para cada foto.
  • Documentos de Candidatos: Se guardan en uploads/documentos/, también con nombres de archivo únicos para evitar conflictos.
4. Análisis Detallado de la Base de Datos

El corazón del sistema es su base de datos. A continuación se detallan las tablas, sus campos y el propósito de cada uno dentro del flujo de la aplicación.

Tabla: bolsa_usuarios

Almacena la información fundamental de cada cuenta de usuario.

CampoTipoDescripción y Objetivo
idINTIdentificador único para cada usuario.
emailVARCHARCorreo electrónico del usuario. Se usa para el login y es un campo único.
passwordVARCHARContraseña del usuario, almacenada de forma segura usando password_hash().
nombre_completoVARCHARNombre completo del usuario.
telefonoVARCHARNúmero de teléfono de contacto.
rutVARCHARRUT del usuario, para identificación local.
fecha_registroDATETIMEFecha y hora en que se creó la cuenta.
ultimo_accesoDATETIMERegistra la última vez que el usuario inició sesión.
estadoENUMDefine el estado de la cuenta: 'activo', 'inactivo', 'pendiente'. Es gestionado por el administrador.
tipo_usuarioENUMDefine el rol del usuario: 'profesional', 'empresa', 'admin'.

Tabla: bolsa_perfiles_profesionales

Contiene la información detallada que complementa el perfil de un profesional.

CampoTipoDescripción y Objetivo
id_usuarioINTVincula este perfil con un registro en bolsa_usuarios.
fecha_nacimiento, direccion, comuna, ciudad, regionDATE/VARCHARDatos demográficos y de ubicación del profesional.
profesion, tituloVARCHARCampos para la profesión y título oficial. Clave para búsquedas.
resumenTEXTUn párrafo extenso donde el candidato describe sus habilidades y experiencia.
aspiracion_salarialINTExpectativa de sueldo del candidato.
disponibilidadENUMIndica la disponibilidad del candidato ('inmediata', 'plazo', 'a definir').
foto_perfil, linkedin, sitio_webVARCHARAlmacenan las rutas a la foto y enlaces a perfiles externos.

Tabla: bolsa_formacion_academica y bolsa_experiencia_laboral

Tablas estructuradas para registrar el historial académico y laboral, respectivamente. Ambas se vinculan con id_usuario y permiten añadir múltiples registros por cada candidato.

Tabla: bolsa_documentos

Gestiona los archivos que los candidatos suben para respaldar su perfil.

CampoTipoDescripción y Objetivo
id_usuarioINTVincula el documento al usuario propietario.
tipoENUMClasifica el documento: 'cv', 'certificado', 'titulo', 'carta', 'otro'.
nombreVARCHARNombre descriptivo que el usuario le da al archivo.
ruta_archivoVARCHARGuarda la ruta física del archivo en el servidor.

Otras Tablas Relevantes

  • bolsa_usuarios_temp: Tabla de paso para el proceso de registro con verificación por correo.
  • bolsa_envio_correo: Un log de todos los correos enviados desde el sistema, útil para auditoría.
  • bolsa_valoraciones: Almacena las calificaciones y comentarios que los administradores asignan a los postulantes.
5. Lógicas Clave y Consideraciones
Colores Corporativos

El diseño visual se basa en los colores estándar de Bootstrap y una paleta personalizada visible en los componentes principales:

Consideraciones de Seguridad
  • Contraseñas: El sistema utiliza correctamente password_hash() y password_verify(), lo cual es una práctica segura y estándar para el manejo de contraseñas.
  • Inyección SQL: Se utiliza $mysqli->real_escape_string() en la mayoría de los casos para prevenir ataques de inyección SQL. Se recomienda estandarizar su uso o migrar a consultas preparadas para una seguridad aún mayor, como se ve en enviar_correo.php.
  • Acceso de Administrador: La clave de acceso al panel de administración (admin_postulaciones.php) está hardcodeada en el archivo ($clave_acceso = "castillo2727"). Esto es un riesgo de seguridad crítico. Se debe cambiar inmediatamente y, a futuro, implementar un sistema de roles desde la base de datos para los usuarios tipo 'admin'.
Cuidados al Replicar y Mantener
  • Permisos de Directorio: Es fundamental asegurarse de que el servidor web tenga permisos de escritura sobre las carpetas uploads/perfiles/ y uploads/documentos/ para que la subida de archivos funcione correctamente.
  • Configuración de Correo: La función mail() de PHP depende de la configuración del servidor. Para que el envío de correos de verificación funcione, el servidor debe estar configurado como un servidor de correo o tener un relay SMTP configurado en el `php.ini`.
  • Dependencias Externas: El sistema utiliza librerías externas como Bootstrap y Bootstrap Icons a través de un CDN. Requiere conexión a internet para cargar los estilos y los iconos correctamente.
Guía para Replicar el Sistema
  1. Base de Datos: Ejecutar el script crea_sql.php en el servidor. Este archivo verificará y creará todas las tablas necesarias para el funcionamiento del sistema.
  2. Estructura de Archivos: Subir todos los archivos PHP a una carpeta en el servidor (ej. bolsa/) y asegurarse de que las subcarpetas uploads/perfiles/ y uploads/documentos/ existan y tengan permisos de escritura.
  3. Configuración: Editar el archivo include/conecta_mysql.php con las credenciales correctas de acceso a la base de datos (servidor, usuario, contraseña, nombre de la base de datos).
  4. Seguridad Crítica: Modificar la contraseña hardcodeada en admin_postulaciones.php por una clave segura.