{"id":967,"date":"2026-08-10T13:28:05","date_gmt":"2026-08-10T11:28:05","guid":{"rendered":"https:\/\/iso9001kosten.de\/?page_id=967"},"modified":"2026-08-10T14:13:32","modified_gmt":"2026-08-10T12:13:32","slug":"kostenrechner","status":"publish","type":"page","link":"https:\/\/iso9001kosten.de\/?page_id=967","title":{"rendered":""},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"967\" class=\"elementor elementor-967\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8ebe3c3 e-con e-atomic-element e-flexbox-base e-63303a7 \" data-id=\"8ebe3c3\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"8ebe3c3\" data-e-type=\"e-flexbox\" data-id=\"8ebe3c3\">\n    \t\t<div class=\"elementor-element elementor-element-949d25d elementor-widget elementor-widget-html\" data-id=\"949d25d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"de\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>PIAQ Kostenkalkulator<\/title>\n\n<!-- ============================================================================\n     PIAQ Kostenkalkulator \u2013 Single-Page-Version (ohne Popup\/Modal)\n     ----------------------------------------------------------------------------\n     Umbau der urspr\u00fcnglichen Popup-Version:\n     - Kein Bootstrap-Modal mehr, der Kalkulator ist direkt Teil der Seite.\n     - JS wurde deobfuskiert und lesbar neu geschrieben (identische Logik\/Preise).\n     - Formular-Versand (Schritt \"Kontakt\") sendet per fetch() an FORM_ENDPOINT\n       (siehe CONFIG unten) \u2013 Standard: \/wp-json\/piaq\/v1\/kostenkalkulator\n       (siehe dazu das mitgelieferte PHP-Snippet f\u00fcr WordPress).\n     ============================================================================ -->\n\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/css\/bootstrap.min.css\">\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.3\/font\/bootstrap-icons.css\">\n\n<style>\n    body { font-family: -apple-system, \"Segoe UI\", Arial, sans-serif; background: #f7f9fc; }\n\n    .kk-wrap { max-width: 620px; margin: 40px auto; padding: 0 16px; }\n    .kk-card { background: #fff; border-radius: 18px; padding: 2rem 2.25rem; box-shadow: 0 2px 24px rgba(0,0,0,.06); }\n    .kk-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; }\n    .kk-brand { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 18px; }\n\n    .step-title { font-size: 24px; font-weight: 700; line-height: 1.2; margin-bottom: 10px; }\n    .step-desc { color: #777; margin-bottom: 22px; }\n    .sf-option {\n        border: 1px solid #e5e5e5; border-radius: 14px; padding: 16px 18px; margin-bottom: 0;\n        cursor: pointer; transition: .2s; background: #fff; min-height: 64px;\n        display: flex; align-items: center; justify-content: center; text-align: center;\n    }\n    .sf-option:hover { border-color: #0d6efd; }\n    .sf-option.active {\n        border: 2px solid #1d4ed8; background: #1456b8; color: #fff; border-radius: 100px;\n    }\n    .sf-option.active::before { content: \"\u2713\"; margin-right: 8px; color: #fff; }\n    .sf-progress-bar { height: 4px; background: #ececec; border-radius: 10px; overflow: hidden; margin: 4px 0 26px; }\n    .sf-progress-bar span { display: block; height: 100%; background: #1d4ed8; }\n\n    .kk-options-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 12px; }\n\n    .kk-progress-text { display: flex; justify-content: space-between; font-size: 12px; color: #999; margin-bottom: 4px; }\n\n    .kk-employment-row { display: flex; gap: 10px; }\n    .kk-employment-row .kk-field { flex: 1 1 0; min-width: 0; }\n    .kk-employment-row label { font-size: 12.5px; color: #555; margin-bottom: 4px; display: block; }\n    .kk-employment-row input.form-control { padding: 8px 10px; font-size: 15px; text-align: center; }\n    input.kk-numeric-input::-webkit-outer-spin-button,\n    input.kk-numeric-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n    input.kk-numeric-input { -moz-appearance: textfield; appearance: textfield; }\n\n    .kk-result-card { text-align: center; padding: 6px 0; }\n    .kk-result-badge { font-size: 13px; padding: 6px 14px; margin-bottom: 14px; }\n    .kk-result-price { font-size: 38px; font-weight: 800; color: #0d1727; margin-bottom: 6px; }\n    .kk-result-note { color: #777; font-size: 14px; margin-bottom: 18px; }\n    .kk-result-tags { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-bottom: 20px; }\n    .kk-result-tags .badge { font-weight: 500; font-size: 13px; padding: 8px 12px; }\n    .kk-tag { cursor: pointer; transition: .15s; }\n    .kk-tag:hover { background: #eef3fc !important; border-color: #0d6efd !important; color: #0d3d80 !important; }\n    .kk-disclaimer {\n        display: flex; align-items: flex-start; gap: 8px; text-align: left; background: #f7f9fc;\n        border-radius: 10px; padding: 12px 14px; font-size: 13px; color: #666; margin-bottom: 12px;\n    }\n    .kk-disclaimer.kk-disclaimer-standorte { background: #ffe8cc; color: #9a3412; border-left: 4px solid #fb923c; }\n    .kk-disclaimer.kk-disclaimer-standorte i { color: #f97316; }\n    .kk-result-actions .btn { display: flex; align-items: center; justify-content: center; gap: 8px; }\n\n    .kk-success-wrap { text-align: center; padding: 10px 0; }\n    .kk-loading-wrap { padding: 34px 0 18px; }\n    .kk-spinner { width: 3rem; height: 3rem; margin-bottom: 20px; }\n    .kk-loading-title { font-size: 18px; margin-bottom: 6px; }\n\n    .kk-back-btn { color: #666; text-decoration: none; display: flex; align-items: center; gap: 6px; }\n    .kk-back-btn:disabled { visibility: hidden; }\n\n    .btn-green { background: #114b9a; border-color: #114b9a; color: #fff; }\n    .btn-green:hover { background: #0d3d80; border-color: #0d3d80; color: #fff; }\n\n    .kk-invalid { border-color: #dc3545 !important; box-shadow: 0 0 0 3px rgba(220, 53, 69, .25) !important; }\n    .kk-options-grid.kk-invalid {\n        border: 2px solid #dc3545; border-radius: 14px; padding: 10px;\n        box-shadow: 0 0 0 3px rgba(220, 53, 69, .15) !important;\n    }\n\n    .kk-footer { display: flex; align-items: center; justify-content: space-between; margin-top: 22px; padding-top: 18px; border-top: 1px solid #eee; }\n<\/style>\n<\/head>\n<body>\n\n<div class=\"kk-wrap\">\n    <div class=\"kk-card\">\n\n        <div class=\"kk-header\">\n            <div class=\"kk-brand\">PIAQ Kostenrechner<\/div>\n        <\/div>\n\n        <!-- Fortschrittsanzeige -->\n        <div class=\"kk-progress-wrap\" id=\"kkProgressWrap\" style=\"display:none;\">\n            <div class=\"kk-progress-text\">\n                <span id=\"kkStepText\">Schritt 1 von 7<\/span>\n                <span id=\"kkPercentText\">13%<\/span>\n            <\/div>\n            <div class=\"sf-progress-bar\"><span id=\"kkProgressBar\" style=\"width:13%;\"><\/span><\/div>\n        <\/div>\n\n        <!-- Step 1: Besch\u00e4ftigtenstruktur -->\n        <div class=\"kk-step\" id=\"kkStep1\">\n            <div class=\"step-title\">Bitte geben Sie Ihre Mitarbeiterzahl nach Besch\u00e4ftigungsart an.<\/div>\n            <div class=\"step-desc\">Hinweis: Die Mitarbeiterzahl beeinflusst den Auditaufwand und damit die Zertifizierungskosten.<\/div>\n            <div class=\"kk-employment-row\">\n                <div class=\"kk-field\">\n                    <label for=\"kkVollzeit\">Vollzeit<\/label>\n                    <input type=\"text\" class=\"form-control kk-numeric-input\" id=\"kkVollzeit\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"0\">\n                <\/div>\n                <div class=\"kk-field\">\n                    <label for=\"kkTeilzeit\">Teilzeit<\/label>\n                    <input type=\"text\" class=\"form-control kk-numeric-input\" id=\"kkTeilzeit\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"0\">\n                <\/div>\n                <div class=\"kk-field\">\n                    <label for=\"kkGeringfuegig\">Minijob<\/label>\n                    <input type=\"text\" class=\"form-control kk-numeric-input\" id=\"kkGeringfuegig\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"0\">\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Step 2: Norm-Auswahl -->\n        <div class=\"kk-step\" id=\"kkStep2\" style=\"display:none;\">\n            <div class=\"step-title\">Welche Zertifizierung ben\u00f6tigen Sie?<\/div>\n            <div class=\"step-desc\">Hinweis: Mehrfachauswahl m\u00f6glich.<\/div>\n            <div class=\"kk-options-grid\" id=\"kkOptionsNorm\">\n                <div class=\"sf-option\" data-value=\"9001\">ISO 9001<\/div>\n                <div class=\"sf-option\" data-value=\"14001\">ISO 14001<\/div>\n                <div class=\"sf-option\" data-value=\"andere\">Andere Norm<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Step 3: Weitere Standorte -->\n        <div class=\"kk-step\" id=\"kkStep3\" style=\"display:none;\">\n            <div class=\"step-title\">Sollen weitere Standorte Ihres Unternehmens zertifiziert werden?<\/div>\n            <div class=\"step-desc\">Weitere Standorte beeinflussen die Dauer der Audits vor Ort.<\/div>\n            <div class=\"kk-options-grid\" id=\"kkOptionsStandorte\">\n                <div class=\"sf-option\" data-value=\"ja\">Ja<\/div>\n                <div class=\"sf-option\" data-value=\"nein\">Nein<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Step 4: Bereits zertifiziert -->\n        <div class=\"kk-step\" id=\"kkStep4\" style=\"display:none;\">\n            <div class=\"step-title\">Ist Ihr Unternehmen bereits nach der ausgew\u00e4hlten Norm zertifiziert?<\/div>\n            <div class=\"step-desc\">Bei einer Re-Zertifizierung kann der Aufwand reduziert sein.<\/div>\n            <div class=\"kk-options-grid\" id=\"kkOptionsZertifiziert\">\n                <div class=\"sf-option\" data-value=\"ja\">Ja<\/div>\n                <div class=\"sf-option\" data-value=\"nein\">Nein<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Step 5: Eigene Systementwicklung -->\n        <div class=\"kk-step\" id=\"kkStep5\" style=\"display:none;\">\n            <div class=\"step-title\">Ist Ihr Unternehmen f\u00fcr die Entwicklung von Produkten oder Dienstleistungen verantwortlich?<\/div>\n            <div class=\"step-desc\">Eigenentwicklung kann den externen Auditaufwand reduzieren.<\/div>\n            <div class=\"kk-options-grid\" id=\"kkOptionsEigenentwicklung\">\n                <div class=\"sf-option\" data-value=\"ja\">Ja<\/div>\n                <div class=\"sf-option\" data-value=\"nein\">Nein<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Step 6: Zertifizierungsreife -->\n        <div class=\"kk-step\" id=\"kkStep6\" style=\"display:none;\">\n            <div class=\"step-title\">Wann m\u00f6chten Sie mit der Zertifizierung starten?<\/div>\n            <div class=\"kk-options-grid\" id=\"kkOptionsZertifizierungsreif\">\n                <div class=\"sf-option\" data-value=\"2-4-wochen\">In 2\u20134 Wochen<\/div>\n                <div class=\"sf-option\" data-value=\"1-3-monate\">In 1\u20133 Monaten<\/div>\n                <div class=\"sf-option\" data-value=\"3-6-monate\">In 3\u20136 Monaten<\/div>\n                <div class=\"sf-option\" data-value=\"6-12-monate\">In 6\u201312 Monaten<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Step 7: Kontakt (Name + E-Mail) - bewusst VOR dem Ergebnis abgefragt, damit auch dann\n             ein Lead vorliegt, wenn der Nutzer nach dem Preis abspringt. Der Kunde bekommt hier\u00fcber\n             KEINE automatische Mail - es ist die interne Lead-Benachrichtigung an euch. -->\n        <div class=\"kk-step\" id=\"kkStep7\" style=\"display:none;\">\n            <div class=\"step-title\">Fast geschafft!<\/div>\n            <div class=\"step-desc\">Wohin d\u00fcrfen wir Ihre Kalkulation schicken?<\/div>\n            <form id=\"kkKontaktForm\">\n                <input type=\"hidden\" name=\"recaptcha_token\" id=\"recaptcha_token_id\" value=\"\">\n                <div class=\"row g-3\">\n                    <div class=\"col-12\">\n                        <label for=\"kkName\" class=\"form-label\">Name *<\/label>\n                        <input type=\"text\" class=\"form-control\" id=\"kkName\" name=\"name\" autocomplete=\"name\" placeholder=\"Max Mustermann\" required>\n                    <\/div>\n                    <div class=\"col-12\">\n                        <label for=\"kkEmail\" class=\"form-label\">E-Mail-Adresse *<\/label>\n                        <input type=\"email\" class=\"form-control\" id=\"kkEmail\" name=\"email\" autocomplete=\"email\" placeholder=\"max@firma.de\" required>\n                    <\/div>\n                <\/div>\n                <div class=\"d-grid mt-3\">\n                    <button type=\"submit\" class=\"btn btn-green\" id=\"kkKontaktSubmitBtn\">\n                        <i class=\"bi bi-envelope\"><\/i> Kalkulation anzeigen\n                    <\/button>\n                <\/div>\n            <\/form>\n            <div class=\"text-center mt-3\">\n                <a href=\"#\" class=\"kk-back-btn justify-content-center\" id=\"kkKontaktBackLink\">\n                    <i class=\"bi bi-arrow-left\"><\/i> Zur\u00fcck\n                <\/a>\n            <\/div>\n        <\/div>\n\n        <!-- Step 8: kurzer Ladescreen -->\n        <div class=\"kk-step\" id=\"kkStep8\" style=\"display:none;\">\n            <div class=\"kk-loading-wrap text-center\">\n                <div class=\"spinner-border text-primary kk-spinner\" role=\"status\"><\/div>\n                <div class=\"step-title kk-loading-title\">Ihre Kalkulation wird erstellt\u2026<\/div>\n                <div class=\"step-desc\">Einen Moment bitte.<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Step 9: Ergebnis -->\n        <div class=\"kk-step\" id=\"kkStep9\" style=\"display:none;\">\n            <div class=\"kk-result-card\">\n                <div class=\"badge bg-primary-subtle text-primary-emphasis kk-result-badge\" id=\"kkResultBadge\">Gesch\u00e4tzter Preisrahmen<\/div>\n                <div class=\"kk-result-price\" id=\"kkPrice\">\u2013<\/div>\n                <div class=\"kk-result-note\" id=\"kkResultNote\">Dies ist ein unverbindlicher Preisrahmen und kein festes Angebot.<\/div>\n                <div class=\"kk-result-tags\" id=\"kkDetails\"><\/div>\n\n                <div class=\"kk-disclaimer\" id=\"kkAndereNormHinweis\" style=\"display:none;\">\n                    <i class=\"bi bi-info-circle\"><\/i>\n                    F\u00fcr diese Norm erstellen wir Ihnen ein individuelles Angebot. Bitte kontaktieren Sie uns direkt - wir melden uns nach Ihrer Anfrage pers\u00f6nlich bei Ihnen.\n                <\/div>\n\n                <div class=\"kk-disclaimer kk-disclaimer-standorte\" id=\"kkStandorteHinweis\" style=\"display:none;\">\n                    <i class=\"bi bi-geo-alt\"><\/i>\n                    Dieser Preis gilt nur f\u00fcr Ihren Hauptstandort. F\u00fcr weitere Standorte erstellen wir Ihnen ein gesondertes Angebot.\n                <\/div>\n\n                <div class=\"kk-disclaimer\" id=\"kkGenerischerHinweis\">\n                    <i class=\"bi bi-info-circle\"><\/i>\n                    Es handelt sich ausschlie\u00dflich um eine grobe Preiskalkulation. Die genauen Kosten werden in einem unverbindlichen Angebot zugesendet.\n                <\/div>\n                <div class=\"d-grid gap-2 kk-result-actions mt-2\">\n                    <!-- TODO: Link auf euer Calendly \/ Terminbuchungssystem anpassen -->\n                    <a href=\"#\" class=\"btn btn-green\" id=\"kkTerminBtn\" target=\"_blank\" rel=\"noopener\">\n                        <i class=\"bi bi-calendar-event\"><\/i> Termin buchen\n                    <\/a>\n                    <button type=\"button\" class=\"btn btn-outline-secondary\" id=\"kkRestartBtn\">\n                        <i class=\"bi bi-arrow-clockwise\"><\/i> Neue Kalkulation starten\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Zur\u00fcck\/Weiter-Leiste (nur f\u00fcr die Auswahl-Schritte 1-7 sichtbar) -->\n        <div class=\"kk-footer\" id=\"kkFooter\" style=\"display:none;\">\n            <button type=\"button\" class=\"btn btn-link kk-back-btn\" id=\"kkBackBtn\">\n                <i class=\"bi bi-arrow-left\"><\/i> Zur\u00fcck\n            <\/button>\n            <button type=\"button\" class=\"btn btn-green\" id=\"kkNextBtn\">\n                Weiter <i class=\"bi bi-arrow-right\"><\/i>\n            <\/button>\n        <\/div>\n\n    <\/div>\n<\/div>\n\n<script src=\"https:\/\/code.jquery.com\/jquery-3.7.1.min.js\"><\/script>\n\n<script>\n(function ($) {\n    \"use strict\";\n\n    \/\/ ===================== CONFIG =====================\n    \/\/ Hierhin gehen die Formulardaten (Name, E-Mail, Kalkulationsergebnis) per POST.\n    \/\/ F\u00fcr WordPress: REST-Endpoint aus dem mitgelieferten PHP-Snippet (piaq-kostenkalkulator-email-empfang.php).\n    var CONFIG = {\n        FORM_ENDPOINT: \"\/wp-json\/piaq\/v1\/kostenkalkulator\",\n        tagessatz: 1050,\n        brackets: [\n            { max: 5,   label: \"1\u20135 MA\",   tage9001: 1.5, tage14001: 2.5 },\n            { max: 10,  label: \"6\u201310 MA\",  tage9001: 2,   tage14001: 3   },\n            { max: 15,  label: \"11\u201315 MA\", tage9001: 2.5, tage14001: 3.5 },\n            { max: 25,  label: \"16\u201325 MA\", tage9001: 3,   tage14001: 4.5 },\n            { max: 45,  label: \"26\u201345 MA\", tage9001: 4,   tage14001: 5.5 },\n            { max: 65,  label: \"46\u201365 MA\", tage9001: 5,   tage14001: 6   },\n            { max: 85,  label: \"66\u201385 MA\", tage9001: 6,   tage14001: 7   },\n            { max: 125, label: \"86\u2013125 MA\",tage9001: 7,   tage14001: 8   }\n        ],\n        faktoren: { eigenentwicklung: -0.2, zertifiziert: -0.1, standorte: 0.05 },\n        maxRabatt: -0.3,\n        mindestpreis: { \"9001\": 1590, \"14001\": 1700, beide: 2250 },\n        integriertRabatt: 0.8,\n        ladescreenMinMs: 1100,\n        \/\/ Falls ihr reCAPTCHA v3 nutzt: Site-Key hier eintragen, sonst leer lassen.\n        recaptchaSiteKey: \"\"\n    };\n\n    var ZEITRAHMEN_LABEL = {\n        \"2-4-wochen\": \"In 2\u20134 Wochen\",\n        \"1-3-monate\": \"In 1\u20133 Monaten\",\n        \"3-6-monate\": \"In 3\u20136 Monaten\",\n        \"6-12-monate\": \"In 6\u201312 Monaten\"\n    };\n\n    var STEP_KONTAKT = 7, STEP_LOADING = 8, STEP_RESULT = 9, STEP_COUNT = 7;\n\n    var state = {\n        currentStep: 1,\n        vollzeit: 0, teilzeit: 0, geringfuegig: 0,\n        norm9001: false, norm14001: false, normAndere: false, norm: null,\n        standorte: null, zertifiziert: null, eigenentwicklung: null, zertifizierungsreif: null\n    };\n\n    function effectiveCount() {\n        return state.vollzeit + state.teilzeit * 0.5 + state.geringfuegig * 0.25;\n    }\n\n    function findBracket(count) {\n        for (var i = 0; i < CONFIG.brackets.length; i++) {\n            if (count <= CONFIG.brackets[i].max) return CONFIG.brackets[i];\n        }\n        return null;\n    }\n\n    function calculatePrice() {\n        var count = effectiveCount();\n        var bracket = findBracket(count);\n        if (!bracket) return { individuell: true, effectiveCount: count };\n\n        var rabatt = 0;\n        if (state.standorte === \"ja\") rabatt += CONFIG.faktoren.standorte;\n        if (state.zertifiziert === \"ja\") rabatt += CONFIG.faktoren.zertifiziert;\n        if (state.eigenentwicklung === \"ja\") rabatt += CONFIG.faktoren.eigenentwicklung;\n        rabatt = Math.max(rabatt, CONFIG.maxRabatt);\n\n        var preis9001 = bracket.tage9001 * CONFIG.tagessatz;\n        var preis14001 = bracket.tage14001 * CONFIG.tagessatz;\n        var preis9001Final = preis9001 * (1 + rabatt);\n        var preis14001Final = preis14001 * (1 + rabatt);\n\n        var preis;\n        if (state.norm === \"14001\") {\n            preis = Math.max(preis14001Final, CONFIG.mindestpreis[\"14001\"]);\n        } else if (state.norm === \"beide\") {\n            preis = Math.max((preis9001Final + preis14001Final) * CONFIG.integriertRabatt, CONFIG.mindestpreis.beide);\n        } else {\n            preis = Math.max(preis9001Final, CONFIG.mindestpreis[\"9001\"]);\n        }\n        return { individuell: false, effectiveCount: count, bracket: bracket, preis: Math.round(preis) };\n    }\n\n    function markInvalid(el) { el.addClass(\"kk-invalid\"); }\n    function clearInvalid(el) { el.removeClass(\"kk-invalid\"); }\n\n    function optionsElFor(step) {\n        if (step === 1) return $(\"#kkVollzeit, #kkTeilzeit, #kkGeringfuegig\");\n        if (step === 2) return $(\"#kkOptionsNorm\");\n        if (step === 3) return $(\"#kkOptionsStandorte\");\n        if (step === 4) return $(\"#kkOptionsZertifiziert\");\n        if (step === 5) return $(\"#kkOptionsEigenentwicklung\");\n        if (step === 6) return $(\"#kkOptionsZertifizierungsreif\");\n        return $();\n    }\n\n    function clearInvalidIfFilled() {\n        var step = state.currentStep;\n        if (step === 1 && effectiveCount() > 0) clearInvalid(optionsElFor(1));\n        else if (step === 2 && (state.norm9001 || state.norm14001 || state.normAndere)) clearInvalid(optionsElFor(2));\n        else if (step === 3 && state.standorte) clearInvalid(optionsElFor(3));\n        else if (step === 4 && state.zertifiziert) clearInvalid(optionsElFor(4));\n        else if (step === 5 && state.eigenentwicklung) clearInvalid(optionsElFor(5));\n        else if (step === 6 && state.zertifizierungsreif) clearInvalid(optionsElFor(6));\n    }\n\n    function updateProgress(step) {\n        if (step < 1 || step > STEP_COUNT) return;\n        var pct = Math.round(step \/ STEP_COUNT * 100);\n        $(\"#kkStepText\").text(\"Schritt \" + step + \" von \" + STEP_COUNT);\n        $(\"#kkPercentText\").text(pct + \"%\");\n        $(\"#kkProgressBar\").css(\"width\", pct + \"%\");\n    }\n\n    function goToStep(step) {\n        $(\".kk-step\").hide();\n        $(\"#kkStep\" + step).show();\n        state.currentStep = step;\n        clearInvalidIfFilled();\n\n        var footer = $(\"#kkFooter\");\n        var progress = $(\"#kkProgressWrap\");\n\n        if (step <= STEP_COUNT) {\n            updateProgress(step);\n            footer.show().css(\"display\", \"flex\");\n            progress.show();\n            $(\"#kkBackBtn\").prop(\"disabled\", step === 1);\n        } else if (step === STEP_KONTAKT) {\n            updateProgress(step);\n            footer.hide();\n            progress.show();\n        } else {\n            footer.hide();\n            progress.hide();\n        }\n        window.scrollTo({ top: $(\".kk-card\").offset().top - 20, behavior: \"smooth\" });\n    }\n\n    function selectSingleOption(container, optionEl, field) {\n        container.find(\".sf-option\").removeClass(\"active\");\n        optionEl.addClass(\"active\");\n        state[field] = optionEl.attr(\"data-value\");\n        clearInvalidIfFilled();\n    }\n\n    function toggleNormOption(optionEl) {\n        var value = optionEl.attr(\"data-value\");\n        optionEl.toggleClass(\"active\");\n        var active = optionEl.hasClass(\"active\");\n        if (value === \"9001\") state.norm9001 = active;\n        if (value === \"14001\") state.norm14001 = active;\n        if (value === \"andere\") state.normAndere = active;\n\n        if (state.norm9001 && state.norm14001) state.norm = \"beide\";\n        else if (state.norm9001) state.norm = \"9001\";\n        else if (state.norm14001) state.norm = \"14001\";\n        else state.norm = null;\n\n        clearInvalidIfFilled();\n    }\n\n    function readEmploymentInputs() {\n        var v = parseInt($(\"#kkVollzeit\").val(), 10);\n        var t = parseInt($(\"#kkTeilzeit\").val(), 10);\n        var g = parseInt($(\"#kkGeringfuegig\").val(), 10);\n        state.vollzeit = isNaN(v) || v < 0 ? 0 : v;\n        state.teilzeit = isNaN(t) || t < 0 ? 0 : t;\n        state.geringfuegig = isNaN(g) || g < 0 ? 0 : g;\n    }\n\n    function digitsOnly(inputEl) {\n        inputEl.on(\"input\", function () {\n            var cleaned = $(this).val().replace(\/[^0-9]\/g, \"\");\n            if (cleaned !== $(this).val()) $(this).val(cleaned);\n        });\n    }\n\n    function tagHtml(icon, label, step) {\n        return '<span class=\"badge bg-light text-dark border kk-tag\" data-step=\"' + step + '\" role=\"button\" tabindex=\"0\">' +\n               '<i class=\"bi ' + icon + '\"><\/i> ' + label + '<\/span>';\n    }\n\n    function renderResult() {\n        var result = calculatePrice();\n        var priceEl = $(\"#kkPrice\"), noteEl = $(\"#kkResultNote\"), badgeEl = $(\"#kkResultBadge\");\n        var andereHinweis = $(\"#kkAndereNormHinweis\"), generischerHinweis = $(\"#kkGenerischerHinweis\");\n\n        if (state.normAndere) {\n            badgeEl.text(\"Individuelles Angebot\");\n            priceEl.text(\"Auf Anfrage\");\n            noteEl.text(\"F\u00fcr diese Norm k\u00f6nnen wir keinen automatischen Preisrahmen anzeigen.\");\n            andereHinweis.show(); generischerHinweis.hide();\n        } else if (result.individuell) {\n            badgeEl.text(\"Gesch\u00e4tzter Preisrahmen\");\n            priceEl.text(\"Individuelles Angebot\");\n            noteEl.text(\"Bei dieser Unternehmensgr\u00f6\u00dfe erstellen wir Ihnen ein pers\u00f6nliches Angebot.\");\n            andereHinweis.hide(); generischerHinweis.show();\n        } else {\n            badgeEl.text(\"Gesch\u00e4tzter Preisrahmen\");\n            priceEl.text(\"ab \" + result.preis.toLocaleString(\"de-DE\") + \" \u20ac\");\n            noteEl.text(\"Dies ist ein unverbindlicher Preisrahmen und kein festes Angebot.\");\n            andereHinweis.hide(); generischerHinweis.show();\n        }\n\n        var mitarbeiterGesamt = Math.round(state.vollzeit + state.teilzeit + state.geringfuegig);\n        var normLabel = { \"9001\": \"ISO 9001\", \"14001\": \"ISO 14001\", beide: \"ISO 9001 + 14001\" };\n        var normTags = [];\n        if (state.norm) normTags.push(normLabel[state.norm]);\n        if (state.normAndere) normTags.push(\"Andere Norm\");\n        var normText = normTags.length ? normTags.join(\" + \") : \"\";\n        var zeitText = ZEITRAHMEN_LABEL[state.zertifizierungsreif] || \"\";\n\n        var html = \"\";\n        html += tagHtml(\"bi-people\", mitarbeiterGesamt + \" Mitarbeiter\", 1);\n        html += tagHtml(\"bi-clipboard-check\", normText, 2);\n        html += tagHtml(state.standorte === \"ja\" ? \"bi-geo-alt\" : \"bi-building\", state.standorte === \"ja\" ? \"Weitere Standorte\" : \"Nur 1 Standort\", 3);\n        html += tagHtml(state.zertifiziert === \"ja\" ? \"bi-patch-check\" : \"bi-stars\", state.zertifiziert === \"ja\" ? \"Re-Zertifizierung\" : \"Erstzertifizierung\", 4);\n        html += tagHtml(state.eigenentwicklung === \"ja\" ? \"bi-tools\" : \"bi-dash\", state.eigenentwicklung === \"ja\" ? \"Eigenentwicklung\" : \"Keine Eigenentwicklung\", 5);\n        html += tagHtml(\"bi-calendar3\", zeitText, 6);\n        $(\"#kkDetails\").html(html);\n        $(\"#kkStandorteHinweis\").toggle(state.standorte === \"ja\");\n    }\n\n    function wait(ms) { return new Promise(function (resolve) { setTimeout(resolve, ms); }); }\n\n    function withRecaptchaToken() {\n        var tokenField = $(\"#recaptcha_token_id\");\n        if (!tokenField.length || !CONFIG.recaptchaSiteKey) return Promise.resolve();\n        if (typeof grecaptcha === \"undefined\" || !grecaptcha || typeof grecaptcha.execute !== \"function\") return Promise.resolve();\n        return grecaptcha.execute(CONFIG.recaptchaSiteKey, { action: \"kostenrechner\" })\n            .then(function (token) { tokenField.val(token); })\n            .catch(function () {});\n    }\n\n    function onKontaktSubmit(e) {\n        e.preventDefault();\n        var formEl = document.getElementById(\"kkKontaktForm\");\n        if (!formEl.checkValidity()) { formEl.reportValidity(); return; }\n\n        var submitBtn = $(\"#kkKontaktSubmitBtn\");\n        var originalHtml = submitBtn.html();\n        submitBtn.prop(\"disabled\", true).html(\"Wird gesendet\u2026\");\n        goToStep(STEP_LOADING);\n        $(\"#recaptcha_token_id\").val(\"\");\n\n        withRecaptchaToken().then(function () {\n            sendLead(formEl, submitBtn, originalHtml);\n        });\n    }\n\n    function sendLead(formEl, submitBtn, originalHtml) {\n        var result = calculatePrice();\n        var data = new FormData(formEl);\n        data.append(\"vollzeit\", state.vollzeit);\n        data.append(\"teilzeit\", state.teilzeit);\n        data.append(\"geringfuegig\", state.geringfuegig);\n        data.append(\"mitarbeiter_effektiv\", effectiveCount());\n        data.append(\"norm\", state.norm);\n        data.append(\"norm_andere\", state.normAndere);\n        data.append(\"standorte\", state.standorte);\n        data.append(\"zertifiziert\", state.zertifiziert);\n        data.append(\"eigenentwicklung\", state.eigenentwicklung);\n        var zeitLabel = ZEITRAHMEN_LABEL[state.zertifizierungsreif] || \"\";\n        data.append(\"zeitrahmen\", state.zertifizierungsreif);\n        data.append(\"zertifizierungsreif\", zeitLabel);\n        data.append(\"preis\", state.normAndere ? \"individuell\" : (result.individuell ? \"individuell\" : result.preis));\n        data.append(\"formtype\", \"kostenrechner\");\n\n        var request = fetch(CONFIG.FORM_ENDPOINT, { method: \"POST\", body: data })\n            .then(function (res) { return res && res.json ? res.json().catch(function () { return null; }) : null; })\n            .catch(function () { return null; });\n\n        Promise.all([request, wait(CONFIG.ladescreenMinMs)]).then(function () {\n            renderResult();\n            goToStep(STEP_RESULT);\n            submitBtn.prop(\"disabled\", false).html(originalHtml);\n        });\n    }\n\n    function resetCalculator() {\n        state = {\n            currentStep: 1, vollzeit: 0, teilzeit: 0, geringfuegig: 0,\n            norm9001: false, norm14001: false, normAndere: false, norm: null,\n            standorte: null, zertifiziert: null, eigenentwicklung: null, zertifizierungsreif: null\n        };\n        $(\".sf-option\").removeClass(\"active\");\n        $(\"#kkVollzeit, #kkTeilzeit, #kkGeringfuegig\").val(\"\");\n        var formEl = document.getElementById(\"kkKontaktForm\");\n        if (formEl) formEl.reset();\n        $(\"#recaptcha_token_id\").val(\"\");\n        goToStep(1);\n    }\n\n    function init() {\n        digitsOnly($(\"#kkVollzeit\"));\n        digitsOnly($(\"#kkTeilzeit\"));\n        digitsOnly($(\"#kkGeringfuegig\"));\n\n        $(document).on(\"input\", \"#kkVollzeit, #kkTeilzeit, #kkGeringfuegig\", function () {\n            readEmploymentInputs();\n            clearInvalidIfFilled();\n        });\n\n        $(document).on(\"click\", \"#kkOptionsNorm .sf-option\", function () { toggleNormOption($(this)); });\n        $(document).on(\"click\", \"#kkOptionsStandorte .sf-option\", function () { selectSingleOption($(\"#kkOptionsStandorte\"), $(this), \"standorte\"); });\n        $(document).on(\"click\", \"#kkOptionsZertifiziert .sf-option\", function () { selectSingleOption($(\"#kkOptionsZertifiziert\"), $(this), \"zertifiziert\"); });\n        $(document).on(\"click\", \"#kkOptionsEigenentwicklung .sf-option\", function () { selectSingleOption($(\"#kkOptionsEigenentwicklung\"), $(this), \"eigenentwicklung\"); });\n        $(document).on(\"click\", \"#kkOptionsZertifizierungsreif .sf-option\", function () { selectSingleOption($(\"#kkOptionsZertifizierungsreif\"), $(this), \"zertifizierungsreif\"); });\n\n        $(document).on(\"click\", \"#kkBackBtn\", function () { if (state.currentStep > 1) goToStep(state.currentStep - 1); });\n        $(document).on(\"click\", \"#kkKontaktBackLink\", function (e) { e.preventDefault(); goToStep(6); });\n        $(document).on(\"click\", \".kk-result-tags .kk-tag\", function () {\n            var step = parseInt($(this).attr(\"data-step\"), 10);\n            if (step) goToStep(step);\n        });\n        $(document).on(\"click\", \"#kkRestartBtn\", function () { resetCalculator(); });\n\n        $(document).on(\"click\", \"#kkNextBtn\", function () {\n            var step = state.currentStep;\n            if (step === 1) {\n                readEmploymentInputs();\n                var el = $(\"#kkVollzeit, #kkTeilzeit, #kkGeringfuegig\");\n                if (effectiveCount() > 0) { clearInvalid(el); goToStep(2); } else { markInvalid(el); }\n            } else if (step === 2) {\n                if (state.norm9001 || state.norm14001 || state.normAndere) { clearInvalid($(\"#kkOptionsNorm\")); goToStep(3); } else { markInvalid($(\"#kkOptionsNorm\")); }\n            } else if (step === 3) {\n                if (state.standorte) { clearInvalid($(\"#kkOptionsStandorte\")); goToStep(4); } else { markInvalid($(\"#kkOptionsStandorte\")); }\n            } else if (step === 4) {\n                if (state.zertifiziert) { clearInvalid($(\"#kkOptionsZertifiziert\")); goToStep(5); } else { markInvalid($(\"#kkOptionsZertifiziert\")); }\n            } else if (step === 5) {\n                if (state.eigenentwicklung) { clearInvalid($(\"#kkOptionsEigenentwicklung\")); goToStep(6); } else { markInvalid($(\"#kkOptionsEigenentwicklung\")); }\n            } else if (step === 6) {\n                if (state.zertifizierungsreif) { clearInvalid($(\"#kkOptionsZertifizierungsreif\")); goToStep(STEP_KONTAKT); } else { markInvalid($(\"#kkOptionsZertifizierungsreif\")); }\n            }\n        });\n\n        $(document).on(\"submit\", \"#kkKontaktForm\", onKontaktSubmit);\n\n        goToStep(1);\n    }\n\n    $(init);\n    window.kostenkalkulator = { reset: resetCalculator, goToStep: goToStep };\n\n})(jQuery);\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>PIAQ Kostenkalkulator PIAQ Kostenrechner Schritt 1 von 7 13% Bitte geben Sie Ihre Mitarbeiterzahl nach Besch\u00e4ftigungsart an. Hinweis: Die Mitarbeiterzahl beeinflusst den Auditaufwand und damit die Zertifizierungskosten. Vollzeit Teilzeit Minijob Welche Zertifizierung ben\u00f6tigen Sie? Hinweis: Mehrfachauswahl m\u00f6glich. ISO 9001 ISO 14001 Andere Norm Sollen weitere Standorte Ihres Unternehmens zertifiziert werden? Weitere Standorte beeinflussen die Dauer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":603,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-967","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/iso9001kosten.de\/index.php?rest_route=\/wp\/v2\/pages\/967","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iso9001kosten.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/iso9001kosten.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/iso9001kosten.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iso9001kosten.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=967"}],"version-history":[{"count":13,"href":"https:\/\/iso9001kosten.de\/index.php?rest_route=\/wp\/v2\/pages\/967\/revisions"}],"predecessor-version":[{"id":1007,"href":"https:\/\/iso9001kosten.de\/index.php?rest_route=\/wp\/v2\/pages\/967\/revisions\/1007"}],"up":[{"embeddable":true,"href":"https:\/\/iso9001kosten.de\/index.php?rest_route=\/wp\/v2\/pages\/603"}],"wp:attachment":[{"href":"https:\/\/iso9001kosten.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=967"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}