{"id":5156,"date":"2026-05-22T15:18:07","date_gmt":"2026-05-22T12:18:07","guid":{"rendered":"https:\/\/wp1.truester.win\/?page_id=5156"},"modified":"2026-05-22T15:18:54","modified_gmt":"2026-05-22T12:18:54","slug":"package-contract","status":"publish","type":"page","link":"https:\/\/wp1.truester.win\/en\/package-contract\/","title":{"rendered":"\u0414\u043e\u0433\u043e\u0432\u043e\u0440 \u041f\u0430\u043a\u0435\u0442\u043d\u0438 \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0438"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5156\" class=\"elementor elementor-5156\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d921040 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"d921040\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-70c5c33 wpr-logo-position-center elementor-widget elementor-widget-wpr-logo\" data-id=\"70c5c33\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"wpr-logo.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\n\t\t\t<div class=\"wpr-logo elementor-clearfix\">\n\n\t\t\t\t\t\t\t\t<picture class=\"wpr-logo-image\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/wp1.truester.win\/wp-content\/uploads\/2025\/07\/cropped_logo_corrected.png\" alt=\"\" title=\"\">\n\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"wpr-logo-url\" rel=\"home\" aria-label=\"\" href=\"https:\/\/wp1.truester.win\/en\/\"><\/a>\n\t\t\t\t\t\t\t\t\t<\/picture>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<a class=\"wpr-logo-url\" rel=\"home\" aria-label=\"\" href=\"https:\/\/wp1.truester.win\/en\/\"><\/a>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a452f2c e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"a452f2c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-74e0acf elementor-widget elementor-widget-shortcode\" data-id=\"74e0acf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">            <section class=\"pmcs-wrap\">\n                <h2 class=\"pmcs-title\">\u0414\u043e\u0433\u043e\u0432\u043e\u0440 \u0437\u0430 \u043f\u0430\u043a\u0435\u0442<\/h2>\n                <div id=\"pmpc-alert\" class=\"pmcs-alert\" hidden><\/div>\n\n                <div class=\"pmcs-card\">\n                    <div class=\"pmcs-grid\">\n                        <label class=\"pmcs-field\"><span>\u0418\u043c\u0435 \u0438 \u0424\u0430\u043c\u0438\u043b\u0438\u044f *<\/span><input id=\"pmpc-name\" type=\"text\" \/><\/label>\n                        <label class=\"pmcs-field\" id=\"pmpc-email-wrap\"><span>\u0418\u043c\u0435\u0439\u043b *<\/span><input id=\"pmpc-email\" type=\"email\" \/><\/label>\n                    <\/div>\n\n                    <div id=\"pmpc-contract-only\" style=\"display:block\">\n                        <div class=\"pmcs-grid\">\n                            <label class=\"pmcs-field\"><span>\u0410\u0434\u0440\u0435\u0441 *<\/span><input id=\"pmpc-address\" type=\"text\" \/><\/label>\n                            <label class=\"pmcs-field\"><span>\u0415\u0413\u041d *<\/span><input id=\"pmpc-egn\" type=\"text\" \/><\/label>\n                        <\/div>\n                        <input id=\"pmpc-terms\" type=\"hidden\" \/>\n                        <div class=\"pmcs-field\">\n                            <span>\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043d\u0430 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430<\/span>\n                            <div id=\"pmpc-terms-view\" class=\"pmpc-terms-box\"><\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div id=\"pmpc-stage-only\" style=\"display:none\">\n                        <label class=\"pmcs-checks pmpc-terms-ack\">\n                            <input id=\"pmpc-terms-ack\" type=\"checkbox\" \/>\n                            <span>\u0417\u0430\u043f\u043e\u0437\u043d\u0430\u0442 \u0441\u044a\u043c \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0442\u0430 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430 *<\/span>\n                        <\/label>\n                    <\/div>\n\n                    <div class=\"pmcs-checks\">\n                        <p><strong>\u041f\u0430\u043a\u0435\u0442:<\/strong> <span id=\"pmpc-package-name\"><\/span><\/p>\n                        <p id=\"pmpc-package-sessions-row\"><strong id=\"pmpc-package-sessions-label\">\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0438:<\/strong> <span id=\"pmpc-package-sessions\"><\/span><\/p>\n                        <p id=\"pmpc-package-price-row\"><strong>\u0426\u0435\u043d\u0430:<\/strong> <span id=\"pmpc-package-price\"><\/span><\/p>\n                    <\/div>\n\n                    <div id=\"pmpc-contract-sign-block\" style=\"display:block\">\n                        <div class=\"pmpc-sign-grid\">\n                            <div class=\"pmpc-sign-col\">\n                                <h4>\u0418\u0417\u041f\u042a\u041b\u041d\u0418\u0422\u0415\u041b<\/h4>\n                                <p>\"\u0410\u0418\u041f\u0421\u0418\u041c\u041f \u0425\u0415\u041b\u0422 \u041c\u0415\u0414 \u0422\u0415\u0420\u0410\u041f\u0418\" \u0415\u041e\u041e\u0414<\/p>\n                                <label class=\"pmcs-field\">\n                                    <span>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b *<\/span>\n                                    <input id=\"pmpc-center-rep-name\" type=\"text\" \/>\n                                <\/label>\n                                <div class=\"pmcs-sign\">\n                                    <div class=\"pmcs-sign-head\"><strong>\u041f\u043e\u0434\u043f\u0438\u0441 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b *<\/strong><span id=\"pmpc-q-rep\" class=\"pmcs-quality\">\u041d\u044f\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441<\/span><\/div>\n                                    <div class=\"pmcs-canvas-wrap\"><canvas id=\"pmpc-canvas-rep\" aria-label=\"\u041f\u043e\u043b\u0435 \u0437\u0430 \u043f\u043e\u0434\u043f\u0438\u0441 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\"><\/canvas><\/div>\n                                    <div class=\"pmcs-inline-actions\">\n                                        <button type=\"button\" class=\"pmcs-btn pmcs-btn-light\" id=\"pmpc-undo-rep\">\u041d\u0430\u0437\u0430\u0434<\/button>\n                                        <button type=\"button\" class=\"pmcs-btn pmcs-btn-light\" id=\"pmpc-clear-rep\">\u0418\u0437\u0447\u0438\u0441\u0442\u0438<\/button>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                            <div class=\"pmpc-sign-col pmpc-sign-col-patient\">\n                                <h4>\u041f\u0430\u0446\u0438\u0435\u043d\u0442<\/h4>\n                                <label class=\"pmcs-field\">\n                                    <span>\u0418\u043c\u0435 *<\/span>\n                                    <input id=\"pmpc-patient-sign-name\" type=\"text\" \/>\n                                <\/label>\n                                <div class=\"pmcs-sign\">\n                                    <div class=\"pmcs-sign-head\"><strong>\u041f\u043e\u0434\u043f\u0438\u0441 \u043d\u0430 \u043f\u0430\u0446\u0438\u0435\u043d\u0442 *<\/strong><span id=\"pmpc-q\" class=\"pmcs-quality\">\u041d\u044f\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441<\/span><\/div>\n                                    <div class=\"pmcs-canvas-wrap\"><canvas id=\"pmpc-canvas\" aria-label=\"\u041f\u043e\u043b\u0435 \u0437\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\"><\/canvas><\/div>\n                                    <div class=\"pmcs-inline-actions\">\n                                        <button type=\"button\" class=\"pmcs-btn pmcs-btn-light\" id=\"pmpc-undo\">\u041d\u0430\u0437\u0430\u0434<\/button>\n                                        <button type=\"button\" class=\"pmcs-btn pmcs-btn-light\" id=\"pmpc-clear\">\u0418\u0437\u0447\u0438\u0441\u0442\u0438<\/button>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                        <label class=\"pmcs-field\">\n                            <span>\u0414\u0430\u0442\u0430 \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0432\u0430\u043d\u0435 *<\/span>\n                            <input id=\"pmpc-contract-date\" type=\"date\" \/>\n                        <\/label>\n                    <\/div>\n\n                    <div id=\"pmpc-procedure-sign-block\" style=\"display:none\">\n                        <div class=\"pmcs-sign\">\n                            <div class=\"pmcs-sign-head\"><strong>\u041f\u043e\u0434\u043f\u0438\u0441 *<\/strong><span id=\"pmpc-q-stage\" class=\"pmcs-quality\">\u041d\u044f\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441<\/span><\/div>\n                            <div class=\"pmcs-canvas-wrap\"><canvas id=\"pmpc-canvas-stage\" aria-label=\"\u041f\u043e\u043b\u0435 \u0437\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\"><\/canvas><\/div>\n                            <div class=\"pmcs-inline-actions\">\n                                <button type=\"button\" class=\"pmcs-btn pmcs-btn-light\" id=\"pmpc-undo-stage\">\u041d\u0430\u0437\u0430\u0434<\/button>\n                                <button type=\"button\" class=\"pmcs-btn pmcs-btn-light\" id=\"pmpc-clear-stage\">\u0418\u0437\u0447\u0438\u0441\u0442\u0438<\/button>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"pmcs-actions\"><button type=\"button\" class=\"pmcs-btn pmcs-btn-primary\" id=\"pmpc-save\">\u0417\u0430\u043f\u0430\u0437\u0438<\/button><\/div>\n                <\/div>\n            <\/section>\n\n            <style>\n                .pmpc-sign-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; margin-bottom:12px; }\n                .pmpc-sign-col { border:1px solid #e5e7eb; border-radius:10px; padding:12px; background:#fff; display:flex; flex-direction:column; }\n                .pmpc-sign-col h4 { margin:0 0 8px; font-size:14px; letter-spacing:.02em; }\n                .pmpc-sign-col p { margin:0 0 8px; }\n                .pmpc-sign-col > p:first-of-type { min-height:42px; }\n                .pmpc-sign-col-patient .pmcs-field:first-of-type { margin-top:50px; }\n                .pmpc-locked-field { background:#f8fafc !important; color:#334155 !important; cursor:not-allowed; }\n                #pmpc-stage-only .pmcs-checks { display:block; }\n                #pmpc-stage-only .pmcs-checks label { display:flex; align-items:center; gap:8px; margin:8px 0; }\n                .pmpc-terms-box { border:1px solid #d1d5db; border-radius:10px; background:#f8fafc; padding:10px 12px; white-space:pre-line; color:#111827; line-height:1.5; }\n                .pmcs-sign { border:1px solid #c7d2e5 !important; border-radius:12px !important; background:#f8fbff !important; padding:12px !important; box-shadow:0 1px 0 rgba(15,23,42,.03); }\n                .pmcs-canvas-wrap { position:relative !important; border:2px solid #64748b !important; border-radius:10px !important; background:#fff !important; overflow:hidden !important; min-height:220px !important; box-shadow: inset 0 0 0 1px #cbd5e1; }\n                .pmcs-canvas-wrap::before { content:'\u041f\u041e\u041b\u0415 \u0417\u0410 \u041f\u041e\u0414\u041f\u0418\u0421'; position:absolute; top:8px; left:10px; font-size:12px; font-weight:700; color:#475569; letter-spacing:.02em; pointer-events:none; }\n                .pmcs-canvas-wrap canvas { width:100% !important; height:220px !important; display:block !important; touch-action:none !important; }\n                @media (max-width:900px){ .pmpc-sign-grid { grid-template-columns:1fr; } }\n            <\/style>\n\n            <script>window.PMPackageContract={\"ajaxUrl\":\"https:\\\/\\\/wp1.truester.win\\\/wp-admin\\\/admin-ajax.php\",\"nonce\":\"301db62452\",\"stage\":\"contract\",\"prefill\":{\"name\":\"\",\"email\":\"\"},\"ctx\":{\"package_id\":0,\"package_customer_id\":0,\"package_customer_service_id\":0,\"appointment_id\":0,\"appointment_date\":\"\",\"session_label\":\"\",\"package_name\":\"\",\"package_price\":\"\",\"package_sessions\":0},\"hideEmail\":false,\"centerRepresentativeDefault\":\"\\u0413\\u0435\\u043e\\u0440\\u0433\\u0438 \\u0422\\u043e\\u0434\\u043e\\u0440\\u043e\\u0432\"};<\/script>\n            <script>\n            (function(){\n                const cfg = window.PMPackageContract || {};\n                const q = (s) => document.querySelector(s);\n                const a = q('#pmpc-alert');\n                const stage = String(cfg.stage || 'contract');\n                const isContract = stage === 'contract';\n                const win1252 = {\n                    0x20AC: 0x80, 0x201A: 0x82, 0x0192: 0x83, 0x201E: 0x84, 0x2026: 0x85,\n                    0x2020: 0x86, 0x2021: 0x87, 0x02C6: 0x88, 0x2030: 0x89, 0x0160: 0x8A,\n                    0x2039: 0x8B, 0x0152: 0x8C, 0x017D: 0x8E, 0x2018: 0x91, 0x2019: 0x92,\n                    0x201C: 0x93, 0x201D: 0x94, 0x2022: 0x95, 0x2013: 0x96, 0x2014: 0x97,\n                    0x02DC: 0x98, 0x2122: 0x99, 0x0161: 0x9A, 0x203A: 0x9B, 0x0153: 0x9C,\n                    0x017E: 0x9E, 0x0178: 0x9F\n                };\n\n                function clean(value) {\n                    const input = String(value == null ? '' : value);\n                    if (!\/[\\u00c3\\u00c2\\u00d0\\u00d1]\/.test(input) || typeof TextDecoder === 'undefined') {\n                        return input;\n                    }\n                    try {\n                        const bytes = [];\n                        for (let i = 0; i < input.length; i++) {\n                            const code = input.charCodeAt(i);\n                            bytes.push(win1252[code] || (code <= 255 ? code : 63));\n                        }\n                        const decoded = new TextDecoder('utf-8', { fatal: false }).decode(new Uint8Array(bytes));\n                        return decoded && !\/[\\u00c3\\u00c2\\u00d0\\u00d1]\/.test(decoded) ? decoded : input;\n                    } catch (e) {\n                        return input;\n                    }\n                }\n\n                function cleanTextNodeTree(root) {\n                    if (!root || typeof document.createTreeWalker !== 'function') {\n                        return;\n                    }\n                    const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n                    const nodes = [];\n                    let node;\n                    while ((node = walker.nextNode())) {\n                        nodes.push(node);\n                    }\n                    nodes.forEach((textNode) => {\n                        textNode.nodeValue = clean(textNode.nodeValue);\n                    });\n                    root.querySelectorAll('[aria-label], [title], [placeholder], input[value]').forEach((nodeWithText) => {\n                        ['aria-label', 'title', 'placeholder', 'value'].forEach((attr) => {\n                            if (nodeWithText.hasAttribute(attr)) {\n                                nodeWithText.setAttribute(attr, clean(nodeWithText.getAttribute(attr)));\n                            }\n                        });\n                    });\n                }\n\n                const el = {\n                    n: q('#pmpc-name'),\n                    e: q('#pmpc-email'),\n                    ew: q('#pmpc-email-wrap'),\n                    ad: q('#pmpc-address'),\n                    egn: q('#pmpc-egn'),\n                    t: q('#pmpc-terms'),\n                    tv: q('#pmpc-terms-view'),\n                    ack: q('#pmpc-terms-ack'),\n                    pn: q('#pmpc-package-name'),\n                    psl: q('#pmpc-package-sessions-label'),\n                    psr: q('#pmpc-package-sessions-row'),\n                    ppr: q('#pmpc-package-price-row'),\n                    ps: q('#pmpc-package-sessions'),\n                    pp: q('#pmpc-package-price'),\n                    repName: q('#pmpc-center-rep-name'),\n                    repC: q('#pmpc-canvas-rep'),\n                    repQ: q('#pmpc-q-rep'),\n                    repU: q('#pmpc-undo-rep'),\n                    repCl: q('#pmpc-clear-rep'),\n                    patientSignName: q('#pmpc-patient-sign-name'),\n                    signDate: q('#pmpc-contract-date'),\n                    c: q('#pmpc-canvas'),\n                    q: q('#pmpc-q'),\n                    u: q('#pmpc-undo'),\n                    cl: q('#pmpc-clear'),\n                    cs: q('#pmpc-canvas-stage'),\n                    qs: q('#pmpc-q-stage'),\n                    us: q('#pmpc-undo-stage'),\n                    cls: q('#pmpc-clear-stage'),\n                    s: q('#pmpc-save')\n                };\n\n                if (!el.s) return;\n                cleanTextNodeTree(document.querySelector('.pmcs-wrap'));\n\n                function msg(m, t){ a.textContent = clean(m); a.className = 'pmcs-alert ' + (t || 'error'); a.hidden = false; }\n                function clr(){ a.hidden = true; a.textContent = ''; a.className = 'pmcs-alert'; }\n                function lockField(node) {\n                    if (!node) return;\n                    node.readOnly = true;\n                    node.setAttribute('readonly', 'readonly');\n                    node.setAttribute('aria-readonly', 'true');\n                    node.classList.add('pmpc-locked-field');\n                }\n\n                if (cfg.hideEmail && el.ew) el.ew.style.display = 'none';\n                if (cfg.prefill) {\n                    if (cfg.prefill.name && el.n) el.n.value = clean(cfg.prefill.name);\n                    if (cfg.prefill.email && el.e) el.e.value = clean(cfg.prefill.email);\n                }\n                if (cfg.prefill && cfg.prefill.name) {\n                    lockField(el.n);\n                }\n\n                const rawCtx = cfg.ctx || {};\n                const ctx = {\n                    package_id: rawCtx.package_id || 0,\n                    package_customer_id: rawCtx.package_customer_id || 0,\n                    package_customer_service_id: rawCtx.package_customer_service_id || 0,\n                    appointment_id: rawCtx.appointment_id || 0,\n                    appointment_date: clean(rawCtx.appointment_date || ''),\n                    session_label: clean(rawCtx.session_label || ''),\n                    package_name: clean(rawCtx.package_name || ''),\n                    package_price: clean(rawCtx.package_price || ''),\n                    package_sessions: rawCtx.package_sessions || 0\n                };\n                const contractTerms = [\n                    '2. \u0412\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0435 3 (\u0442\u0440\u0438) \u043c\u0435\u0441\u0435\u0446\u0430 \u043e\u0442 \u0434\u0430\u0442\u0430\u0442\u0430 \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0432\u0430\u043d\u0435.',\n                    '3. \u0417\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0447\u0430\u0441 \u0441\u0435 \u0438\u0437\u0432\u044a\u0440\u0448\u0432\u0430 \u0441 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u0430 \u0443\u0433\u043e\u0432\u043e\u0440\u043a\u0430.',\n                    '4. \u041f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0447\u0430\u0441 \u0435 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0441\u0430\u043c\u043e \u0432\u0435\u0434\u043d\u044a\u0436 \u0438 \u043d\u0435 \u043f\u043e-\u043a\u044a\u0441\u043d\u043e \u043e\u0442 48 \u0447\u0430\u0441\u0430 \u043f\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u0442\u0430.',\n                    '5. \u0417\u0430\u043a\u044a\u0441\u043d\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043d\u0435\u044f\u0432\u044f\u0432\u0430\u043d\u0435 \u0437\u0430 \u0443\u0433\u043e\u0432\u043e\u0440\u0435\u043d \u0447\u0430\u0441 \u0441\u0435 \u0441\u0447\u0438\u0442\u0430 \u0437\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d \u0447\u0430\u0441 \u043e\u0442 \u043f\u0430\u043a\u0435\u0442\u0430.',\n                    '6. \u0422\u0435\u0440\u0430\u043f\u0435\u0432\u0442\u044a\u0442 \u043d\u0435 \u043d\u043e\u0441\u0438 \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u043d\u043e\u0441\u0442 \u0437\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043d\u0430\u0442\u0438 \u0447\u0430\u0441\u043e\u0432\u0435.'\n                ].map(clean).join('\\n');\n                if (el.pn) el.pn.textContent = ctx.package_name || '-';\n                if (!isContract) {\n                    if (el.psl) el.psl.textContent = clean('\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430:');\n                    if (el.ps) el.ps.textContent = ctx.session_label ? String(ctx.session_label) : '-';\n                    if (el.ppr) el.ppr.style.display = 'none';\n                } else {\n                    if (el.psl) el.psl.textContent = clean('\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0438:');\n                    if (el.ps) el.ps.textContent = ctx.package_sessions ? String(ctx.package_sessions) : '-';\n                    if (el.pp) el.pp.textContent = ctx.package_price ? String(ctx.package_price) + clean(' \u043b\u0432.') : '-';\n                    if (el.ppr) el.ppr.style.display = '';\n                }\n                if (isContract && el.t) {\n                    el.t.value = contractTerms;\n                }\n                if (isContract && el.tv) {\n                    el.tv.textContent = contractTerms;\n                }\n                if (isContract && el.repName && !el.repName.value) el.repName.value = clean(cfg.centerRepresentativeDefault || '\u0413\u0435\u043e\u0440\u0433\u0438 \u0422\u043e\u0434\u043e\u0440\u043e\u0432');\n                if (isContract && el.patientSignName && el.n && !el.patientSignName.value) el.patientSignName.value = String(el.n.value || '');\n                if (isContract && el.patientSignName && el.n && String(el.n.value || '').trim()) {\n                    el.patientSignName.value = String(el.n.value || '').trim();\n                    lockField(el.patientSignName);\n                }\n                if (isContract && el.signDate && !el.signDate.value) el.signDate.value = new Date().toISOString().slice(0, 10);\n\n                function createPad(canvas, qualityEl) {\n                    if (!canvas || !qualityEl) {\n                        return { resize(){}, clear(){}, undo(){}, metrics(){ return { valid:false, points:0 }; }, dataUrl(){ return ''; } };\n                    }\n                    const st = { s: [], a: null, d: false };\n                    const x = canvas.getContext('2d');\n                    function rs(){ const r = canvas.getBoundingClientRect(); if(!r.width || !r.height) return; canvas.width = Math.floor(r.width); canvas.height = 220; dr(); }\n                    function p(e){ const r = canvas.getBoundingClientRect(); return { x:e.clientX-r.left, y:e.clientY-r.top, t:Date.now() }; }\n                    function lw(){ x.lineWidth=2.2; x.lineJoin='round'; x.lineCap='round'; x.strokeStyle='#111827'; }\n                    function d(s){ if(!s || !s.length) return; lw(); if(s.length===1){ x.beginPath(); x.arc(s[0].x,s[0].y,1.2,0,Math.PI*2); x.fillStyle='#111827'; x.fill(); return; } x.beginPath(); x.moveTo(s[0].x,s[0].y); for(let i=1;i<s.length;i++) x.lineTo(s[i].x,s[i].y); x.stroke(); }\n                    function dr(){ x.clearRect(0,0,canvas.width,canvas.height); st.s.forEach(d); if(st.a) d(st.a); }\n                    function mt(){ let pts=[]; st.s.forEach(s=>pts=pts.concat(s)); if(!pts.length) return {valid:false,points:0}; let minX=pts[0].x,maxX=pts[0].x,minY=pts[0].y,maxY=pts[0].y,minT=pts[0].t,maxT=pts[0].t,l=0; st.s.forEach(s=>{ for(let i=0;i<s.length;i++){ const v=s[i]; minX=Math.min(minX,v.x); maxX=Math.max(maxX,v.x); minY=Math.min(minY,v.y); maxY=Math.max(maxY,v.y); minT=Math.min(minT,v.t); maxT=Math.max(maxT,v.t); if(i>0) l+=Math.hypot(v.x-s[i-1].x,v.y-s[i-1].y); }}); const ok=st.s.length>=1&&pts.length>=16&&(maxX-minX)>=30&&(maxY-minY)>=8&&(maxT-minT)>=120&&l>=45; return {valid:ok,points:pts.length}; }\n                    function uq(){ const m=mt(); qualityEl.className='pmcs-quality'; if(!m.points){ qualityEl.textContent=clean('\u041d\u044f\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441'); return; } if(m.valid){ qualityEl.classList.add('good'); qualityEl.textContent=clean('\u041e\u041a'); return; } qualityEl.classList.add('bad'); qualityEl.textContent=clean('\u041a\u0440\u0430\u0442\u044a\u043a'); }\n\n                    canvas.addEventListener('pointerdown',e=>{ e.preventDefault(); st.d=true; canvas.setPointerCapture(e.pointerId); st.a=[p(e)]; dr(); });\n                    canvas.addEventListener('pointermove',e=>{ if(!st.d||!st.a) return; e.preventDefault(); const v=p(e),l=st.a[st.a.length-1]; if(Math.hypot(v.x-l.x,v.y-l.y)<1.2) return; st.a.push(v); dr(); });\n                    function end(e){ if(!st.d||!st.a) return; e.preventDefault(); st.d=false; if(st.a.length) st.s.push(st.a); st.a=null; dr(); uq(); }\n                    canvas.addEventListener('pointerup', end); canvas.addEventListener('pointercancel', end);\n\n                    rs(); uq();\n                    return {\n                        resize(){ rs(); uq(); },\n                        clear(){ st.s=[]; st.a=null; dr(); uq(); },\n                        undo(){ if(st.s.length){ st.s.pop(); dr(); uq(); } },\n                        metrics(){ return mt(); },\n                        dataUrl(){ return canvas.toDataURL('image\/png'); }\n                    };\n                }\n\n                const padRepresentative = createPad(el.repC, el.repQ);\n                const padContract = createPad(el.c, el.q);\n                const padStage = createPad(el.cs, el.qs);\n\n                if (el.repU) el.repU.addEventListener('click', () => padRepresentative.undo());\n                if (el.repCl) el.repCl.addEventListener('click', () => padRepresentative.clear());\n                if (el.u) el.u.addEventListener('click', () => padContract.undo());\n                if (el.cl) el.cl.addEventListener('click', () => padContract.clear());\n                if (el.us) el.us.addEventListener('click', () => padStage.undo());\n                if (el.cls) el.cls.addEventListener('click', () => padStage.clear());\n\n                window.addEventListener('resize', () => {\n                    padRepresentative.resize();\n                    padContract.resize();\n                    padStage.resize();\n                });\n\n                async function save(payload) {\n                    const b = new URLSearchParams();\n                    b.set('action', 'pm_package_contract_save_submission');\n                    b.set('nonce', String(cfg.nonce || ''));\n                    b.set('payload', JSON.stringify(payload));\n                    const r = await fetch(String(cfg.ajaxUrl || '\/wp-admin\/admin-ajax.php'), {\n                        method: 'POST',\n                        credentials: 'same-origin',\n                        headers: { 'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8' },\n                        body: b.toString()\n                    });\n                    const j = await r.json().catch(() => null);\n                    if (!r.ok || !j || !j.success) {\n                        throw new Error(clean(j && j.data && j.data.message ? j.data.message : '\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441'));\n                    }\n                    return j.data || {};\n                }\n\n                function notifyParent(type, message, extra) {\n                    if (!window.parent || window.parent === window || typeof window.parent.postMessage !== 'function') {\n                        return;\n                    }\n                    const base = {\n                        source: 'pm_package_contract_form',\n                        type: type,\n                        message: String(message || '')\n                    };\n                    const data = Object.assign(base, extra || {});\n                    window.parent.postMessage(data, '*');\n                    if (window.top && window.top !== window.parent && typeof window.top.postMessage === 'function') {\n                        window.top.postMessage(data, '*');\n                    }\n                }\n\n                el.s.addEventListener('click', async () => {\n                    clr();\n                    if (!el.n || !String(el.n.value || '').trim()) return msg('\u0418\u043c\u0435\u0442\u043e \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e.', 'error');\n                    if (!el.e || !String(el.e.value || '').trim()) return msg('\u0418\u043c\u0435\u0439\u043b\u044a\u0442 \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u0435\u043d.', 'error');\n\n                    const termsAcknowledged = !isContract && !!(el.ack && el.ack.checked);\n                    const repMetrics = isContract ? padRepresentative.metrics() : { valid: true, points: 0 };\n                    const m = isContract ? padContract.metrics() : padStage.metrics();\n\n                    if (isContract) {\n                        if (!String(el.ad && el.ad.value || '').trim() || !String(el.egn && el.egn.value || '').trim()) {\n                            return msg('\u0410\u0434\u0440\u0435\u0441 \u0438 \u0415\u0413\u041d \u0441\u0430 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u0438.', 'error');\n                        }\n                        if (!String(el.repName && el.repName.value || '').trim()) {\n                            return msg('\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e.', 'error');\n                        }\n                        if (!repMetrics.valid) {\n                            return msg('\u041f\u043e\u0434\u043f\u0438\u0441\u044a\u0442 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u0435\u043d.', 'error');\n                        }\n                        if (!String(el.patientSignName && el.patientSignName.value || '').trim()) {\n                            return msg('\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u0432 \u0441\u0435\u043a\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 \u043f\u043e\u0434\u043f\u0438\u0441 \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e.', 'error');\n                        }\n                        if (!String(el.signDate && el.signDate.value || '').trim()) {\n                            return msg('\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0430\u0442\u0430 \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0432\u0430\u043d\u0435.', 'error');\n                        }\n                        if (!m.valid) return msg('\u041f\u043e\u0434\u043f\u0438\u0441\u044a\u0442 \u043d\u0430 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u0435\u043d.', 'error');\n                    } else {\n                        if (!termsAcknowledged) return msg('\u041f\u043e\u0442\u0432\u044a\u0440\u0434\u0435\u0442\u0435, \u0447\u0435 \u0441\u0442\u0435 \u0437\u0430\u043f\u043e\u0437\u043d\u0430\u0442\u0438 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0442\u0430 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430.', 'error');\n                        if (!m.valid) return msg('\u041f\u043e\u0434\u043f\u0438\u0441\u044a\u0442 \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u0435\u043d.', 'error');\n                    }\n\n                    const payload = {\n                        stage: String(cfg.stage || 'contract'),\n                        full_name: String(el.n.value || '').trim(),\n                        email: String(el.e.value || '').trim(),\n                        address: String((el.ad && el.ad.value) || '').trim(),\n                        egn: String((el.egn && el.egn.value) || '').trim(),\n                        contract_text: String((el.t && el.t.value) || '').trim(),\n                        center_representative_name: String((el.repName && el.repName.value) || '').trim(),\n                        center_representative_signature: isContract ? padRepresentative.dataUrl() : '',\n                        center_representative_signature_metrics: repMetrics,\n                        patient_sign_name: String((el.patientSignName && el.patientSignName.value) || '').trim(),\n                        contract_signed_on: String((el.signDate && el.signDate.value) || '').trim(),\n                        package_id: parseInt(ctx.package_id || 0, 10) || 0,\n                        package_customer_id: parseInt(ctx.package_customer_id || 0, 10) || 0,\n                        package_customer_service_id: parseInt(ctx.package_customer_service_id || 0, 10) || 0,\n                        appointment_id: parseInt(ctx.appointment_id || 0, 10) || 0,\n                        appointment_scheduled_at: String(ctx.appointment_date || '').trim(),\n                        session_label: String(ctx.session_label || '').trim(),\n                        package_name: String(ctx.package_name || ''),\n                        package_price: String(ctx.package_price || ''),\n                        package_sessions: parseInt(ctx.package_sessions || 0, 10) || 0,\n                        no_show: false,\n                        no_show_confirmed: false,\n                        terms_acknowledged: termsAcknowledged,\n                        signature_metrics: m,\n                        signature_strokes: [],\n                        signature_png_data_url: isContract ? padContract.dataUrl() : padStage.dataUrl()\n                    };\n\n                    const old = el.s.textContent;\n                    el.s.disabled = true;\n                    el.s.textContent = clean('\u0417\u0430\u043f\u0438\u0441...');\n                    try {\n                        const result = await save(payload);\n                        msg('\u0417\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e.', 'ok');\n                        notifyParent('pm_package_contract_submission_saved', clean('\u0417\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e.'), {\n                            stage: payload.stage,\n                            package_customer_id: payload.package_customer_id,\n                            package_customer_service_id: payload.package_customer_service_id,\n                            appointment_id: payload.appointment_id,\n                            submission_id: result && result.id ? Number(result.id) : 0\n                        });\n                    } catch (e) {\n                        const errMsg = clean(e && e.message ? e.message : '\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441.');\n                        msg(errMsg, 'error');\n                        notifyParent('pm_package_contract_submission_error', errMsg, {\n                            stage: payload.stage,\n                            package_customer_id: payload.package_customer_id,\n                            package_customer_service_id: payload.package_customer_service_id,\n                            appointment_id: payload.appointment_id\n                        });\n                    } finally {\n                        el.s.disabled = false;\n                        el.s.textContent = old;\n                    }\n                });\n            })();\n            <\/script>\n            <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-5156","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wp1.truester.win\/en\/wp-json\/wp\/v2\/pages\/5156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp1.truester.win\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wp1.truester.win\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wp1.truester.win\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wp1.truester.win\/en\/wp-json\/wp\/v2\/comments?post=5156"}],"version-history":[{"count":4,"href":"https:\/\/wp1.truester.win\/en\/wp-json\/wp\/v2\/pages\/5156\/revisions"}],"predecessor-version":[{"id":5161,"href":"https:\/\/wp1.truester.win\/en\/wp-json\/wp\/v2\/pages\/5156\/revisions\/5161"}],"wp:attachment":[{"href":"https:\/\/wp1.truester.win\/en\/wp-json\/wp\/v2\/media?parent=5156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}