/** * 🧾 IHK BELEG- & KALKULATIONS-TRAINER (PrintTop GmbH) 🧾 * ==================================================== * Interaktiver Trainer für kaufmännische Berechnungen nach ZPA 2. Auflage: * 1. Bezugskalkulation (Vorwärtskalkulation vom Listeneinkaufspreis zum Einstandspreis) * 2. Rechnungsprüfung & Skontoabzug bei Zahlung innerhalb Frist * 3. Verzugszinsberechnung nach § 288 BGB & 40 € Mahnpauschale (§ 288 Abs. 5 BGB) */ class BelegKalkulator { constructor(containerId) { this.container = document.getElementById(containerId); this.init(); } init() { if (!this.container) return; this.render(); } render() { this.container.innerHTML = `

đź§ľ Interaktiver Beleg- & Kalkulationsrechner

PrintTop GmbH • Original ZPA-Aufgabenmuster

Kaufmännische IT-Praxis
Übung: Die PrintTop GmbH bestellt 10 Hochleistungsserver beim Großhändler.
Listeneinkaufspreis (netto): 10.000,00 €
Lieferrabatt: 15 %
Lieferskonto: 2 %
Bezugskosten (Fracht/Zoll): 350,00 €
Kalkulationsschritt Prozentsatz Ihre Eingabe (€) Prüfung
Listeneinkaufspreis (LEP) 100 % âś“ Gegeben
- Lieferrabatt 15 % -
= Zieleinkaufspreis (ZEP) 85 % -
- Lieferskonto 2 % vom ZEP -
= Bareinkaufspreis (BEP) - -
+ Bezugskosten (Fracht, Verpackung) - âś“ Gegeben
= Bezugspreis / Einstandspreis - -
`; this.attachEvents(); } attachEvents() { const tabBezug = document.getElementById("tab-bezug"); const tabVerzug = document.getElementById("tab-verzug"); const viewBezug = document.getElementById("view-bezug"); const viewVerzug = document.getElementById("view-verzug"); tabBezug.addEventListener("click", () => { tabBezug.className = "ihk-btn ihk-btn-primary"; tabVerzug.className = "ihk-btn ihk-btn-secondary"; viewBezug.style.display = "block"; viewVerzug.style.display = "none"; }); tabVerzug.addEventListener("click", () => { tabVerzug.className = "ihk-btn ihk-btn-primary"; tabBezug.className = "ihk-btn ihk-btn-secondary"; viewVerzug.style.display = "block"; viewBezug.style.display = "none"; }); document.getElementById("btn-check-bezug").addEventListener("click", () => this.checkBezug()); document.getElementById("btn-solve-bezug").addEventListener("click", () => this.solveBezug()); document.getElementById("btn-new-bezug").addEventListener("click", () => this.newBezugScenario()); document.getElementById("btn-calc-verzug").addEventListener("click", () => this.calculateVerzug()); } getBezugValues() { const lep = 10000; const rabattP = 0.15; const skontoP = 0.02; const bezugK = 350; const rabattEur = lep * rabattP; // 1500 const zep = lep - rabattEur; // 8500 const skontoEur = zep * skontoP; // 170 const bep = zep - skontoEur; // 8330 const einstand = bep + bezugK; // 8680 return { lep, rabattEur, zep, skontoEur, bep, bezugK, einstand }; } checkBezug() { const sol = this.getBezugValues(); const uRabatt = parseFloat(document.getElementById("val-rabatt-eur").value); const uZep = parseFloat(document.getElementById("val-zep").value); const uSkonto = parseFloat(document.getElementById("val-skonto-eur").value); const uBep = parseFloat(document.getElementById("val-bep").value); const uEinstand = parseFloat(document.getElementById("val-einstand").value); let allOk = true; const testVal = (actual, expected, statusId) => { const el = document.getElementById(statusId); if (Math.abs(actual - expected) < 0.05) { el.innerHTML = `✓ ${expected.toFixed(2)} €`; } else { el.innerHTML = `✕ Soll: ${expected.toFixed(2)} €`; allOk = false; } }; testVal(uRabatt, sol.rabattEur, "status-rabatt-eur"); testVal(uZep, sol.zep, "status-zep"); testVal(uSkonto, sol.skontoEur, "status-skonto-eur"); testVal(uBep, sol.bep, "status-bep"); testVal(uEinstand, sol.einstand, "status-einstand"); const box = document.getElementById("box-bezug-res"); box.style.display = "block"; if (allOk) { box.innerHTML = `
🎉 Hervorragend! Alle 5 Kalkulationsschritte sind centgenau richtig berechnet.
Der Bezugspreis beträgt exakt ${sol.einstand.toFixed(2)} €.
`; } else { box.innerHTML = `
⚠️ Abweichung entdeckt: Bitte prüfen Sie die rot markierten Zeilen. Beachten Sie, dass Lieferskonto (2 %) vom Zieleinkaufspreis (ZEP) abgezogen wird!
`; } } solveBezug() { const sol = this.getBezugValues(); document.getElementById("val-rabatt-eur").value = sol.rabattEur.toFixed(2); document.getElementById("val-zep").value = sol.zep.toFixed(2); document.getElementById("val-skonto-eur").value = sol.skontoEur.toFixed(2); document.getElementById("val-bep").value = sol.bep.toFixed(2); document.getElementById("val-einstand").value = sol.einstand.toFixed(2); this.checkBezug(); } newBezugScenario() { this.solveBezug(); } calculateVerzug() { const betrag = parseFloat(document.getElementById("vz-betrag").value) || 0; const art = document.getElementById("vz-art").value; const basiszins = parseFloat(document.getElementById("vz-basiszins").value) || 0; const tage = parseInt(document.getElementById("vz-tage").value, 10) || 0; const aufschlag = art === "B2B" ? 9.0 : 5.0; const zinssatzGesamt = basiszins + aufschlag; const zinsen = (betrag * zinssatzGesamt * tage) / (100 * 360); const pauschale = art === "B2B" ? 40.0 : 0.0; const gesamtForderung = betrag + zinsen + pauschale; const card = document.getElementById("vz-result-card"); const content = document.getElementById("vz-result-content"); card.style.display = "block"; content.innerHTML = ` ${art === "B2B" ? `` : ""}
Hauptforderung:${betrag.toFixed(2)} €
Basiszinssatz:${basiszins.toFixed(2)} %
Gesetzlicher Verzugszinsaufschlag (${art}):+ ${aufschlag.toFixed(2)} %-Punkte
= Verzugszinssatz p.a.:${zinssatzGesamt.toFixed(2)} %
Verzugstage (30/360 Methode):${tage} Tage
Berechnete Verzugszinsen:+ ${zinsen.toFixed(2)} €
Mahnpauschale (§ 288 Abs. 5 BGB):+ 40,00 €
Gesamtforderung an Schuldner:${gesamtForderung.toFixed(2)} €
`; } } document.addEventListener("DOMContentLoaded", () => { if (document.getElementById("beleg-kalkulator-container")) { window.belegKalkulator = new BelegKalkulator("beleg-kalkulator-container"); } });