Algoritmul tău de consolidare a datoriilor cu impozit și rată variabilă
La nivel de specialist, problema de consolidare datorii optimizare impozit rata variabilă nu este o alegere binară între Snowball și Avalanche, ci un program de optimizare sub constrângeri multiple. Cele două euristici populare presupun implicit că singurul cost relevant este dobânda nominală și că ratele sunt fixe — ipoteze false în România 2026, unde IRCC se mișcă trimestrial cu BNR, fiecare consolidare are comision și taxe de evaluare, partea de datorie condonată poate genera venit impozabil la 10%, iar buffer-ul de urgență trebuie menținut neclintit. Tratată corect, decizia este o instanță de linear programming debt optimization cu un multi-debt consolidation tax constraint explicit și termeni de cost total: dobândă, impozit, comisioane, cost de oportunitate și dynamic debt maturity matching al scadențelor.
În această lecție construim algoritmul tău optim de consolidare multi-debt cu limită de impozit și rată de refinanțare variabilă. Pornim de la funcția-obiectiv de cost total prezent, formalizăm constrângerile (lichiditate, plafon fiscal pe dobânda condonată, capacitate DTI), apoi rezolvăm modelul cu Solver în Excel și îl stres-testăm cu o Monte Carlo simulation datorii rate. Acoperim și un variable rate refinancing algorithm care decide trimestrial dacă refinanțezi în funcție de traiectoria BNR, și aplicăm dynamic debt maturity matching pentru a alinia scadențele la fluxul tău de numerar. Pe scurt: înlocuim intuiția cu un multi-debt consolidation tax constraint formal și un model reproductibil.
Presupun că stăpânești deja matematica anuității, diferența dintre DAE și dobânda nominală, mecanica IRCC trimestrial și logica fiscală a datoriei condonate ca venit din alte surse. Aici mergem direct în formularea optimizării și în interpretarea soluției, inclusiv edge-cases unde algoritmul contrazice ambele euristici clasice.
Funcția-obiectiv: costul total prezent, nu dobânda nominală
Greșeala de altitudine a euristicilor clasice este că optimizează o singură componentă. Avalanche minimizează dobânda plătită; Snowball minimizează timpul până la primul „kill” psihologic. Niciuna nu vede costul total. Definim funcția-obiectiv corectă ca valoarea actualizată a tuturor ieșirilor de numerar generate de portofoliul de datorii, pe orizontul de planificare T (în luni):
min Z = Σt=1..T [ Dt + Txt + Ct ] / (1+r)t − VAN(buffer)
- Dt — dobânda plătită în luna t pe soldurile rămase, cu rata efectivă variabilă pe creditele indexate IRCC.
- Txt — impozitul generat de eventuala condonare în luna t: 10% pe partea iertată încadrată la venituri din alte surse (art. 114 Cod fiscal), plus eventual CASS dacă totalul veniturilor neasigurate depășește plafonul anual.
- Ct — comisioanele de consolidare/refinanțare angajate în t (analiză dosar, evaluare, comision de rambursare anticipată, taxe notariale la garantare).
- r — rata de actualizare lunară, egală cu costul tău de oportunitate (randamentul marginal pe care l-ai obține plasând lichiditatea în altă parte; pentru un titlu de stat Fidelis sau un cont de economii bun, ordin de mărime r ≈ 6%/an, deci ~0,49%/lună).
Termenul final, VAN(buffer), capturează costul de a imobiliza lichiditate într-un fond de urgență în loc să o arunci în datorie. Acesta este exact arbitrajul pe care Avalanche îl ignoră: a plăti agresiv un credit cu 12% când rămâi fără buffer și ești forțat luna următoare să tragi un card cu DAE 24% este o pierdere netă, nu o economie.
De ce actualizarea schimbă ordinea de prioritizare
Un leu de dobândă plătit în luna 36 costă mai puțin în valoare prezentă decât un leu plătit azi. Asta înseamnă că, sub actualizare, o datorie cu rată mare dar scadență scurtă poate fi mai puțin urgentă decât una cu rată moderată dar scadență lungă, fiindcă a doua acumulează dobândă pe un orizont mult mai amplu. Avalanche, care sortează strict descrescător după rată, nu vede asta. Algoritmul optim sortează după contribuția marginală la Z a fiecărui leu alocat, care depinde de rată ȘI de durata reziduală ponderată — adică de duration-ul datoriei.
Variabilele de decizie și constrângerile
Variabilele pe care Solver le mută sunt alocările lunare de numerar disponibil peste plata minimă, plus deciziile binare de consolidare. Formalizat:
- xi,t — leii alocați suplimentar datoriei i în luna t (continuă, ≥ 0).
- yj ∈ {0,1} — variabilă binară: consolidezi grupul j de datorii (1) sau nu (0). Activarea declanșează comisionul Cj și, dacă include o condonare negociată, impozitul Txj.
- zi,t ∈ {0,1} — refinanțezi datoria i la momentul t (declanșator pentru variable rate refinancing).
Constrângerile care fac problema realistă — și care lipsesc complet din Snowball/Avalanche:
- Constrângere de buget (cash-flow): Σi (mini,t + xi,t) ≤ CFt pentru fiecare lună. Nu poți aloca mai mult decât numerarul disponibil după cheltuieli fixe.
- Constrângere de lichiditate (buffer): Buffert ≥ Bmin, unde Bmin = 3-6 luni de cheltuieli obligatorii. Aceasta este o constrângere dură: algoritmul nu are voie să o încalce nici măcar temporar.
- Constrângere de plafon fiscal (tax constraint): Σj condonarej · yj ≤ Ktax, unde Ktax este pragul de condonare peste care impozitul pe venit + eventuala CASS îți erodează relieful net sub un nivel acceptabil. Acesta este punctul în care multi-debt consolidation devine, esențial, o problemă fiscală.
- Constrângere de capacitate (DTI): rata lunară totală post-consolidare / venit net ≤ 40% (plafon de îndatorare în logica reglementării BNR pentru credite noi), altfel refinanțarea pur și simplu nu se aprobă.
- Conservarea soldurilor: Soldi,t+1 = Soldi,t · (1 + ri,t/12) − (mini,t + xi,t), cu ri,t variabil pe creditele IRCC.
Modelarea ratei variabile: IRCC ca proces, nu ca o constantă
Pe creditele de consum în lei cu dobândă variabilă, rata efectivă este IRCC + marjă fixă. IRCC se recalculează trimestrial pe baza tranzacțiilor interbancare dintr-un trimestru de referință, deci ai un decalaj: rata aplicată în trimestrul curent reflectă condițiile de acum două trimestre. Pentru model, tratează ri,t = IRCCt + marjăi, unde IRCCt este o funcție în trepte (pas trimestrial), nu o curbă netedă.
Calibrare prudentă România 2026: cu dobânda de politică monetară BNR în zona 6,5% și IRCC reflectând cu lag piața interbancară, un IRCC de referință în ordinul de mărime 5-6% este o ipoteză rezonabilă, dar verific-o la sursă (BNR/ARB) pentru trimestrul exact — nu o îngheța în model. Marja băncii pe consum se adaugă peste, tipic 3-6 puncte procentuale, deci o rată efectivă de 9-12% pe creditul de consum variabil este un punct de plecare realist.
Exemplu numeric complet: patru datorii, un singur buget
Construim cazul de bază. Ai 1.800 lei/lună disponibili peste plățile minime și un buffer-țintă de 12.000 lei (3 luni × 4.000 lei cheltuieli). Portofoliul:
- D1 — Card credit: sold 18.000 lei, DAE 24% (fix), min 540 lei/lună.
- D2 — Credit consum variabil: sold 40.000 lei, rată IRCC+4 ≈ 10%, scadență reziduală 48 luni, rată 1.015 lei.
- D3 — IFN nevoi personale: sold 9.000 lei, DAE 32% (fix), scadență 18 luni, rată 640 lei.
- D4 — Refinanțare imobiliar parțial: sold 220.000 lei, IRCC+1,8 ≈ 7,8%, rată 1.760 lei.
Pasul 1 — sortare după rată reală actualizată. Avalanche pur ar zice: atacă D3 (32%), apoi D1 (24%), apoi D2 (10%), apoi D4. Dar D3 are sold mic și scadență scurtă (18 luni): contribuția lui la Z este deja plafonată de durata reziduală. D1, cardul, e revolving — fără scadență forțată, dobânda compusă rulează nelimitat la 24%. Sub actualizare, costul prezent al unui leu nealocat la D1 pe 36 de luni depășește costul lui D3, fiindcă D3 se autolichidează oricum în 18 luni.
Pasul 2 — alocarea optimă (rezultat Solver). Algoritmul alocă întâi cei 1.800 lei pentru a stinge cardul D1 (cea mai toxică structură revolving), apoi redirecționează către IFN-ul D3 (deși are rată mai mare, soldul mic se închide rapid și eliberează 640 lei/lună), apoi atacă D2. D4 (imobiliarul, 7,8%) rămâne pe plata minimă: nu merită accelerat câtă vreme costul lui de oportunitate (7,8%) este sub randamentul pe care l-ai obține investind sau menținând buffer. Aceasta este granița decizională cheie: nu accelerezi nicio datorie cu rată sub costul tău de oportunitate ajustat la risc.
Unde intră limita de impozit
Să presupunem că IFN-ul D3 acceptă un settlement: plătești 6.000 lei și îți iartă 3.000 lei. Cei 3.000 lei condonați sunt venit din alte surse, impozitați la 10% = 300 lei. Atâta timp cât veniturile tale neasigurate nu ating plafonul CASS, costul fiscal e doar acel impozit pe venit. Net, condonarea îți aduce 3.000 − 300 = 2.700 lei relief real — clar favorabilă. Constrângerea Ktax devine activă doar când acumulezi condonări mari într-un singur an fiscal: dacă negociezi simultan ștergeri la D1 și D3 care însumează, să zicem, peste primul prag CASS de 6 salarii minime brute (cu salariul minim de 4.050 lei în 2026, adică 24.300 lei venituri neasigurate pe an; pragurile superioare sunt 12 și 24 de salarii minime, deci 48.600 și 97.200 lei), declanșezi CASS de 10% pe baza de calcul aferentă treptei, iar relieful marginal pe ultimul leu condonat scade. Algoritmul, prin constrângerea de plafon, îți spune să eșalonezi condonările pe ani fiscali diferiți pentru a sta sub prag — un rezultat pe care nicio euristică nu-l produce.
Implementarea cu Solver în Excel
Modelul se construiește pe trei blocuri de foaie de calcul:
- Blocul de stare: o matrice T×N (luni × datorii) cu soldurile, actualizată prin formula de conservare. Fiecare celulă de sold leagă luna anterioară, rata ri,t (cu IRCC în trepte pe coloană separată) și alocarea.
- Blocul de decizie: matricea xi,t (alocările) plus vectorii binari yj și zi,t. Acestea sunt celulele variabile pe care Solver le modifică.
- Blocul-obiectiv: o singură celulă cu Z = suma actualizată a dobânzilor + impozit + comisioane − VAN buffer.
Configurare Solver (Data → Solver):
- Set Objective: celula Z, To: Min.
- By Changing Variable Cells: blocul xi,t + binarele yj, zi,t.
- Subject to constraints: Σ alocări ≤ CFt (per lună); Buffert ≥ Bmin; Σ condonări ≤ Ktax; rata totală ≤ 40% venit; binarele declarate bin.
- Solving Method: fiindcă ai variabile binare, folosește Simplex LP doar dacă liniarizezi; altfel Evolutionary (GRG Nonlinear nu gestionează bine binarele). Pentru robustețe, rulează Evolutionary cu Mutation Rate ~0,1 și Max Time 100s, apoi rafinează soluția cu Simplex pe varianta cu binarele fixate.
Capcana de liniaritate: termenul de dobândă Dt este produsul sold × rată, iar soldul depinde de alocările anterioare — deci modelul este nonliniar în x. Trucul de specialist este să liniarizezi pe orizonturi scurte (rezolvi luna cu luna, fixând soldul de început) sau să accepți Evolutionary pe modelul nonliniar complet. Pentru portofolii de 4-6 datorii și T = 60 luni, Evolutionary converge în secunde.
Variable rate refinancing algorithm: când apeși pe trigger
Refinanțarea unei datorii variabile nu se decide pe „rata a crescut”, ci pe valoarea prezentă a economiei nete vs costul de switch. Regula de decizie zi,t = 1 dacă și numai dacă:
VAN(economie dobândă) − Comision refinanțare − Impozit eventual > Prag de siguranță
unde VAN(economie) = Σ (soldi,t · Δrată / 12) / (1+r)k pe scadența reziduală. Pe creditele IRCC, Δrată anticipat depinde de traiectoria BNR. Aici introduci stochasticitatea: nu cunoști IRCC viitor, deci nu poți evalua determinist VAN(economie). Soluția este să nu refinanțezi pe punctul mediu, ci pe distribuția traiectoriilor de rată — adică Monte Carlo.
Monte Carlo pe traiectoria IRCC
Modelezi IRCC ca un proces mean-reverting (tip Vasicek discretizat): IRCCt+1 = IRCCt + κ(θ − IRCCt) + σ·εt, unde θ este nivelul de echilibru pe termen lung (ancorat la ținta BNR), κ viteza de revenire și ε zgomot normal. Simulezi 10.000 de traiectorii trimestriale pe orizontul T, recalculezi Z pe fiecare și obții o distribuție a costului total, nu un singur număr.
Output-ul care contează: nu media lui Z, ci percentila 95 (Z la cel mai prost 5% scenariu de rată) și probabilitatea de încălcare a buffer-ului. Un plan de consolidare care minimizează Z mediu dar are 15% probabilitate să-ți spargă buffer-ul în scenariile de rată ridicată este inferior unuia cu Z mediu ușor mai mare dar 0% probabilitate de spargere. Aceasta este logica de optimizare robustă: optimizezi pe coadă, nu pe medie — exact cum un trezorier de corporație fixează ratele cu hedging, nu pe speranța că BNR taie.
Dynamic debt maturity matching
Ultima rafinare de specialist: alinierea scadențelor consolidate la profilul tău de venit. Dacă ai venit cu sezonalitate (bonus anual, venit de PFA neuniform), nu vrei o singură rată plată mare în lunile slabe. Maturity matching înseamnă să structurezi consolidarea astfel încât scadențele agregate să urmărească fluxul de numerar așteptat — scadențe mai scurte/agresive în lunile cu surplus, plata minimă în lunile slabe. În model, asta se traduce în CFt variabil pe lună și o constrângere care interzice ca rata totală să depășească venitul net al lunii respective minus minimul de trai. Rezultatul este un plan care nu doar minimizează costul, ci și nu te forțează niciodată în default tehnic într-o lună proastă.
Edge-cases unde algoritmul contrazice ambele euristici
- Datorie cu rată mare dar self-liquidating scurtă: Avalanche o atacă prima; algoritmul o lasă pe minim dacă se închide oricum în câteva luni și acel cash blochează închiderea unui revolving toxic.
- Datorie mică psihologic „de eliberat”: Snowball o ucide prima; algoritmul o păstrează dacă rata ei e sub costul de oportunitate și banii fac mai mult la buffer sau la o datorie cu duration mai lungă.
- Condonare disponibilă dar peste pragul fiscal: intuiția zice „acceptă tot ce-ți iartă banca”; algoritmul refuză o parte din condonare în anul curent fiindcă declanșează CASS și împinge relieful marginal sub zero — și o reprogramează pe anul fiscal următor.
- Refinanțare ofertată la rată mai mică: intuiția zice „refinanțează imediat”; algoritmul calculează că, cu comisionul de rambursare anticipată + costul refinanțării + VAN economiei pe scadența scurtă reziduală, switch-ul este net negativ.
Checklist de implementare pas-cu-pas
- 1. Inventariază fiecare datorie cu: sold exact, tip rată (fix/IRCC+marjă), DAE, scadență reziduală, comision de rambursare anticipată, plata minimă.
- 2. Stabilește r (costul de oportunitate) — randamentul realist al alternativei tale (titlu de stat, cont economii), ca rată de actualizare lunară.
- 3. Fixează Bmin — buffer-ul de urgență ca 3-6 luni de cheltuieli obligatorii; intră ca constrângere dură, nu negociabilă.
- 4. Construiește matricea de stare T×N în Excel cu formula de conservare a soldului și coloana IRCC în trepte trimestriale (valori verificate la BNR/ARB pentru trimestrul curent).
- 5. Definește celula-obiectiv Z = VAN(dobândă + impozit 10% pe condonări + comisioane) − VAN(buffer).
- 6. Adaugă constrângerile de buget lunar, buffer ≥ Bmin, condonări ≤ Ktax, rată totală ≤ 40% venit, binare declarate bin.
- 7. Rulează Solver (Evolutionary pentru binare, rafinare Simplex), citește alocările optime și deciziile de consolidare/refinanțare.
- 8. Stres-testează cu Monte Carlo pe IRCC: 10.000 traiectorii, raportează Z la percentila 95 și probabilitatea de spargere buffer.
- 9. Verifică plafonul fiscal: dacă condonările anuale se apropie de pragul CASS, eșalonează-le pe ani fiscali diferiți.
- 10. Reoptimizează trimestrial, la fiecare recalculare IRCC și la fiecare schimbare de venit — modelul este viu, nu un plan înghețat.
Concluzia de specialist: prioritizarea optimă a datoriilor nu este o regulă, ci o soluție de optimizare care depinde de structura ta exactă de rate, scadențe, lichiditate și expunere fiscală. Snowball și Avalanche sunt cazuri particulare degenerate ale acestui model — Avalanche când ignori actualizarea, impozitul și lichiditatea; Snowball când supraponderezi un termen comportamental. Când construiești funcția-obiectiv completă și o rezolvi sub constrângeri reale, obții un plan care, în general, le bate pe ambele — și, mai important, nu te lasă niciodată fără buffer într-o lună în care BNR a mișcat rata împotriva ta.