{"id":1785,"date":"2026-05-06T17:03:58","date_gmt":"2026-05-06T17:03:58","guid":{"rendered":"https:\/\/manuel360finanz.de\/?page_id=1785"},"modified":"2026-05-08T14:05:22","modified_gmt":"2026-05-08T14:05:22","slug":"grenzgaenger-at","status":"publish","type":"page","link":"https:\/\/manuel360finanz.de\/uk\/grenzgaenger-at\/","title":{"rendered":"Grenzg\u00e4nger \u00d6sterreich"},"content":{"rendered":"<style>\n#ggr{font-family:'DM Sans',system-ui,sans-serif;color:#1a2233;margin:0 0 2rem}\n#ggr *{box-sizing:border-box}\n\n\/* Disclaimer *\/\n#ggr .disc{background:#fffbeb;border:1.5px solid #f59e0b;border-radius:12px;padding:16px 20px;margin-bottom:28px;display:flex;gap:12px;align-items:flex-start}\n#ggr .disc-icon{font-size:20px;flex-shrink:0;margin-top:1px}\n#ggr .disc p{margin:0;font-size:13px;line-height:1.6;color:#78350f}\n#ggr .disc strong{color:#92400e}\n\n\/* Section *\/\n#ggr .sec{background:#fff;border:1.5px solid #e2e8f0;border-radius:16px;padding:24px;margin-bottom:20px}\n#ggr .sec-title{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#64748b;margin:0 0 18px;display:flex;align-items:center;gap:8px}\n#ggr .sec-title span{background:#1e3a5f;color:#fff;width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex-shrink:0}\n\n\/* Grid *\/\n#ggr .grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}\n#ggr .grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}\n@media(max-width:640px){#ggr .grid2,#ggr .grid3{grid-template-columns:1fr}}\n\n\/* Input *\/\n#ggr .field{display:flex;flex-direction:column;gap:5px}\n#ggr label{font-size:12px;font-weight:600;color:#475569}\n#ggr .kz{font-size:10px;color:#94a3b8;margin-left:4px;font-weight:400}\n#ggr .iw{position:relative;display:flex;align-items:center}\n#ggr input[type=number],#ggr input[type=text],#ggr select{\n  width:100%;padding:10px 44px 10px 12px;border:1.5px solid #e2e8f0;\n  border-radius:9px;font-size:15px;font-weight:600;color:#1a2233;\n  background:#f8fafc;outline:none;font-family:inherit;\n  transition:border-color .15s,background .15s;-webkit-appearance:none\n}\n#ggr input:focus,#ggr select:focus{border-color:#1e3a5f;background:#fff}\n#ggr input::-webkit-inner-spin-button,#ggr input::-webkit-outer-spin-button{-webkit-appearance:none}\n#ggr .unit{position:absolute;right:12px;font-size:12px;font-weight:600;color:#94a3b8;pointer-events:none}\n#ggr .hint{font-size:11px;color:#94a3b8;margin-top:2px}\n\n\/* Button *\/\n#ggr .btn{width:100%;padding:15px;background:linear-gradient(135deg,#1e3a5f,#2d5a9e);\n  border:none;border-radius:12px;color:#fff;font-size:15px;font-weight:700;\n  font-family:inherit;cursor:pointer;margin-top:8px;transition:opacity .2s,transform .15s;letter-spacing:.3px}\n#ggr .btn:hover{opacity:.92;transform:translateY(-1px)}\n\n\/* Ergebnis *\/\n#ggr .result{display:none;background:linear-gradient(135deg,#0f2744,#1e3a5f);border-radius:16px;padding:28px;margin-top:20px;color:#fff}\n#ggr .res-title{font-size:16px;font-weight:700;margin:0 0 20px;color:#e2e8f0;display:flex;align-items:center;gap:8px}\n#ggr .res-title::before{content:'\ud83d\udcca';font-size:18px}\n\n\/* KPI Grid *\/\n#ggr .kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:24px}\n#ggr .kpi{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:14px;text-align:center}\n#ggr .kpi.hl{background:rgba(30,111,217,.2);border-color:rgba(30,111,217,.4)}\n#ggr .kpi-l{font-size:10px;color:#94a3b8;text-transform:uppercase;letter-spacing:.5px;margin-bottom:5px}\n#ggr .kpi-v{font-size:20px;font-weight:700;color:#fff}\n#ggr .kpi-v.gold{color:#fbbf24}\n#ggr .kpi-v.blue{color:#60a5fa}\n#ggr .kpi-v.green{color:#34d399}\n\n\/* Tabelle *\/\n#ggr .res-table{width:100%;border-collapse:collapse;margin-bottom:20px;font-size:13px}\n#ggr .res-table th{background:rgba(255,255,255,.08);color:#94a3b8;font-size:10px;text-transform:uppercase;letter-spacing:.5px;padding:9px 12px;text-align:left;font-weight:600}\n#ggr .res-table th:last-child{text-align:right}\n#ggr .res-table td{padding:10px 12px;border-top:1px solid rgba(255,255,255,.06);color:#cbd5e1;vertical-align:top}\n#ggr .res-table td:last-child{text-align:right;font-weight:600;color:#fff;white-space:nowrap}\n#ggr .res-table tr.sub td{font-size:12px;color:#64748b;padding:6px 12px 6px 24px}\n#ggr .res-table tr.sub td:last-child{color:#94a3b8}\n#ggr .res-table tr.total td{background:rgba(255,255,255,.05);font-weight:700;color:#fff}\n#ggr .res-table tr.total td:last-child{color:#fbbf24;font-size:15px}\n\n\/* Anlage Karten *\/\n#ggr .anlage-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px}\n@media(max-width:580px){#ggr .anlage-grid{grid-template-columns:1fr}}\n#ggr .anlage-card{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:16px}\n#ggr .anlage-title{font-size:11px;font-weight:700;color:#60a5fa;text-transform:uppercase;letter-spacing:.6px;margin-bottom:12px}\n#ggr .anlage-row{display:flex;justify-content:space-between;align-items:baseline;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.05)}\n#ggr .anlage-row:last-child{border-bottom:none}\n#ggr .anlage-zeile{font-size:11px;color:#64748b}\n#ggr .anlage-desc{font-size:12px;color:#cbd5e1;flex:1;margin:0 8px}\n#ggr .anlage-val{font-size:13px;font-weight:700;color:#fff;white-space:nowrap}\n#ggr .anlage-val.hi{color:#34d399}\n\n\/* Erklaerungsbox *\/\n#ggr .erkl{background:rgba(99,102,241,.12);border:1px solid rgba(99,102,241,.3);border-radius:12px;padding:18px;margin-top:16px}\n#ggr .erkl-title{font-size:12px;font-weight:700;color:#a5b4fc;text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px}\n#ggr .erkl-step{display:flex;gap:10px;margin-bottom:10px;font-size:13px;color:#cbd5e1;line-height:1.5}\n#ggr .erkl-step:last-child{margin-bottom:0}\n#ggr .erkl-num{background:rgba(99,102,241,.3);color:#a5b4fc;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0;margin-top:1px}\n\n#ggr .warn-box{background:rgba(245,158,11,.12);border:1px solid rgba(245,158,11,.3);border-radius:10px;padding:14px;margin-top:14px;font-size:12px;color:#fde68a;line-height:1.5}\n#ggr .warn-box strong{color:#fbbf24}\n\n\/* PDF-Download Button *\/\n#ggr .pdf-btn{width:100%;padding:14px;background:linear-gradient(135deg,#7c3aed,#a855f7);\n  border:none;border-radius:12px;color:#fff;font-size:14px;font-weight:700;\n  font-family:inherit;cursor:pointer;margin-top:20px;transition:opacity .2s,transform .15s;\n  letter-spacing:.3px;display:flex;align-items:center;justify-content:center;gap:8px}\n#ggr .pdf-btn:hover:not(:disabled){opacity:.92;transform:translateY(-1px)}\n#ggr .pdf-btn:disabled{opacity:.6;cursor:wait;transform:none}\n#ggr .pdf-hint{font-size:11px;color:#94a3b8;text-align:center;margin-top:8px;line-height:1.5}\n<\/style>\n\n<div id=\"ggr\">\n\n<!-- Disclaimer -->\n<div class=\"disc\">\n  <div class=\"disc-icon\">\u26a0\ufe0f<\/div>\n  <div>\n    <p><strong>Kein Steuerberatungsangebot.<\/strong> Dieser Rechner dient ausschlie\u00dflich zur unverbindlichen Orientierung und ersetzt keine individuelle Steuerberatung. Die Ergebnisse basieren auf vereinfachten Annahmen (Beitragss\u00e4tze 2025, pauschale Aufteilung). F\u00fcr eine rechtssichere Berechnung wende dich an einen Steuerberater. Alle Angaben ohne Gew\u00e4hr.<\/p>\n  <\/div>\n<\/div>\n\n<!-- Schritt 1: L16 Daten -->\n<div class=\"sec\">\n  <div class=\"sec-title\"><span>1<\/span> Werte aus dem \u00f6sterreichischen Lohnzettel L16<\/div>\n  <div class=\"grid2\">\n    <div class=\"field\">\n      <label>Bruttobez\u00fcge <span class=\"kz\">KZ 210<\/span><\/label>\n      <div class=\"iw\"><input type=\"number\" id=\"g_kz210\" value=\"84068.29\" step=\"0.01\"><span class=\"unit\">\u20ac<\/span><\/div>\n      <div class=\"hint\">Bruttobez\u00fcge gem. \u00a7 25, ohne \u00a7 26 \/ \u00a7 3 Abs.1 Z 16b<\/div>\n    <\/div>\n    <div class=\"field\">\n      <label>Sonstige Bez\u00fcge <span class=\"kz\">KZ 220<\/span><\/label>\n      <div class=\"iw\"><input type=\"number\" id=\"g_kz220\" value=\"11051.37\" step=\"0.01\"><span class=\"unit\">\u20ac<\/span><\/div>\n      <div class=\"hint\">Urlaubsgeld, Weihnachtsgeld (13.\/14. Bezug)<\/div>\n    <\/div>\n    <div class=\"field\">\n      <label>Gesamt SV-Beitr\u00e4ge <span class=\"kz\">KZ 230<\/span><\/label>\n      <div class=\"iw\"><input type=\"number\" id=\"g_kz230\" value=\"14915.50\" step=\"0.01\"><span class=\"unit\">\u20ac<\/span><\/div>\n      <div class=\"hint\">Insgesamt einbehaltene SV-Beitr\u00e4ge, Kammerumlage, Wohnbauf\u00f6rderung<\/div>\n    <\/div>\n    <div class=\"field\">\n      <label>SV auf Sonstige Bez\u00fcge <span class=\"kz\">KZ 225<\/span><\/label>\n      <div class=\"iw\"><input type=\"number\" id=\"g_kz225\" value=\"1864.73\" step=\"0.01\"><span class=\"unit\">\u20ac<\/span><\/div>\n      <div class=\"hint\">SV-Beitr\u00e4ge f\u00fcr Bez\u00fcge gem. KZ 220<\/div>\n    <\/div>\n    <div class=\"field\">\n      <label>Mitarbeitergewinnbeteiligung <span class=\"kz\">KZ 243<\/span><\/label>\n      <div class=\"iw\"><input type=\"number\" id=\"g_kz243\" value=\"1976.00\" step=\"0.01\"><span class=\"unit\">\u20ac<\/span><\/div>\n      <div class=\"hint\">Gem. \u00a7 3 Abs. 1 Z 35 (steuerfrei bis 3.000 \u20ac)<\/div>\n    <\/div>\n    <div class=\"field\">\n      <label>Mitarbeiterpr\u00e4mie <span class=\"kz\">KZ 245<\/span><\/label>\n      <div class=\"iw\"><input type=\"number\" id=\"g_kz245\" value=\"500.00\" step=\"0.01\"><span class=\"unit\">\u20ac<\/span><\/div>\n      <div class=\"hint\">Gem. \u00a7 124b Z 478<\/div>\n    <\/div>\n    <div class=\"field\">\n      <label>Steuerfreie Bez\u00fcge <span class=\"kz\">KZ 215<\/span><\/label>\n      <div class=\"iw\"><input type=\"number\" id=\"g_kz215\" value=\"1147.00\" step=\"0.01\"><span class=\"unit\">\u20ac<\/span><\/div>\n      <div class=\"hint\">Gem. \u00a7 68 (Schmutz-\/Erschwernis-\/Gefahrenzulagen)<\/div>\n    <\/div>\n    <div class=\"field\">\n      <label>Telearbeitstage<\/label>\n      <div class=\"iw\"><input type=\"number\" id=\"g_home\" value=\"6\" step=\"1\" min=\"0\" max=\"365\"><\/div>\n      <div class=\"hint\">Arbeitstage im Homeoffice (Deutschland)<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- Schritt 2: Weitere Angaben -->\n<div class=\"sec\">\n  <div class=\"sec-title\"><span>2<\/span> Weitere Angaben<\/div>\n  <div class=\"grid3\">\n    <div class=\"field\">\n      <label>DBA-Artikel<\/label>\n      <select id=\"g_dba\">\n        <option value=\"gz\" selected>Art. 15 Abs. 6 \u2014 Grenzg\u00e4nger<\/option>\n        <option value=\"a15\">Art. 15 Abs. 1\/2 \u2014 Normalfall<\/option>\n        <option value=\"oeff\">Art. 19 \u2014 \u00d6ffentlicher Dienst<\/option>\n      <\/select>\n    <\/div>\n    <div class=\"field\">\n      <label>Monate SV-Pflicht \u00d6sterreich<\/label>\n      <div class=\"iw\"><input type=\"number\" id=\"g_monate\" value=\"12\" min=\"1\" max=\"12\"><\/div>\n      <div class=\"hint\">Normalerweise 12<\/div>\n    <\/div>\n    <div class=\"field\">\n      <label>Veranlagungsjahr<\/label>\n      <select id=\"g_jahr\">\n        <option value=\"2025\" selected>2025<\/option>\n        <option value=\"2024\">2024<\/option>\n      <\/select>\n    <\/div>\n  <\/div>\n<\/div>\n\n<button class=\"btn\" onclick=\"ggrCalc()\">Berechnung starten \u2192<\/button>\n\n<!-- Ergebnis -->\n<div class=\"result\" id=\"ggr-result\">\n  <div class=\"res-title\">Ergebnis\u00fcbersicht<\/div>\n\n  <div class=\"kpi-grid\">\n    <div class=\"kpi hl\"><div class=\"kpi-l\">Bruttoarbeitslohn DE<\/div><div class=\"kpi-v blue\" id=\"rr-brutto\">\u2014<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-l\">RV Arbeitnehmer<\/div><div class=\"kpi-v gold\" id=\"rr-rv-an\">\u2014<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-l\">RV Arbeitgeber<\/div><div class=\"kpi-v gold\" id=\"rr-rv-ag\">\u2014<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-l\">Krankenversicherung AN<\/div><div class=\"kpi-v green\" id=\"rr-kv\">\u2014<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-l\">Arbeitslosenversicherung<\/div><div class=\"kpi-v\" id=\"rr-av\">\u2014<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-l\">Gesamt Sonderausgaben<\/div><div class=\"kpi-v gold\" id=\"rr-gesamt\">\u2014<\/div><\/div>\n  <\/div>\n\n  <!-- Detailtabelle -->\n  <table class=\"res-table\">\n    <thead><tr><th>Position<\/th><th>Berechnung \/ Basis<\/th><th>Betrag<\/th><\/tr><\/thead>\n    <tbody id=\"rr-tbody\"><\/tbody>\n  <\/table>\n\n  <!-- Anlage-Zuordnung -->\n  <div class=\"anlage-grid\">\n    <div class=\"anlage-card\">\n      <div class=\"anlage-title\">\ud83d\udccb Anlage N<\/div>\n      <div id=\"rr-anlagen-n\"><\/div>\n    <\/div>\n    <div class=\"anlage-card\">\n      <div class=\"anlage-title\">\ud83d\udee1 Anlage Vorsorgeaufwand<\/div>\n      <div id=\"rr-anlagen-v\"><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Schritt-f\u00fcr-Schritt Anleitung -->\n  <div class=\"erkl\">\n    <div class=\"erkl-title\">\ud83d\udcdd So tr\u00e4gst du die Werte in ELSTER ein<\/div>\n    <div class=\"erkl-step\"><div class=\"erkl-num\">1<\/div><div>\u00d6ffne deine Steuererkl\u00e4rung in <strong>ELSTER<\/strong> und w\u00e4hle die Anlage <strong>N<\/strong> (Eink\u00fcnfte aus nichtselbst\u00e4ndiger Arbeit).<\/div><\/div>\n    <div class=\"erkl-step\"><div class=\"erkl-num\">2<\/div><div>Trage den <strong>Bruttoarbeitslohn nach deutschem Steuerrecht<\/strong> in Zeile 6 (Anlage N) ein. Dies entspricht dem bereinigten Bruttowert aus dem L16.<\/div><\/div>\n    <div class=\"erkl-step\"><div class=\"erkl-num\">3<\/div><div>W\u00e4hle bei Arbeitgeber-Land <strong>\u00d6sterreich<\/strong> und gib die Steuernummer der Julius Blum GmbH an. F\u00fcge den L16 als Anlage bei.<\/div><\/div>\n    <div class=\"erkl-step\"><div class=\"erkl-num\">4<\/div><div>Wechsle zur Anlage <strong>Vorsorgeaufwand<\/strong>. Trage die Rentenversicherungsbeitr\u00e4ge (AN + AG) in Zeilen 4\/9 ein, die Krankenversicherung in Zeile 31.<\/div><\/div>\n    <div class=\"erkl-step\"><div class=\"erkl-num\">5<\/div><div>Als Grenzg\u00e4nger nach <strong>Art. 15 Abs. 6 DBA<\/strong> wird der gesamte Arbeitslohn in Deutschland besteuert. \u00d6sterreich hat kein Besteuerungsrecht \u2014 trage <strong>keine<\/strong> Progressionseink\u00fcnfte ein.<\/div><\/div>\n    <div class=\"erkl-step\"><div class=\"erkl-num\">6<\/div><div>Die <strong>Mitarbeitergewinnbeteiligung<\/strong> (KZ 243) und <strong>Mitarbeiterpr\u00e4mie<\/strong> (KZ 245) sind in Deutschland steuerpflichtig soweit sie \u00fcber die \u00f6sterreichische Steuerfreigrenze hinausgehen.<\/div><\/div>\n    <div class=\"erkl-step\"><div class=\"erkl-num\">7<\/div><div>F\u00fcge die <strong>Arbeitshilfe zur Aufteilung von Vorsorgeaufwendungen<\/strong> (ausgef\u00fcllte Excel-Vorlage) als Nachweis der Berechnung bei.<\/div><\/div>\n  <\/div>\n\n  <div class=\"warn-box\" id=\"rr-warn\" style=\"display:none\"><\/div>\n\n  <div style=\"margin-top:16px;font-size:11px;color:#475569;line-height:1.6;background:rgba(255,255,255,.04);border-radius:8px;padding:14px\">\n    <strong style=\"color:#94a3b8\">Verwendete Beitragss\u00e4tze 2025:<\/strong> RV 18,6% (je 9,3% AN\/AG) \u00b7 KV 14,6% + 2,5% Zusatzbeitrag (AN) \u00b7 PV 3,4% (AN) \u00b7 AV 2,6% (AN) \u00b7 BBG RV 8.050 \u20ac\/Monat \u00b7 BBG KV 5.512,50 \u20ac\/Monat. Quelle: Deutsche Rentenversicherung \/ GKV-Spitzenverband 2025. <strong style=\"color:#f59e0b\">Keine Steuerberatung.<\/strong>\n  <\/div>\n\n  <!-- PDF-Download -->\n  <button type=\"button\" class=\"pdf-btn\" onclick=\"ggrPdf(this)\">\n    <span style=\"font-size:18px\">\ud83d\udcc4<\/span>\n    <span>Berechnung als PDF herunterladen<\/span>\n  <\/button>\n  <div class=\"pdf-hint\">Als Nachweis zur Anlage Vorsorgeaufwand \/ Anlage N \u2014 zum Anheften an die Steuererkl\u00e4rung.<\/div>\n<\/div>\n<\/div>\n\n<script>\nfunction ggrFmt(v){ return v.toLocaleString('de-DE',{minimumFractionDigits:2,maximumFractionDigits:2})+' \u20ac'; }\nfunction ggrV(id){ return parseFloat(document.getElementById(id).value)||0; }\n\nfunction ggrCalc(){\n  \/* \u2500\u2500 Eingaben \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  var kz210 = ggrV('g_kz210');\n  var kz220 = ggrV('g_kz220');\n  var kz230 = ggrV('g_kz230');\n  var kz225 = ggrV('g_kz225');\n  var kz243 = ggrV('g_kz243');\n  var kz245 = ggrV('g_kz245');\n  var kz215 = ggrV('g_kz215');\n  var home  = ggrV('g_home');\n  var monate= ggrV('g_monate');\n  var jahr  = document.getElementById('g_jahr').value;\n  var dba   = document.getElementById('g_dba').value;\n\n  \/* \u2500\u2500 Beitragss\u00e4tze 2025 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  var saetze = {\n    '2025': { bbg_rv: 8050*12, bbg_kv: 5512.50*12, rv: 0.186, kv: 0.146, zb: 0.025, pv: 0.034, av: 0.026, ak: 0.005 },\n    '2024': { bbg_rv: 7550*12, bbg_kv: 5175*12,    rv: 0.186, kv: 0.146, zb: 0.017, pv: 0.034, av: 0.026, ak: 0.005 },\n  };\n  var s = saetze[jahr] || saetze['2025'];\n\n  \/* \u2500\u2500 1. Bruttoarbeitslohn nach dt. Steuerrecht \u2500\u2500 *\/\n  \/* Laufender Bezug = KZ210 - KZ220 (sonstige Bez\u00fcge separat) *\/\n  var laufend = kz210 - kz220;\n\n  \/* Sonstige Bez\u00fcge: in DE voll steuerpflichtig (AN-Steuerfreibetrag AT ist kein DE-Freibetrag) *\/\n  \/* Steuerfreie Bez\u00fcge KZ215 (Schmutzzulagen) \u2192 in DE grds. steuerpflichtig *\/\n  \/* Mitarbeitergewinnbeteiligung bis 3.600 \u20ac steuerfrei in AT \u2192 in DE steuerpflichtig *\/\n  var brutto_de = laufend + kz220 + kz215 + kz243 + kz245;\n\n  \/* Zeitanteilige K\u00fcrzung falls < 12 Monate *\/\n  var faktor = monate \/ 12;\n  brutto_de = brutto_de * faktor;\n\n  \/* \u2500\u2500 2. Bemessungsgrundlage f\u00fcr SV \u2500\u2500 *\/\n  \/* Relevant: laufender Bruttoarbeitslohn (ohne sonstige Bez\u00fcge f\u00fcr RV\/KV Grenze) *\/\n  var bmg_laufend = Math.min(laufend * faktor, s.bbg_rv);\n  var bmg_kv      = Math.min(laufend * faktor, s.bbg_kv);\n  var bmg_sonstige= Math.min(kz220 * faktor, s.bbg_rv - bmg_laufend);\n  var bmg_rv_ges  = Math.min((laufend + kz220) * faktor, s.bbg_rv);\n\n  \/* \u2500\u2500 3. Rentenversicherung \u2500\u2500 *\/\n  var rv_an = bmg_rv_ges * (s.rv \/ 2);\n  var rv_ag = bmg_rv_ges * (s.rv \/ 2);\n\n  \/* \u2500\u2500 4. Krankenversicherung \u2500\u2500 *\/\n  var kv_an = bmg_kv * ((s.kv + s.zb) \/ 2);\n  var pv_an = bmg_kv * (s.pv \/ 2);\n\n  \/* \u2500\u2500 5. Arbeitslosenversicherung \u2500\u2500 *\/\n  var av_an = Math.min(laufend * faktor, s.bbg_rv) * (s.av \/ 2);\n\n  \/* \u2500\u2500 6. Tats\u00e4chliche SV aus L16 (Plausibilit\u00e4tscheck) \u2500\u2500 *\/\n  var sv_laufend = kz230 - kz225; \/* SV auf laufende Bez\u00fcge *\/\n\n  \/* Arbeiterkammerbeitrag (WK, nicht Sonderausgabe): ca. 0,5% *\/\n  var ak_an = Math.min(laufend * faktor, s.bbg_rv) * s.ak;\n  \/* Wohnbauf\u00f6rderung (nicht abzugsf\u00e4hig in DE): ca. 0,5% *\/\n  var wbf   = Math.min(laufend * faktor, s.bbg_rv) * 0.005;\n\n  \/* Abzugsf\u00e4hige SV in DE = Gesamt - AK - Wohnbauf\u00f6rderung *\/\n  var sv_abzugsfaehig = sv_laufend - ak_an - wbf;\n\n  \/* \u2500\u2500 7. Aufteilung f\u00fcr Anlage Vorsorgeaufwand \u2500\u2500 *\/\n  \/* RV: Zeilen 4+9 (AN + AG) *\/\n  var vorl_rv = rv_an + rv_ag;\n  \/* KV: Zeile 31 (AN-Anteil Basisabsicherung) *\/\n  var vorl_kv = kv_an;\n  \/* PV: Zeile 33 (AN-Anteil) *\/\n  var vorl_pv = pv_an;\n  \/* AV: Zeile 45 (AN-Anteil) \u2192 sonstige Vorsorge *\/\n  var vorl_av = av_an;\n\n  \/* \u2500\u2500 8. Anlage N Werbungskosten \u2500\u2500 *\/\n  var wk_ak = ak_an; \/* Zeile 40\/41 *\/\n\n  \/* \u2500\u2500 Ergebnis anzeigen \u2500\u2500 *\/\n  document.getElementById('rr-brutto').textContent = ggrFmt(brutto_de);\n  document.getElementById('rr-rv-an').textContent  = ggrFmt(rv_an);\n  document.getElementById('rr-rv-ag').textContent  = ggrFmt(rv_ag);\n  document.getElementById('rr-kv').textContent     = ggrFmt(kv_an);\n  document.getElementById('rr-av').textContent     = ggrFmt(av_an);\n  document.getElementById('rr-gesamt').textContent = ggrFmt(vorl_rv + vorl_kv + vorl_pv);\n\n  \/* Detailtabelle *\/\n  var rows = [\n    ['Bruttoarbeitslohn nach dt. Steuerrecht','KZ210 \u00b1 Korrekturen \u00d7 '+faktor.toFixed(4), brutto_de, false, false],\n    ['Laufender Bruttobezug','KZ 210 \u2212 KZ 220 = '+ggrFmt(laufend)+' \u00d7 '+faktor.toFixed(2), laufend*faktor, true, false],\n    ['Sonstige Bez\u00fcge (13.\/14.)','KZ 220 = '+ggrFmt(kz220)+' \u00d7 '+faktor.toFixed(2), kz220*faktor, true, false],\n    ['Steuerfreie Bez\u00fcge AT','KZ 215 (in DE steuerpflichtig)', kz215*faktor, true, false],\n    ['Mitarbeitergewinnbeteiligung','KZ 243 (in DE steuerpflichtig)', kz243*faktor, true, false],\n    ['Mitarbeiterpr\u00e4mie','KZ 245', kz245*faktor, true, false],\n    ['\u2500','\u2500','\u2500',false,false],\n    ['RV-Bemessungsgrundlage','min(laufend+sonstige, BBG '+ggrFmt(s.bbg_rv)+')', bmg_rv_ges, false, false],\n    ['Rentenversicherung AN (9,3%)','BMG \u00d7 9,3%', rv_an, true, false],\n    ['Rentenversicherung AG (9,3%)','BMG \u00d7 9,3%', rv_ag, true, false],\n    ['\u2500','\u2500','\u2500',false,false],\n    ['KV-Bemessungsgrundlage','min(laufend, BBG '+ggrFmt(s.bbg_kv)+')', bmg_kv, false, false],\n    ['Krankenversicherung AN','BMG \u00d7 '+(((s.kv+s.zb)\/2)*100).toFixed(2)+'%', kv_an, true, false],\n    ['Pflegepflichtversicherung AN','BMG \u00d7 '+(s.pv\/2*100).toFixed(2)+'%', pv_an, true, false],\n    ['Arbeitslosenversicherung AN','BMG \u00d7 '+(s.av\/2*100).toFixed(2)+'%', av_an, true, false],\n    ['\u2500','\u2500','\u2500',false,false],\n    ['Arbeiterkammerbeitrag (WK)','~0,5% \u2014 Werbungskosten, nicht Sonderausgabe', ak_an, true, false],\n    ['Wohnbauf\u00f6rderung (nicht abzugsf\u00e4hig DE)','~0,5% \u2014 kein Sonderausgabenabzug', wbf, true, false],\n    ['\u2500','\u2500','\u2500',false,false],\n    ['Gesamt abzugsf\u00e4hige Sonderausgaben','RV + KV + PV', vorl_rv+vorl_kv+vorl_pv, false, true],\n  ];\n\n  var tbody = document.getElementById('rr-tbody');\n  tbody.innerHTML = '';\n  rows.forEach(function(r){\n    if(r[0]==='\u2500'){ tbody.innerHTML+='<tr><td colspan=\"3\" style=\"padding:4px;border-top:1px solid rgba(255,255,255,.08)\"><\/td><\/tr>'; return; }\n    var cls = r[3]?'sub':(r[4]?'total':'');\n    var val = typeof r[2]==='number' ? ggrFmt(r[2]) : r[2];\n    if(r[4]) val='<span style=\"color:#fbbf24\">'+val+'<\/span>';\n    tbody.innerHTML += '<tr class=\"'+cls+'\"><td>'+r[0]+'<\/td><td style=\"color:#64748b\">'+r[1]+'<\/td><td>'+val+'<\/td><\/tr>';\n  });\n\n  \/* Anlage N *\/\n  var anlagenN = [\n    ['Zeile 6','Bruttoarbeitslohn', brutto_de, true],\n    ['Zeile 40','WK Arbeiterkammer', ak_an, false],\n    ['Zeile 21','Ausl\u00e4nd. Eink\u00fcnfte ohne LSt-Abzug', 0, false],\n    ['Zeile 26','Steuerfreier AN (Progressionsvorbehalt)', dba==='gz'?0:brutto_de, false],\n  ];\n  var hn = document.getElementById('rr-anlagen-n');\n  hn.innerHTML = '';\n  anlagenN.forEach(function(r){\n    hn.innerHTML += '<div class=\"anlage-row\">'\n      +'<span class=\"anlage-zeile\">'+r[0]+'<\/span>'\n      +'<span class=\"anlage-desc\">'+r[1]+'<\/span>'\n      +'<span class=\"anlage-val'+(r[3]?' hi':'')+'\">'+ggrFmt(r[2])+'<\/span>'\n      +'<\/div>';\n  });\n\n  \/* Anlage Vorsorgeaufwand *\/\n  var anlagenV = [\n    ['Zeile 4', 'RV AN-Beitrag', rv_an, true],\n    ['Zeile 9', 'RV AG-Beitrag', rv_ag, true],\n    ['Zeile 31','Ausl\u00e4nd. KV AN-Anteil', kv_an, false],\n    ['Zeile 33','Ausl\u00e4nd. PV AN-Anteil', pv_an, false],\n    ['Zeile 45','AV AN-Anteil (sonst. Vorsorge)', av_an, false],\n  ];\n  var hv = document.getElementById('rr-anlagen-v');\n  hv.innerHTML = '';\n  anlagenV.forEach(function(r){\n    hv.innerHTML += '<div class=\"anlage-row\">'\n      +'<span class=\"anlage-zeile\">'+r[0]+'<\/span>'\n      +'<span class=\"anlage-desc\">'+r[1]+'<\/span>'\n      +'<span class=\"anlage-val'+(r[3]?' hi':'')+'\">'+ggrFmt(r[2])+'<\/span>'\n      +'<\/div>';\n  });\n\n  \/* Warnhinweise *\/\n  var warns = [];\n  if(home > 0){\n    warns.push('<strong>Telearbeitstage:<\/strong> Du hast '+home+' Homeoffice-Tage angegeben. Als Grenzg\u00e4nger (Art.15 Abs.6 DBA AT-DE) kann das Grenzg\u00e4ngerprivileg entfallen wenn du an mehr als 45 Arbeitstagen nicht nach \u00d6sterreich zur\u00fcckkehrst. Pr\u00fcfe mit deinem Steuerberater ob du noch als Grenzg\u00e4nger giltst.');\n  }\n  if(monate < 12){\n    warns.push('<strong>Unterj\u00e4hrige Besch\u00e4ftigung:<\/strong> Die Beitr\u00e4ge wurden zeitanteilig auf '+monate+' Monate gek\u00fcrzt.');\n  }\n  if(sv_abzugsfaehig > vorl_rv + vorl_kv + vorl_pv + 200){\n    warns.push('<strong>Hinweis SV-Beitr\u00e4ge:<\/strong> Die tats\u00e4chlichen SV-Beitr\u00e4ge laut L16 (KZ 230 abzgl. nicht abzugsf\u00e4higer Anteile = '+ggrFmt(sv_abzugsfaehig)+') sind h\u00f6her als die pauschal ermittelten Beitr\u00e4ge. Ggf. ist ein Nachweis der tats\u00e4chlichen Beitragsaufteilung g\u00fcnstiger.');\n  }\n\n  var wbox = document.getElementById('rr-warn');\n  if(warns.length){\n    wbox.style.display='block';\n    wbox.innerHTML = warns.map(function(w){return '<div style=\"margin-bottom:6px\">\u26a0\ufe0f '+w+'<\/div>';}).join('');\n  } else {\n    wbox.style.display='none';\n  }\n\n  \/* \u2500\u2500 Status f\u00fcr PDF-Export speichern \u2500\u2500 *\/\n  window.ggrState = {\n    inputs:  { kz210:kz210, kz220:kz220, kz230:kz230, kz225:kz225, kz243:kz243, kz245:kz245, kz215:kz215, home:home, monate:monate, jahr:jahr, dba:dba },\n    results: { brutto_de:brutto_de, laufend:laufend, rv_an:rv_an, rv_ag:rv_ag, kv_an:kv_an, pv_an:pv_an, av_an:av_an, ak_an:ak_an, wbf:wbf, sv_laufend:sv_laufend, sv_abzugsfaehig:sv_abzugsfaehig, vorl_rv:vorl_rv, vorl_kv:vorl_kv, vorl_pv:vorl_pv },\n    rows:     rows,\n    anlagenN: anlagenN,\n    anlagenV: anlagenV,\n    warns:    warns,\n    faktor:   faktor,\n    s:        s\n  };\n\n  document.getElementById('ggr-result').style.display='block';\n  document.getElementById('ggr-result').scrollIntoView({behavior:'smooth',block:'start'});\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   PDF-Export\n   jsPDF + AutoTable werden bei erstem Klick on-demand geladen\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nfunction ggrPdf(btn){\n  if(!window.ggrState){\n    alert('Bitte zuerst die Berechnung starten.');\n    return;\n  }\n  var orig = btn.innerHTML;\n  btn.disabled = true;\n  btn.innerHTML = '<span style=\"font-size:18px\">\u23f3<\/span><span>PDF wird erstellt \u2026<\/span>';\n\n  function loadScript(url){\n    return new Promise(function(res, rej){\n      var s = document.createElement('script');\n      s.src = url;\n      s.onload  = function(){ res(); };\n      s.onerror = function(){ rej(new Error('Konnte '+url+' nicht laden')); };\n      document.head.appendChild(s);\n    });\n  }\n\n  var ready = Promise.resolve();\n  if(!window.jspdf || !window.jspdf.jsPDF){\n    ready = loadScript('https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js');\n  }\n  ready = ready.then(function(){\n    if(window.jspdf && window.jspdf.jsPDF && window.jspdf.jsPDF.API && window.jspdf.jsPDF.API.autoTable) return;\n    return loadScript('https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf-autotable\/3.8.2\/jspdf.plugin.autotable.min.js');\n  });\n\n  ready.then(function(){\n    try { ggrBuildPdf(); }\n    catch(e){ console.error(e); alert('Fehler bei PDF-Erstellung: '+e.message); }\n    btn.innerHTML = orig;\n    btn.disabled  = false;\n  }).catch(function(e){\n    console.error(e);\n    btn.innerHTML = orig;\n    btn.disabled  = false;\n    alert('PDF-Bibliothek konnte nicht geladen werden. Bitte Internetverbindung pr\u00fcfen.');\n  });\n}\n\nfunction ggrBuildPdf(){\n  var st = window.ggrState;\n  var i  = st.inputs, r = st.results;\n  var jsPDF = window.jspdf.jsPDF;\n  var doc = new jsPDF({ orientation:'p', unit:'mm', format:'a4' });\n  var W = doc.internal.pageSize.getWidth();\n  var H = doc.internal.pageSize.getHeight();\n  var M = 15;\n\n  \/* Datum \/ Uhrzeit der Erstellung *\/\n  var now = new Date();\n  var pad = function(n){ return n<10?'0'+n:''+n; };\n  var dateStr = pad(now.getDate())+'.'+pad(now.getMonth()+1)+'.'+now.getFullYear();\n  var timeStr = pad(now.getHours())+':'+pad(now.getMinutes());\n\n  \/* Geld-Format ohne Euro-Zeichen (Helvetica\/WinAnsi-sicher) *\/\n  function fmt(v){\n    if(typeof v !== 'number') return v;\n    return v.toLocaleString('de-DE',{minimumFractionDigits:2,maximumFractionDigits:2})+' EUR';\n  }\n\n  \/* Sanitize: ersetzt Zeichen, die jsPDF's Default-Helvetica (WinAnsi) nicht\n     korrekt darstellen kann (z.B. echtes Minus U+2212, En-Dash, Smart Quotes). *\/\n  function san(s){\n    if(typeof s !== 'string') return s;\n    return s\n      .replace(\/\\u2212\/g, '-')      \/* \u2212 MINUS SIGN  \u2192 - *\/\n      .replace(\/\\u2013\/g, '-')      \/* \u2013 EN DASH     \u2192 - *\/\n      .replace(\/\\u2018|\\u2019\/g, \"'\") \/* ' ' Smart Quotes *\/\n      .replace(\/\\u201C|\\u201D\/g, '\"') \/* \" \" Smart Quotes *\/\n      .replace(\/\\u2026\/g, '...');   \/* \u2026 ELLIPSIS    \u2192 ... *\/\n  }\n\n  \/* Header + Footer auf jeder Seite *\/\n  function pageDecor(data){\n    \/* Header-Banner *\/\n    doc.setFillColor(15, 39, 68);\n    doc.rect(0, 0, W, 22, 'F');\n    doc.setTextColor(255,255,255);\n    doc.setFont('helvetica','bold');\n    doc.setFontSize(13);\n    doc.text('Grenzg\u00e4nger Vorsorgeaufwendungen', M, 10);\n    doc.setFont('helvetica','normal');\n    doc.setFontSize(9);\n    doc.text('Berechnungshilfe Veranlagungsjahr '+i.jahr, M, 16);\n    doc.text(dateStr+' '+timeStr+' Uhr', W - M, 16, {align:'right'});\n\n    \/* Footer *\/\n    doc.setDrawColor(226,232,240);\n    doc.setLineWidth(0.2);\n    doc.line(M, H - 14, W - M, H - 14);\n    doc.setTextColor(100,116,139);\n    doc.setFontSize(7.5);\n    doc.setFont('helvetica','normal');\n    doc.text('Unverbindliche Berechnungshilfe \u2014 kein Steuerberatungsangebot. Alle Angaben ohne Gew\u00e4hr.', M, H - 9);\n    doc.text('manuel360finanz.de', M, H - 5);\n    doc.text('Seite '+data.pageNumber, W - M, H - 5, {align:'right'});\n\n    \/* Textfarbe f\u00fcr Tabelleninhalte zur\u00fccksetzen *\/\n    doc.setTextColor(26,34,51);\n  }\n\n  \/* Einheitliche Tabellen-Defaults *\/\n  var tableDefaults = {\n    theme:      'grid',\n    headStyles: { fillColor:[30,58,95], textColor:255, fontStyle:'bold', halign:'left', fontSize:9 },\n    styles:     { fontSize:9, cellPadding:2.4, lineColor:[226,232,240], lineWidth:0.1, textColor:[26,34,51] },\n    margin:     { left:M, right:M, top:28, bottom:18 },\n    didDrawPage: pageDecor\n  };\n\n  \/* \u2500\u2500 1. Eingabewerte L16 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  doc.autoTable(Object.assign({}, tableDefaults, {\n    startY: 28,\n    head: [[{ content:'Schritt 1 \u2014 Werte aus dem \u00f6sterreichischen Lohnzettel L16', colSpan:3 }]],\n    body: [\n      ['KZ 210', 'Bruttobez\u00fcge gem. \u00a7 25 EStG',           fmt(i.kz210)],\n      ['KZ 220', 'Sonstige Bez\u00fcge (13.\/14. Bezug)',       fmt(i.kz220)],\n      ['KZ 230', 'Gesamt SV-Beitr\u00e4ge',                    fmt(i.kz230)],\n      ['KZ 225', 'SV auf Sonstige Bez\u00fcge',                fmt(i.kz225)],\n      ['KZ 243', 'Mitarbeitergewinnbeteiligung',          fmt(i.kz243)],\n      ['KZ 245', 'Mitarbeiterpr\u00e4mie',                     fmt(i.kz245)],\n      ['KZ 215', 'Steuerfreie Bez\u00fcge (\u00a7 68)',             fmt(i.kz215)],\n      ['\u2014',      'Telearbeitstage (Homeoffice)',          String(i.home)+' Tage']\n    ],\n    columnStyles: { 0:{cellWidth:22, fontStyle:'bold'}, 1:{cellWidth:'auto'}, 2:{cellWidth:38, halign:'right', fontStyle:'bold'} }\n  }));\n\n  \/* \u2500\u2500 2. Weitere Angaben \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  var dbaLabel = { gz:'Art. 15 Abs. 6 DBA AT-DE \u2014 Grenzg\u00e4nger',\n                   a15:'Art. 15 Abs. 1\/2 DBA AT-DE \u2014 Normalfall',\n                   oeff:'Art. 19 DBA AT-DE \u2014 \u00d6ffentlicher Dienst' }[i.dba];\n  doc.autoTable(Object.assign({}, tableDefaults, {\n    startY: doc.lastAutoTable.finalY + 4,\n    head: [[{ content:'Schritt 2 \u2014 Weitere Angaben', colSpan:2 }]],\n    body: [\n      ['DBA-Artikel',                  dbaLabel],\n      ['Monate SV-Pflicht \u00d6sterreich', String(i.monate)+' Monate (Faktor '+st.faktor.toFixed(4)+')'],\n      ['Veranlagungsjahr',             i.jahr]\n    ],\n    columnStyles: { 0:{cellWidth:65, fontStyle:'bold'}, 1:{cellWidth:'auto'} }\n  }));\n\n  \/* \u2500\u2500 3. Ergebnis\u00fcbersicht (KPIs) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  doc.autoTable(Object.assign({}, tableDefaults, {\n    startY: doc.lastAutoTable.finalY + 4,\n    head: [[{ content:'Ergebnis\u00fcbersicht', colSpan:2 }]],\n    body: [\n      ['Bruttoarbeitslohn nach dt. Steuerrecht',          fmt(r.brutto_de)],\n      ['Rentenversicherung \u2014 Arbeitnehmeranteil',         fmt(r.rv_an)],\n      ['Rentenversicherung \u2014 Arbeitgeberanteil',          fmt(r.rv_ag)],\n      ['Krankenversicherung \u2014 Arbeitnehmeranteil',        fmt(r.kv_an)],\n      ['Pflegeversicherung \u2014 Arbeitnehmeranteil',         fmt(r.pv_an)],\n      ['Arbeitslosenversicherung \u2014 Arbeitnehmeranteil',   fmt(r.av_an)],\n      ['Gesamt abzugsf\u00e4hige Sonderausgaben (RV+KV+PV)',   fmt(r.vorl_rv + r.vorl_kv + r.vorl_pv)]\n    ],\n    columnStyles: { 0:{cellWidth:'auto'}, 1:{cellWidth:48, halign:'right', fontStyle:'bold'} },\n    didParseCell: function(data){\n      if(data.section==='body' && data.row.index===6){\n        data.cell.styles.fillColor = [254,243,199];\n        data.cell.styles.textColor = [120,53,15];\n        data.cell.styles.fontStyle = 'bold';\n      }\n    }\n  }));\n\n  \/* \u2500\u2500 4. Detail-Berechnung \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  var bodyDetail = [];\n  st.rows.forEach(function(rw){\n    if(rw[0] === '\u2500') return; \/* Trennzeilen weglassen *\/\n    bodyDetail.push([ san(rw[0]), san(rw[1]), (typeof rw[2]==='number') ? fmt(rw[2]) : san(rw[2]) ]);\n  });\n  var totalIdx = bodyDetail.length - 1;\n  doc.autoTable(Object.assign({}, tableDefaults, {\n    startY: doc.lastAutoTable.finalY + 4,\n    head: [['Position', 'Berechnung \/ Basis', 'Betrag']],\n    body: bodyDetail,\n    styles: { fontSize:8.5, cellPadding:2, lineColor:[226,232,240], lineWidth:0.1, textColor:[26,34,51] },\n    columnStyles: { 0:{cellWidth:58}, 1:{cellWidth:'auto', textColor:[100,116,139]}, 2:{cellWidth:34, halign:'right', fontStyle:'bold'} },\n    didParseCell: function(data){\n      if(data.section==='body' && data.row.index===totalIdx){\n        data.cell.styles.fillColor = [254,243,199];\n        data.cell.styles.textColor = [120,53,15];\n        data.cell.styles.fontStyle = 'bold';\n      }\n    }\n  }));\n\n  \/* \u2500\u2500 5. Anlage N \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  doc.autoTable(Object.assign({}, tableDefaults, {\n    startY: doc.lastAutoTable.finalY + 4,\n    head: [[{ content:'\u00dcbertrag in Anlage N \u2014 Eink\u00fcnfte aus nichtselbst\u00e4ndiger Arbeit', colSpan:3 }]],\n    body: st.anlagenN.map(function(rw){ return [san(rw[0]), san(rw[1]), fmt(rw[2])]; }),\n    columnStyles: { 0:{cellWidth:22, fontStyle:'bold'}, 1:{cellWidth:'auto'}, 2:{cellWidth:38, halign:'right', fontStyle:'bold'} }\n  }));\n\n  \/* \u2500\u2500 6. Anlage Vorsorgeaufwand \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  doc.autoTable(Object.assign({}, tableDefaults, {\n    startY: doc.lastAutoTable.finalY + 4,\n    head: [[{ content:'\u00dcbertrag in Anlage Vorsorgeaufwand', colSpan:3 }]],\n    body: st.anlagenV.map(function(rw){ return [san(rw[0]), san(rw[1]), fmt(rw[2])]; }),\n    columnStyles: { 0:{cellWidth:22, fontStyle:'bold'}, 1:{cellWidth:'auto'}, 2:{cellWidth:38, halign:'right', fontStyle:'bold'} }\n  }));\n\n  \/* \u2500\u2500 7. Warnhinweise (falls vorhanden) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  if(st.warns && st.warns.length){\n    var warnsClean = st.warns.map(function(w){\n      return san(w.replace(\/<[^>]+>\/g, '').replace(\/\\s+\/g, ' ').trim());\n    });\n    doc.autoTable(Object.assign({}, tableDefaults, {\n      startY: doc.lastAutoTable.finalY + 4,\n      head:   [[{ content:'Hinweise' }]],\n      body:   warnsClean.map(function(w){ return ['\u00bb  '+w]; }),\n      headStyles: { fillColor:[245,158,11], textColor:255, fontStyle:'bold', fontSize:9 },\n      styles:     { fontSize:8.5, cellPadding:3, lineColor:[253,230,138], lineWidth:0.1, textColor:[120,53,15], fillColor:[255,251,235] }\n    }));\n  }\n\n  \/* \u2500\u2500 8. Beitragss\u00e4tze-Quelle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  doc.autoTable(Object.assign({}, tableDefaults, {\n    startY: doc.lastAutoTable.finalY + 4,\n    body: [[\n      'Verwendete Beitragss\u00e4tze '+i.jahr+': RV 18,6 % (je 9,3 % AN\/AG) \u00b7 KV 14,6 % + 2,5 % Zusatzbeitrag (AN) \u00b7 '+\n      'PV 3,4 % (AN) \u00b7 AV 2,6 % (AN). BBG RV '+fmt(st.s.bbg_rv\/12)+'\/Monat \u00b7 BBG KV '+fmt(st.s.bbg_kv\/12)+'\/Monat. '+\n      'Quelle: Deutsche Rentenversicherung \/ GKV-Spitzenverband '+i.jahr+'. '+\n      'Diese Berechnung ist eine unverbindliche Orientierungshilfe und ersetzt keine individuelle Steuerberatung.'\n    ]],\n    theme:  'plain',\n    styles: { fontSize:7.5, cellPadding:3, textColor:[71,85,105], fillColor:[241,245,249], lineWidth:0 }\n  }));\n\n  \/* \u2500\u2500 Speichern \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  var fn = 'Grenzgaenger-Vorsorgeaufwand-'+i.jahr+'_'+now.getFullYear()+'-'+pad(now.getMonth()+1)+'-'+pad(now.getDate())+'.pdf';\n  doc.save(fn);\n}\n<\/script>\n\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"wp-block-paragraph\">Als Grenzg\u00e4nger zwischen \u00d6sterreich und Deutschland stehen Sie vor besonderen steuerlichen Herausforderungen. Die korrekte Ber\u00fccksichtigung des Doppelbesteuerungsabkommens (DBA), des Progressionsvorbehalts und der verschiedenen Werbungskostenpauschalen kann ohne professionelle Hilfe schnell kompliziert werden \u2013 und im schlimmsten Fall verschenken Sie bares Geld.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In meiner Beratungspraxis werde ich oft gefragt, welches Tool die deutsche Einkommensteuererkl\u00e4rung am besten unterst\u00fctzt. Meine klare Empfehlung: <strong>WISO Steuer<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Die Vorteile auf einen Blick:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Grenzg\u00e4nger-Support:<\/strong> Das Programm f\u00fchrt Sie gezielt durch die Erfassung ausl\u00e4ndischer Eink\u00fcnfte (z.B. Anlage N-AUS).<\/li>\n\n\n\n<li><strong>Maximale Erstattung:<\/strong> WISO erkennt automatisch Sparpotenziale und gibt Ihnen w\u00e4hrend der Eingabe wertvolle Steuerspartipps.<\/li>\n\n\n\n<li><strong>Einfache Handhabung:<\/strong> Dank des Interview-Modus werden Sie Schritt f\u00fcr Schritt durch die Formulare geleitet \u2013 ganz ohne Steuer-Chinesisch.<\/li>\n\n\n\n<li><strong>Flexibilit\u00e4t:<\/strong> Nutzen Sie die Software am PC, Mac, im Browser oder per App auf dem Tablet.<\/li>\n\n\n\n<li><strong>Sicherer Versand:<\/strong> Per ELSTER-Schnittstelle senden Sie Ihre Erkl\u00e4rung papierlos und direkt an Ihr Finanzamt.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sparen Sie sich Zeit und Nerven bei Ihrer n\u00e4chsten Steuererkl\u00e4rung. \u00dcber den folgenden Empfehlungslink k\u00f6nnen Sie WISO Steuer direkt beim Hersteller Buhl erwerben und sofort mit Ihrer Optimierung starten:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49 <strong><a href=\"https:\/\/www.buhl.de\/shop\/wisosteuer\/auswahl?2025=agv&amp;wkz=STKWKLP&amp;kwkcn=1HFk82c%2BAoo60epgg321eg%3D%3D\" target=\"_blank\" rel=\"noreferrer noopener\">Hier WISO Steuer kaufen &amp; Steuererkl\u00e4rung starten<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>(Hinweis: Wenn Sie \u00fcber diesen Link kaufen, erhalte ich eine kleine Empfehlungsprovision. F\u00fcr Sie entstehen keine Mehrkosten, aber Sie unterst\u00fctzen damit meine Arbeit auf dieser Seite. Vielen Dank!)<\/em><\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.buhl.de\/shop\/wisosteuer\/auswahl?2025=agv&amp;wkz=STKWKLP&amp;kwkcn=1HFk82c%2BAoo60epgg321eg%3D%3D\"><img loading=\"lazy\" decoding=\"async\" width=\"514\" height=\"262\" src=\"https:\/\/manuel360finanz.de\/wp-content\/uploads\/2026\/05\/WisoSteuer.png\" alt=\"\" class=\"wp-image-1790\" srcset=\"https:\/\/manuel360finanz.de\/wp-content\/uploads\/2026\/05\/WisoSteuer.png 514w, https:\/\/manuel360finanz.de\/wp-content\/uploads\/2026\/05\/WisoSteuer-300x153.png 300w\" sizes=\"auto, (max-width: 514px) 100vw, 514px\" \/><\/a><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<!-- 1. Das schwebende Widget (unten mittig am Bildschirm) -->\n<script data-name=\"BMC-Widget\" data-cfasync=\"false\" src=\"https:\/\/cdnjs.buymeacoffee.com\/1.0.0\/widget.prod.min.js\" data-id=\"grotzmanueI\" data-description=\"Support me on Buy me a coffee!\" data-message=\"\" data-color=\"#FF813F\" data-position=\"Fixed\" data-x_margin=\"18\" data-y_margin=\"18\">\n<\/script>\n\n<style>\n    \/* CSS f\u00fcr die Zentrierung des schwebenden Icons *\/\n    #bmc-wbtn {\n        left: 50% !important;\n        transform: translateX(-50%) !important;\n        right: auto !important;\n    }\n\n    \/* Styling f\u00fcr Text und Button-Container *\/\n    .bmc-wrapper {\n        text-align: center;\n        width: 100%;\n        margin: 30px 0;\n        font-family: sans-serif;\n    }\n    \n    .bmc-text {\n        font-size: 1.1rem;\n        margin-bottom: 15px;\n        color: #ffffff; \/* Textfarbe auf Wei\u00df gesetzt *\/\n        font-style: italic;\n        \/* Optionaler Schatten f\u00fcr bessere Lesbarkeit auf hellem Hintergrund *\/\n        text-shadow: 1px 1px 2px rgba(0,0,0,0.5);\n    }\n<\/style>\n\n<!-- 2. Text und Button Bereich -->\n<div class=\"bmc-wrapper\">\n    <p class=\"bmc-text\">\n       Dir gef\u00e4llt meine Arbeit? \u00dcber eine kleine Anerkennung in die Kaffeekasse als Trinkgeld freue ich mich riesig! \u2615\ufe0f\ud83d\udca4\n    <\/p>\n    \n    <script type=\"text\/javascript\" src=\"https:\/\/cdnjs.buymeacoffee.com\/1.0.0\/button.prod.min.js\" data-name=\"bmc-button\" data-slug=\"grotzmanueI\" data-color=\"#FFDD00\" data-emoji=\"\" data-font=\"Cookie\" data-text=\"Buy me a coffee\" data-outline-color=\"#000000\" data-font-color=\"#000000\" data-coffee-color=\"#ffffff\">\n    <\/script>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Als Grenzg\u00e4nger zwischen \u00d6sterreich und Deutschland stehen Sie vor besonderen steuerlichen Herausforderungen. Die korrekte Ber\u00fccksichtigung des Doppelbesteuerungsabkommens (DBA), des Progressionsvorbehalts und der verschiedenen Werbungskostenpauschalen kann ohne professionelle Hilfe schnell kompliziert werden \u2013 und im schlimmsten Fall verschenken Sie bares Geld. In meiner Beratungspraxis werde ich oft gefragt, welches Tool die deutsche Einkommensteuererkl\u00e4rung am besten unterst\u00fctzt. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":true,"_monsterinsights_sitenote_note":"Published: Grenzg\u00e4nger \u00d6sterreich","_monsterinsights_sitenote_category":11,"footnotes":""},"class_list":["post-1785","page","type-page","status-publish","hentry"],"aioseo_notices":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"trp-custom-language-flag":false,"m360ps-logo":false},"uagb_author_info":{"display_name":"Manuel Grotz","author_link":"https:\/\/manuel360finanz.de\/uk\/author\/grmu\/"},"uagb_comment_info":0,"uagb_excerpt":"Als Grenzg\u00e4nger zwischen \u00d6sterreich und Deutschland stehen Sie vor besonderen steuerlichen Herausforderungen. Die korrekte Ber\u00fccksichtigung des Doppelbesteuerungsabkommens (DBA), des Progressionsvorbehalts und der verschiedenen Werbungskostenpauschalen kann ohne professionelle Hilfe schnell kompliziert werden \u2013 und im schlimmsten Fall verschenken Sie bares Geld. In meiner Beratungspraxis werde ich oft gefragt, welches Tool die deutsche Einkommensteuererkl\u00e4rung am besten unterst\u00fctzt.&hellip;","_links":{"self":[{"href":"https:\/\/manuel360finanz.de\/uk\/wp-json\/wp\/v2\/pages\/1785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manuel360finanz.de\/uk\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/manuel360finanz.de\/uk\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/manuel360finanz.de\/uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manuel360finanz.de\/uk\/wp-json\/wp\/v2\/comments?post=1785"}],"version-history":[{"count":11,"href":"https:\/\/manuel360finanz.de\/uk\/wp-json\/wp\/v2\/pages\/1785\/revisions"}],"predecessor-version":[{"id":1820,"href":"https:\/\/manuel360finanz.de\/uk\/wp-json\/wp\/v2\/pages\/1785\/revisions\/1820"}],"wp:attachment":[{"href":"https:\/\/manuel360finanz.de\/uk\/wp-json\/wp\/v2\/media?parent=1785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}