Plataforma técnica · Sevastopol
Ciclo Contable en Sevastopol
Islands Ciclo Contable
Propósito
Section titled “Propósito”El dominio ciclo contable del frontend es la vista de control read-only del cierre por período: agrega el estado de los dominios operativos (operaciones SII, compras, ventas, remuneraciones, declaraciones, inventario, depreciación, conciliación, balances, provisiones, PPM, incobrables, resultados acumulados) en una semántica uniforme pendiente | parcial | completo por paso.
Se materializa en una sola island — CicloContableIsland — que es el panel de cierre del operador contable. No genera asientos ni contabiliza; su responsabilidad es agregar y mostrar dónde se traba el cierre y permitir el salto cross-island al lugar donde se resuelve.
Decisiones de UX
Section titled “Decisiones de UX”| Decisión | Motivo |
|---|---|
| Vista read-only del cierre | El cierre es el resultado de actividad en otros dominios. Contabilizar desde aquí rompería trazabilidad, idempotencia (refrescar el panel materializaría asientos) y tolerancia multi-tenant. |
| Una única acción de escritura: Generar Stock | Es el único paso cuya acción está estrechamente acoplada al control del operador y no a una decisión contable; delega en /api/inventario/saldo-stock/procesar. |
| Tres modos de visualización | Mensual con mes → pipeline de 11 pasos. Mensual sin mes → resumen comparativo 12 meses (12 fetch en paralelo). Anual → pipeline de 7 pasos. |
Cross-island navigation vía sidebar:navigate | Los pasos incobrables y ppm no resuelven en este dominio — saltan a LibroBancoIsland y IngresosViewIsland respectivamente. |
| Columna Global derivada en cliente | Orchestrator no emite estado agregado por mes; la columna existe sólo como UX local. La regla every completo → completo / some no-pendiente → parcial / sino pendiente no es contractual. |
| Distinguir Sin datos de Pendiente | Un paso sin actividad ni esquema (multi-tenant tolerante) no debe leerse como tarea por hacer. La UI deriva el badge desde labelPendiente(paso).startsWith("sin "). |
| Acordeón único de detalle | Un solo pasoActivo por vez; clickear de nuevo lo cierra. Mantiene contexto del cierre en una sola página. |
Lenguaje compartido
Section titled “Lenguaje compartido”La island usa IslandBase con ContabilidadWorkspaceHeader, WorkspaceSegmentedControl, InlineMetricPill y WorkspaceSectionCard — el mismo lenguaje que finanzas y administración. No tiene un *Workspace.tsx propio.
Hooks compartidos
Section titled “Hooks compartidos”| Hook | Uso |
|---|---|
useActiveTenant | Tenant del cierre; recarga estado y plan de cuentas al cambiar. |
useActivePeriod | { year, month }. El mes determina entre pipeline de un período (con mes) y resumen comparativo 12 meses (sin mes). El modo anual ignora month. |
Backend de referencia
Section titled “Backend de referencia”Ciclo Contable (Orchestrator) — el servicio CicloContableService compone el snapshot vía Promise.all de queries independientes contra los esquemas operativos. No abre transacciones, es read-only puro. Aplica reglas declarativas pendiente | parcial | completo por paso y tolera tenants con esquemas incompletos (42P01, 3F000, 42703).
Endpoint base
Section titled “Endpoint base”/api/ciclo-contable/* vía createProxy exporta solo GET (read-only). Ver BFF Proxy. Laterales usados:
/api/inventario/saldo-stock/procesarpara la única acción de escritura./api/admin/chart-of-accountspara etiquetar cuentas en el detalle deincobrables.
Relación con otros dominios
Section titled “Relación con otros dominios”El ciclo contable es agregador: lee estado de prácticamente todos los demás dominios operativos. Las relaciones de salto cross-island son:
incobrables→LibroBancoIsland(pestaña diferencias para castigo o compensación)ppm→IngresosViewIsland(pestaña PPM anual)
Cada destino documenta su entrada y maneja su propia lógica; aquí solo aparece el botón que despacha el sidebar:navigate.