Skip to content

Nueva sección "Documentación" en el sidebar

Date: 2026-07-25 Status: ✅ Aprobado, validado visualmente — listo para aplicar

Qué se agrega

Una sección nueva en el sidebar, "Documentación", con 2 ítems:

  1. Funcional — link externo (abre en pestaña nueva) al sitio VitePress de doc/ (doc/plans/2026-07-25-plan-desarrollo-modulos.md y todo lo demás documentado ahí). La URL está como placeholder (https://docs.soterex.cislatam.net) — reemplazar por la URL real una vez que ese sitio esté deployado (ver doc/README.md / doc/.vitepress/config.mts).
  2. Manual del Usuario — ruta interna (/documentacion/manual-usuario) con una página "en construcción" a propósito — no es un módulo pendiente de implementar como los ABMs, es contenido que todavía no se escribió. Placeholder simple con ese mensaje.

Detalle técnico — por qué el sidebar necesitó un cambio de lógica

Hasta ahora todos los ítems del nav eran internos (to, renderizados con <router-link>). "Funcional" es el primer ítem externo — se agregó una distinción: si el ítem tiene href, se renderiza como <a target="_blank" rel="noopener noreferrer"> con un ícono de flecha diagonal (indica visualmente que abre afuera); si tiene to, sigue siendo <router-link> como antes. Ver reference/AppLayout.vue.

Archivos de referencia adjuntos (reference/)

  • AppLayout.vue — sección nueva en el array nav + la lógica de href vs to en el template
  • ManualUsuarioView.vue — la página "en construcción" (nueva)
  • router-index-snippet.txt — la ruta nueva a agregar (/documentacion/manual-usuario)

Checklist de integración

  • [x] Copiar ManualUsuarioView.vue a frontend/src/views/.
  • [x] Agregar la ruta nueva al router real (documentacion-manual-usuario, sin meta.module a propósito — el guard global ya deja pasar sin gate de permiso cualquier ruta que no lo declare, mismo criterio que /me).
  • [x] Mergear la sección "Documentación" del array nav de AppLayout.vue, y la lógica de href vs to en el template. El código real ya había evolucionado bastante desde la referencia (permisos por ítem vía meStore.canRead, sin subgrupos colapsables — eso lo reemplazó TabbedSectionLayout) — se aplicó solo la distinción href/to, no se pisó nada de eso. isVisible() se extendió para tratar un ítem sin module/modules como siempre visible (antes todos los ítems tenían uno de los dos, no hacía falta ese caso). NAV/mobileNav se tipó explícito (NavItem discriminado to/href mutuamente excluyentes) — sin eso vue-tsc no compilaba: el array dejó de ser estructuralmente uniforme apenas agregó el primer ítem sin to.
  • [x] Reemplazar la URL placeholder de "Funcional" — resuelto en dos pasos posteriores: primero un link externo configurable (VITE_DOCS_URL), después migrado a renderizado nativo y vuelto a revertir a link externo (ver doc/plans/2026-07-25-revertir-doc-nativa-volver-vitepress.md), hoy apunta al sitio VitePress real corriendo en dev vía traefik.

Verificado: vue-tsc/vite build limpios, dev server responde sin errores tras limpiar la cache de Vite. No verificado en navegador real (sin herramienta de browser disponible en la sesión) — falta confirmar visualmente el ícono de flecha diagonal en "Funcional" y que abre en pestaña nueva.

Documentación viva — se actualiza junto con el código, no es un anexo aparte.