ManualSearchIsland es el buscador del manual contable. Una sola island con dos modos: el SUPER_ADMIN ve la lista completa con CTA “Editar” hacia PlanCuentasCommandIsland; el tenant ve solo lectura con ManualPanel lateral.
El handoff hacia la edición es indirecto: el buscador setea el código en sessionStorage, dispara un evento y navega — el editor lo consume al montarse. Esto evita que el buscador conozca cómo se monta el editor.
| Decisión | Motivo |
|---|
Modo detectado al mount via /api/auth/validate | Una sola island, dos UIs. Detectar al inicio evita parpadeo cuando el rol carga después. |
| Admin trae todo el template + todos los manuales | Permite ver “qué cuentas todavía no tienen manual” con el filtro solo skeletons. El backend pagina con ?limit=100&skip=N y la island itera hasta agotar. |
Tenant busca por término sobre /api/manual-cuentas | Búsqueda full-text del lado servidor con ?limit=20. El tenant no necesita el padrón completo. |
| Filtros: tipo (ACTIVO/PASIVO/…) + solo skeletons | Tipo acota por familia contable; skeletons permite ataque de “completar lo que falta”. |
| Búsqueda combina código + nombre + debe + haber + tags + NIC | Permite encontrar cuenta aun cuando solo se recuerda parte del tratamiento (“depreciación”, “leasing”). |
Handoff vía sessionStorage manual-cuentas:open-editor | El buscador setea el código; el editor lo consume al montarse con consumeManualHandoff(). Sobrevive a navegación de página completa. |
| Tres caminos de navegación al editor | (1) Si ya está en /dashboard, click directo en el botón de sidebar [data-view="PlanCuentasCommand"]. (2) Si no encuentra el botón, dispara evento sidebar:navigate. (3) Si no está en dashboard, window.location.href = "/dashboard#PlanCuentasCommand". Cubre todos los layouts. |
Evento manual-cuentas:open-editor adicional | Disparado simultáneo al handoff, para que el editor abra inmediatamente la cuenta sin esperar el render del sidebar. |
| Modo | Endpoint principal | Endpoint complemento | UI |
|---|
admin (SUPER_ADMIN) | /api/command/manual-cuentas (paginado) | /api/command/plan-cuentas/template | Lista completa + filtros + botón “Editar” → handoff. |
tenant (resto) | /api/manual-cuentas?q=&limit=20 | (none) | Buscador + detalle con ManualPanel lateral. |
| Filtro | Aplica en | Default |
|---|
search | Código, nombre, debe, haber, tags, NIC (full-text local en admin; query server en tenant). | "" |
tipo | ACTIVO / PASIVO / PATRIMONIO / INGRESO / GASTO. | "" |
onlySkeletons (solo admin) | Solo muestra cuentas sin manual o con manual sin contenido. | false |
| Método + ruta | Modo | Uso |
|---|
POST /api/auth/validate | ambos | Detectar rol al mount. |
GET /api/command/manual-cuentas?limit=&skip= | admin | Padrón de manuales (paginado). |
GET /api/command/plan-cuentas/template | admin | Template para construir las filas. |
GET /api/manual-cuentas?q=&limit=20 | tenant | Búsqueda con term. |
GET /api/manual-cuentas/:codigo | tenant | Detalle (usado por ManualPanel lateral). |
| Evento | Dirección | Propósito |
|---|
sidebar:navigate (detail PlanCuentasCommand) | Emite | Pide al sidebar cambiar a la vista del editor. |
manual-cuentas:open-editor (detail { codigo }) | Emite | Pide al editor abrir el manual de una cuenta. |
| Key | Valor | Uso |
|---|
manual-cuentas:open-editor (sessionStorage) | Código de cuenta | Handoff cuando el editor monta tras navegación; consumido por consumeManualHandoff(). |
El padrón vive en Mongo. Los dos endpoints (/api/command/manual-cuentas admin y /api/manual-cuentas tenant) refieren a la misma colección con autorización distinta.