Staff
Employees, roles, schedules and time-off requests.
Modules are installed from your Hub's marketplace. Sign up for a Hub to access this module.
Módulo staff — personal, roles, horarios y ausencias
Módulo HR base del Hub (sin dependencias): ficha laboral del empleado, rol de catálogo (estilista, barbero…), horarios semanales, ausencias con flujo de aprobación y datos de compensación (tarifa/comisión).
⚠️
staffNO sustituye a la identidad del core (ADR-0192). Elhub_userresponde a quién entra y su rol concede permisos;staff_memberresponde a quién trabaja y sustaff_rolees solo una etiqueta de catálogo con color y orden.staff_member.user_ides la costura, y es opcional en los dos sentidos.Module id:
staff. Depende de: nada (depends_on: []). Es dependencia deappointments. Módulo híbrido: SQL + handler WASM (4 funciones).
Documentación de usuario — docs/
Viaja dentro del módulo y se versiona con él: el asistente del hub (ADR-0282) la indexa por versión instalada y cita la de TU versión, no la de la última publicada. En inglés (idioma fuente).
| Fichero | Para qué |
|---|---|
docs/overview.md |
Qué hace y qué NO hace; staff ≠ usuarios del hub; por qué la privacidad está en las queries |
docs/screens.md |
Staff / Roles / Time Off / Horarios y el cierre del día por profesional |
docs/concepts.md |
El rol de staff no concede nada, desactivar vs terminar, null vs '' al desvincular, no hay fichajes |
docs/limits.md |
Guardas que rechazan con código (staff#1), caps, permisos por acción y diagnóstico |
Privacidad por query (staff#10)
employee tiene view_staff_member y view_time_off por defecto, así que la compensación y el
motivo de una ausencia se sacaron de las listas y viven detrás de sus propios permisos:
| Dato | Query | Permiso |
|---|---|---|
| Tarifa hora y % comisión | staff.members.compensation |
staff.view_compensation |
| Motivo y notas de una ausencia (dato de salud) | staff.time_off.detail |
staff.view_time_off_detail |
No están tampoco en sort/filters: un filtro de rango sobre un valor invisible es un oráculo.
Self-service (staff#19): el empleado sí ve LO SUYO — staff.members.mine (su ficha con su
tarifa y comisión) y staff.time_off.mine (sus ausencias con motivo y notas) — con los permisos de
siempre: el alcance lo cierra WHERE user_id = :current_user_id (inyectado por el runtime, ADR-0192),
no un permiso más ancho.
Qué expone hoy
| Tipo | Nombre | Permiso |
|---|---|---|
| query | staff.members.list / .get / .stats / .mine (self-service) · staff.roles.list · staff.schedules.list_for_member · staff.settings.get |
view_staff_member |
| query | staff.services.list_for_member · staff.services.eligible_for_service (la que consume la agenda por reads) |
view_staff_member |
| query | staff.schedules.hours_for_member · staff.schedules.get · staff.availability.for_member (horario vigente − ausencias aprobadas; la autoridad de «cuándo puede trabajar», staff#2) |
view_staff_member |
| query | staff.members.compensation · staff.commissions.summary |
view_compensation |
| query | staff.time_off.list / .today / .mine (self-service) |
view_time_off |
| query | staff.time_off.detail |
view_time_off_detail |
| command | staff.members.create / .bulk_create (WASM, cap 100) |
add_staff_member |
| command | staff.members.update · staff.services.assign / .update / .remove (competencias por servicio, staff#9) |
change_staff_member |
| command | staff.members.deactivate (WASM, guarda por ausencias vivas) / .delete (baja: fecha + motivo, expect_rows; el ÚNICO camino a terminated, staff#4) |
delete_staff_member |
| command | staff.time_off.create (WASM, invariante de solape) / .set_status |
manage_time_off |
| command | staff.roles.create · staff.schedules.create / .update (WASM, sustituye la semana) · .set_active / .delete · staff.settings.update |
manage_settings |
| emite | staff.member.*, staff.role.created, staff.time_off.*, staff.schedule.*, staff.service.*, staff.settings.updated |
— |
| escucha | — (bloque declarado pero vacío) | — |
Navegación: erp-staff-members, erp-staff-roles, erp-staff-time-off, erp-staff-schedules;
ajustes declarativos (ADR-0082).
Layout
module.json # manifest (contrato técnico)
migrations/postgres/ # esquema §2.5 (hub_id + soft-delete + auditoría)
queries/*.sql # lecturas declarativas (:hub_id inyectado)
commands/*.sql # escrituras declarativas (las `_` son intenciones del WASM)
schemas/*.json # JSON Schemas de input (draft 2020-12)
handler/ # WASM Tier 2 → dist/handler.wasm
ui/ # Web Components (Lit/Ionic/OutfitKit)
docs/ # documentación de usuario + corpus del asistente
Estado y trabajo abierto
El estado vive en las Issues de este repo, no aquí. Limitaciones documentadas en
docs/limits.md: no hay control horario/fichajes (por eso no hay widget de fichajes — cero
mocks) y no hay nómina. Las guardas de deactivate/time_off.create/schedules.create/
time_off.set_status son autoritativas (staff#1): el handler decide sobre context.reads y un
rechazo es un error de dominio (staff.*) — ni fila ni evento; el SQL condicional queda solo como
defensa en profundidad.
Doc de arquitectura: architecture/modules/staff.md (cargarlo antes de tocar el módulo).
Sign in to leave a review
Share your experience with this module
User Reviews
No reviews yet
Be the first to review this module
chore(release): v2.2.22
chore(release): v2.2.21
chore(release): v2.2.20
chore(release): v2.2.19
chore(release): v2.2.18
chore(release): v2.2.17
chore(release): v2.2.16
chore(release): v2.2.15
chore(release): v2.2.14
chore(release): v2.2.13
chore(release): v2.2.12
chore(release): v2.2.11
chore(release): v2.2.10
chore(release): v2.2.9
chore(release): v2.2.8
chore(release): v2.2.7
chore(release): v2.2.6
chore(release): v2.2.5
chore(release): v2.2.4
chore(release): v2.2.3
Related Modules
Business opening hours, special days and schedule overrides.