| Campo | Valor |
|---|---|
| Proyecto | NEBULA ERP |
| Módulo | Contabilidad |
| Submódulo | Cierre Contable |
| Historia de Usuario | HU-CON-022 |
| Versión | 1 |
| Responsable | Alejandra Sánchez |
| Fecha | 30/09/2026 |
| Alcance | Entrega funcional y técnica del frontend |
Se entrega la pantalla Cierre Contable que permite al Contador General o Administrador Financiero:
La pantalla bloquea el cierre cuando existen módulos rezagados, cuando el mes aún no ha terminado cronológicamente o cuando el usuario no tiene permisos. Toda la lógica contable (consolidación de saldos, asientos, período 13, resultado del ejercicio) reside en el backend.
Estado general: Implementado y alineado con la HU, con 3 brechas identificadas que se detallan en la sección 8.
Proceso de Cierre Contable
| Campo | Origen | Editable |
|---|---|---|
| Vigencia | Backend | No |
| Último mes cerrado | Backend | No |
| Mes cierre | Backend | No |
| Mes depreciación | Backend (visible solo si aplica) | No |
| Mes diferido | Backend (visible solo si aplica) | No |
Cierre de Módulos
| Campo | Origen | Editable |
|---|---|---|
| Presupuesto | Backend | No |
| Tesorería | Backend | No |
| Nómina | Backend | No |
| Inventarios | Backend | No |
| Facturación | Backend | No |
Todos los campos son de solo lectura. El sistema los calcula y los entrega; el usuario no puede modificarlos.
| Acción | Cuándo está disponible |
|---|---|
| Refrescar | Siempre |
| Cierre Mes | Cuando el usuario tiene permiso CLOSE y no hay bloqueos |
| Cierre Vigencia | Cuando el cierre anual está habilitado (diciembre cerrado) |
Si el usuario no tiene permiso, ve el botón con icono de candado y al pulsarlo recibe un aviso de permisos.
| Código | Regla | Estado |
|---|---|---|
| RN-ALC1-01 | Vigencia solo lectura | ✅ Cumple |
| RN-ALC1-02 | Último mes cerrado solo lectura | ✅ Cumple |
| RN-ALC1-03 | Mes cierre calculado por el backend | ✅ Cumple |
| RN-ALC1-04 | Mes depreciación visible según configuración y validado | ✅ Cumple |
| RN-ALC1-05 | Mes diferido visible según configuración | ⚠️ Visibilidad sí, bloqueo no |
| RN-ALC1-06 | Presupuesto rezagado bloquea el cierre | ✅ Cumple |
| RN-ALC1-07 | Tesorería rezagada bloquea el cierre | ✅ Cumple |
| RN-ALC1-08 | Nómina rezagada bloquea el cierre | ✅ Cumple |
| RN-ALC1-09 | Inventarios rezagados bloquean el cierre | ✅ Cumple |
| RN-ALC1-10 | Facturación rezagada bloquea el cierre | ✅ Cumple |
| RN-ALC1-11 | Cierre Mes deshabilitado si hay bloqueos o fecha extemporánea | ✅ Cumple |
| RN-ALC1-12 | Consolidación y apertura del siguiente período | ✅ Backend |
| RN-ALC1-13 | Diciembre habilita cierre anual | ✅ Cumple |
| RN-ALC1-14 | Cierre de vigencia (asiento AAAA13, cuentas de cierre) | ✅ Backend |
| RN-ALC1-15 | Permiso para cierre mensual y de vigencia | ✅ Cumple |
| RN-ALC1-16 | Permiso para ejecutar el proceso de cierre | ✅ Cumple |
| RN-ALC1-17 | Concurrencia | ✅ Frontend + Backend |
Si el período de un módulo es menor que el mes a cerrar, el cierre se bloquea y se muestra un aviso en el panel lateral indicando exactamente qué módulo está pendiente.
El sistema no permite cerrar un mes que aún no ha terminado. Por ejemplo, para cerrar enero 2027, la fecha del sistema debe ser igual o posterior al 01/02/2027.
El cierre anual usa el período especial AAAA13 (ej. 202613). La pantalla lo representa como “Cierre 2026” para que sea legible.
CLOSE, se muestra el botón denegado con mensaje al pulsarlo.Si dos usuarios intentan cerrar el mismo período a la vez, el backend responde con error 409/423; el frontend muestra un aviso y recarga el estado real.
“Se llevará a cabo el proceso de cierre mensual del módulo; por favor, confirme que todas las operaciones correspondientes al mes han sido registradas. Una vez ejecutado este proceso, no será posible revertirlo.”
El usuario puede Cancelar o Confirmar.
Se muestra un diálogo con variante de error para enfatizar que es irreversible.
| Código | Comportamiento |
|---|---|
| 403 | Aviso de permisos |
| 409 / 423 | Aviso de concurrencia + recarga |
| 422 | Mensaje del backend (ej. módulos rezagados) |
| 5xx | Error con aviso de rollback |
El mensaje que se muestra es el que envía el backend, sin reinterpretaciones.
| Archivo | Rol |
|---|---|
accounting-close.component.ts |
Componente principal. Maneja eventos, permisos, confirmaciones y avisos. |
accounting-close.component.html |
Plantilla con las zonas de proceso, módulos y estado. |
accounting-close.layout.ts |
Distribución de dos columnas. |
accounting-close.store.ts |
Store con señales: vista, flags, fecha del sistema, estado de guardado. |
accounting-close.constants.ts |
Claves i18n (ACCOUNTING_CLOSE). |
accounting-close.dto.ts |
DTOs de request/response. |
accounting-close.icons.ts |
Catálogo de iconos Lucide. |
| Endpoint | Uso |
|---|---|
/cierre-contable/vista |
Valores de períodos, flags cierreMesHabilitado, cierreVigenciaHabilitado, motivoCierreMesDeshabilitado. |
/parametros-sistema/get |
Flags manejaDepreciacion y manejaDiferidos. |
/parametros-sistema/system-date |
Fecha del servidor para validar calendario. |
/cierre-contable/cierre-mes |
Ejecución del cierre mensual. |
/cierre-contable/cierre-vigencia |
Ejecución del cierre anual. |
Todas las cadenas visibles se resuelven vía TranslationService. Las claves están centralizadas en ACCOUNTING_CLOSE y no hay literales sueltos en el código.
close-process, module-close, close-status.| # | Brecha | Impacto | Acción sugerida |
|---|---|---|---|
| 1 | El mes diferido no bloquea el cierre en blockingModules(). |
El botón “Cierre Mes” podría habilitarse con diferidos rezagados. | Agregar la validación deferred comparando mesDiferido contra mesCierre. |
| 2 | El botón de cierre anual se muestra como “denegado” cuando en realidad no está habilitado. | Confusión en el usuario: parece un problema de permisos cuando no lo es. | Separar la lógica: si cierreVigenciaHabilitado = false, ocultar o deshabilitar con motivo, no mostrar “denegado”. |
| 3 | El motivo del backend (motivoCierreMesDeshabilitado) no se pinta. |
El usuario no ve la razón real cuando el cierre está deshabilitado por el backend. | Incluir el motivo en closeStatusItems() cuando venga informado. |
Nota: las tres brechas están localizadas únicamente en el frontend; no requieren cambios de contrato con el backend.
Se entregan pruebas unitarias que cubren:
Todos los casos se ejecutan con vitest y mocks controlados.
| Estado | Ítem |
|---|---|
| ✔ | Pantalla construida con layout de dos columnas. |
| ✔ | Campos de solo lectura según HU. |
| ✔ | Visibilidad condicional de depreciación y diferidos. |
| ✔ | Validación de módulos satélite (excepto diferidos). |
| ✔ | Validación de calendario (incluye mes 13). |
| ✔ | Permisos VIEW y CLOSE. |
| ✔ | Confirmación de cierre mensual con texto exacto. |
| ✔ | Confirmación de cierre anual. |
| ✔ | Manejo de errores del backend (403, 409, 422, 423, 5xx). |
| ✔ | i18n centralizado. |
| ✔ | Pruebas unitarias. |
AAAAMM.AAAA13 para el cierre anual.Documento de Entrega · HU-CON-022 · Cierre Contable · NEBULA ERP · Centrica