// projects-data.jsx — ПРОЄКТНА ДІЯЛЬНІСТЬ (грантові/донорські проєкти ГО) // ─────────────────────────────────────────────────────────────────────────── // Окрема колекція window.DATA.PROJECTS. Це НЕ об'єкти проєктування і НЕ договори // підряду — це робота в межах проєкту громадської організації (ГО), що живе рівно // стільки, скільки сам проєкт: коли проєкт закривається → статус «Закрито» → архів. // // Виконавець: ФОП Підкапка М.І. (єдиний податок 5% + 1% ВЗ) АБО ТОВ «Укрбудпроєкт». // Дохід ФОП-проєктів автоматично підтягується в «Єдиний податок (ФОП)» (5%+1%). // // Кожен проєкт самодостатній: партнер-ГО, донор, період, сума/графік оплат, // деліверабли, громади, документи, задачі. Контракт показується також у «Договори». // ─────────────────────────────────────────────────────────────────────────── // ── ДОНОРИ (джерела фінансування грантів) ────────────────────────────────── const DONORS = [ { id: "dn-pin", name: "People in Need", nameUk: "«Людина в біді» (PIN)", country: "Чехія", kind: "Міжнародна гуманітарна організація", note: "Чеська гуманітарна організація. Фінансує програми відновлення та підготовки громад України.", }, ]; // ── ПАРТНЕРИ-ГО (з ким співпрацюємо в межах проєкту) ─────────────────────── const NGO_PARTNERS = [ { id: "ngo-eco", name: "ГО «Екоклуб»", short: "Екоклуб", edrpou: "25319429", city: "Рівне", focus: "Енергоефективність, відновлювана енергетика, екологія громад", contact: { name: "Андрій Мартинюк", role: "Виконавчий директор", phone: "+380 362 62 03 24", email: "office@ecoclubrivne.org" }, note: "Громадська організація — партнер у грантових проєктах з енергоефективності закладів громад.", // Реквізити для друкованих актів (з договору PIN-20-08-2025) requisites: { fullName: "Громадська організація «ЕКОКЛУБ»", address: "33024, Рівненська обл., м. Рівне, вул. Соборна, буд. 259, кв. 84", addressFact: "33014, м. Рівне, вул. С. Бандери, 41, офіс 92", edrpou: "25319429", iban: "UA533510050000026002638167000", bank: "АТ «Укрсиббанк» у м. Рівне", email: "office@ecoclubrivne.org", director: "Мартинюк Андрій Миколайович", directorShort: "А.М. Мартинюк", directorRole: "Виконавчий директор", basis: "Статуту", }, }, ]; // ── 14 громад першого проєкту (Дніпропетровська + Сумська обл.) ──────────── const ECO1_COMMUNITIES = [ { name: "Криворізька МТГ", region: "Дніпропетровська обл.", facility: "ЗОШ № 8" }, { name: "Кам'янська МТГ", region: "Дніпропетровська обл.", facility: "Ліцей № 3" }, { name: "Павлоградська МТГ", region: "Дніпропетровська обл.", facility: "Дитсадок «Сонечко»" }, { name: "Синельниківська МТГ", region: "Дніпропетровська обл.", facility: "Амбулаторія ЗПСМ" }, { name: "Покровська МТГ", region: "Дніпропетровська обл.", facility: "Гімназія № 1" }, { name: "Васильківська СТГ", region: "Дніпропетровська обл.", facility: "Будинок культури" }, { name: "Софіївська СТГ", region: "Дніпропетровська обл.", facility: "ЗОШ № 2" }, { name: "Петриківська СТГ", region: "Дніпропетровська обл.", facility: "Дитсадок «Калинка»" }, { name: "Конотопська МТГ", region: "Сумська обл.", facility: "Ліцей № 11" }, { name: "Шосткинська МТГ", region: "Сумська обл.", facility: "Амбулаторія № 2" }, { name: "Глухівська МТГ", region: "Сумська обл.", facility: "ЗОШ № 6" }, { name: "Охтирська МТГ", region: "Сумська обл.", facility: "Дитсадок «Веснянка»" }, { name: "Лебединська МТГ", region: "Сумська обл.", facility: "Гімназія № 4" }, { name: "Тростянецька МТГ", region: "Сумська обл.", facility: "Будинок культури" }, ]; const ECO2_COMMUNITIES = [ { name: "Криворізька МТГ", region: "Дніпропетровська обл.", facility: "ЗОШ № 8 (заміна вікон)" }, { name: "Кам'янська МТГ", region: "Дніпропетровська обл.", facility: "Ліцей № 3 (дах)" }, { name: "Павлоградська МТГ", region: "Дніпропетровська обл.", facility: "Дитсадок «Сонечко» (ІТП)" }, { name: "Покровська МТГ", region: "Дніпропетровська обл.", facility: "Гімназія № 1 (фасад)" }, { name: "Софіївська СТГ", region: "Дніпропетровська обл.", facility: "ЗОШ № 2 (котельня)" }, { name: "Синельниківська МТГ", region: "Дніпропетровська обл.", facility: "Амбулаторія (вентиляція)" }, ]; // ── ПРОЄКТИ ──────────────────────────────────────────────────────────────── const PROJECTS = [ { id: "prj-eco1", code: "ПД-2024-01", name: "Підготовка громад до опалювального сезону", number: "ЕК-07/2024", partner: "ngo-eco", donor: "dn-pin", execEntity: "fop", role: "Розробка проєктно-кошторисної документації (ПКД) на енергоефективні заходи в закладах громад", scope: "14 громад Дніпропетровської та Сумської областей", start: "2024-08-01", end: "2025-03-31", status: "closed", closedDate: "2025-04-04", closeNote: "Усі деліверабли передано, фінальний звіт PIN затверджено, акти підписано. Проєкт донора завершено — контракт закрито.", manager: "ok", team: ["ok", "tm", "vs"], communities: ECO1_COMMUNITIES, deliverables: [ { id: "e1d1", title: "Інсепшн-звіт і методологія обстежень", due: "2024-08-30", status: "done" }, { id: "e1d2", title: "Енергетичні обстеження закладів у 14 громадах", due: "2024-10-31", status: "done" }, { id: "e1d3", title: "Розробка ПКД (проєктно-кошторисна документація)", due: "2024-12-20", status: "done" }, { id: "e1d4", title: "Експертиза кошторисної частини", due: "2025-01-31", status: "done" }, { id: "e1d5", title: "Передача документації громадам", due: "2025-02-28", status: "done" }, { id: "e1d6", title: "Фінальний наративний і фінансовий звіт PIN", due: "2025-03-31", status: "done" }, ], docs: [ { name: "Договір про надання послуг ЕК-07/2024", type: "contract", date: "2024-07-20" }, { name: "Технічне завдання (ТЗ)", type: "tz", date: "2024-07-22" }, { name: "Проміжний звіт (обстеження + ПКД)", type: "report", date: "2024-12-20" }, { name: "Фінальний звіт PIN", type: "report", date: "2025-03-31" }, { name: "Акт наданих послуг № 3", type: "act", date: "2025-03-31" }, ], contract: { number: "ЕК-07/2024", date: "2024-07-20", total: 504000, parties: { ourRole: "executor", counterRole: "customer", subject: "services" }, schedule: [ { stage: "Аванс при підписанні", pct: 30, amount: 151200, dueDate: "2024-08-05", paidDate: "2024-08-07", invoice: "pi-eco1-01", billing: "advance" }, { stage: "Проміжний транш — обстеження + ПКД", pct: 40, amount: 201600, dueDate: "2024-12-25", paidDate: "2024-12-27", invoice: "pi-eco1-02", billing: "work" }, { stage: "Фінальний — передача + звіт донору", pct: 30, amount: 151200, dueDate: "2025-03-31", paidDate: "2025-04-03", invoice: "pi-eco1-03", billing: "work" }, ], }, tasks: [ { id: "pe1-1", title: "Узгодити методологію обстежень з PIN", proj: "prj-eco1", assignee: "ok", section: "Звіт", est: "—", status: "done" }, { id: "pe1-2", title: "Енергообстеження закладів (14 громад)", proj: "prj-eco1", assignee: "vs", section: "Обстеження", est: "—", status: "done" }, { id: "pe1-3", title: "Розробка ПКД по громадах", proj: "prj-eco1", assignee: "tm", section: "ПКД", est: "—", status: "done" }, { id: "pe1-4", title: "Експертиза кошторисів", proj: "prj-eco1", assignee: "ok", section: "Кошторис", est: "—", status: "done" }, { id: "pe1-5", title: "Фінальний звіт донору", proj: "prj-eco1", assignee: "ok", section: "Звіт", est: "—", status: "done" }, ], }, { id: "prj-eco2", code: "ПД-2025-02", name: "Супровід громад у підготовці ПКД (PIN)", number: "PIN-20-08-2025", partner: "ngo-eco", donor: "dn-pin", execEntity: "fop", role: "Технічний супровід громад: експертиза, кошториси, ЄДЕССБ, комунікація з підрядниками та проєктувальниками", scope: "Громади Дніпропетровської та Сумської областей", start: "2025-08-20", end: "2026-06-30", status: "active", manager: "ok", team: ["ok", "tm", "vs"], communities: ECO2_COMMUNITIES, // Параметри для друку акта за шаблоном донора (PIN) actSeed: { no: "3", date: "2026-03-30", place: "Рівне", amount: 12466.20, contractNo: "PIN-20-08-2025", contractDate: "2025-08-20" }, deliverables: [ { id: "e2d1", title: "Інсепшн-зустріч і план робіт", due: "2025-09-15", status: "done" }, { id: "e2d2", title: "Супровід експертизи СЕС (Саксаганська ТГ)", due: "2026-03-23", status: "done" }, { id: "e2d3", title: "Реєстрація ЄДЕССБ / містобудівних умов", due: "2026-04-30", status: "in_progress" }, { id: "e2d4", title: "Оцінка кошторисів (Кривий Ріг, Тростянець)", due: "2026-05-31", status: "in_progress" }, { id: "e2d5", title: "Фіналізація документів для експертизи", due: "2026-06-30", status: "todo" }, ], docs: [ { name: "Договір PIN-20-08-2025", type: "contract", date: "2025-08-20" }, { name: "Технічне завдання (ТЗ)", type: "tz", date: "2025-08-22" }, { name: "Акт наданих послуг № 3 + Описовий звіт", type: "act", date: "2026-03-30" }, ], contract: { number: "PIN-20-08-2025", date: "2025-08-20", total: 360000, parties: { ourRole: "executor", counterRole: "customer", subject: "services" }, schedule: [ { stage: "Акт № 1 — послуги грудень 2025", pct: 30, amount: 108000, dueDate: "2026-01-10", paidDate: "2026-01-14", invoice: "pi-eco2-01", billing: "work" }, { stage: "Акт № 3 — послуги березень 2026", pct: 12, amount: 12466.20, dueDate: "2026-04-05", paidDate: "2026-04-08", billing: "work" }, { stage: "Наступні акти — за графіком послуг", pct: 58, amount: 239533.80, dueDate: "2026-06-30", billing: "work" }, ], }, // Послуги акта формуються з виконаних задач (коментар = рядок акта, нотатка = опис, + скріншот) tasks: [ { id: "pe2-s1", title: "Комунікація з експертизою та ФОП Лаврінов (Саксаганська ТГ)", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-02", status: "done", note: "Скріншот листування з ФОП Лаврінов щодо проходження експертизи." }, { id: "pe2-s2", title: "Зауваження до кошторису Саївська СЕС (Саксаганська ТГ)", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-02", status: "done", note: "Перелік зауважень до кошторису Саївська СЕС." }, { id: "pe2-s3", title: "Вступна зустріч Тростянецька ТГ", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-03", status: "done", note: "Скріншот зустрічі." }, { id: "pe2-s4", title: "Зустріч з Тростянецькою ТГ і Підрядником (погодження технічних рішень)", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-09", status: "done", note: "Погодження технічних рішень; 40 хвилин." }, { id: "pe2-s5", title: "Щотижнева зустріч з Екоклубом", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-10", status: "done", note: "Скріншот зустрічі." }, { id: "pe2-s6", title: "Виправлення зауважень експертизи по СЕС водозабір Саксаганська ТГ", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-15", status: "done", note: "Переписка щодо зауважень по експертизі." }, { id: "pe2-s7", title: "Комунікація з СКП «Аква», архітектором, ДРРП та Держгеонадрами (реєстрація свердловини та містобудів)", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-17", status: "done", note: "Скріншот переписки з бухгалтером СКП «Аква»." }, { id: "pe2-s8", title: "Супровід Солонянської ТГ щодо роботи в ЄДЕССБ", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-18", status: "done", note: "Скріншот з ЄДЕССБ." }, { id: "pe2-s9", title: "Проходження експертизи СЕС водозабір Саксагань", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-23", status: "done", note: "Скріншоти переписки з ФОП Лаврінов (18.03–23.03)." }, { id: "pe2-s10", title: "Супровід СКП «Аква» в реєстрації Завдання на проєктування", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-24", status: "done", note: "Скріншот листа з Завданням на проєктування." }, { id: "pe2-s11", title: "Оцінка кошторису Кривий Ріг", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-25", status: "done", note: "Опрацювання кошторису." }, { id: "pe2-s12", title: "Фіналізація документів для підписання на експертизу", proj: "prj-eco2", assignee: "ok", section: "Послуга", actDate: "2026-03-27", status: "done", note: "Фіналізація роботи з замовниками щодо підписання документів." }, { id: "pe2-a1", title: "Розробка ПКД: пілотний заклад (квітень)", proj: "prj-eco2", assignee: "tm", section: "ПКД", day: "29", est: "6 год", status: "live" }, { id: "pe2-a2", title: "Підготувати акт № 4 за квітень", proj: "prj-eco2", assignee: "ok", section: "Договір", est: "1 год", status: "todo" }, ], }, ]; // ── Реєстри + хелпери ────────────────────────────────────────────────────── // Збагачуємо контракт проєкту плоскими полями (для друкованих форм рахунку/акта). PROJECTS.forEach(p => { if (p.contract) { p.contract.execEntity = p.execEntity; p.contract.projectName = p.name; p.contract.projectCode = p.code; p.contract.partnerId = p.partner; } }); // Демо-приклади (Екоклуб/PIN) НЕ вантажимо — у LIVE дані з бекенду (порожньо, поки не введуть реальні). window.DATA.DONORS = []; window.DATA.NGO_PARTNERS = []; window.DATA.PROJECTS = []; window.getDonor = (id) => DONORS.find(d => d.id === id); window.getNgoPartner = (id) => NGO_PARTNERS.find(n => n.id === id); window.getGoProject = (id) => PROJECTS.find(p => p.id === id); window.PROJECT_STATUS = { active: { label: "Активний", tone: "live" }, closed: { label: "Закрито", tone: "neutral" }, archived: { label: "Архів", tone: "neutral" }, }; window.DELIVERABLE_STATUS = { done: { label: "Готово", tone: "live" }, in_progress: { label: "У роботі", tone: "blue" }, todo: { label: "Заплановано", tone: "neutral" }, }; // Зведення по проєкту: оплачено / усього + готовність деліверабли window.projectSummary = function (p) { const sched = (p.contract && p.contract.schedule) || []; const total = (p.contract && p.contract.total) || 0; const paid = sched.filter(s => s.paidDate).reduce((a, s) => a + (s.amount || 0), 0); const dlv = p.deliverables || []; const dlvDone = dlv.filter(d => d.status === "done").length; return { total, paid, paidPct: total ? Math.round(paid / total * 100) : 0, dlvTotal: dlv.length, dlvDone, dlvPct: dlv.length ? Math.round(dlvDone / dlv.length * 100) : 0, }; };