// doks-integration.jsx — інтеграція з Робочим простором «Докс» (зовнішня платформа). // На бекенді doksPull() замінюється реальним API-викликом; сигнатура (Promise з тими ж // полями) лишається. Тут — мок-реєстр проєктів, де команда склала Завдання й кошторис. // // КОНТРАКТ ОБМІНУ (ERP ⇄ Докс): // ключ зв'язку — doksKey (код проєкту в Докс, напр. «О-1»). // Докс → ERP (читання): Завдання на проєктування (Дод. 1), кошторис із розбивкою // (обстеження / проектні / експертиза АБО авт. нагляд) → Дод. 4, договірна ціна // (без ПДВ) → сума договору + план фінансування (графік) → Дод. 2. // ERP → Докс (опц., бекенд): № і дата договору, замовник, статус підписання. const DOKS_REGISTRY = { // Приклад ФОП — їдальня О-1 (з реального кошторису) "О-1": { projectName: "Капітальний ремонт їдальні О-1 (в/ч 3014)", objName: "Капітальний ремонт їдальні солдатської № 101300012 за генпланом літера «О-1» військової частини 3014 Національної гвардії України (м. Одеса)", objAddr: "м. Одеса, вул. Люстдорфська дорога, 7", edessb: "—", gip: "Олег МАРТИНЮК", consequenceClass: "СС1", stage: "Робочий проєкт (РП)", taskReady: true, kind: "project", vatBase: false, kosht: [ { name: "Проєктні роботи", form: "3-П", sum: 88975.08 }, { name: "Реєстрація проєктної документації в ЄДЕССБ", form: "3-П", sum: 3954.45 }, { name: "Експертиза проєктної документації", form: "2-П", sum: 24134.32, vatIncluded: true }, ], total: 117063.85, }, // Приклад ТОВ — проєктні роботи (платник ПДВ) "УКП-2025-47": { projectName: "ЖК «Подільський» — робочий проєкт", objName: "Будівництво житлового комплексу «Подільський»", objAddr: "м. Київ, Подільський р-н", edessb: "IU012345678901", gip: "Олена КРАВЧЕНКО", consequenceClass: "СС2", stage: "Робочий проєкт (РП)", taskReady: true, kind: "project", vatBase: true, kosht: [ { name: "Технічне обстеження", form: "3-П", sum: 320000 }, { name: "Проєктні роботи", form: "3-П", sum: 6800000 }, { name: "Реєстрація в ЄДЕССБ", form: "3-П", sum: 180000 }, { name: "Експертиза проєктної документації", form: "2-П", sum: 1100000 }, ], total: 8400000, // без ПДВ }, // Приклад авторського нагляду "АН-89": { projectName: "Авторський нагляд — Мін'юст СС2", objName: "Реконструкція адмінбудівлі Міністерства юстиції", objAddr: "м. Київ, вул. Архітектора Городецького 13", edessb: "IU009988776655", gip: "Олена КРАВЧЕНКО", consequenceClass: "СС2", stage: "Авторський нагляд", taskReady: true, kind: "supervision", vatBase: true, kosht: [ { name: "Авторський нагляд (виїзди за графіком)", form: "3-П", sum: 800000 }, ], total: 800000, }, }; window.DOKS_REGISTRY = DOKS_REGISTRY; // Запит до Докс (мок). Повертає Promise. На бекенді — реальний виклик API Докс. window.doksPull = function (keyRaw) { const key = String(keyRaw || "").trim(); return new Promise((resolve) => { setTimeout(() => { const rec = DOKS_REGISTRY[key]; if (!rec) { resolve({ found: false, error: "Проєкт із таким кодом не знайдено в Робочому просторі (Докс).", key }); return; } // план фінансування за замовчуванням: аванс 30 / проєкт 50 / завершення 20 від суми без ПДВ const total = rec.total; const startISO = window.SYS_DATE || "2026-05-29"; const schedule = window.buildSchedule(rec.kind === "supervision" ? "std" : "stages4", total, startISO); resolve({ found: true, key, source: "Робочий простір «Докс» (демо)", syncedAt: window.SYS_DATE || "2026-05-29", projectName: rec.projectName, objName: rec.objName, objAddr: rec.objAddr, edessb: rec.edessb, gip: rec.gip, consequenceClass: rec.consequenceClass, stage: rec.stage, kind: rec.kind, vatBase: rec.vatBase, taskReady: rec.taskReady, kosht: rec.kosht.map(k => ({ ...k })), total, schedule, }); }, 700); }); }; // Зведення кошторису для Дод. 4 (підсумок без ПДВ) window.doksKoshtTotal = function (kosht) { return (kosht || []).reduce((s, k) => s + (k.sum || 0), 0); };