Academia Deltamontero · Documentación
Desarrollolocal_deltamodules

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():

ClaveCargoPerfil (rol)Cohorte
sociosSociosdelta_sociosCargo: Socios
ger_opsGerencia de Operacionesdelta_gerentesCargo: Gerencia de Operaciones
ger_proyGerencia de Proyectosdelta_gerentesCargo: Gerencia de Proyectos
ger_backofficeGerencia de Back Officedelta_gerentesCargo: Gerencias de Back Office
tesoreraTesoreradelta_operativo_backofCargo: Tesorera
gte_sistemasGerente de Sistemasdelta_a1_operacionesCargo: Gerente de Sistemas
jefe_soporteJefe de Soportedelta_jefatura_tecnicaCargo: Jefe de Soporte
jefe_desarrolloJefe de Desarrollodelta_jefatura_tecnicaCargo: Jefe de Desarrollo
asist_desarrolloAsistente Desarrolladordelta_operativo_tecnicoCargo: Asistentes Desarrolladores
jefe_thJefe de Talento Humanodelta_jefaturasCargo: Jefe de Talento Humano
asist_thAsistente de Talento Humanodelta_a2_rrhhCargo: Asistente de Talento Humano
contadoraContadora General / Líder de Equipodelta_a3Cargo: Contadoras Generales / Líderes
asist_contableAsistente Contabledelta_operativoCargo: Asistentes Contables
pasantePasantedelta_pasanteCargo: Pasantes
mensajeroMensajerodelta_auxiliaresCargo: Mensajero
aux_limpiezaAuxiliar de Limpiezadelta_auxiliaresCargo: 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):

TipoRegla (en este orden)
adminSuper administrador, la cuenta de servicio mcpservice o autenticación nologin
postulanteCohorte candidatos y sin la preferencia local_candenrol_hired
clienteCohorte clientes (en ese caso el "cargo" muestra sus empresas cli_*)
pasanteÚnica cohorte de cargo cargo_pasantes
colaboradorCualquier otra cohorte de cargo, o postulante incorporado
sinclasificarSin cargo ni grupo

Devuelve además cargo, área (campo de perfil area) y equipo.

MétodoQué 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áginaCapacidadQué hace
people.php (Usuarios → Personal Deltamontero)moodle/user:updateLista 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:updateFormulario 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:viewalldetailsDatos, 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:updateContraseñ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.phpSesión iniciadaPrimer 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:createVer 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.

En esta página