Daňové priznania za rok 2022 podávané na daňovom úrade do 31.03.2023 boli tento rok sprístupnené Finančnou správou SR už od prvých januárových dní.
Je to potešiteľné vylepšenie v porovnaní s predošlými rokmi, nakoľko odpadla frustrácia z čakania na možnosť testovať správnosť výpočtov pre všetkých tvorcov daňových aplikácií.
Na portáli ipdf.sk sú všetky daňové priznania pre rok 2022 dostupné s časovým oneskorením, približne od 10.01.2023.
Zdržanie bolo spôsobené predovšetkým "perličkou" - daňovými bonusmi - ktorých výpočet za rok 2022 bol mimoriadne zložitý.
V priebehu roka 2022 sa bonus na deti zmenil až dvakrát a postup výpočtu je v porovnaní s predošlými rokmi podstatne zložitejší.
To sa samozrejme prejavilo na väčšej časovej náročnosti jednak na implementáciu ako aj na testovanie.
Finančné správa zverejnila približne 4 vzorové prípady, z ktorých nebolo možné správne nastaviť výpočet bonusov v daňových formulároch pre viaceré hraničné prípady.
Po niekoľkých dňoch frustrácie a strateného času sme museli urobiť reverzný engineering eFormulárov a preprogramovať výpočty podľa implementácie eFormulárov - debugovaním javascriptov.
Tento prípad je smutným príkladom ako to dopadne, keď politici prijímajú neodborné rozhodnutia v oblasti sociálnej politiky na získanie zopár politických bodov.
Vôbec nebolo potrebné meniť bonusy v roku 2022 až dvakrát a už vôbec nie zvoliť tak zložitú metodiku porovnania vyššieho bonusu starým a novým spôsobom, keďže od 01.01.2023 sa bonusy opäť menia.
Výpočet bonusov má byť jednoduchý a prehľadný. Nie je možné, aby zamestnanci na mzdových oddeleniach trávili čas zložitými prepočtami bonusov zamestnancov.
Taktiež do úvahy treba vziať nákladnosť na zavedenie takýchto zmien do všetkých štátnych IT systémov a štatisticky zvýšenú chybovosť pri výpočtoch - opravné priznania, nesprávne vypočítané bonusy vo firmách apod. (vysoké tzv. kolaterálne náklady).
Ide o zbytočne stratený čas množstva ľudí.
Okrem uvedených problematických daňových bonusov na deti nebolo zmien v priznaniach našťastie veľa.
Asi najväčšou zmenou je nová príloha pre odpočet investícií, čím sa priznanie pre fyzické osoby typu B dostáva s 18 stranami pomaly ale isto na úroveň knihy :-)
V priznaní pre právnické osoby odbudli daňové licencie a vďaka novej prílohe pre investície ma tlačivo už taktiež 17 strán.
Kompletný prehľad tlačív súvisiacich s daňovými priznaniami za rok 2022 uvádza nasledujúci zoznam:
Elektronické podanie na portáli Finančnej správy je povinné pre všetky daňové subjekty s prideleným IČO resp. DIČ.
Pre podanie daňového priznania je potrebné stiahnuť XML súbor pomocou červeného tlačidla "eDane" a nahrať ho na portáli
Finančnej správy SR (potrebné je prihlasovacie meno a heslo, alebo elektronický občiansky preukaz s čítačkou), alebo do aplikácie
eDane,
pokiaľ ju máte inštalovanú vo svojom počítači. Pre konkrétny postup pozrite
Podanie daňového priznania pre eDane .
Obr. 1 - Stiahnutie XML súboru pre eDane z portálu ipdf.sk a nahratie do eFormulára na portáli Finančnej správy SR
Zaujímavosť - ako sú naprogramované daňové bonusy na deti v eFormuári
Nižšie je uvedený postup výpočtu daňového bonusu pre II. polrok 2022 je prevzatý priamo z
eFormulára
FS SR.
Manuálne nevypočítateľné.
Dostávame množstvo otázok, prečo sa to počíta tak a aký je postup ..
Takže týmto sa snáď veľa vecí konečne vyjasní :-)
// výpočet daňového bonusu pre DP typ A, B 2022 (časť) - implementácia v javascripte
function SumaDeti2022() {
var validChildren = [];
$("[id^='layoutRow35796']").each(function () {
var element = $(this).find("[id^='tbRodneCislo31_1_2'][value!='']");
var result = DietaInfo($(element), 2022);
if (result != null) {
result.months = [];
var allAreChecked = $(this).find("[id^='cbM00']").is(':checked');
$(this).find("[id^='cbM']").each(function () {
var checked = (allAreChecked || $(this).is(":checked"));
if (checked && result.months.length != 0) {
var month = result.months.length;
var rozdiel = DateDiffInYears(result.datum, new Date(2022, month - 2, 31));
if (rozdiel == -1 && result._monthBirth == month) {
result.months.push(checked)
}
else if (0 <= rozdiel && rozdiel < 6) {
result.months.push(checked)
}
else if (0 <= rozdiel && rozdiel <= 25) {
if (rozdiel >= 25 && result._monthBirth < month) {
result.months.push(false)
} else {
result.months.push(checked);
}
}
else {
result.months.push(false)
}
} else {
result.months.push(checked);
}
});
validChildren.push(result);
}
});
function areMonthsDifferent(indexOfFirstMonth) {
for (var i = 0; i < validChildren.length; i++) {
if (validChildren[i].months[indexOfFirstMonth] != validChildren[i].months[indexOfFirstMonth + 1]) {
return true;
}
}
return false;
}
monthGroups = [[]];
for (var i = 7; i <= 12; i++) {
monthGroups[monthGroups.length - 1].push(i);
if (i < 12 && areMonthsDifferent(i)) {
monthGroups.push([]);
}
}
var resultDB1 = 0;
var resultDB2 = 0;
for (var groupIndex = 0; groupIndex < monthGroups.length; groupIndex++) {
var partialResultDB1 = 0;
var partialResultDB2 = 0;
for (var monthIndex = 0; monthIndex < monthGroups[groupIndex].length; monthIndex++) {
var numberOfChilds = 0;
for (var childIndex = 0; childIndex < validChildren.length; childIndex++) {
var month = monthGroups[groupIndex][monthIndex];
if (validChildren[childIndex].months[month]) {
numberOfChilds += 1;
var date = new Date(validChildren[childIndex].datum)
var numberOfDays = 30;
switch (month) {
case 1:
case 2:
case 4:
case 6:
case 8:
case 9:
case 11:
numberOfDays = 31
break;
case 3:
numberOfDays = 28
break;
}
var rozdiel = DateDiffInYears(date, new Date(2022, month - 2, numberOfDays));
if (rozdiel < 6) {
partialResultDB1 += 47.14;
partialResultDB2 += 70;
}
else if (rozdiel < 15) {
partialResultDB1 += 43.60;
partialResultDB2 += 70;
}
else if (rozdiel < 25) {
partialResultDB1 += 23.57;
partialResultDB2 += 40;
}
}
}
}
var limit = Number($("#t39").val());
var date = $("#Datum").val();
if (date) {
var dateElements = date.split('.');
limit = (new Date(dateElements[2], dateElements[1] - 1, dateElements[0]) > new Date(2022, 5, 30)) ?
limit : limit / 2;
} else {
limit = limit / 2;
}
switch (numberOfChilds) {
case 0:
break;
case 1:
limit = limit * 0.20;
break;
case 2:
limit = limit * 0.27;
break;
case 3:
limit = limit * 0.34;
break;
case 4:
limit = limit * 0.41;
break;
case 5:
limit = limit * 0.48;
break;
default:
limit = limit * 0.55;
}
if (monthGroups[groupIndex].length != 6) {
//predosle zaokruhlovanie
//var pom = (Big(Number(limit) || 0).round(2, 3)) / 6;
//pom = Big(Number(pom) || 0).round(2, 3);
//zz, 20230123
var pom = (Math.round(Big(Number(limit)) * 100) / 100) / 6; //deleno pocet mesiacov(6)
pom = Math.round(pom * 100) / 100;
limit = (pom) * monthGroups[groupIndex].length;
}
partialResultDB2 = (partialResultDB2 > limit.toFixed(2)) ? limit.toFixed(2) : partialResultDB2;
resultDB1 += partialResultDB1;
resultDB2 += Number(partialResultDB2);
}
resultDB1 = Big(Number(resultDB1) || 0).round(2, 1);
return ((resultDB1 > resultDB2) && (Number($("#t34").val()) >= 3876)) ? resultDB1.toFixed(2) : resultDB2.toFixed(2);
}