Barra igual a la del Calendario (Hoy, anterior/siguiente, mes y ano; vista a la
derecha), vista Mes por defecto y aviso cuando no hay medicos configurados (antes
la vista Dia quedaba vacia).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Vista Mes tipo calendario (componente reutilizable MonthGrid) y vista Semana con
las citas de todos los medicos filtrados, coloreadas por medico; leyenda de
colores y vista elegida persistida.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Modulo clinic (habilitado por usuario): citas de pacientes para medicos con choques
bloqueantes (medico, paciente con cualquier medico, quirofano/bloqueos recurrentes y
horario de atencion), validados en transaccion con bloqueo de filas para que dos
recepcionistas no tomen el mismo hueco. Recepcion (alcance todos) y medico (alcance
propio). Vista Dia por columnas de medico, Semana y Lista; pacientes con historial;
bloqueos; configuracion de personal, horarios y tipos solo admin/superadmin. Capa de
citas en el calendario personal del medico. Migracion 036.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
El usuario solicita el cambio desde Mi cuenta (correo nuevo + clave actual). Lo
aprueba un admin/superadmin (colaboradores), solo un superadmin (admins) o el propio
superadmin mediante enlace a su correo actual. Tras aprobar se envia confirmacion al
correo nuevo y aviso al actual; al confirmar se aplica el cambio y se cierran todas
las sesiones. Todo el proceso queda en auditoria. Migracion 035.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Calendario personal para todos los roles: reuniones que organizo o me invitaron,
proyectos donde soy dueno/miembro, actividades y tareas donde soy responsable y
tareas recurrentes creadas o compartidas conmigo (solo lectura si no soy el creador).
Filtros Ver (Todo / Solo lo mio / Compartido conmigo) y Mostrar (lista de tipos con
Todo); colores por tipo, vencidos en rojo, compartido marcado con franja.
La pestana Calendario del proyecto muestra todas sus reuniones vinculadas.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Menu Calendario (Mes/Semana/Dia/Agenda) para agendar reuniones con participantes
internos y externos, RSVP, vinculo a proyecto, vencimientos de actividades,
invitaciones iCalendar por correo, recurrencia con excepciones, recordatorios
in-app y aviso de choques. Migracion 034_meetings.sql.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Permisos (superadmin, viewer, busqueda, tareas recurrentes), bootstrap atomico,
revocacion de JWT por version de sesion (028), control optimista de edicion (029),
logo sin SVG + CSP, ingesta endurecida, correos escapados, borradores, paginacion
de proyectos, accesibilidad de dialogos/controles e i18n.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Desplegable con casillas junto al titulo para mostrar/ocultar cada tarjeta,
persistido por usuario en localStorage.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
El detalle vive en los popups de las tarjetas; se elimina tambien la consulta
myPendingActivities del backend, que quedaba sin uso.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Las 7 tarjetas abren su lista en un DetailPopup (proyectos o actividades segun
la tarjeta); el bloque "Mis actividades" queda fijo. Nuevas listas de proximos
a vencer y para hoy; "Para hoy" deja de contar eliminadas/cancelados.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base = actividades no eliminadas, no canceladas y de proyectos no cancelados;
el conteo de vencidas usa el mismo criterio (antes incluia eliminadas).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base = actividades no eliminadas de proyectos no cancelados; el conteo de
pendientes pasa a usar el mismo criterio (antes incluia eliminadas).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Porcentaje de activos sobre el total sin cancelados, "N de M" y lista de
proyectos activos al hacer clic. La lista de detalle pasa a un componente
compartido con "Proyectos atrasados".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
La tarjeta muestra un medidor semicircular (atrasados/activos) con el valor al
centro; al hacer clic, el bloque inferior lista los proyectos atrasados en vez
de mis actividades. Por ahora solo esta tarjeta.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reemplaza el checkbox "Ocultar proyectos 100%" para cubrir tambien "solo 100%"
sin combinaciones contradictorias. Persistido en localStorage; migra el valor
del checkbox anterior.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contraseñas: el cierre automatico ahora es por inactividad (no saca al usuario a medio escribir),
token de desbloqueo renovable y contador visible junto al titulo. Equipos: GUID como componente.
Sube la version para que el panel de Actualizaciones ofrezca los cambios 2.15.0 -> 2.16.0
(migraciones 025 y 026, instalador del agente y pestaña Compartir).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Admin/superadmin dan acceso de solo lectura (Resumen, Equipos, Software) a otros usuarios;
el backend valida el acceso en cada endpoint y el menu aparece solo a quien lo tenga.
Migracion 026 (device_viewers).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Instalador .bat generado en el navegador, casilla para ocultar actualizaciones/drivers/componentes
en Software, buscador por pestaña en el detalle, GUIDs como componentes y tokens de ingesta
cifrados (migraciones 024 y 025).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Ingesta POST /api/inventory (JSON/XML, token de instalacion), upsert por deviceid,
historial de cambios, pestañas Resumen/Equipos/Software/Agentes, detalle con buscador
por pestaña y casilla para ocultar actualizaciones/drivers/componentes del software.
Migraciones 023 y 024. Diseño en docs/ARQUITECTURA-INVENTARIO.md.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Contraseñas: "Compartir grupo" aplica el mismo share de solo lectura a todas
las credenciales de un grupo de una vez (el grupo sigue sin ser una unidad
de permiso -- es una accion de conveniencia). El grupo y cada credencial se
marcan con el icono de compartido. "Destruir grupo" ahora tiene dos
opciones: solo desagrupar (como antes) o destruir tambien las N credenciales,
con advertencia explicita del conteo.
Fix de paso en ComboBox (afecta a toda la app): el panel se cerraba solo al
abrirse si el trigger estaba cerca del borde de un contenedor con scroll,
por un micro-scroll automatico del navegador al enfocar el boton.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Solo en el modulo Contraseñas (entradas y grupos): "Eliminar" pasa a decir
"Destruir", con dialogo en tono error (franja roja) y mensaje explicito de
que la destruccion es permanente e irreversible. El resto de la app
(Notas, Proyectos, etc.) sigue igual. El audit_log de borrado ya existia
(usuario/accion/fecha, sin el contenido) -- sin cambios ahi.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Grupos de un solo nivel (tarjetas, clic entra a ver sus credenciales) y compartir
una credencial individual de solo lectura con otro usuario registrado (puede
revelar/copiar la contraseña real, nunca editar/borrar/compartir/mover de grupo).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nueva opcion "Reenviar correo" en el menu de 3 puntos de Organizacion -> Usuarios, para
usuarios en estado 'invited' o 'pending_verification'. Reusa las mismas columnas
(verification_token/verification_token_expires) y plantillas que el envio original
(inviteUser / auth/service.js#register), solo genera un token nuevo -- el anterior pudo
vencer o perderse en spam.
De paso se corrige que el estado "invited" no tenia rama propia en el menu de acciones (caia
en el branch generico de editar/activar-desactivar, que no aplica a una cuenta placeholder sin
clave real todavia) ni traduccion de su badge (user_status_invited faltaba en i18n).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Rediseno completo del modulo Notas (era lista inline, sin popup, sin compartir):
- Tarjetas con resumen del contenido en vez de lista vertical; la primera tarjeta siempre es
un "+" para crear.
- Crear y editar se hacen en un DetailPopup (antes: textarea fijo arriba + edicion inline por
tarjeta).
- Nueva tabla note_shares (migracion 019): compartir una nota con otro usuario ya registrado,
siempre de solo lectura -- el dueño sigue siendo el unico que edita/borra/comparte (mismo
patron que project_members pero sin rol ni invitacion por correo, ya que acá no hace falta).
Quien recibe la nota la ve con "Compartida por {nombre}", sin ningun control de edicion.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Agrega un boton "Ver" en Documentos (adjuntos de proyectos/actividades) para archivos de
texto plano y Markdown: se leen via blob (mismo mecanismo ya usado para descargar, que ya
maneja el Bearer token) y se muestran en un popup -- el .md se renderiza con formato (marked)
y se sanitiza con DOMPurify antes de insertarse en el DOM, para no abrir una via de XSS con
HTML/JS embebido en un documento subido por otro usuario.
De paso corrige que subir un .md fallaba con "tipo de archivo no permitido": el navegador no
manda un mimetype confiable para esa extension (varia segun SO), asi que ahora se normaliza
por extension en el fileFilter de multer en vez de depender solo del mimetype del navegador.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Al "+" para desplegar los logos de marca le faltaba su contraparte: un boton "-" junto al
titulo del bloque para volver a colapsarlo.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
El selector de icono generico de Contraseñas queda igual; el catalogo de marcas (simple-icons)
pasa a estar colapsado por defecto detras de un boton "+", y se abre solo si la entrada ya
tenia un logo de marca asignado.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Agrega un overlay de pantalla completa (circulo girando + porcentaje estimado +
"Actualizando...") que bloquea todo clic mientras corre la auto-actualizacion, y recarga la
pagina sola al terminar. De paso corrige un bug real: el useEffect de mountedRef no
reactivaba el flag en su setup, asi que con React.StrictMode (dev) el polling de estado
nunca llegaba a correr -- no afectaba produccion (StrictMode no duplica efectos ahi) pero
ocultaba el problema al probar en dev. Tambien se corrigen un par de voseos que quedaron
en los textos de Actualizaciones.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Listado de Contraseñas pasa de tabla a tarjetas: icono elegible (
catalogo fijo, sin servicios externos de favicon por privacidad) o
inicial del nombre como fallback, junto con nombre y enlace.
Fix real: editar una credencial sin revelar la contraseña antes la
dejaba vacia al guardar -- ahora se conserva la que ya estaba si no
se escribe una nueva.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nuevo modulo backend/src/modules/vault/: contraseña y notas cifradas
en el servidor (AES-256-GCM, mismo mecanismo ya usado para la clave
SMTP). Acceso al menu protegido con un PIN de 4 digitos independiente
del login (token corto propio, header X-Vault-Token, nunca el JWT de
sesion). El PIN no participa del cifrado -- cambiarlo o restablecerlo
por correo nunca afecta las contraseñas ya guardadas. Privado por
usuario, sin excepcion. Cada accion sensible (crear/editar/eliminar/
revelar/desbloquear) queda en audit_log. Compartir con otro usuario
queda para una proxima version.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Porcentaje de avance dentro de la barra (antes aparte), fondo gris
visible en vez de casi invisible sobre el tema oscuro. Nuevo icono en
el listado de Proyectos que muestra con quien esta compartido cada
proyecto y su permiso, solo si aplica.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bug de seguridad real corregido: cualquier usuario autenticado veia
TODOS los proyectos (listado, detalle, actividades, tareas,
comentarios, adjuntos, KPIs del panel), sin importar si era miembro.
Ahora nadie ve un proyecto ajeno sin que su dueno se lo comparta --
los roles de administracion (superadmin/admin/it_manager) mantienen
visibilidad total para soporte.
Nuevo modelo de permisos por proyecto, simple y no granular:
- Solo el dueno original puede compartir un proyecto (agregar/quitar
miembros, cambiar su nivel) -- ni un admin del proyecto ni un rol
global pueden hacerlo por el.
- Dos niveles: Lectura (solo ver) y Escritura (crear/editar/eliminar
actividades y tareas -- nunca el proyecto en si: no lo borra, no
edita sus datos, no crea proyectos nuevos).
Actividades y tareas pasan a borrado logico (antes se borraban
fisico sin poder recuperar) -- nueva papelera por proyecto con
restaurar.
Incluye tambien el filtro "Usuario" en Proyectos (probado en dev en
un paso anterior), que va de la mano con este cambio de visibilidad.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Superadmin ve un popup con acceso directo a Configuracion >
Actualizaciones si hay una version nueva disponible, en vez de tener
que acordarse de revisar el panel manualmente.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>