feat: implementar jornadas y validar aliases
This commit is contained in:
27
packages/core/src/__tests__/jornadaRules.test.ts
Normal file
27
packages/core/src/__tests__/jornadaRules.test.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { puedeAbrirJornada, puedeCerrarJornada, validarApertura, calcularSaldoJornada } from '../rules/jornadaRules';
|
||||
|
||||
describe('jornadaRules', () => {
|
||||
it('no permite abrir si ya hay jornada abierta', () => {
|
||||
expect(puedeAbrirJornada(1)).toBe(false);
|
||||
});
|
||||
|
||||
it('permite abrir si no hay jornada abierta', () => {
|
||||
expect(puedeAbrirJornada(0)).toBe(true);
|
||||
});
|
||||
|
||||
it('permite cerrar solo si está abierta', () => {
|
||||
expect(puedeCerrarJornada('ABIERTA')).toBe(true);
|
||||
expect(puedeCerrarJornada('CERRADA')).toBe(false);
|
||||
});
|
||||
|
||||
it('valida apertura requiere responsables y base >=0', () => {
|
||||
expect(validarApertura([], 100)).toBe('Debe haber al menos un responsable');
|
||||
expect(validarApertura(['Ana'], -1)).toBe('Base inicial no puede ser negativa');
|
||||
expect(validarApertura(['Ana'], 0)).toBe(null);
|
||||
});
|
||||
|
||||
it('calcula saldo de jornada', () => {
|
||||
expect(calcularSaldoJornada(100000, 500000, 50000)).toBe(550000);
|
||||
});
|
||||
});
|
||||
19
packages/core/src/entities/JornadaToldo.ts
Normal file
19
packages/core/src/entities/JornadaToldo.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
export type EstadoJornada = 'ABIERTA' | 'CERRADA';
|
||||
|
||||
export interface JornadaToldo {
|
||||
id: string;
|
||||
fecha: Date;
|
||||
estado: EstadoJornada;
|
||||
responsables: string[];
|
||||
baseInicial: number;
|
||||
fechaApertura: Date;
|
||||
fechaCierre?: Date;
|
||||
inventarioInicialIds?: string[];
|
||||
inventarioFinalIds?: string[];
|
||||
ventaIds: string[];
|
||||
gastoIds: string[];
|
||||
ajusteIds: string[];
|
||||
cuadreId?: string;
|
||||
createdAt: Date;
|
||||
updatedAt?: Date;
|
||||
}
|
||||
@@ -5,3 +5,4 @@ export * from './Venta';
|
||||
export * from './Gasto';
|
||||
export * from './Ajuste';
|
||||
export * from './CuadreCaja';
|
||||
export * from './JornadaToldo';
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
export * from './entities';
|
||||
export * from './rules/cuadreRules';
|
||||
export * from './rules/jornadaRules';
|
||||
export * from './entities/JornadaToldo';
|
||||
|
||||
21
packages/core/src/rules/jornadaRules.ts
Normal file
21
packages/core/src/rules/jornadaRules.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
export function puedeAbrirJornada(jornadasAbiertas: number): boolean {
|
||||
return jornadasAbiertas === 0;
|
||||
}
|
||||
|
||||
export function puedeCerrarJornada(estado: string): boolean {
|
||||
return estado === 'ABIERTA';
|
||||
}
|
||||
|
||||
export function validarApertura(responsables: string[], baseInicial: number): string | null {
|
||||
if (!responsables || responsables.length === 0) return 'Debe haber al menos un responsable';
|
||||
if (baseInicial < 0) return 'Base inicial no puede ser negativa';
|
||||
return null;
|
||||
}
|
||||
|
||||
export function calcularSaldoJornada(
|
||||
baseInicial: number,
|
||||
totalVentas: number,
|
||||
totalGastos: number
|
||||
): number {
|
||||
return baseInicial + totalVentas - totalGastos;
|
||||
}
|
||||
Reference in New Issue
Block a user