Skip to content

Instantly share code, notes, and snippets.

@appersiano
Created October 6, 2016 21:02
Show Gist options
  • Save appersiano/5c14849ab3f73f2a9c2ad56cf63ba030 to your computer and use it in GitHub Desktop.
Save appersiano/5c14849ab3f73f2a9c2ad56cf63ba030 to your computer and use it in GitHub Desktop.
public class ScaglioniExample {
public static void main(String[] args){
System.out.println("Esempio Calcolo IRPEF");
ScaglioniHelper test = new ScaglioniHelper(78000);
ScaglioniHelper.Scaglione uno = new ScaglioniHelper.Scaglione(15000,23);
ScaglioniHelper.Scaglione due = new ScaglioniHelper.Scaglione(28000,27);
ScaglioniHelper.Scaglione tre = new ScaglioniHelper.Scaglione(55000,41);
ScaglioniHelper.Scaglione quattro = new ScaglioniHelper.Scaglione(75000,43);
test.addScaglione(uno);
test.addScaglione(due);
test.addScaglione(tre);
test.addScaglione(quattro);
System.out.println(test.toString());
System.out.println("Totale IRPEF: " + test.calcolaValore());
}
import java.util.ArrayList;
import java.util.List;
/*
Classe di utility per il calcolo degli scaglioni, tipicamente presenti nel calcolo
delle tasse italiano come ad esempio l'IRPEF o l'addizionale regionale
Ispirato da: http://www.lidimatematici.it/blog/2013/11/11/formula-esplicita-del-calcolo-irpef/
*/
class ScaglioniHelper {
private long imponibile;
private List<Scaglione> scaglioneList = new ArrayList<>();
ScaglioniHelper(long imponibile) {
this.imponibile = imponibile;
}
void addScaglione(Scaglione scaglione) {
scaglioneList.add(scaglione);
}
/**
* Restituisce la somma delle aliquote
* @return ret
*/
double calcolaValore(boolean printIntermedi) {
double ret = 0;
for (int i = 0; i < scaglioneList.size(); i++) {
double aliquota = scaglioneList.get(i).getAliquota();
double scaglioneMax = scaglioneList.get(i).getLimiteScaglione();
double scaglioneMaxPrecedente = 0;
if (i == 0) {
scaglioneMaxPrecedente = 0;
} else {
scaglioneMaxPrecedente = scaglioneList.get(i - 1).getLimiteScaglione();
}
if (i == scaglioneList.size() - 1) scaglioneMax = Long.MAX_VALUE;
double calcolo = (aliquota / 100) * Math.max(0, Math.min(this.imponibile, scaglioneMax) - scaglioneMaxPrecedente);
if (printIntermedi)
System.out.println(calcolo);
ret += calcolo;
}
return ret;
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Imponibile " + imponibile);
stringBuilder.append(System.lineSeparator());
stringBuilder.append("===========================");
stringBuilder.append(System.lineSeparator());
stringBuilder.append("Scaglione\t\tAliquota");
stringBuilder.append(System.lineSeparator());
for (int i = 0; i < scaglioneList.size(); i++) {
stringBuilder.append(scaglioneList.get(i).getLimiteScaglione());
stringBuilder.append("\t\t\t");
stringBuilder.append(scaglioneList.get(i).getAliquota() + "%");
stringBuilder.append(System.lineSeparator());
}
return stringBuilder.toString();
}
/**
* Classe statica per creare uno Scaglione
*/
static class Scaglione {
private long limiteScaglione;
private double aliquota;
Scaglione(long limiteScaglione, double aliquota) {
this.limiteScaglione = limiteScaglione;
this.aliquota = aliquota;
}
long getLimiteScaglione() {
return limiteScaglione;
}
double getAliquota() {
return aliquota;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment