// fop-tax.jsx — Єдиний податок ФОП (3 група, 5%, неплатник ПДВ). Квартальний розрахунок // наростаючим підсумком за рік + 1% військового збору. ЄСВ не сплачується (директор ТОВ, // ті самі КВЕД). Дохід — з оплачених віх ФОП-договорів (execEntity=fop). Лише розрахунок. const FOP_EP_RATE = 0.05; // 3 група, неплатник ПДВ const FOP_VZ_RATE = 0.01; // військовий збір для ФОП ЄП (з 2025) window.FOP_EP_RATE = FOP_EP_RATE; window.FOP_VZ_RATE = FOP_VZ_RATE; // Демо-надходження на рахунок ФОП за 2026 (на бекенді — з оплачених віх ФОП-договорів). // Поточна системна дата — 29.05.2026: Q1 закритий, Q2 у процесі. const FOP_RECEIPTS_2026 = [ { date: "2026-02-18", amount: 117063.85, basis: "Договір 01/2026 · їдальня О-1 (в/ч 3014) — оплата за актом" }, { date: "2026-05-12", amount: 64000.00, basis: "Договір 03/2026 · авторський нагляд — виїзди квітень" }, ]; window.FOP_RECEIPTS = FOP_RECEIPTS_2026; // Дохід ФОП по кварталах: оплачені віхи fop-договорів + демо-надходження window.fopIncomeByQuarter = function (year) { const y = String(year); const q = [0, 0, 0, 0]; const add = (iso, amt) => { if (!iso || !iso.startsWith(y)) return; const m = +iso.slice(5, 7); q[Math.floor((m - 1) / 3)] += amt; }; (window.DATA.CONTRACTS || []).forEach(c => { if (c.execEntity !== "fop") return; (c.schedule || []).forEach(s => { if (s.paidDate) add(s.paidDate, s.amount || 0); }); }); // + надходження з оплачених траншів ФОП-проєктів (грантова/проєктна діяльність ГО) (window.DATA.PROJECTS || []).forEach(p => { if (p.execEntity !== "fop") return; ((p.contract && p.contract.schedule) || []).forEach(s => { if (s.paidDate) add(s.paidDate, s.amount || 0); }); }); FOP_RECEIPTS_2026.forEach(r => add(r.date, r.amount)); return q; }; // Строки: декларація — 40 к.дн. після кінця кварталу; оплата — +10 к.дн. function quarterEnd(year, qi) { return [`${year}-03-31`, `${year}-06-30`, `${year}-09-30`, `${year}-12-31`][qi]; } function addDays(iso, n) { const d = new Date(iso + "T00:00:00"); d.setDate(d.getDate() + n); return d.toISOString().slice(0, 10); } function FopTaxPage({ role }) { window.useTabel && window.useTabel(); // ререндер якщо змінились договори const year = 2026; const SYS = window.SYS_DATE || "2026-05-29"; const m = window.formatMoney; const inc = window.fopIncomeByQuarter(year); const rows = inc.map((income, i) => { const ep = Math.round(income * FOP_EP_RATE * 100) / 100; const vz = Math.round(income * FOP_VZ_RATE * 100) / 100; const qEnd = quarterEnd(year, i); const declDue = addDays(qEnd, 40); const payDue = addDays(declDue, 10); let status; if (SYS <= qEnd) status = income > 0 ? "current" : "future"; else if (SYS <= payDue) status = "due"; else status = "paid"; return { i, income, ep, vz, total: ep + vz, qEnd, declDue, payDue, status }; }); // наростаючим підсумком (для декларації) let cum = 0; const cumRows = rows.map(r => { cum += r.income; return cum; }); const totalIncome = inc.reduce((s, x) => s + x, 0); const totalEp = Math.round(totalIncome * FOP_EP_RATE * 100) / 100; const totalVz = Math.round(totalIncome * FOP_VZ_RATE * 100) / 100; // Надходження на рахунок ФОП за рік: демо-надходження + оплачені транші ФОП-проєктів ГО const projReceipts = []; (window.DATA.PROJECTS || []).forEach(p => { if (p.execEntity !== "fop") return; ((p.contract && p.contract.schedule) || []).forEach(s => { if (s.paidDate && s.paidDate.startsWith(String(year))) projReceipts.push({ date: s.paidDate, amount: s.amount || 0, basis: `Проєкт ${p.number} · ${p.name} — ${s.stage}` }); }); }); const allReceipts = [...FOP_RECEIPTS_2026, ...projReceipts].sort((a, b) => a.date.localeCompare(b.date)); // поточний квартал const curIdx = rows.findIndex(r => r.status === "current" || r.status === "due"); const cur = curIdx >= 0 ? rows[curIdx] : rows[rows.length - 1]; const QN = ["I квартал", "II квартал", "III квартал", "IV квартал"]; const ST = { paid: { label: "Сплачено", tone: "live" }, due: { label: "До сплати", tone: "amber" }, current: { label: "Поточний", tone: "blue" }, future: { label: "Майбутній", tone: "neutral" }, }; return (

Єдиний податок · ФОП

ФОП Підкапка М.І. · 3 група · 5% неплатник ПДВ декларація наростаючим за {year}
Дохід · {QN[cur.i]}
{m(cur.income)}
надходження на рахунок
Єдиний податок 5%
{m(cur.ep)}
за {QN[cur.i].toLowerCase()}
Військовий збір 1%
{m(cur.vz)}
за {QN[cur.i].toLowerCase()}
Разом до сплати
{m(cur.total)}
строк: {window.formatDate(cur.payDue)}
{/* Найближчі строки */}
{QN[cur.i]} {year}: подати декларацію до {window.formatDate(cur.declDue)}, сплатити до {window.formatDate(cur.payDue)}
Декларація платника єдиного податку — ФО-П подається наростаючим підсумком (за {year} рік). Подача — через Електронний кабінет ДПС (поза ERP).
{/* Поквартальна таблиця */} {rows.map((r, idx) => ( ))}
Період Дохід за квартал Наростаючим ЄП 5% ВЗ 1% Разом Декларація до Сплата до Статус
{QN[r.i]} {m(r.income)} {m(cumRows[idx])} {m(r.ep)} {m(r.vz)} {m(r.total)} {window.formatDate(r.declDue)} {window.formatDate(r.payDue)} {ST[r.status].label}
За {year} рік {m(totalIncome)} {m(totalEp)} {m(totalVz)} {m(totalEp + totalVz)}
{/* Джерело доходу */}

Надходження на рахунок · {year}

з оплачених ФОП-договорів
{allReceipts.map((r, i) => ( ))}
ДатаПідставаСума
{window.formatDate(r.date)} {r.basis} {m(r.amount)} ₴
Як рахується. 3 група єдиного податку: 5% від доходу (надходжень на рахунок) + 1% військового збору. ЄСВ не нараховується — ФОП є водночас директором ТОВ за тими ж КВЕД (звільнення від сплати «за себе»). Декларація — квартальна, наростаючим підсумком за рік; подача через Електронний кабінет ДПС (поза ERP). На бекенді дохід підтягується з оплачених віх графіка ФОП-договорів.
); } window.FopTaxPage = FopTaxPage;