{"id":12157,"date":"2026-07-12T15:18:17","date_gmt":"2026-07-12T12:18:17","guid":{"rendered":"https:\/\/altal.md\/?page_id=12157"},"modified":"2026-07-23T15:27:38","modified_gmt":"2026-07-23T12:27:38","slug":"configurator-pompa-de-caldura","status":"publish","type":"page","link":"https:\/\/altal.md\/ro\/instrumente-hvac\/configurator-pompa-de-caldura\/","title":{"rendered":"Configurator pomp\u0103 de c\u0103ldur\u0103"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"12157\" class=\"elementor elementor-12157\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c671ce7 e-flex e-con-boxed e-con e-parent\" data-id=\"c671ce7\" 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-93aef3e elementor-widget elementor-widget-html\" data-id=\"93aef3e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ================================================================ -->\r\n<!--  ALTAL Engineering Platform - CONFIGURATOR  v3.3                 -->\r\n<!--  \u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u043f\u043e\u043b\u0435\u043c \u0432\u0432\u043e\u0434\u0430 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e -->\r\n<!-- ================================================================ -->\r\n\r\n<style>\r\n    .altal-config-wrap {\r\n        max-width: 1100px;\r\n        margin: 0 auto;\r\n        font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n        background: #ffffff;\r\n        border-radius: 24px;\r\n        padding: 30px 32px;\r\n        box-shadow: 0 4px 24px rgba(0, 0, 0, 0.06);\r\n        border: 1px solid #eef2f6;\r\n        box-sizing: border-box;\r\n    }\r\n    .altal-config-wrap * { box-sizing: border-box; }\r\n    .altal-config-wrap h2 { color: #0b2b4a; font-weight: 600; font-size: 26px; margin: 0 0 6px 0; }\r\n    .altal-config-wrap .subtitle { color: #64748b; font-size: 15px; margin-bottom: 24px; }\r\n    \r\n    .altal-steps {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 8px;\r\n        margin-bottom: 24px;\r\n        padding-bottom: 16px;\r\n        border-bottom: 2px solid #f1f4f9;\r\n    }\r\n    .altal-steps .step {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        font-size: 13px;\r\n        font-weight: 500;\r\n        color: #94a3b8;\r\n        padding: 5px 14px;\r\n        border-radius: 20px;\r\n        background: #f8fafc;\r\n    }\r\n    .altal-steps .step.active { color: #0066cc; background: #dbeafe; }\r\n    .altal-steps .step .num {\r\n        display: inline-flex;\r\n        width: 22px;\r\n        height: 22px;\r\n        background: #e2e8f0;\r\n        border-radius: 50%;\r\n        align-items: center;\r\n        justify-content: center;\r\n        font-size: 11px;\r\n        font-weight: 700;\r\n        color: #475569;\r\n    }\r\n    .altal-steps .step.active .num { background: #0066cc; color: #fff; }\r\n    \r\n    .altal-info-bar {\r\n        background: #f1f5f9;\r\n        padding: 14px 20px;\r\n        border-radius: 12px;\r\n        margin-bottom: 20px;\r\n        border: 1px solid #e4ecf7;\r\n    }\r\n    .altal-info-grid {\r\n        display: grid;\r\n        grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\r\n        gap: 6px 20px;\r\n        font-size: 13px;\r\n        color: #1e293b;\r\n    }\r\n    .altal-info-grid span { padding: 2px 0; }\r\n    .altal-info-grid strong { color: #0b2b4a; }\r\n    .altal-info-grid input[type=\"number\"] {\r\n        width: 70px;\r\n        padding: 2px 6px;\r\n        border: 1px solid #ccc;\r\n        border-radius: 4px;\r\n        font-size: 13px;\r\n        font-weight: 600;\r\n        color: #0066cc;\r\n        background: #fff;\r\n    }\r\n    .altal-info-grid input[type=\"number\"]:focus {\r\n        border-color: #0066cc;\r\n        outline: none;\r\n        box-shadow: 0 0 0 2px rgba(0,102,204,0.2);\r\n    }\r\n    \r\n    .altal-grid {\r\n        display: grid;\r\n        grid-template-columns: 1fr 1fr;\r\n        gap: 16px;\r\n        margin: 16px 0 20px 0;\r\n    }\r\n    .altal-card {\r\n        border: 2px solid #e9edf2;\r\n        border-radius: 14px;\r\n        padding: 18px 20px;\r\n        cursor: pointer;\r\n        transition: all 0.25s;\r\n        background: #fafcff;\r\n    }\r\n    .altal-card:hover { border-color: #b3c9f0; transform: translateY(-2px); box-shadow: 0 8px 20px rgba(0,0,0,0.04); }\r\n    .altal-card.selected { border-color: #0066cc; background: #f0f7ff; box-shadow: 0 0 0 3px rgba(0,102,204,0.15); }\r\n    .altal-card h4 { margin: 0 0 4px 0; font-size: 16px; color: #0b2b4a; }\r\n    .altal-card .desc { font-size: 13px; color: #64748b; margin: 0; }\r\n    .altal-card .badge { display: inline-block; background: #eef2ff; color: #4338ca; font-size: 11px; padding: 2px 12px; border-radius: 12px; margin-top: 6px; }\r\n    \r\n    .altal-tolerance-wrap {\r\n        margin: 12px 0 18px 0;\r\n        padding: 16px 20px;\r\n        background: #f8fafc;\r\n        border-radius: 12px;\r\n        border: 1px solid #e9edf2;\r\n    }\r\n    .altal-tolerance-wrap label {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 16px;\r\n        flex-wrap: wrap;\r\n        font-weight: 500;\r\n        font-size: 15px;\r\n        color: #0b2b4a;\r\n    }\r\n    .altal-tolerance-wrap input[type=\"range\"] {\r\n        flex: 1;\r\n        min-width: 150px;\r\n        accent-color: #0066cc;\r\n    }\r\n    .altal-tolerance-wrap .tolerance-value {\r\n        font-weight: 700;\r\n        font-size: 18px;\r\n        color: #0066cc;\r\n        min-width: 50px;\r\n    }\r\n    .altal-tolerance-wrap .tolerance-note {\r\n        font-size: 13px;\r\n        color: #64748b;\r\n        margin-top: 6px;\r\n    }\r\n    \r\n    .altal-actions {\r\n        display: flex;\r\n        gap: 14px;\r\n        flex-wrap: wrap;\r\n        margin: 12px 0 20px 0;\r\n    }\r\n    .altal-btn-primary {\r\n        background: #0066cc;\r\n        color: #fff;\r\n        border: none;\r\n        padding: 12px 30px;\r\n        border-radius: 40px;\r\n        font-size: 15px;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        transition: 0.2s;\r\n    }\r\n    .altal-btn-primary:hover {\r\n        background: #004d99;\r\n        box-shadow: 0 6px 20px rgba(0,102,204,0.3);\r\n    }\r\n    .altal-btn-secondary {\r\n        background: #e9edf2;\r\n        color: #1e293b;\r\n        border: none;\r\n        padding: 12px 30px;\r\n        border-radius: 40px;\r\n        font-size: 15px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: 0.2s;\r\n    }\r\n    .altal-btn-secondary:hover { background: #d1d9e6; }\r\n    \r\n    .altal-loader { display: none; text-align: center; padding: 30px; color: #0066cc; font-weight: 500; }\r\n    .altal-loader.active { display: block; }\r\n    \r\n    .altal-result { display: none; margin-top: 24px; border-top: 2px solid #f1f4f9; padding-top: 24px; }\r\n    .altal-result.active { display: block; animation: altalFade 0.4s ease; }\r\n    @keyframes altalFade { 0% { opacity: 0; transform: translateY(12px); } 100% { opacity: 1; transform: translateY(0); } }\r\n    .altal-result h3 {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        font-size: 20px;\r\n        color: #0b2b4a;\r\n        margin: 0 0 16px 0;\r\n    }\r\n    .altal-result .count { font-size: 14px; font-weight: 400; color: #64748b; }\r\n    \r\n    .altal-hp-card {\r\n        border: 2px solid #e9edf2;\r\n        border-radius: 14px;\r\n        padding: 16px 20px;\r\n        margin-bottom: 10px;\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        flex-wrap: wrap;\r\n        gap: 12px;\r\n        background: #fff;\r\n        transition: 0.2s;\r\n    }\r\n    .altal-hp-card:hover { border-color: #b3c9f0; }\r\n    .altal-hp-card.recommended { border-color: #0066cc; background: #f0f7ff; }\r\n    .altal-hp-card .info { flex: 1; min-width: 200px; }\r\n    .altal-hp-card .model { font-weight: 600; font-size: 16px; color: #0b2b4a; }\r\n    .altal-hp-card .specs { font-size: 13px; color: #64748b; margin-top: 2px; }\r\n    .altal-hp-card .price-area { text-align: right; min-width: 120px; }\r\n    .altal-hp-card .price { font-weight: 700; font-size: 20px; color: #0066cc; }\r\n    .altal-hp-card .btn-select {\r\n        background: #0066cc;\r\n        color: #fff;\r\n        border: none;\r\n        padding: 6px 18px;\r\n        border-radius: 30px;\r\n        font-size: 13px;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        transition: 0.2s;\r\n        margin-top: 4px;\r\n    }\r\n    .altal-hp-card .btn-select:hover { background: #004d99; }\r\n    .altal-hp-card .badge-rec {\r\n        background: #0066cc;\r\n        color: #fff;\r\n        font-size: 11px;\r\n        padding: 2px 12px;\r\n        border-radius: 12px;\r\n        margin-left: 8px;\r\n    }\r\n    \r\n    .altal-eco-grid {\r\n        display: grid;\r\n        grid-template-columns: 1fr 1fr 1fr 1fr;\r\n        gap: 14px;\r\n        margin: 16px 0;\r\n    }\r\n    .altal-eco-item {\r\n        background: #fff;\r\n        padding: 14px 16px;\r\n        border-radius: 12px;\r\n        text-align: center;\r\n        border: 1px solid #e9edf2;\r\n    }\r\n    .altal-eco-item .value { font-size: 22px; font-weight: 700; color: #0b2b4a; }\r\n    .altal-eco-item .label { font-size: 12px; color: #64748b; margin-top: 4px; }\r\n    \r\n    .altal-error {\r\n        display: none;\r\n        background: #fef2f2;\r\n        border: 1px solid #fca5a5;\r\n        color: #991b1b;\r\n        padding: 14px 18px;\r\n        border-radius: 12px;\r\n        margin: 12px 0;\r\n    }\r\n    .altal-error.active { display: block; }\r\n    \r\n    @media (max-width: 768px) {\r\n        .altal-config-wrap { padding: 18px 16px; }\r\n        .altal-grid { grid-template-columns: 1fr; }\r\n        .altal-eco-grid { grid-template-columns: 1fr 1fr; }\r\n        .altal-hp-card { flex-direction: column; align-items: stretch; }\r\n        .altal-hp-card .price-area { text-align: left; }\r\n        .altal-info-grid { grid-template-columns: 1fr 1fr; }\r\n    }\r\n<\/style>\r\n\r\n<div class=\"altal-config-wrap\" id=\"altalApp\">\r\n    <h2>\u26a1 ALTAL Configurator<\/h2>\r\n    <p class=\"subtitle\">Selectarea pompei de c\u0103ldur\u0103 pe baza datelor din calculator<\/p>\r\n\r\n    <div class=\"altal-steps\">\r\n        <span class=\"step active\"><span class=\"num\">1<\/span> Pierderi de c\u0103ldur\u0103<\/span>\r\n        <span class=\"step active\"><span class=\"num\">2<\/span> Tip pomp\u0103<\/span>\r\n        <span class=\"step\"><span class=\"num\">3<\/span> Selectare<\/span>\r\n        <span class=\"step\"><span class=\"num\">4<\/span> Specifica\u021bii<\/span>\r\n    <\/div>\r\n\r\n    <!-- ===== \u0420\u0410\u0421\u0428\u0418\u0420\u0415\u041d\u041d\u042b\u0419 \u0418\u041d\u0424\u041e-\u0411\u0410\u0420 \u0421 \u0412\u041e\u0417\u041c\u041e\u0416\u041d\u041e\u0421\u0422\u042c\u042e \u0420\u0415\u0414\u0410\u041a\u0422\u0418\u0420\u041e\u0412\u0410\u041d\u0418\u042f ===== -->\r\n    <div class=\"altal-info-bar\">\r\n        <div class=\"altal-info-grid\">\r\n            <span><strong>\ud83c\udfe0 Obiect:<\/strong> <span id=\"infoBuilding\">-<\/span><\/span>\r\n            <span><strong>\ud83d\udcd0 Suprafa\u021b\u0103:<\/strong> <span id=\"infoArea\">-<\/span> m\u00b2<\/span>\r\n            <span><strong>\ud83d\udccf Etaje:<\/strong> <span id=\"infoFloors\">-<\/span><\/span>\r\n            <span><strong>\ud83d\udd25 Pierderi c\u0103ldur\u0103:<\/strong> <span id=\"infoHeatLoss\">-<\/span> kW<\/span>\r\n            <span><strong>\u26a1 Putere recomandat\u0103:<\/strong> \r\n                <input type=\"number\" id=\"infoRecommended\" step=\"0.1\" min=\"0.1\" value=\"15.8\"> kW\r\n                <span style=\"font-size:11px; color:#888; display:inline-block; margin-left:4px;\">(edita\u021bi)<\/span>\r\n            <\/span>\r\n            <span><strong>\ud83d\udcc5 Regiune:<\/strong> <span id=\"infoRegion\">-<\/span><\/span>\r\n            <span><strong>\ud83c\udf21\ufe0f Sistem:<\/strong> <span id=\"infoSystem\">-<\/span><\/span>\r\n            <span><strong>\ud83e\ude9f Ferestre:<\/strong> <span id=\"infoWindows\">-<\/span> m\u00b2<\/span>\r\n            <span><strong>\ud83d\udc65 Ocupan\u021bi:<\/strong> <span id=\"infoPeople\">-<\/span><\/span>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <h3 style=\"margin: 0 0 6px 0; font-size: 18px; color: #0b2b4a;\">\ud83d\udd0b Selecta\u021bi tipul pompei de c\u0103ldur\u0103<\/h3>\r\n    <div class=\"altal-grid\" id=\"hpTypeGrid\">\r\n        <div class=\"altal-card selected\" data-value=\"split\">\r\n            <h4>\ud83c\udf2c\ufe0f Aer-ap\u0103 Split<\/h4>\r\n            <p class=\"desc\">Unitate exterioar\u0103 + interioar\u0103. EVI op\u021bional.<\/p>\r\n            <span class=\"badge\">\u2b50 Popular<\/span>\r\n        <\/div>\r\n        <div class=\"altal-card\" data-value=\"full_split\">\r\n            <h4>\ud83c\udfe0 Aer-ap\u0103 Full SPLIT<\/h4>\r\n            <p class=\"desc\">Compresor \u00een interior. EVI op\u021bional.<\/p>\r\n            <span class=\"badge\">\ud83d\udd1d Premium<\/span>\r\n        <\/div>\r\n        <div class=\"altal-card\" data-value=\"mono\">\r\n            <h4>\ud83d\udce6 Aer-ap\u0103 MONO<\/h4>\r\n            <p class=\"desc\">Monobloc. EVI op\u021bional.<\/p>\r\n            <span class=\"badge\">\ud83d\udcb0 Buget<\/span>\r\n        <\/div>\r\n        <div class=\"altal-card\" data-value=\"water\">\r\n            <h4>\ud83c\udf0d Ap\u0103-ap\u0103 (Geotermal)<\/h4>\r\n            <p class=\"desc\">COP stabil. R\u0103cire pasiv\u0103.<\/p>\r\n            <span class=\"badge\">\ud83d\udc8e Eficien\u021b\u0103 maxim\u0103<\/span>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u0410\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044f -->\r\n    <div class=\"altal-tolerance-wrap\">\r\n        <label>\r\n            <span>\ud83c\udfaf Aproximarea puterii:<\/span>\r\n            <input type=\"range\" id=\"toleranceSlider\" min=\"0\" max=\"50\" value=\"15\">\r\n            <span class=\"tolerance-value\" id=\"toleranceValue\">15%<\/span>\r\n        <\/label>\r\n        <div class=\"tolerance-note\">Interval de selec\u021bie: \u00b1<span id=\"toleranceRange\">15<\/span>% din puterea recomandat\u0103<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"altal-actions\">\r\n        <button class=\"altal-btn-primary\" id=\"searchBtn\">\ud83d\udd0d Selecteaz\u0103 echipamentul<\/button>\r\n        <button class=\"altal-btn-secondary\" id=\"resetBtn\">\ud83d\udd04 Reseteaz\u0103<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"altal-loader\" id=\"loader\">\u23f3 Se \u00eencarc\u0103 echipamentul din catalogul ALTAL...<\/div>\r\n    <div class=\"altal-error\" id=\"errorMsg\">\u26a0\ufe0f Eroare: verifica\u021bi conexiunea la internet<\/div>\r\n\r\n    <div class=\"altal-result\" id=\"resultBlock\">\r\n        <h3>\r\n            \ud83d\udccb Pompe de c\u0103ldur\u0103 potrivite\r\n            <span class=\"count\" id=\"matchCount\">G\u0103site: 0<\/span>\r\n        <\/h3>\r\n        <div id=\"hpList\"><\/div>\r\n\r\n        <div class=\"altal-eco-grid\" id=\"ecoGrid\" style=\"display:none;\">\r\n            <div class=\"altal-eco-item\">\r\n                <div class=\"value\" id=\"ecoCapex\">0<\/div>\r\n                <div class=\"label\">CAPEX (echipament + instalare), \u20ac<\/div>\r\n            <\/div>\r\n            <div class=\"altal-eco-item\">\r\n                <div class=\"value\" id=\"ecoOpex\">0<\/div>\r\n                <div class=\"label\">OPEX (energie electric\u0103 anual), \u20ac<\/div>\r\n            <\/div>\r\n            <div class=\"altal-eco-item\">\r\n                <div class=\"value\" id=\"ecoPayback\">0<\/div>\r\n                <div class=\"label\">Rambursare, ani<\/div>\r\n            <\/div>\r\n            <div class=\"altal-eco-item\">\r\n                <div class=\"value\" id=\"ecoCO2\">0<\/div>\r\n                <div class=\"label\">Economie CO\u2082, tone\/an<\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div style=\"display:flex; gap:12px; flex-wrap:wrap; margin-top:12px;\">\r\n            <button class=\"altal-btn-primary\" id=\"getQuoteBtn\">\ud83d\udcc4 Ob\u021bine\u021bi ofert\u0103 comercial\u0103<\/button>\r\n            <button class=\"altal-btn-secondary\" id=\"savePassportBtn\">\ud83d\udcbe Salva\u021bi \u00een Project Passport<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function() {\r\n    'use strict';\r\n\r\n    const API_URL = '\/wp-json\/altal\/v1\/heat-pumps';\r\n    \r\n\/\/ ===== \u0427\u0418\u0422\u0410\u0415\u041c \u0412\u0421\u0415 \u0414\u0410\u041d\u041d\u042b\u0415 \u0418\u0417 localStorage =====\r\nconst heatLoss = parseFloat(localStorage.getItem('altal_heat_loss')) || 12.8;\r\nconst buildingType = localStorage.getItem('altal_building_type') || 'Vil\u0103';\r\nconst region = localStorage.getItem('altal_region') || 'Chi\u0219in\u0103u';\r\nconst system = localStorage.getItem('altal_system') || 'floor';\r\nconst area = localStorage.getItem('altal_area') || '\u2014';\r\nconst floors = localStorage.getItem('altal_floors') || '\u2014';\r\nconst windows = localStorage.getItem('altal_windows') || '\u2014';\r\n\r\n\/\/ ===== \u0420\u0415\u041a\u041e\u041c\u0415\u041d\u0414\u0423\u0415\u041c\u0410\u042f \u041c\u041e\u0429\u041d\u041e\u0421\u0422\u042c \u0421 \u0423\u0427\u0415\u0422\u041e\u041c \u0420\u0423\u0427\u041d\u042b\u0425 \u0418\u0417\u041c\u0415\u041d\u0415\u041d\u0418\u0419 =====\r\nconst isManualPower = localStorage.getItem('altal_manual_power') === 'true';\r\nlet defaultRecommended = 20;\r\n\r\nif (isManualPower) {\r\n    \/\/ \u0415\u0441\u043b\u0438 \u0431\u044b\u043b\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e - \u0431\u0435\u0440\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\r\n    const savedPower = localStorage.getItem('altal_recommended_power');\r\n    if (savedPower !== null) {\r\n        defaultRecommended = parseFloat(savedPower);\r\n    }\r\n} else {\r\n    \/\/ \u0415\u0441\u043b\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e - \u0431\u0435\u0440\u0435\u043c \u0438\u0437 \u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\r\n    const storedRecommended = localStorage.getItem('altal_recommended_power');\r\n    if (storedRecommended !== null) {\r\n        defaultRecommended = parseFloat(storedRecommended);\r\n    } else {\r\n        defaultRecommended = heatLoss * 2.0;\r\n    }\r\n}\r\n\r\nif (isNaN(defaultRecommended) || defaultRecommended <= 0) {\r\n    defaultRecommended = 20;\r\n}\r\n\r\nlet people = '\u2014';\r\ntry {\r\n    const passportData = JSON.parse(localStorage.getItem('altal_passport_data'));\r\n    if (passportData && passportData.residents_count) {\r\n        people = passportData.residents_count;\r\n    }\r\n} catch(e) {}\r\n\r\n\/\/ ===== \u041f\u041e\u041b\u0415 \u0412\u0412\u041e\u0414\u0410 \u0420\u0415\u041a\u041e\u041c\u0415\u041d\u0414\u0423\u0415\u041c\u041e\u0419 \u041c\u041e\u0429\u041d\u041e\u0421\u0422\u0418 =====\r\nconst recommendedInput = document.getElementById('infoRecommended');\r\nrecommendedInput.value = defaultRecommended.toFixed(1);\r\nlet manualRecommendedPower = defaultRecommended;\r\n\r\nrecommendedInput.addEventListener('change', function() {\r\n    const val = parseFloat(this.value);\r\n    if (!isNaN(val) && val > 0) {\r\n        manualRecommendedPower = val;\r\n        \/\/ \u041e\u0411\u041d\u041e\u0412\u041b\u042f\u0415\u041c defaultRecommended\r\n        defaultRecommended = val;\r\n        \/\/ \u0421\u041e\u0425\u0420\u0410\u041d\u042f\u0415\u041c \u0412 localStorage\r\n        localStorage.setItem('altal_recommended_power', val.toString());\r\n        localStorage.setItem('altal_manual_power', 'true');\r\n        fetchHeatPumps();\r\n    } else {\r\n        this.value = manualRecommendedPower.toFixed(1);\r\n    }\r\n});\r\n    \r\n    \/\/ ===== \u0417\u0410\u041f\u041e\u041b\u041d\u042f\u0415\u041c \u0418\u041d\u0424\u041e-\u0411\u0410\u0420 =====\r\n    document.getElementById('infoHeatLoss').textContent = heatLoss.toFixed(1);\r\n    document.getElementById('infoBuilding').textContent = buildingType;\r\n    document.getElementById('infoRegion').textContent = region;\r\n    document.getElementById('infoSystem').textContent = system === 'floor' ? 'Pardoseal\u0103 cald\u0103' : system === 'radiator' ? 'Radiatoare' : 'Ventiloconvectoare';\r\n    document.getElementById('infoArea').textContent = area;\r\n    document.getElementById('infoFloors').textContent = floors;\r\n    document.getElementById('infoWindows').textContent = windows;\r\n    document.getElementById('infoPeople').textContent = people;\r\n\r\n    \/\/ ===== DOM \u042d\u041b\u0415\u041c\u0415\u041d\u0422\u042b =====\r\n    const cards = document.querySelectorAll('.altal-card');\r\n    const searchBtn = document.getElementById('searchBtn');\r\n    const resetBtn = document.getElementById('resetBtn');\r\n    const loader = document.getElementById('loader');\r\n    const errorMsg = document.getElementById('errorMsg');\r\n    const resultBlock = document.getElementById('resultBlock');\r\n    const hpList = document.getElementById('hpList');\r\n    const matchCount = document.getElementById('matchCount');\r\n    const ecoGrid = document.getElementById('ecoGrid');\r\n    const toleranceSlider = document.getElementById('toleranceSlider');\r\n    const toleranceValue = document.getElementById('toleranceValue');\r\n    const toleranceRange = document.getElementById('toleranceRange');\r\n\r\n    let selectedType = 'split';\r\n    let hpData = [];\r\n    let selectedHpId = null;\r\n\r\n    \/\/ ===== \u0421\u041b\u0410\u0419\u0414\u0415\u0420 =====\r\n    toleranceSlider.addEventListener('input', function() {\r\n        const val = this.value;\r\n        toleranceValue.textContent = val + '%';\r\n        toleranceRange.textContent = val;\r\n        fetchHeatPumps();\r\n    });\r\n\r\n    \/\/ ===== \u0412\u042b\u0411\u041e\u0420 \u0422\u0418\u041f\u0410 =====\r\n    cards.forEach(card => {\r\n        card.addEventListener('click', function() {\r\n            cards.forEach(c => c.classList.remove('selected'));\r\n            this.classList.add('selected');\r\n            selectedType = this.dataset.value;\r\n            fetchHeatPumps();\r\n        });\r\n    });\r\n\r\n    \/\/ ===== \u041e\u0421\u041d\u041e\u0412\u041d\u041e\u0419 \u0417\u0410\u041f\u0420\u041e\u0421 =====\r\nasync function fetchHeatPumps() {\r\n    loader.classList.add('active');\r\n    resultBlock.classList.remove('active');\r\n    hpList.innerHTML = '';\r\n    errorMsg.classList.remove('active');\r\n\r\n    try {\r\n        \/\/ \u0418\u0421\u041f\u041e\u041b\u042c\u0417\u0423\u0415\u041c \u0422\u041e\u041b\u042c\u041a\u041e defaultRecommended (\u043e\u043d \u0443\u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d)\r\n        const targetPower = defaultRecommended;\r\n        const tolerance = parseFloat(toleranceSlider.value) \/ 100;\r\n        const minPower = Math.max(1, Math.round(targetPower * (1 - tolerance)));\r\n        const maxPower = Math.round(targetPower * (1 + tolerance));\r\n\r\n        const url = API_URL + `?min_power=${minPower}&max_power=${maxPower}&limit=100&t=${Date.now()}`;\r\n        console.log('\ud83d\udce4 Request:', url);\r\n        console.log('\ud83c\udfaf \u0426\u0435\u043b\u0435\u0432\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c:', targetPower, '\u043a\u0412\u0442');\r\n        console.log('\ud83d\udcca \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d:', minPower, '-', maxPower, '\u043a\u0412\u0442');\r\n\r\n        const response = await fetch(url);\r\n        if (!response.ok) throw new Error('HTTP ' + response.status);\r\n\r\n        const data = await response.json();\r\n        let filteredItems = data.items || [];\r\n\r\n        \/\/ ===== \u0424\u0418\u041b\u042c\u0422\u0420\u0410\u0426\u0418\u042f \u0422\u041e\u041b\u042c\u041a\u041e \u041f\u041e \u0410\u0422\u0420\u0418\u0411\u0423\u0422\u0410\u041c =====\r\n        switch(selectedType) {\r\n            case 'split':\r\n                filteredItems = filteredItems.filter(item => \r\n                    item.model_code === 'Split' && \r\n                    item.hp_type_raw === 'Aer-apa'\r\n                );\r\n                break;\r\n            case 'full_split':\r\n                filteredItems = filteredItems.filter(item => \r\n                    item.model_code === 'Full Split' && \r\n                    item.hp_type_raw === 'Aer-apa'\r\n                );\r\n                break;\r\n            case 'mono':\r\n                filteredItems = filteredItems.filter(item => \r\n                    item.model_code === 'Monobloc' && \r\n                    item.hp_type_raw === 'Aer-apa'\r\n                );\r\n                break;\r\n            case 'water':\r\n                filteredItems = filteredItems.filter(item => \r\n                    item.hp_type_raw === 'Sol-apa' || \r\n                    item.hp_type_raw === 'Ap\u0103-ap\u0103'\r\n                );\r\n                break;\r\n        }\r\n\r\n        console.log('\u2705 G\u0103site:', filteredItems.length);\r\n\r\n        if (filteredItems.length > 0) {\r\n            hpData = filteredItems;\r\n            renderHpList(filteredItems);\r\n            matchCount.textContent = 'G\u0103site: ' + filteredItems.length;\r\n            resultBlock.classList.add('active');\r\n        } else {\r\n            hpList.innerHTML = `\r\n                <div style=\"padding:30px; text-align:center; color:#64748b; background:#f8fafc; border-radius:12px;\">\r\n                    <p style=\"font-size:18px; margin:0;\">\ud83d\ude15 Nu exist\u0103 pompe de c\u0103ldur\u0103 potrivite<\/p>\r\n                    <p style=\"font-size:14px; margin-top:4px;\">\u00cencerca\u021bi s\u0103 m\u0103ri\u021bi aproximarea sau s\u0103 modifica\u021bi puterea<\/p>\r\n                    <p style=\"font-size:12px; color:#94a3b8; margin-top:8px;\">\r\n                        Tip: ${selectedType}, interval: ${minPower}-${maxPower} kW\r\n                    <\/p>\r\n                <\/div>\r\n            `;\r\n            matchCount.textContent = 'G\u0103site: 0';\r\n            resultBlock.classList.add('active');\r\n        }\r\n\r\n    } catch (error) {\r\n        console.error('\u274c Eroare:', error);\r\n        errorMsg.textContent = '\u26a0\ufe0f Eroare: ' + error.message;\r\n        errorMsg.classList.add('active');\r\n    } finally {\r\n        loader.classList.remove('active');\r\n    }\r\n}\r\n\r\n    \/\/ ===== \u041e\u0422\u041e\u0411\u0420\u0410\u0416\u0415\u041d\u0418\u0415 \u0421\u041f\u0418\u0421\u041a\u0410 =====\r\n    function renderHpList(items) {\r\n        hpList.innerHTML = '';\r\n        ecoGrid.style.display = 'none';\r\n\r\n        items.forEach((hp, index) => {\r\n            const isRec = index === 0;\r\n            const div = document.createElement('div');\r\n            div.className = 'altal-hp-card' + (isRec ? ' recommended' : '');\r\n            div.dataset.id = hp.id;\r\n\r\n            const scop = system === 'floor' ? (hp.scop_35 || 4.0) : (hp.scop_55 || 3.0);\r\n            const price = hp.price || 0;\r\n            const priceDisplay = price > 0 ? price + ' ' + (hp.currency || 'MDL') : 'Pre\u021b nu este specificat';\r\n\r\n            div.innerHTML = `\r\n                <div class=\"info\">\r\n                    <div class=\"model\">\r\n                        ${hp.model}\r\n                        ${isRec ? '<span class=\"badge-rec\">\u2b50 Recomandat<\/span>' : ''}\r\n                    <\/div>\r\n                    <div class=\"specs\">\r\n                        \u26a1\ud83c\udf21\ufe0f p\u00e2n\u0103 la ${hp.temp_ambient || hp.min_temp || '-15'}\u00b0C &nbsp;|&nbsp; SCOP ${scop.toFixed(1)}\r\n                        ${hp.evi === 'EVI -injec\u021bie cu vapori' ? ' &nbsp;|&nbsp; \ud83d\udd27 EVI' : ''}\r\n                        ${hp.rec_area ? ' &nbsp;|&nbsp; \ud83c\udfe0 ' + hp.rec_area + ' m\u00b2' : ''}\r\n                    <\/div>\r\n                    <div style=\"font-size:12px; color:#94a3b8; margin-top:2px;\">${hp.description || ''}<\/div>\r\n                <\/div>\r\n                <div class=\"price-area\">\r\n                    <div class=\"price\">${priceDisplay}<\/div>\r\n                    <button class=\"btn-select\" data-id=\"${hp.id}\">Selecteaz\u0103<\/button>\r\n                <\/div>\r\n            `;\r\n\r\n            div.querySelector('.btn-select').addEventListener('click', function(e) {\r\n                e.stopPropagation();\r\n                selectHeatPump(parseInt(this.dataset.id));\r\n            });\r\n\r\n            hpList.appendChild(div);\r\n        });\r\n    }\r\n\r\n    \/\/ ===== \u0412\u042b\u0411\u041e\u0420 \u0422\u0415\u041f\u041b\u041e\u0412\u041e\u0413\u041e \u041d\u0410\u0421\u041e\u0421\u0410 =====\r\n    function selectHeatPump(id) {\r\n        const hp = hpData.find(p => p.id === id);\r\n        if (!hp) return;\r\n\r\n        selectedHpId = id;\r\n        document.querySelectorAll('.altal-hp-card').forEach(c => c.classList.remove('recommended'));\r\n        document.querySelectorAll('.altal-hp-card').forEach(c => {\r\n            if (parseInt(c.dataset.id) === id) {\r\n                c.classList.add('recommended');\r\n            }\r\n        });\r\n\r\n        const scop = system === 'floor' ? (hp.scop_35 || 4.0) : (hp.scop_55 || 3.0);\r\n        const degreeDays = 4900;\r\n        const annualHeat = heatLoss * degreeDays * 24 \/ 1000;\r\n        const annualElec = annualHeat \/ scop;\r\n        const elecPrice = 0.12;\r\n        const gasPrice = 0.06;\r\n        const costElec = annualElec * elecPrice;\r\n        const costGas = (annualHeat \/ 0.92) * gasPrice;\r\n        const savings = Math.round(costGas - costElec);\r\n        const capex = Math.round(hp.price * 1.3 + 2000);\r\n        const payback = savings > 0 ? Math.round(capex \/ savings * 10) \/ 10 : 99;\r\n        const co2Gas = (annualHeat \/ 0.92) * 0.2 \/ 1000;\r\n        const co2Elec = annualElec * 0.1 \/ 1000;\r\n        const co2Saving = Math.round((co2Gas - co2Elec) * 10) \/ 10;\r\n\r\n        document.getElementById('ecoCapex').textContent = capex;\r\n        document.getElementById('ecoOpex').textContent = Math.round(costElec);\r\n        document.getElementById('ecoPayback').textContent = payback;\r\n        document.getElementById('ecoCO2').textContent = co2Saving;\r\n\r\n        ecoGrid.style.display = 'grid';\r\n        ecoGrid.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n    }\r\n\r\n    \/\/ ===== \u041a\u041d\u041e\u041f\u041a\u0418 =====\r\n    searchBtn.addEventListener('click', fetchHeatPumps);\r\n\r\n    resetBtn.addEventListener('click', function() {\r\n        cards.forEach(c => c.classList.remove('selected'));\r\n        document.querySelector('.altal-card[data-value=\"split\"]').classList.add('selected');\r\n        selectedType = 'split';\r\n        resultBlock.classList.remove('active');\r\n        hpList.innerHTML = '';\r\n        ecoGrid.style.display = 'none';\r\n        errorMsg.classList.remove('active');\r\n        selectedHpId = null;\r\n        hpData = [];\r\n        toleranceSlider.value = 15;\r\n        toleranceValue.textContent = '15%';\r\n        toleranceRange.textContent = '15';\r\n        \/\/ \u0421\u0431\u0440\u043e\u0441 \u043f\u043e\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\r\n        recommendedInput.value = defaultRecommended.toFixed(1);\r\n        manualRecommendedPower = defaultRecommended;\r\n        fetchHeatPumps();\r\n    });\r\n\r\n    document.getElementById('getQuoteBtn').addEventListener('click', function() {\r\n        const hp = hpData.find(p => p.id === selectedHpId);\r\n        if (!hp) {\r\n            alert('\u26a0\ufe0f V\u0103 rug\u0103m s\u0103 selecta\u021bi mai \u00eent\u00e2i o pomp\u0103 de c\u0103ldur\u0103 din list\u0103');\r\n            return;\r\n        }\r\n        alert('\u2705 Ofert\u0103 comercial\u0103 pentru ' + hp.model + '\\n' +\r\n            '\ud83d\udcb0 Cost: \u20ac' + document.getElementById('ecoCapex').textContent + '\\n' +\r\n            '\ud83d\udcca Rambursare: ' + document.getElementById('ecoPayback').textContent + ' ani');\r\n    });\r\n\r\n    document.getElementById('savePassportBtn').addEventListener('click', function() {\r\n        const hp = hpData.find(p => p.id === selectedHpId);\r\n        if (!hp) {\r\n            alert('\u26a0\ufe0f Selecta\u021bi mai \u00eent\u00e2i o pomp\u0103 de c\u0103ldur\u0103');\r\n            return;\r\n        }\r\n        const passport = {\r\n            project_name: 'Proiect ' + new Date().toLocaleDateString(),\r\n            building: { type: buildingType, heat_loss: heatLoss, region: region, system: system },\r\n            equipment: {\r\n                model: hp.model,\r\n                power: hp.power,\r\n                price: hp.price,\r\n                scop: system === 'floor' ? (hp.scop_35 || 4.0) : (hp.scop_55 || 3.0),\r\n                evi: hp.evi || 'no'\r\n            },\r\n            economics: {\r\n                capex: parseInt(document.getElementById('ecoCapex').textContent),\r\n                opex: parseInt(document.getElementById('ecoOpex').textContent),\r\n                payback: parseFloat(document.getElementById('ecoPayback').textContent),\r\n                co2: parseFloat(document.getElementById('ecoCO2').textContent)\r\n            },\r\n            hp_type: selectedType,\r\n            created_at: new Date().toISOString()\r\n        };\r\n        localStorage.setItem('altal_passport_' + Date.now(), JSON.stringify(passport));\r\n        alert('\u2705 Project Passport salvat!');\r\n    });\r\n\r\n    \/\/ ===== \u0410\u0412\u0422\u041e\u0417\u0410\u041f\u0423\u0421\u041a =====\r\n    fetchHeatPumps();\r\n    console.log('\u2705 ALTAL Configurator v3.3 \u00eenc\u0103rcat');\r\n\r\n})();\r\n<\/script>\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\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u26a1 ALTAL Configurator Selectarea pompei de c\u0103ldur\u0103 pe baza datelor din calculator 1 Pierderi de c\u0103ldur\u0103 2 Tip pomp\u0103 3 Selectare 4 Specifica\u021bii \ud83c\udfe0 Obiect: &#8211; \ud83d\udcd0 Suprafa\u021b\u0103: &#8211; m\u00b2 \ud83d\udccf Etaje: &#8211; \ud83d\udd25 Pierderi c\u0103ldur\u0103: &#8211; kW \u26a1 Putere recomandat\u0103: kW (edita\u021bi) \ud83d\udcc5 Regiune: &#8211; \ud83c\udf21\ufe0f Sistem: &#8211; \ud83e\ude9f Ferestre: &#8211; m\u00b2 \ud83d\udc65 Ocupan\u021bi:&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":12154,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"default","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"hide","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"class_list":["post-12157","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/altal.md\/ro\/wp-json\/wp\/v2\/pages\/12157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/altal.md\/ro\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/altal.md\/ro\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/altal.md\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/altal.md\/ro\/wp-json\/wp\/v2\/comments?post=12157"}],"version-history":[{"count":230,"href":"https:\/\/altal.md\/ro\/wp-json\/wp\/v2\/pages\/12157\/revisions"}],"predecessor-version":[{"id":12768,"href":"https:\/\/altal.md\/ro\/wp-json\/wp\/v2\/pages\/12157\/revisions\/12768"}],"up":[{"embeddable":true,"href":"https:\/\/altal.md\/ro\/wp-json\/wp\/v2\/pages\/12154"}],"wp:attachment":[{"href":"https:\/\/altal.md\/ro\/wp-json\/wp\/v2\/media?parent=12157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}