Skip to content

Plataforma técnica · Sevastopol

Plan de Cuentas en Sevastopol

Islands Command Plan Cuentas

La gestión del plan de cuentas en Sevastopol vive en dos islands complementarias:

  • PlanCuentasCommandIsland — la island principal del SUPER_ADMIN. Edita el template maestro, calcula diff contra cada tenant y propaga cambios. Tiene 4 tabs internas.
  • ChartOfAccountsViewIsland — la vista read-only que el operador del tenant ve. Carga /api/admin/chart-of-accounts, muestra el catálogo jerárquico y un banner ámbar que redirige a Command si el rol es SUPER_ADMIN.

Ambas se documentan aquí porque operan sobre el mismo dominio. La edición vive en Command; el tenant solo lee.

DecisiónMotivo
4 tabs en una sola island (Overview, Detail, Template, Manual)Los cuatro flujos comparten el template completo y el padrón de manuales. Separar en islands forzaría 3x cargas y rompería el handoff entre tabs.
Overview con KPIs agregadosup_to_date, total_orphans, total_missing, total_locales consolidados sobre tenantRows() — visibilidad inmediata del estado de la flota.
Detail por tenant con tres sub-tabsMissing (faltantes en el tenant), Orphans (existen en el tenant pero no en el template), Divergent (mismo código, campos distintos). Cada uno requiere acción distinta.
Template editable con propagación opcionalEl form de cuenta tiene checkbox propagate — si activo, la edición del template dispara sync a tenants. Default desactivado para evitar propagación accidental.
Sync con 3 modos: insert_missing, update_divergent, delete_orphansCada modo se activa por separado en el modal de sync. delete_orphans default false — borrar es destructivo y los huérfanos pueden ser cuentas locales legítimas del tenant.
Dry-run obligatorio antes del sync realPOST /sync/:db con dry_run: true devuelve plan completo (inserted, updated, deleted, skipped, errors) sin tocar el tenant. El operador revisa y aprueba.
Sync-all como acción agregadaPOST /sync-all propaga a todos los tenants no-template en una llamada. Útil tras editar el template — propaga el cambio a la flota.
Manual editor en Modal con 6 sub-tabsNIC, Debe, Haber, Ejemplos, Asientos, Refs. Cada uno con tipo distinto: NIC es estructurado, Debe/Haber son Markdown, Ejemplos es lista de Markdown, Asientos es estructurado, Refs es lista de códigos + tags.
Paginación del padrón de manuales con MANUAL_FETCH_LIMIT=100loadManuales() itera ?limit=100&skip=N hasta agotar total. Permite volúmenes grandes sin un fetch enorme.
Handoff de codigo via sessionStorage manual-cuentas:open-editorManualSearchIsland setea el código y dispara el evento — PlanCuentasCommandIsland lo consume al montarse (consumeManualHandoff) o vía listener. Evita acoplamiento directo.
ChartOfAccountsViewIsland banner ámbarLa vista read-only muestra a SUPER_ADMIN un banner <a href="/dashboard#PlanCuentasCommand"> para saltar a la edición. El resto solo ve el texto explicativo.
ChartOfAccountsViewIsland lateral con ManualPanelClick en “Ver manual” reduce la tabla a 2 columnas y monta ManualPanel lateral. Cualquier island puede pedir abrir el manual emitiendo plan-cuentas:select.
Padding-left por nivel en ChartOfAccountsViewIsland(r.nivel - 1) * 12px refleja visualmente la jerarquía sin números explícitos. Orden previo por código preserva la jerarquía aunque los filtros oculten intermedios.
Filtros locales (6 signals en ChartOfAccountsViewIsland)qCode, qName, qIFRS, qType, qNature, qLevel — todos sub-string sobre la lista cargada. El plan tiene cientos de filas; paginar local mejora render.

Tabs internas — PlanCuentasCommandIsland

Section titled “Tabs internas — PlanCuentasCommandIsland”
TabEndpoint baseContenido
overview/api/command/plan-cuentas/overviewLista de tenants con KPIs de divergencia.
detail/api/command/plan-cuentas/diff/:dbDiff completo por tenant (missing, orphans, divergent).
template/api/command/plan-cuentas/templateCRUD del catálogo template con propagación opcional.
manual/api/command/manual-cuentasPadrón de manuales — editor por cuenta con 6 sub-tabs (NIC, Debe, Haber, Ejemplos, Asientos, Refs).
Sub-tabContenido
nicNorma, tratamiento, referencia (estructurado).
debeMarkdown — qué se carga al debe.
haberMarkdown — qué se carga al haber.
ejemplosLista de ejemplos: título + descripción Markdown.
asientosLista de asientos tipo: título + lista de líneas D/H con código + concepto.
refsCódigos cruzados (ver_tambien) + tags.

Atributos contables visibles (ChartOfAccountsViewIsland)

Section titled “Atributos contables visibles (ChartOfAccountsViewIsland)”

Columna Atributos apila tres BoolBadge:

BadgeOrigenSignificado
Imputablees_imputableAcepta asientos directos vs. solo agregadora.
Tercerorequiere_terceroEl asiento debe indicar RUT contraparte.
C.C.requiere_ccEl asiento debe indicar centro de costo.
Método + rutaUso
GET /api/command/plan-cuentas/overviewLista de tenants con KPIs.
GET /api/command/plan-cuentas/diff/:dbDiff por tenant.
POST /api/command/plan-cuentas/sync/:db (con dry_run)Sync por tenant.
POST /api/command/plan-cuentas/sync-all (con dry_run)Sync masivo.
GET /api/command/plan-cuentas/templateCatálogo template.
POST/PUT/DELETE /api/command/plan-cuentas/template/:codigoCRUD del template con propagate opcional.
GET /api/command/manual-cuentas?limit=&skip=Padrón de manuales paginado.
GET /api/command/manual-cuentas/:codigoManual de una cuenta.
POST/PUT/DELETE /api/command/manual-cuentas/:codigoCRUD del manual.
GET /api/admin/chart-of-accounts?tenant_id= (ChartOfAccounts read)Lectura desde el tenant.
POST /api/auth/validateValidación de rol para mostrar acciones destructivas y banner.

PlanCuentasSyncService consolida overview, diff y sync sobre los tenants. ChartOfAccountsService expone la lectura desde el tenant. El manual contable vive en Mongo bajo /api/command/manual-cuentas (admin) y /api/manual-cuentas (tenant).