Plataforma técnica · Sevastopol
Ingresos en Sevastopol
Islands Ingresos
Propósito
Section titled “Propósito”El dominio ingresos en Sevastopol tiene una sola island visible — IngresosViewIsland — que actúa como contenedor de dos pestañas: la operación mensual sobre documentos SII (ventas y boletas, delegada a OperationsViewIsland con filtro de ingresos) y la actualización anual de PPM con su contabilización contra 1108001 y 4201002.
La pestaña inicial es navegable desde otra island por sessionStorage — CicloContableIsland la usa para llevar al operador directo a “PPM anual” desde el paso del ciclo.
Ubicación
Section titled “Ubicación”Directorysevastopol/src/components/islands/contabilidad/
- IngresosViewIsland.tsx — dispatcher con 2 tabs
- PpmActualizacionAnualIsland.tsx — pestaña PPM
- ContabilidadWorkspace.tsx — tokens compartidos
Directorysevastopol/src/components/islands/accounting/
- OperationsViewIsland.tsx — exporta
IngresosViewIsland(pestaña Operaciones)
- OperationsViewIsland.tsx — exporta
Directorysevastopol/src/pages/api/reportes/
- […path].ts — proxy
Flujo del dominio
Section titled “Flujo del dominio”flowchart LR
subgraph UI["Sevastopol"]
CONT["IngresosViewIsland<br/>dispatcher 2 tabs"]
OPS["Operaciones tab<br/>(OperationsViewIsland)"]
PPM["PPM Anual tab<br/>(PpmActualizacionAnualIsland)"]
end
subgraph BFF["/api/*"]
OPSAPI["/api/operaciones"]
REPAPI["/api/reportes/ppm-actualizacion-anual"]
end
subgraph BE["Orchestrator"]
OPSV["OperacionesService"]
PPMV["PpmService<br/>(reportes)"]
end
CONT --> OPS --> OPSAPI --> OPSV
CONT --> PPM --> REPAPI --> PPMV
CC["CicloContableIsland<br/>paso ppm"] -. sessionStorage<br/>+ sidebar:navigate .-> CONT Entrypoint cross-island
Section titled “Entrypoint cross-island”Desde CicloContableIsland, el botón “Abrir PPM anual” del paso ppm del ciclo anual:
window.sessionStorage.setItem("ingresos.activeTab", "ppm");window.dispatchEvent(new CustomEvent("sidebar:navigate", { detail: "IngresosView" }));IngresosViewIsland lee la clave en onMount, fija la pestaña y la elimina inmediatamente para no contaminar navegaciones posteriores.
Hooks compartidos
Section titled “Hooks compartidos”Ambas pestañas usan useActiveTenant + useActivePeriod. La actualización de período se interpreta distinto en cada una:
| Pestaña | Año | Mes |
|---|---|---|
| Operaciones | Filtra documentos del año. | Filtra documentos del mes. |
| PPM anual | Define el año del resumen. | Ignorado (la DJ es anual). |
Backend de referencia
Section titled “Backend de referencia”| Service | Cubre |
|---|---|
| OperacionesService | Compras/ventas/boletas SII; la pestaña Operaciones filtra a ventas. |
| PpmService | Cálculo del factor de actualización, contabilización contra 1108001/4201002, reversa. |
Decisiones de UX
Section titled “Decisiones de UX”| Decisión | Motivo |
|---|---|
| Contenedor sin lógica de fetch | El dispatcher solo decide qué pestaña; las queries pertenecen a la island hija para que cada una pueda usarse independiente. |
sessionStorage se borra al leer | Si no se borrara, navegar a Ingresos por menú repetiría la pestaña forzada por la última deep-link. |
| Pestañas explícitas en vez de un solo flujo | Operaciones y PPM tienen ciclos contables distintos (mensual vs anual); mezclarlas confunde al operador. |
| Año del PPM sigue al período activo | Si el operador cambia de año en el workspace, el resumen se mueve con él. |