Plataforma técnica · Sevastopol
Plan de cuentas en Sevastopol
Islands Command Plan Cuentas
Propósito
Section titled “Propósito”El subdominio plan de cuentas del frontend cubre el catálogo contable maestro y su propagación a los tenants. Tres islands cooperan:
PlanCuentasCommandIsland— island grande con 4 tabs (overview, detail, template, manual). Es el motor de edición del template y sincronización contra tenants.ManualPanel— componente lateral read-only que cualquier island puede pedir abrir para mostrar el manual de una cuenta.ManualSearchIsland— buscador global del manual con modo dual (admin/tenant) y handoff hacia la island de edición.
El plan maestro vive en una DB template; los tenants tienen una copia. La sincronización resuelve diferencias en tres dimensiones: cuentas faltantes (missing), huérfanas (orphans) y divergentes (campos distintos).
Decisiones de UX
Section titled “Decisiones de UX”| Decisión | Motivo |
|---|---|
| Una island grande con 4 tabs | Overview, detail, template y manual comparten el template completo y el padrón de manuales. Separar en islands forzaría 3x cargas y perdería el handoff entre tabs. |
| Sync con 3 modos: insert_missing, update_divergent, delete_orphans | Cada modo se activa por separado en el modal. Por default delete_orphans=false — borrar es destructivo y los huérfanos pueden ser cuentas locales legítimas. |
| Dry-run obligatorio antes del sync real | POST /sync/:db con dry_run: true devuelve plan (inserted, updated, deleted, skipped, errors) sin tocar el tenant. El operador revisa y aprueba. |
| Sync-all como acción agregada | POST /sync-all propaga simultáneamente a todos los tenants. Útil tras editar el template — propaga el cambio a la flota. |
| Manual editor en tab interno | Editar el manual de una cuenta abre Modal con 6 sub-tabs (NIC, Debe, Haber, Ejemplos, Asientos, Refs). Cada uno es Markdown o lista estructurada. |
Handoff desde ManualSearchIsland via sessionStorage | El usuario tipea código en el buscador, click “Editar” → setea manual-cuentas:open-editor en sessionStorage + dispara evento. PlanCuentasCommandIsland lo consume al montarse. Evita acoplamiento directo entre islands. |
Manual Panel con plan-cuentas:select para “ver también” | El panel emite el evento cuando el usuario clickea una referencia cruzada — cualquier island que escuche puede saltar a esa cuenta. |
| Modo dual del ManualSearchIsland | Detecta rol vía /api/auth/validate y elige endpoint: admin lee /api/command/manual-cuentas, tenant lee /api/manual-cuentas. Mismo UI, distinta fuente. |
Islands del subdominio
Section titled “Islands del subdominio”| Island | Endpoint base | Documentación |
|---|---|---|
PlanCuentasCommandIsland (unifica con ChartOfAccountsViewIsland) | /api/command/plan-cuentas/* + /api/admin/chart-of-accounts | Plan de Cuentas |
ManualPanel (componente lateral) | /api/manual-cuentas/:codigo | Manual Panel |
ManualSearchIsland | /api/command/manual-cuentas (admin) · /api/manual-cuentas (tenant) | Búsqueda Manual |
Eventos cross-island
Section titled “Eventos cross-island”| Evento | Emisor | Consumidor | Propósito |
|---|---|---|---|
plan-cuentas:select | Cualquier island con código de cuenta | ChartOfAccountsViewIsland (abre ManualPanel lateral) | Mostrar el manual de una cuenta arbitraria. |
manual-cuentas:open-editor (evento + sessionStorage key) | ManualSearchIsland | PlanCuentasCommandIsland | Abrir el editor en una cuenta puntual desde el buscador. |
sidebar:navigate con detail PlanCuentasCommand | ManualSearchIsland | Sidebar del dashboard | Navegación cuando el operador no está ya en la vista. |
Backend de referencia
Section titled “Backend de referencia”| Service | Endpoint |
|---|---|
PlanCuentasSyncService | /api/command/plan-cuentas/* (overview, diff, sync, template). |
ChartOfAccountsService | /api/admin/chart-of-accounts (lectura del tenant). |
| Manual cuentas (Mongo) | /api/command/manual-cuentas (admin) · /api/manual-cuentas (tenant). |
Relación con otros dominios
Section titled “Relación con otros dominios”- Administración del tenant consume
/api/admin/chart-of-accountspara lectura. La edición vive aquí, en Command. - Manual de cuentas lo consumen islands de cualquier dominio que necesiten contexto contable — emiten
plan-cuentas:select. - Plataforma SaaS (otro subdominio de Command) provisiona los tenants sobre los que opera el sync.
Estas relaciones se documentan en cada destino, no aquí.