A.B.S. FörderCheck

Förderrechner für Pelletheizungen

Ermitteln Sie eine erste mögliche Zuschusshöhe für ein Wohngebäude nach den seit dem 21. Juli 2026 geltenden BEG-Förderbedingungen.

Angaben zum Fördervorhaben

1

Vorhaben und Kosten

Das Datum beeinflusst Bonus und Förderhöchstbetrag.
Geschätzte Kosten für Heizung, Einbau, Pelletlager, Fördertechnik und notwendige Nebenarbeiten. Punkte oder Leerzeichen werden automatisch korrekt erkannt.
2

Nutzung und bestehende Heizung

Bonusförderungen sind teilweise an die Selbstnutzung gebunden.
Die Bestandsheizung ist für den Klimageschwindigkeitsbonus relevant.
3

Einkommensbonus

Wählen Sie den Bereich Ihres zu versteuernden Haushaltsjahreseinkommens aus.
Bei mindestens einem minderjährigen Kind werden für die Förderberechnung einmalig 10.000 € vom Einkommen abgezogen.
Sonderfälle prüfen
(function () { "use strict"; var root = document.getElementById("abs-beg-rechner"); if (!root || root.getAttribute("data-rechner-start") === "1") { return; } root.setAttribute("data-rechner-start", "1"); var form = root.querySelector("#abs-fcalc-form"); var errorOutput = root.querySelector("#abs-fcalc-error"); var dateField = root.querySelector("#abs-fcalc-date"); var costsField = root.querySelector("#abs-fcalc-costs"); var selfUseField = root.querySelector("#abs-fcalc-selfuse"); var oldHeatingField = root.querySelector("#abs-fcalc-oldheating"); var incomeField = root.querySelector("#abs-fcalc-income"); var childField = root.querySelector("#abs-fcalc-child"); var incomeInfo = root.querySelector("#abs-fcalc-incomeinfo"); var renewableField = root.querySelector("#abs-fcalc-renewable"); var networkField = root.querySelector("#abs-fcalc-network"); var statusOutput = root.querySelector("#abs-fcalc-status"); var subsidyOutput = root.querySelector("#abs-fcalc-subsidy"); var rateOutput = root.querySelector("#abs-fcalc-rate"); var totalCostsOutput = root.querySelector("#abs-fcalc-totalcosts"); var capOutput = root.querySelector("#abs-fcalc-cap"); var consideredOutput = root.querySelector("#abs-fcalc-considered"); var ownShareOutput = root.querySelector("#abs-fcalc-ownshare"); var baseOutput = root.querySelector("#abs-fcalc-base"); var climateOutput = root.querySelector("#abs-fcalc-climate"); var incomeBonusOutput = root.querySelector("#abs-fcalc-incomebonus"); var incomeBandOutput = root.querySelector("#abs-fcalc-incomeband"); var warningOutput = root.querySelector("#abs-fcalc-warning"); var infoOutput = root.querySelector("#abs-fcalc-info"); var currency = new Intl.NumberFormat("de-DE", { style: "currency", currency: "EUR", minimumFractionDigits: 2 }); var wholeNumber = new Intl.NumberFormat("de-DE", { maximumFractionDigits: 0 }); function digitsOnly(value) { return String(value || "").replace(/[^\d]/g, ""); } function parseCosts() { var digits = digitsOnly(costsField.value); if (!digits) { return 0; } return parseInt(digits, 10); } function formatCostsField() { var digits = digitsOnly(costsField.value); costsField.value = digits ? wholeNumber.format(parseInt(digits, 10)) : ""; } function parseLocalDate(value) { if (!value) { return null; } var parts = value.split("-").map(Number); return new Date( parts[0], parts[1] - 1, parts[2] ); } function timestamp(value) { return parseLocalDate(value).getTime(); } function climateRateForDate(applicationDate) { var time = applicationDate.getTime(); if (time < timestamp("2027-02-01")) { return 16; } if (time < timestamp("2027-08-01")) { return 12; } if (time < timestamp("2028-02-01")) { return 8; } if (time < timestamp("2028-08-01")) { return 4; } return 0; } function firstUnitCap(applicationDate) { var dates = [ "2027-02-01", "2027-08-01", "2028-02-01", "2028-08-01", "2029-02-01", "2029-08-01", "2030-02-01", "2030-08-01" ]; var steps = dates.filter(function (date) { return applicationDate.getTime() >= timestamp(date); }).length; return Math.max( 22000, 28000 - (steps * 750) ); } function climateEligible(oldHeating) { return [ "oel", "kohle", "gasetage", "nachtspeicher", "gas20", "biomasse20" ].indexOf(oldHeating) !== -1; } function incomeBonusForBand(incomeBand, hasChild) { if (incomeBand === "bis30") { return 40; } if (incomeBand === "30bis40") { return hasChild ? 40 : 30; } if (incomeBand === "40bis50") { return hasChild ? 30 : 10; } if (incomeBand === "50bis60") { return hasChild ? 10 : 0; } return 0; } function relevantIncomeBand(incomeBand, hasChild) { if (!hasChild) { if (incomeBand === "bis30") { return "Bis 30.000 €"; } if (incomeBand === "30bis40") { return "Über 30.000 € bis 40.000 €"; } if (incomeBand === "40bis50") { return "Über 40.000 € bis 50.000 €"; } return "Über 50.000 €"; } if ( incomeBand === "bis30" || incomeBand === "30bis40" ) { return "Bis 30.000 €"; } if (incomeBand === "40bis50") { return "Über 30.000 € bis 40.000 €"; } if (incomeBand === "50bis60") { return "Über 40.000 € bis 50.000 €"; } return "Über 50.000 €"; } function updateIncomeInfo() { var band = incomeField.value; var child = childField.value; incomeInfo.textContent = ""; incomeInfo.classList.add("abs-fcalc-hidden"); if (!band || !child) { return; } if (child === "ja") { incomeInfo.textContent = "Kinderregel berücksichtigt: Für die Förderberechnung " + "werden einmalig 10.000 € vom Einkommen abgezogen. " + "Maßgeblicher Bereich: " + relevantIncomeBand(band, true) + "."; } else { incomeInfo.textContent = "Für die Förderberechnung wird der ausgewählte " + "Einkommensbereich unverändert verwendet."; } incomeInfo.classList.remove("abs-fcalc-hidden"); } function toggleIncomeFields() { var show = selfUseField.value === "ja"; root .querySelectorAll(".abs-fcalc-income") .forEach(function (section) { section.classList.toggle( "abs-fcalc-hidden", !show ); }); incomeField.required = show; childField.required = show; if (!show) { incomeField.value = ""; childField.value = ""; updateIncomeInfo(); } } function validateFields() { var requiredFields = [ dateField, costsField, selfUseField, oldHeatingField ]; if (selfUseField.value === "ja") { requiredFields.push( incomeField, childField ); } var valid = true; form .querySelectorAll("[aria-invalid='true']") .forEach(function (field) { field.removeAttribute("aria-invalid"); }); requiredFields.forEach(function (field) { var fieldValid = String(field.value || "").trim() !== ""; if (field === costsField) { fieldValid = parseCosts() > 0; } if (!fieldValid) { field.setAttribute("aria-invalid", "true"); valid = false; } }); errorOutput.classList.toggle( "abs-fcalc-hidden", valid ); errorOutput.textContent = valid ? "" : "Bitte füllen Sie zunächst alle erforderlichen Felder aus."; return valid; } function resetOutput() { statusOutput.textContent = "Noch offen"; subsidyOutput.textContent = "–"; rateOutput.textContent = "–"; rateOutput.classList.add("abs-fcalc-hidden"); totalCostsOutput.textContent = "–"; capOutput.textContent = "–"; consideredOutput.textContent = "–"; ownShareOutput.textContent = "–"; baseOutput.textContent = "–"; climateOutput.textContent = "–"; incomeBonusOutput.textContent = "–"; incomeBandOutput.textContent = "–"; warningOutput.textContent = ""; warningOutput.classList.add("abs-fcalc-hidden"); infoOutput.textContent = ""; infoOutput.classList.add("abs-fcalc-hidden"); errorOutput.textContent = ""; errorOutput.classList.add("abs-fcalc-hidden"); } function showWarnings(warnings) { warningOutput.textContent = ""; warnings.forEach(function (warning, index) { var paragraph = document.createElement("p"); paragraph.textContent = warning; paragraph.style.margin = index === warnings.length - 1 ? "0" : "0 0 9px"; warningOutput.appendChild(paragraph); }); warningOutput.classList.toggle( "abs-fcalc-hidden", warnings.length === 0 ); } function calculate() { formatCostsField(); if (!validateFields()) { return; } var applicationDate = parseLocalDate(dateField.value); var enteredCosts = parseCosts(); var selfUsed = selfUseField.value === "ja"; var hasChild = selfUsed && childField.value === "ja"; var cap = firstUnitCap(applicationDate); var consideredCosts = Math.min( enteredCosts, cap ); var baseRate = 30; var climateRate = ( selfUsed && climateEligible(oldHeatingField.value) ) ? climateRateForDate(applicationDate) : 0; var incomeBonusRate = selfUsed ? incomeBonusForBand( incomeField.value, hasChild ) : 0; var relevantBand = selfUsed ? relevantIncomeBand( incomeField.value, hasChild ) : "Nicht relevant"; var uncappedRate = baseRate + climateRate + incomeBonusRate; var maximumRate = selfUsed && incomeBonusRate === 40 ? 80 : 70; var finalRate = Math.min( uncappedRate, maximumRate ); var subsidy = consideredCosts * finalRate / 100; var ownShare = Math.max( 0, enteredCosts - subsidy ); statusOutput.textContent = "Berechnet"; subsidyOutput.textContent = currency.format(subsidy); rateOutput.textContent = "Gesamtfördersatz: " + finalRate + " %"; rateOutput.classList.remove("abs-fcalc-hidden"); totalCostsOutput.textContent = currency.format(enteredCosts); capOutput.textContent = currency.format(cap); consideredOutput.textContent = currency.format(consideredCosts); ownShareOutput.textContent = currency.format(ownShare); baseOutput.textContent = baseRate + " %"; climateOutput.textContent = climateRate + " %"; incomeBonusOutput.textContent = incomeBonusRate + " %"; incomeBandOutput.textContent = relevantBand; var warnings = []; if (enteredCosts > cap) { warnings.push( "Ihre geschätzten Gesamtkosten liegen über dem " + "Förderhöchstbetrag. Für die Berechnung wurden daher " + "nur " + currency.format(cap) + " berücksichtigt." ); } if (!selfUsed) { warnings.push( "Klima- und Einkommensbonus wurden nicht angesetzt, " + "weil die Wohneinheit nicht selbst genutzt wird." ); } else if ( !climateEligible(oldHeatingField.value) ) { warnings.push( "Für die ausgewählte Bestandsheizung wurde kein " + "Klimageschwindigkeitsbonus angesetzt." ); } if (uncappedRate > finalRate) { warnings.push( "Die Summe der Förderbausteine wurde auf die geltende " + "Obergrenze von " + maximumRate + " Prozent begrenzt." ); } if ( !renewableField.value || !networkField.value ) { warnings.push( "Die Sonderfälle wurden nicht vollständig beantwortet. " + "Das Ergebnis bildet deshalb nur den Standardfall ab." ); } showWarnings(warnings); infoOutput.textContent = "Berechnung: " + currency.format(consideredCosts) + " × " + finalRate + " %."; infoOutput.classList.remove("abs-fcalc-hidden"); } costsField.addEventListener("input", function () { formatCostsField(); costsField.removeAttribute("aria-invalid"); resetOutput(); }); costsField.addEventListener("blur", function () { formatCostsField(); }); selfUseField.addEventListener("change", function () { toggleIncomeFields(); updateIncomeInfo(); resetOutput(); }); incomeField.addEventListener("change", function () { updateIncomeInfo(); resetOutput(); }); childField.addEventListener("change", function () { updateIncomeInfo(); resetOutput(); }); form.addEventListener("submit", function (event) { event.preventDefault(); calculate(); }); form.addEventListener("reset", function () { window.setTimeout(function () { toggleIncomeFields(); updateIncomeInfo(); resetOutput(); }, 0); }); form .querySelectorAll("input, select") .forEach(function (field) { field.addEventListener("change", function () { field.removeAttribute("aria-invalid"); }); }); toggleIncomeFields(); updateIncomeInfo(); resetOutput(); })();