Personas y perfiles
Tipos de persona, cargos, perfiles (roles), importación del personal desde Excel, edición, contraseñas e historial.
La gestión de personas se reparte entre local_deltamodules (clases people y people_import, páginas de Personal Deltamontero) y local_candidate_enrollment (clase staff_manager y formulario staff_form, que definen los cargos y crean colaboradores). Ver también local_candidate_enrollment.
Cargos, perfiles y cohortes
Un cargo une tres cosas: una etiqueta, un perfil (rol de sistema delta_*) y una cohorte de cargo ("Cargo: …", idnumber cargo_*) que matricula la ruta de módulos. El catálogo es local_candidate_enrollment\form\staff_form::cargos():
| Clave | Cargo | Perfil (rol) | Cohorte |
|---|---|---|---|
socios | Socios | delta_socios | Cargo: Socios |
ger_ops | Gerencia de Operaciones | delta_gerentes | Cargo: Gerencia de Operaciones |
ger_proy | Gerencia de Proyectos | delta_gerentes | Cargo: Gerencia de Proyectos |
ger_backoffice | Gerencia de Back Office | delta_gerentes | Cargo: Gerencias de Back Office |
tesorera | Tesorera | delta_operativo_backof | Cargo: Tesorera |
gte_sistemas | Gerente de Sistemas | delta_a1_operaciones | Cargo: Gerente de Sistemas |
jefe_soporte | Jefe de Soporte | delta_jefatura_tecnica | Cargo: Jefe de Soporte |
jefe_desarrollo | Jefe de Desarrollo | delta_jefatura_tecnica | Cargo: Jefe de Desarrollo |
asist_desarrollo | Asistente Desarrollador | delta_operativo_tecnico | Cargo: Asistentes Desarrolladores |
jefe_th | Jefe de Talento Humano | delta_jefaturas | Cargo: Jefe de Talento Humano |
asist_th | Asistente de Talento Humano | delta_a2_rrhh | Cargo: Asistente de Talento Humano |
contadora | Contadora General / Líder de Equipo | delta_a3 | Cargo: Contadoras Generales / Líderes |
asist_contable | Asistente Contable | delta_operativo | Cargo: Asistentes Contables |
pasante | Pasante | delta_pasante | Cargo: Pasantes |
mensajero | Mensajero | delta_auxiliares | Cargo: Mensajero |
aux_limpieza | Auxiliar de Limpieza | delta_auxiliares | Cargo: Auxiliar de Limpieza |
Las cohortes y sus matrículas las crea create-training-paths.php; los roles, rebuild-roles-per-manual.php; los permisos de cada perfil se ajustan en cada despliegue con align-access-profiles-to-manual.php, align-gerencia-to-manual.php, enforce-course-creation-manual.php y enforce-real-quiz-attempts.php (ver Scripts de configuración).
Las áreas (campo de perfil de usuario area, creado por create-user-area-field.php) son las de staff_form::areas(): Dirección / Gerencia, Operaciones Contable, Comercial, Sistemas y Desarrollo, Talento Humano, Tesorería / Back Office, Servicios Generales.
Cargos de gestión
staff_manager::PRIVILEGED_CARGOS (socios, ger_ops, ger_proy, ger_backoffice, jefe_th, gte_sistemas) solo los asigna el super administrador (staff_manager::assignable_cargos()). Nadie se asigna un cargo a sí mismo. staff_manager::is_privileged($user) marca como "cuenta de gestión" a un super administrador, a quien tenga un perfil de PRIVILEGED_ROLES o alguna capacidad de PRIVILEGED_CAPS; a esas cuentas no se les restablece la contraseña por autoservicio, ni desde el chat, ni en "Restablecer contraseñas", y solo el super administrador las elimina o les cambia el cargo.
Asignar un cargo: staff_manager::assign_cargo()
Guarda el área, asigna el rol del cargo en contexto de sistema, agrega a la cohorte del cargo y a "Todo el equipo Deltamontero" (delta_todos, que da el curso de Introducción), sincroniza las matrículas por cohorte y aplica el nivel de IA del perfil (ai_tiers::apply_user). Lo comparten "Crear colaborador", "Incorporar al equipo", "Agregar al personal", la importación de Excel y el agente de IA.
Tipos de persona (people)
people::all($withsuspended) calcula el tipo de cada cuenta (no se escribe a mano):
| Tipo | Regla (en este orden) |
|---|---|
admin | Super administrador, la cuenta de servicio mcpservice o autenticación nologin |
postulante | Cohorte candidatos y sin la preferencia local_candenrol_hired |
cliente | Cohorte clientes (en ese caso el "cargo" muestra sus empresas cli_*) |
pasante | Única cohorte de cargo cargo_pasantes |
colaborador | Cualquier otra cohorte de cargo, o postulante incorporado |
sinclasificar | Sin cargo ni grupo |
Devuelve además cargo, área (campo de perfil area) y equipo.
| Método | Qué hace |
|---|---|
clients_cohort() | Devuelve (o crea) la cohorte general "Clientes" (idnumber clientes). |
add_staff($userid, $cargo, $area) | Agrega al personal una cuenta sin clasificar o de cliente: delta_todos, sale de "Clientes" y assign_cargo. |
change_cargo($userid, $cargo) | Saca de las cohortes de cargo y de los roles delta_* de sistema y asigna el nuevo cargo; conserva equipo, área e historial. |
remove_staff($userid) | Quita cargo, perfiles delta_*, delta_todos y equipo (queda "Sin clasificar"); no se puede si lidera un equipo. |
can_delete($u), delete_user($userid) | Eliminar una cuenta desde Personal: exige local/deltamodules:managepeople y moodle/user:delete; nunca la propia, un super administrador, el invitado, mcpservice, una cuenta de gestión (salvo el super administrador) ni un líder de equipo. |
set_client($userid, $on) | Marca o quita a una persona de la cohorte "Clientes". |
cargo_key($userid) | Clave del cargo actual. |
USERNAME_FIXES, fix_usernames() | Tabla de nombres de usuario definitivos revisados por Talento Humano, con la forma "usuario definitivo => nombres anteriores conocidos" (no usa cédulas). Solo renombra una cuenta del personal (con cédula registrada) cuyo usuario actual es uno de los nombres anteriores, y solo si el usuario definitivo está libre; así no pisa un cambio hecho después a mano. La aplican rename-usernames.php en cada despliegue y la importación de Excel al terminar. |
password_updated($event) | Observador de \core\event\user_password_updated: cuando la cuenta admin cambia su contraseña, apaga el aviso alert_admin_defaultpass (ver Eventos y observadores). |
people::USERNAME_FIXES ya no contiene cédulas: el nombre de usuario anterior identifica la cuenta. Para una cuenta nueva no hace falta tocarlo; si se corrige un nombre de usuario en el futuro, conviene hacerlo desde la plataforma (Personal Deltamontero → Editar).
Importar el personal desde Excel (people_import)
Página people_import.php (Usuarios → Cuentas → Importar personal desde Excel, capacidad local/deltamodules:managepeople) y CLI php /import-personnel.php archivo.xlsx [--apply] [--delete=all] [--credentials=archivo.csv].
Leer: parse($path)
Una hoja con columnas Apellidos y nombres, Cédula, Cargo y Grupo; las filas sin cédula (títulos de grupo) se ignoran. Una cédula de 9 dígitos recupera el 0 inicial que Excel pierde.
Vista previa: plan($rows)
Busca la cuenta por cédula o por nombre (todas las palabras del nombre de la cuenta deben estar en la fila, con tolerancia de una letra en palabras largas). Traduce el cargo del Excel con CARGO_MAP (los que el manual no define se asignan por aproximación y se marcan como provisionales, PROVISIONAL) y el grupo con AREA_MAP (las letras A, B, C… son equipos de Operaciones Contable). Lista las cuentas que no están en el Excel (salvo super administradores, mcpservice, nologin, postulantes, clientes y, si quien importa no es super administrador, la propia y las de gestión).
Aplicar: apply($plan, $cargos, $delete)
A las cuentas existentes no les cambia el cargo si ya tienen uno: solo agrega cédula, cargo si no tenía y área si estaba vacía. Crea las cuentas nuevas con usuario = iniciales de los nombres + primer apellido (username_for), contraseña temporal y cambio obligatorio. Arma los equipos Grupo X con la Contadora-Líder como líder (team::save). Elimina solo las cuentas fuera del listado que se confirmen. Al final aplica people::fix_usernames(). Devuelve el registro y las credenciales nuevas, que la página muestra una sola vez (con descarga en Excel) y la CLI solo escribe en el archivo de --credentials.
Completar correos del personal
staffemails.php (capacidad local/deltamodules:managepeople) usa people_import::parse_emails() (busca en las 10 primeras filas los títulos "nombre" y "correo"/"email"; si no, A = nombre y B = correo), email_plan() (estados fill, same, different, taken, nomatch, solo sobre colaboradores y pasantes) y email_apply(). Solo completa a quien no tiene correo; un correo distinto se cambia únicamente si se marca. Ningún correo queda guardado en archivos.
Otras pantallas de personas
| Página | Capacidad | Qué hace |
|---|---|---|
people.php (Usuarios → Personal Deltamontero) | moodle/user:update | Lista por tipo con conteos, búsqueda y descarga; acciones por POST: marcar o quitar cliente, agregar al personal (con moodle/user:create), quitar del personal, eliminar (con managepeople y moodle/user:delete). |
edituser.php?id=…&return=… | moodle/user:update | Formulario reducido: nombres, apellidos, usuario, correo, cédula, tipo, cargo, área y nueva contraseña. Usa la lógica de people. Las cuentas de super administrador y de servicio van al formulario de Moodle. Al volver del perfil, hook_callbacks regresa a la pantalla de origen ($SESSION->deltaeditreturn, válido una hora). |
history.php?id=… (Personal → Historial) | moodle/user:viewalldetails | Datos, resumen, cada módulo (origen, avance, repasos), certificados con su código, prueba técnica y correos enviados. |
resetpasswords.php (Personal → Restablecer contraseñas) | local/deltamodules:managepeople y moodle/user:update | Contraseña distinta por persona (recomendado, generate_temp_password) o la misma para todas (validada con la política); cambio obligatorio al entrar; credenciales visibles una sola vez con descarga. Nunca super administradores, cuentas de servicio, la propia, postulantes ni, si no es super administrador, cuentas de gestión. |
completeprofile.php | Sesión iniciada | Primer ingreso de una cuenta sin correo: pide solo el correo (en lugar del formulario completo del perfil). hook_callbacks redirige aquí desde /user/edit.php cuando el usuario edita su propio perfil, no tiene correo y ya cambió la contraseña temporal. |
/local/candidate_enrollment/create_staff.php (Usuarios → Cuentas → Crear colaborador) | moodle/user:create | Ver local_candidate_enrollment. |
La lista de usuarios nativa de Moodle (/admin/user.php) muestra un aviso con un botón a Personal Deltamontero (JavaScript en additionalhtmlhead). Las cohortes de Moodle (/cohort/…) redirigen a Personal para quien no es super administrador.
Acceso a módulos
Quién ve cada módulo y por qué, con matrículas nativas de Moodle por cargo, por empresa cliente o individuales, y la tabla de exclusiones.
Equipos
Equipos de seguimiento (líder e integrantes) con el rol "Líder de equipo" asignado en contexto de usuario, la página team.php y la tarjeta del Área personal.