
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Alimenty na małżonka — FORM ENGINE v4.4 stable</title>
<style>
:root{
--bg:#050607;--card:#101112;--card2:#151618;--gold:#D8B77A;--gold2:#E6C48A;--goldDark:#A8753C;
--text:#F5F2EA;--muted:#BFB8AA;--danger:#D66A6A;--warn:#E0B15C;--ok:#8FCB9B;
--border:rgba(216,183,122,.32);--soft:rgba(216,183,122,.17);--shadow:0 24px 70px rgba(0,0,0,.42);
}
*{box-sizing:border-box}
body{
margin:0;
font-family:Inter,Arial,sans-serif;
background:radial-gradient(circle at top left,rgba(216,183,122,.15),transparent 32%),var(--bg);
color:var(--text);
}
header{padding:42px 22px 34px;text-align:center;border-bottom:1px solid var(--border)}
.badge{display:inline-block;padding:8px 14px;border:1px solid var(--border);border-radius:999px;color:var(--gold2);font-size:13px;letter-spacing:.08em;text-transform:uppercase;background:rgba(255,255,255,.035);margin-bottom:14px}
h1{margin:0;color:var(--gold2);font-size:34px;letter-spacing:-.02em}
p{color:var(--muted);line-height:1.6}.lead{max-width:850px;margin:12px auto 0}
.shell{width:min(1220px,94%);margin:28px auto 36px;display:grid;grid-template-columns:270px 1fr 360px;gap:20px;align-items:start}
.card{background:linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.014));border:1px solid var(--border);border-radius:24px;padding:22px;box-shadow:var(--shadow)}
.nav{position:sticky;top:18px}.nav h3{margin:0 0 14px;color:var(--gold2);font-size:17px}
.progress{height:12px;border-radius:999px;background:#080909;border:1px solid rgba(216,183,122,.24);overflow:hidden;margin-bottom:18px}.bar{height:100%;width:0%;background:linear-gradient(90deg,var(--goldDark),var(--gold2));transition:.2s}
.stepBtn{width:100%;border:1px solid var(--soft);background:rgba(255,255,255,.025);color:var(--muted);border-radius:16px;padding:12px;margin-bottom:9px;text-align:left;cursor:pointer;font-weight:700;display:flex;gap:10px;align-items:center}.stepBtn span{width:24px;height:24px;border:1px solid rgba(216,183,122,.32);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:var(--gold2);font-size:12px}.stepBtn.active{background:rgba(216,183,122,.095);border-color:rgba(216,183,122,.55);color:var(--text)}
.panel{display:none}.panel.active{display:block}.section h2{margin:0 0 10px;color:var(--gold);font-size:24px}.intro{margin:0 0 18px;color:var(--muted);font-size:14px}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.field{background:rgba(255,255,255,.035);border:1px solid var(--soft);border-radius:16px;padding:14px}.field.full{grid-column:1/-1}
label{display:block;margin-bottom:8px;font-size:14px}small{display:block;color:var(--muted);margin-top:7px;line-height:1.45}
input,select,textarea{width:100%;padding:11px 12px;border-radius:12px;border:1px solid rgba(216,183,122,.28);background:#080909;color:var(--text);outline:none}textarea{min-height:105px;resize:vertical}input:focus,select:focus,textarea:focus{border-color:var(--gold2);box-shadow:0 0 0 3px rgba(216,183,122,.10)}
.options{display:grid;gap:8px}.options label,.checkGrid label{display:flex;gap:9px;color:var(--muted);margin:0;line-height:1.35}.options input,.checkGrid input{width:auto;margin-top:2px}.checkGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px}
.actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;border-top:1px solid var(--soft);padding-top:18px;margin-top:22px}.rightActions{display:flex;gap:10px;flex-wrap:wrap;margin-left:auto}
button{padding:13px 18px;border-radius:999px;border:1px solid var(--gold);background:linear-gradient(135deg,var(--gold2),var(--gold));color:#090909;font-weight:800;cursor:pointer}button.secondary{background:transparent;color:var(--gold2)}button.ghost{background:rgba(255,255,255,.025);color:var(--muted);border-color:var(--soft)}
.box{background:#080909;border:1px solid rgba(216,183,122,.25);border-radius:18px;padding:16px;margin-bottom:14px}.box strong{display:block;color:var(--gold2);margin-bottom:8px}.metric{font-size:22px;font-weight:900;color:var(--text)}.side{position:sticky;top:18px}
.alert{padding:11px 13px;border-radius:13px;margin:8px 0;line-height:1.45}.alert.warn{background:rgba(224,177,92,.13);border:1px solid rgba(224,177,92,.42)}.alert.danger{background:rgba(214,106,106,.13);border:1px solid rgba(214,106,106,.42)}.alert.ok{background:rgba(143,203,155,.13);border:1px solid rgba(143,203,155,.42)}
.notice{border:1px dashed rgba(216,183,122,.38);border-radius:16px;padding:13px;color:var(--muted);background:rgba(216,183,122,.055);line-height:1.5;font-size:14px;margin-top:16px}.hidden{display:none!important}
.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}.kpi{background:#080909;border:1px solid rgba(216,183,122,.22);border-radius:16px;padding:14px}.kpi small{margin:0 0 6px}.kpi strong{font-size:20px;color:var(--gold2)}
pre{white-space:pre-wrap;background:#070808;border:1px solid rgba(216,183,122,.25);border-radius:18px;padding:18px;line-height:1.58;color:#F4EFE4;overflow:auto;max-height:560px}
.validation{display:none;background:rgba(224,177,92,.12);border:1px solid rgba(224,177,92,.42);border-radius:16px;padding:13px;margin-bottom:18px;color:var(--text)}.validation ul{margin:8px 0 0 18px;padding:0;color:var(--muted)}
@media(max-width:1100px){.shell{grid-template-columns:230px 1fr}.side{grid-column:1/-1;position:relative;top:auto}}@media(max-width:820px){.shell{grid-template-columns:1fr}.nav{position:relative;top:auto}.grid,.checkGrid,.kpis{grid-template-columns:1fr}h1{font-size:28px}.card{padding:18px}}
</style>
</head>
<body>
<header>
<div class="badge">LEXORDIS ENGINE · DEMO v4.4 STABLE</div>
<h1>Alimenty na małżonka — FORM ENGINE</h1>
<p class="lead">Stabilny moduł krokowy SaaS: art. 60 k.r.o., kalkulacja potrzeb, zdolność płatnicza, dowody, zabezpieczenie i podgląd pisma. Wersja bez agresywnych blokad technicznych.</p>
</header>
<div class="shell">
<aside class="card nav">
<h3>Postęp modułu</h3>
<div class="progress"><div class="bar" id="bar"></div></div>
<button type="button" class="stepBtn active" onclick="showStep(0)"><span>1</span>Start</button>
<button type="button" class="stepBtn" onclick="showStep(1)"><span>2</span>Dane stron</button>
<button type="button" class="stepBtn" onclick="showStep(2)"><span>3</span>Wina i podstawa</button>
<button type="button" class="stepBtn" onclick="showStep(3)"><span>4</span>Dochody i koszty</button>
<button type="button" class="stepBtn" onclick="showStep(4)"><span>5</span>Dowody</button>
<button type="button" class="stepBtn" onclick="showStep(5)"><span>6</span>Zabezpieczenie</button>
<button type="button" class="stepBtn" onclick="showStep(6)"><span>7</span>Wynik</button>
<div class="notice">Ta wersja nie blokuje testowania. Braki danych pokazują się jako alerty, a nie jako awaria formularza.</div>
</aside>
<main class="card">
<form id="form">
<div id="validation" class="validation"></div>
<section class="panel active">
<div class="section">
<h2>1. Start / aktywacja modułu</h2>
<p class="intro">Wybierz, czy moduł alimentów na małżonka ma zostać uruchomiony.</p>
<div class="field full">
<label>Czy użytkownik chce dodać żądanie alimentów na małżonka?</label>
<div class="options">
<label><input type="radio" name="active" value="tak"> Tak — uruchom moduł</label>
<label><input type="radio" name="active" value="nie"> Nie — pomiń moduł</label>
</div>
</div>
<div id="offNotice" class="notice hidden">Moduł jest wyłączony. System nie będzie generował żądania alimentów na małżonka.</div>
</div>
</section>
<section class="panel moduleOnly">
<div class="section">
<h2>2. Etap sprawy i dane stron</h2>
<p class="intro">Dane organizacyjne potrzebne do właściwego wariantu pisma.</p>
<div class="grid">
<div class="field"><label>Etap sprawy</label><select name="caseStage"><option value="">Wybierz</option><option value="pozew">Pozew rozwodowy</option><option value="odpowiedz">Odpowiedź na pozew</option><option value="w_trakcie">Sprawa rozwodowa już trwa</option><option value="po_rozwodzie">Osobna sprawa po rozwodzie</option></select></div>
<div class="field"><label>Czy istnieje prawomocny wyrok rozwodowy?</label><select name="finalJudgment"><option value="nie">Nie</option><option value="tak">Tak</option><option value="nie_wiem">Nie wiem</option></select></div>
<div class="field"><label>Kto żąda alimentów?</label><select name="claimant"><option value="">Wybierz</option><option value="powod">Powód</option><option value="pozwany">Pozwany</option></select></div>
<div class="field"><label>Kto ma płacić?</label><select name="obligated"><option value="">Wybierz</option><option value="powod">Powód</option><option value="pozwany">Pozwany</option></select></div>
<div class="field"><label>Imię i nazwisko uprawnionego</label><input name="claimantName" type="text" placeholder="np. Anna Kowalska"></div>
<div class="field"><label>Imię i nazwisko zobowiązanego</label><input name="obligatedName" type="text" placeholder="np. Jan Kowalski"></div>
<div class="field"><label>Kraj pobytu uprawnionego</label><select name="claimantCountry"><option value="Polska">Polska</option><option value="USA">USA</option><option value="inny">Inny</option></select></div>
<div class="field"><label>Kraj pobytu zobowiązanego</label><select name="obligatedCountry"><option value="Polska">Polska</option><option value="USA">USA</option><option value="inny">Inny</option></select></div>
</div>
</div>
</section>
<section class="panel moduleOnly">
<div class="section">
<h2>3. Wina i podstawa prawna</h2>
<p class="intro">System kwalifikuje podstawę z art. 60 §1, §2 albo §3 k.r.o.</p>
<div class="grid">
<div class="field full"><label>Jaki jest wariant winy?</label><select name="fault"><option value="">Wybierz</option><option value="brak_winy">Bez orzekania o winie</option><option value="wina_obu">Wina obu stron</option><option value="wina_zobowiazanego">Wyłączna wina zobowiązanego</option><option value="wina_uprawnionego">Wyłączna wina uprawnionego</option><option value="spor">Spór o winę</option><option value="nie_wiem">Nie wiem</option></select></div>
<div class="field"><label>Czy uprawniony pozostaje w niedostatku?</label><select name="povertyClaim"><option value="nie_wiem">Nie wiem — oceń z danych</option><option value="tak">Tak</option><option value="nie">Nie</option></select><small>Ważne przy art. 60 §1 k.r.o.</small></div>
<div class="field"><label>Czy nastąpiło istotne pogorszenie sytuacji?</label><select name="materialDrop"><option value="nie_wiem">Nie wiem</option><option value="tak">Tak</option><option value="nie">Nie</option></select><small>Ważne przy art. 60 §2 k.r.o.</small></div>
<div class="field"><label>Czy uprawniony zawarł nowe małżeństwo?</label><select name="newMarriage"><option value="nie">Nie</option><option value="tak">Tak</option><option value="nie_wiem">Nie wiem</option></select></div>
<div class="field"><label>Ile lat minęło od rozwodu?</label><input name="yearsAfterDivorce" type="number" min="0" step="0.1" value="0"><small>Istotne dla art. 60 §3 k.r.o.</small></div>
<div class="field full"><label>Opis pogorszenia sytuacji materialnej</label><textarea name="dropDescription" placeholder="Opisz zmianę sytuacji po rozstaniu / rozwodzie..."></textarea></div>
</div>
</div>
</section>
<section class="panel moduleOnly">
<div class="section">
<h2>4. Dochody i koszty</h2>
<p class="intro">Każdą kwotę można wpisać w PLN albo USD. System przelicza wynik do PLN.</p>
<div class="grid">
<div class="field"><label>Kurs USD/PLN</label><input name="usdRate" type="number" step="0.01" min="0" value="4.00"></div>
<div class="field"><label>Tryb kalkulacji</label><select name="calculationMode"><option value="0.90">Ostrożny</option><option value="1" selected>Standardowy</option><option value="1.10">Agresywny</option></select></div>
<div class="field"><label>Dochód netto uprawnionego</label><input name="claimantIncome" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="claimantIncomeCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
<div class="field"><label>Dochód realny zobowiązanego</label><input name="obligatedIncome" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="obligatedIncomeCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
<div class="field"><label>Koszty mieszkania</label><input name="housing" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="housingCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
<div class="field"><label>Media</label><input name="utilities" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="utilitiesCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
<div class="field"><label>Jedzenie</label><input name="food" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="foodCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
<div class="field"><label>Transport</label><input name="transport" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="transportCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
<div class="field"><label>Leczenie / leki / ubezpieczenie</label><input name="medical" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="medicalCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
<div class="field"><label>Inne koszty</label><input name="otherCosts" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="otherCostsCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
<div class="field"><label>Koszty własne zobowiązanego</label><input name="obligatedCosts" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="obligatedCostsCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
<div class="field"><label>Alimenty na dzieci już płacone</label><input name="childSupport" type="number" min="0" value="0"></div><div class="field"><label>Waluta</label><select name="childSupportCurrency"><option value="PLN">PLN</option><option value="USD">USD</option></select></div>
</div>
</div>
</section>
<section class="panel moduleOnly">
<div class="section">
<h2>5. Dowody</h2>
<p class="intro">Brak dowodów nie blokuje testu, ale obniża siłę sprawy i tworzy alert.</p>
<div class="grid">
<div class="field"><label>Siła dowodów</label><select name="evidence"><option value="1">Pełne dowody</option><option value="0.85">Częściowe dowody</option><option value="0.70">Słabe dowody</option><option value="1.10">Wyjątkowo mocne dowody</option></select></div>
<div class="field"><label>Podejrzenie ukrywania dochodu?</label><select name="hiddenIncome"><option value="nie">Nie</option><option value="tak">Tak</option><option value="nie_wiem">Nie wiem</option></select></div>
<div class="field"><label>Czy są dokumenty z USA?</label><select name="usaDocs"><option value="nie">Nie</option><option value="tak">Tak</option></select></div>
<div class="field"><label>Czy są tłumaczenia przysięgłe?</label><select name="translations"><option value="tak">Tak</option><option value="nie">Nie</option><option value="czesciowo">Częściowo</option></select></div>
<div class="field full"><label>Posiadane dowody</label><div class="checkGrid">
<label><input type="checkbox" name="proofs" value="zaświadczenie o dochodach / paystubs"> Zaświadczenie / paystubs</label>
<label><input type="checkbox" name="proofs" value="PIT / W-2 / 1099"> PIT / W-2 / 1099</label>
<label><input type="checkbox" name="proofs" value="wyciągi bankowe"> Wyciągi bankowe</label>
<label><input type="checkbox" name="proofs" value="umowa najmu / mortgage"> Umowa najmu / mortgage</label>
<label><input type="checkbox" name="proofs" value="rachunki za media"> Rachunki za media</label>
<label><input type="checkbox" name="proofs" value="rachunki za leczenie i ubezpieczenie"> Leczenie / ubezpieczenie</label>
<label><input type="checkbox" name="proofs" value="dowody stylu życia zobowiązanego"> Styl życia zobowiązanego</label>
<label><input type="checkbox" name="proofs" value="wiadomości / e-maile / ustalenia stron"> Wiadomości / e-maile</label>
</div></div>
</div>
</div>
</section>
<section class="panel moduleOnly">
<div class="section">
<h2>6. Zabezpieczenie</h2>
<p class="intro">Opcjonalny wniosek o zabezpieczenie na czas trwania postępowania.</p>
<div class="grid">
<div class="field"><label>Czy żądać zabezpieczenia?</label><select name="security"><option value="nie">Nie</option><option value="tak">Tak</option></select></div>
<div class="field"><label>Kwota zabezpieczenia w PLN</label><input name="securityAmount" type="number" min="0" value="0"></div>
<div class="field full"><label>Uzasadnienie pilnej potrzeby zabezpieczenia</label><textarea name="securityReason" placeholder="Np. brak środków na bieżące utrzymanie, czynsz, leki..."></textarea></div>
</div>
</div>
</section>
<section class="panel moduleOnly">
<div class="section">
<h2>7. Wynik i podgląd pisma</h2>
<p class="intro">Kliknij „Przelicz i pokaż wynik”.</p>
<div class="kpis"><div class="kpi"><small>Decyzja</small><strong id="decisionInline">—</strong></div><div class="kpi"><small>Kwota</small><strong id="recommendedInline">—</strong></div><div class="kpi"><small>Ryzyko</small><strong id="riskInline">—</strong></div></div>
<pre id="documentPreview">Wypełnij formularz i kliknij „Przelicz i pokaż wynik”.</pre>
</div>
</section>
<div class="actions"><button type="button" class="ghost" onclick="resetPreview()">Wyczyść wynik</button><div class="rightActions"><button type="button" class="secondary" onclick="prevStep()">Wstecz</button><button type="button" class="secondary" onclick="nextStep()">Dalej</button><button type="button" onclick="calculateAndShow()">Przelicz i pokaż wynik</button></div></div>
</form>
</main>
<aside class="card side">
<h2>Status modułu</h2>
<div class="box"><strong>Decyzja</strong><div id="decision" class="metric">—</div></div>
<div class="box"><strong>Podstawa prawna</strong><div id="legalBasis">—</div></div>
<div class="box"><strong>Rekomendowana kwota</strong><div id="recommended" class="metric">—</div></div>
<div class="box"><strong>Zakres ostrożny</strong><div id="range">—</div></div>
<div class="box"><strong>Niedobór / zdolność</strong><div id="deficitInfo">—</div></div>
<div class="box"><strong>Ryzyko</strong><div id="risk" class="metric">—</div></div>
<div id="alerts"></div>
</aside>
</div>
<script>
var currentStep = 0;
var panels = document.querySelectorAll('.panel');
var stepButtons = document.querySelectorAll('.stepBtn');
var form = document.getElementById('form');
function showStep(i){
currentStep = Math.max(0, Math.min(i, panels.length - 1));
for(var p=0;p<panels.length;p++){ panels[p].classList.toggle('active', p === currentStep); }
for(var b=0;b<stepButtons.length;b++){ stepButtons[b].classList.toggle('active', b === currentStep); }
document.getElementById('bar').style.width = ((currentStep)/(panels.length-1)*100) + '%';
window.scrollTo({top:0,behavior:'smooth'});
}
function nextStep(){
if(getActive() === 'nie'){ calculateAndShow(); return; }
showStep(currentStep + 1);
}
function prevStep(){ showStep(currentStep - 1); }
function getActive(){
var checked = document.querySelector('input[name="active"]:checked');
return checked ? checked.value : '';
}
function val(name){
var el = form.elements[name];
if(!el) return '';
if(typeof el.value !== 'undefined') return el.value || '';
if(typeof el.length !== 'undefined'){
for(var i=0;i<el.length;i++){ if(el[i].checked) return el[i].value; }
}
return '';
}
function num(name){ return Number(val(name)) || 0; }
function checkedValues(name){
var list = document.querySelectorAll('input[name="'+name+'"]:checked');
var arr = [];
for(var i=0;i<list.length;i++){ arr.push(list[i].value); }
return arr;
}
function toPLN(amount,currency){
var rate = num('usdRate') || 4;
return currency === 'USD' ? (Number(amount)||0) * rate : (Number(amount)||0);
}
function money(n){ return Math.max(0,Math.round(Number(n)||0)).toLocaleString('pl-PL') + ' zł'; }
function textOrDash(t){ return t && String(t).trim() ? t : '—'; }
function updateModuleVisibility(){
var active = getActive();
var off = document.getElementById('offNotice');
if(off) off.classList.toggle('hidden', active !== 'nie');
var blocks = document.querySelectorAll('.moduleOnly');
for(var i=0;i<blocks.length;i++){ blocks[i].classList.toggle('hidden', active === 'nie'); }
}
document.addEventListener('change', updateModuleVisibility);
function getFinancials(){
var claimantIncome = toPLN(num('claimantIncome'), val('claimantIncomeCurrency'));
var obligatedIncome = toPLN(num('obligatedIncome'), val('obligatedIncomeCurrency'));
var totalCosts = 0;
totalCosts += toPLN(num('housing'), val('housingCurrency'));
totalCosts += toPLN(num('utilities'), val('utilitiesCurrency'));
totalCosts += toPLN(num('food'), val('foodCurrency'));
totalCosts += toPLN(num('transport'), val('transportCurrency'));
totalCosts += toPLN(num('medical'), val('medicalCurrency'));
totalCosts += toPLN(num('otherCosts'), val('otherCostsCurrency'));
var obligatedCosts = toPLN(num('obligatedCosts'), val('obligatedCostsCurrency'));
var childSupport = toPLN(num('childSupport'), val('childSupportCurrency'));
var safeCapacity = Math.max(0,(obligatedIncome - obligatedCosts - childSupport) * 0.65);
var deficit = totalCosts - claimantIncome;
return {claimantIncome:claimantIncome, obligatedIncome:obligatedIncome, totalCosts:totalCosts, obligatedCosts:obligatedCosts, childSupport:childSupport, safeCapacity:safeCapacity, deficit:deficit};
}
function calculateAndShow(){ calculate(); showStep(6); }
function calculate(){
updateModuleVisibility();
var active = getActive();
var alerts = [];
if(active !== 'tak'){
setResults('NIE ŻĄDAĆ','Moduł nieaktywny',0,'—','—','—',[], 'Moduł alimentów na małżonka nie został aktywowany.');
return;
}
var f = getFinancials();
var fault = val('fault');
var proofs = checkedValues('proofs');
var claimantName = val('claimantName') || '[UPRAWNIONY]';
var obligatedName = val('obligatedName') || '[ZOBOWIĄZANY]';
var evidenceFactor = Number(val('evidence')) || 1;
var modeFactor = Number(val('calculationMode')) || 1;
var legalBasis = 'brak danych o winie';
var legalTheory = 'Wymaga uzupełnienia po wskazaniu wariantu winy.';
var decision = 'UZUPEŁNIĆ DANE';
var recommended = 0;
if(!val('caseStage')) alerts.push(['warn','Nie wskazano etapu sprawy.']);
if(!val('claimant') || !val('obligated')) alerts.push(['warn','Nie wskazano, kto żąda i kto ma płacić.']);
if(val('claimant') && val('obligated') && val('claimant') === val('obligated')) alerts.push(['danger','Uprawniony i zobowiązany nie mogą być tą samą stroną.']);
if(!fault) alerts.push(['danger','Nie wybrano wariantu winy.']);
if(val('newMarriage') === 'tak'){
decision = 'NIE ŻĄDAĆ';
legalBasis = 'art. 60 §3 k.r.o. — wygaśnięcie obowiązku po zawarciu nowego małżeństwa';
legalTheory = 'Zawarcie nowego małżeństwa przez uprawnionego zasadniczo wyłącza dalsze żądanie alimentów od byłego małżonka.';
alerts.push(['danger','Uprawniony zawarł nowe małżeństwo.']);
} else if(fault === 'brak_winy' || fault === 'wina_obu'){
decision = 'ŻĄDAĆ, JEŚLI JEST NIEDOSTATEK';
legalBasis = 'art. 60 §1 k.r.o. — niedostatek uprawnionego';
legalTheory = 'Kluczowe jest wykazanie niedostatku, czyli braku możliwości samodzielnego zaspokojenia usprawiedliwionych potrzeb.';
recommended = Math.min(Math.max(f.deficit,0), f.safeCapacity) * evidenceFactor * modeFactor;
if(f.deficit <= 0 && val('povertyClaim') !== 'tak'){
decision = 'NIE ŻĄDAĆ';
recommended = 0;
alerts.push(['danger','Z danych nie wynika niedostatek.']);
}
} else if(fault === 'wina_zobowiazanego'){
decision = 'ŻĄDAĆ';
legalBasis = 'art. 60 §2 k.r.o. — istotne pogorszenie sytuacji materialnej małżonka niewinnego';
legalTheory = 'Kluczowe jest wykazanie istotnego pogorszenia sytuacji materialnej wskutek rozwodu, nie tylko niedostatku.';
var lifestyleAdjustment = val('materialDrop') === 'tak' ? f.totalCosts * 0.20 : 0;
recommended = Math.min(Math.max(f.deficit,0) + lifestyleAdjustment, f.safeCapacity) * evidenceFactor * modeFactor;
if(val('materialDrop') !== 'tak') alerts.push(['warn','Nie potwierdzono istotnego pogorszenia sytuacji.']);
if(!val('dropDescription').trim()) alerts.push(['warn','Brak opisu pogorszenia sytuacji materialnej.']);
} else if(fault === 'wina_uprawnionego'){
decision = 'NIE ŻĄDAĆ';
legalBasis = 'wysokie ryzyko oddalenia — wyłączna wina osoby żądającej alimentów';
legalTheory = 'Roszczenie osoby wyłącznie winnej jest skrajnie ryzykowne.';
recommended = 0;
alerts.push(['danger','Wyłączna wina osoby żądającej alimentów.']);
} else if(fault === 'spor' || fault === 'nie_wiem'){
decision = 'ŻĄDAĆ EWENTUALNIE';
legalBasis = 'wariant ostrożny — żądanie ewentualne / alternatywne';
legalTheory = 'Przy sporze o winę system powinien generować żądanie ostrożne.';
recommended = Math.min(Math.max(f.deficit,0), f.safeCapacity) * evidenceFactor * modeFactor;
alerts.push(['warn','Spór albo brak pewności co do winy.']);
}
if(val('finalJudgment') === 'tak' && num('yearsAfterDivorce') >= 5 && (fault === 'brak_winy' || fault === 'wina_obu')) alerts.push(['warn','Minęło co najmniej 5 lat od rozwodu — sprawdź art. 60 §3 k.r.o.']);
if(f.totalCosts <= 0) alerts.push(['warn','Nie wpisano kosztów utrzymania uprawnionego.']);
if(f.obligatedIncome <= 0) alerts.push(['warn','Nie wpisano dochodu zobowiązanego.']);
if(f.safeCapacity <= 0 && decision.indexOf('ŻĄDAĆ') === 0) alerts.push(['danger','Brak bezpiecznej zdolności płatniczej zobowiązanego.']);
if(proofs.length < 2) alerts.push(['warn','Mało dowodów — sprawa będzie słabsza dowodowo.']);
if(val('usaDocs') === 'tak' && val('translations') !== 'tak') alerts.push(['warn','Dokumenty z USA mogą wymagać tłumaczenia przysięgłego.']);
if(val('hiddenIncome') === 'tak') alerts.push(['warn','Podejrzenie ukrywania dochodu — warto dodać dowody stylu życia, przelewów i faktycznych wpływów.']);
if(val('security') === 'tak' && num('securityAmount') <= 0) alerts.push(['warn','Wybrano zabezpieczenie, ale nie wpisano kwoty.']);
if(val('security') === 'tak' && !val('securityReason').trim()) alerts.push(['warn','Brak uzasadnienia pilnej potrzeby zabezpieczenia.']);
recommended = Math.max(0,Math.round(recommended));
var risk = 'LOW';
for(var i=0;i<alerts.length;i++){ if(alerts[i][0] === 'danger') risk = 'HIGH'; }
if(risk !== 'HIGH' && alerts.length >= 3) risk = 'MED-HIGH';
else if(risk !== 'HIGH' && alerts.length >= 1) risk = 'MED';
var range = recommended ? money(recommended*0.85) + ' – ' + money(recommended*1.15) : '0 zł';
var deficitInfo = 'Niedobór: ' + money(f.deficit) + ' | Koszty: ' + money(f.totalCosts) + ' | Dochód uprawnionego: ' + money(f.claimantIncome) + ' | Zdolność zobowiązanego: ' + money(f.safeCapacity);
var preview = buildPreview(claimantName, obligatedName, legalBasis, legalTheory, recommended, range, risk, alerts, proofs, f);
setResults(decision, legalBasis, recommended, range, deficitInfo, risk, alerts, preview);
}
function setResults(decision, legalBasis, recommended, range, deficitInfo, risk, alerts, preview){
document.getElementById('decision').textContent = decision;
document.getElementById('legalBasis').textContent = legalBasis;
document.getElementById('recommended').textContent = money(recommended);
document.getElementById('range').textContent = range;
document.getElementById('deficitInfo').textContent = deficitInfo;
document.getElementById('risk').textContent = risk;
document.getElementById('decisionInline').textContent = decision;
document.getElementById('recommendedInline').textContent = money(recommended);
document.getElementById('riskInline').textContent = risk;
var html = '';
if(alerts.length){ for(var i=0;i<alerts.length;i++){ html += '<div class="alert '+alerts[i][0]+'">'+alerts[i][1]+'</div>'; } }
else html = '<div class="alert ok">Brak krytycznych alertów.</div>';
document.getElementById('alerts').innerHTML = html;
document.getElementById('documentPreview').textContent = preview;
}
function buildPreview(claimantName, obligatedName, legalBasis, legalTheory, recommended, range, risk, alerts, proofs, f){
var securityText = '';
if(val('security') === 'tak'){
securityText = '
WNIOSEK O ZABEZPIECZENIE
Wnoszę o udzielenie zabezpieczenia roszczenia alimentacyjnego poprzez zobowiązanie ' + obligatedName + ' do uiszczania na rzecz ' + claimantName + ' kwoty ' + money(num('securityAmount')) + ' miesięcznie, płatnej do dnia 10. każdego miesiąca z góry, na czas trwania postępowania.
Uzasadnienie zabezpieczenia:
' + textOrDash(val('securityReason'));
}
var proofList = proofs.length ? proofs.map(function(p){return '- '+p;}).join('
') : '- [uzupełnić dowody: dochody, koszty, dokumenty bankowe, koszty leczenia, mieszkania i utrzymania]';
var alertList = alerts.length ? alerts.map(function(a){return '- '+a[1];}).join('
') : '- Brak krytycznych alertów.';
return 'PETITUM — WARIANT ROBOCZY
' +
'Wnoszę o zasądzenie od ' + obligatedName + ' na rzecz ' + claimantName + ' alimentów w kwocie ' + money(recommended) + ' miesięcznie, płatnych do dnia 10. każdego miesiąca z góry, wraz z odsetkami ustawowymi za opóźnienie w razie uchybienia terminowi płatności którejkolwiek z rat.
' +
'Zakres kalkulacyjny do rozważenia: ' + range + '.' + securityText + '
' +
'UZASADNIENIE — SZKIC
' +
'Podstawa roszczenia:
' + legalBasis + '.
' +
'Założenie prawne:
' + legalTheory + '
' +
'Sytuacja uprawnionego:
Miesięczne usprawiedliwione koszty utrzymania uprawnionego wynoszą około ' + money(f.totalCosts) + '. Dochód netto uprawnionego po przeliczeniu na PLN wynosi około ' + money(f.claimantIncome) + '. Różnica między kosztami utrzymania a dochodem wynosi około ' + money(f.deficit) + '.
' +
'Sytuacja zobowiązanego:
Dochód zobowiązanego po przeliczeniu na PLN wynosi około ' + money(f.obligatedIncome) + '. Bezpieczna zdolność płatnicza została oszacowana na około ' + money(f.safeCapacity) + '.
' +
'Pogorszenie sytuacji materialnej:
' + textOrDash(val('dropDescription')) + '
' +
'Rekomendowana kwota żądania:
' + money(recommended) + ' miesięcznie.
' +
'DOWODY DO POWOŁANIA:
' + proofList + '
' +
'ZAŁĄCZNIKI DO ROZWAŻENIA:
- dokumenty dochodowe uprawnionego,
- dokumenty dochodowe zobowiązanego, jeżeli są dostępne,
- zestawienie kosztów utrzymania,
- rachunki, faktury, potwierdzenia przelewów,
- dokumenty medyczne i ubezpieczeniowe,
- dokumenty z USA wraz z tłumaczeniem przysięgłym, jeżeli są składane do sądu w Polsce.
' +
'ALERTY SYSTEMOWE — NIE WKLEJAĆ AUTOMATYCZNIE DO PISMA:
Ryzyko: ' + risk + '
' + alertList;
}
function resetPreview(){
var ids = ['decision','legalBasis','recommended','range','deficitInfo','risk','decisionInline','recommendedInline','riskInline'];
for(var i=0;i<ids.length;i++){ document.getElementById(ids[i]).textContent = '—'; }
document.getElementById('alerts').innerHTML = '';
document.getElementById('documentPreview').textContent = 'Wypełnij formularz i kliknij „Przelicz i pokaż wynik”.';
}
showStep(0);
</script>
</body>
</html>