feat(contables): cierre mensual de cuenta corriente de distribuidor

Permite congelar el saldo de un distribuidor por empresa a una fecha de
corte y bloquear modificaciones retroactivas sobre el período cerrado.
El saldo se calcula sumando movimientos en rango (sin tocar cue_Saldos).
Incluye reapertura controlada exclusivamente por SuperAdmin, reporte con
saldo inicial, atajo "Desde último cierre", y auditoría del ciclo de
vida _H. Permisos CC001/CC002/CC003. Middleware global mapea bloqueos
por período cerrado a HTTP 409.
This commit is contained in:
2026-05-07 12:03:26 -03:00
parent 7e274ef114
commit 24eaf18fd9
62 changed files with 2813 additions and 162 deletions

View File

@@ -4,4 +4,7 @@ export interface AjusteSaldoRequestDto {
idEmpresa: number;
montoAjuste: number;
justificacion: string;
// Fecha lógica de la operación contable (no la del ajuste físico).
// Se valida contra períodos cerrados del distribuidor+empresa.
fechaOperacion: string; // "yyyy-MM-dd"
}

View File

@@ -0,0 +1,19 @@
export interface CierreCuentaCorrienteDto {
idCierre: number;
idDistribuidor: number;
nombreDistribuidor: string;
idEmpresa: number;
nombreEmpresa: string;
fechaCorte: string; // "yyyy-MM-dd"
fechaCierre: string; // ISO datetime
saldoCierre: number;
estado: 'Activo' | 'Anulado';
justificacion?: string | null;
idUsuarioCierre: number;
nombreUsuarioCierre: string;
idUsuarioAnula?: number | null;
nombreUsuarioAnula?: string | null;
fechaAnulacion?: string | null; // ISO datetime
justificacionAnulacion?: string | null;
esUltimoVigente: boolean;
}

View File

@@ -0,0 +1,6 @@
export interface CrearCierreDto {
idDistribuidor: number;
idEmpresa: number;
fechaCorte: string; // "yyyy-MM-dd"
justificacion?: string | null;
}

View File

@@ -0,0 +1,4 @@
export interface ReabrirCierreDto {
// Min 10, max 500 caracteres (validado en backend con DataAnnotations).
justificacion: string;
}

View File

@@ -0,0 +1,6 @@
export interface UltimoCierreDto {
idCierre: number;
fechaCorte: string; // "yyyy-MM-dd"
saldoCierre: number;
estado: 'Activo' | 'Anulado';
}