// cash-salary.jsx — управлінський облік готівкової частини ЗП («в конверті») // Чутлива інформація: видимість керується перемикачем, доступним лише // директору та бухгалтеру. Дані не виходять за межі управлінського контуру. window.CASH_LABELS = { official: "Офіційно", cash: "Готівкою" }; // Готівкова (неофіційна) частина ЗП конкретної людини — фіксована, на місяць window.getCashSalary = (personId) => { const p = window.getTeam(personId); return p && p.cashSalary ? p.cashSalary : 0; }; // Сума готівкових виплат по всій компанії за місяць window.totalCashMonthly = () => window.DATA.TEAM.reduce((s, p) => s + (p.cashSalary || 0), 0); // ---- спільна видимість (перемикач) ---- window.__cashVisible = (typeof localStorage !== "undefined" && localStorage.getItem("pdflow_cash_visible") === "1"); window.setCashVisible = (v) => { window.__cashVisible = !!v; try { localStorage.setItem("pdflow_cash_visible", v ? "1" : "0"); } catch (e) {} window.dispatchEvent(new Event("pdflow-cashvis")); }; window.useCashVisible = function () { const [v, setV] = React.useState(window.__cashVisible); React.useEffect(() => { const h = () => setV(window.__cashVisible); window.addEventListener("pdflow-cashvis", h); return () => window.removeEventListener("pdflow-cashvis", h); }, []); return v; }; // Чи має роль доступ до готівкового контуру window.canSeeCash = (role) => role === "director" || role === "accountant"; // Перемикач показу готівкової частини function CashToggle({ role }) { const v = window.useCashVisible(); if (!window.canSeeCash(role)) return null; return ( ); } window.CashToggle = CashToggle;