fase 3.3: comisiones por reglas y liquidacion (modulo skeen_comisiones: motor con reglas por servicio/categoria/articulo/membresia/paquete, monto fijo y escalonado por metas, base vendido/cobrado con y sin impuestos, neto de devoluciones, metas con bonos, ajustes y liquidacion por periodo); reporte legacy intacto con el motor apagado

This commit is contained in:
2026-10-11 12:57:19 +00:00
parent a916753ebe
commit 3c4f1b14d9
27 changed files with 3399 additions and 17 deletions

View File

@@ -146,11 +146,11 @@ export const ClasicoLayout: FC<LayoutProps> = ({ children, title: _title, subtit
const location = useLocation();
const navigate = useNavigate();
const { user, canSee, hasRole, logout, brand } = useAuth();
const { membresias: membresiasCfg, compras: comprasCfg } = useClinicSettings();
const { membresias: membresiasCfg, compras: comprasCfg, comisiones: comisionesCfg } = useClinicSettings();
const [sidebarOpen, setSidebarOpen] = useState(false);
const chatUnread = useChatUnread();
// Membresías y Compras solo cuando la clínica enciende su bandera.
// Membresías, Compras y Liquidaciones solo cuando la clínica enciende su bandera.
const menuTreeT = useMemo<MenuEntry[]>(() => {
let tree = menuTree;
if (comprasCfg.activo) {
@@ -161,8 +161,11 @@ export const ClasicoLayout: FC<LayoutProps> = ({ children, title: _title, subtit
if (membresiasCfg.activo) {
tree = [...tree, { label: 'Membresías', icon: Repeat, href: '/membresias' }];
}
if (comisionesCfg.activo) {
tree = [...tree, { label: 'Liquidaciones', icon: Receipt, href: '/comisiones/liquidaciones' }];
}
return tree;
}, [membresiasCfg.activo, comprasCfg.activo]);
}, [membresiasCfg.activo, comprasCfg.activo, comisionesCfg.activo]);
const menuLeavesT = useMemo(
() => menuTreeT.flatMap((e) =>
e.children