Vai al contenuto

Calcoli scientifici con Julia/Bonus italiani

Wikibooks, manuali e libri di testo liberi.
Indice del libro

E' possibile scrivere il codice Julia per calcolare a quali bonus si ha diritto in base all'ISEE, al numero di figli ecc., per mostrare l'importo di ogni bonus e il totale complessivo. I bonus che si considerano sono:

  • Assegno Unico
  • Bonus nido
  • Bonus bollette
  • Bonus affitto
  • Bonus ristrutturazione
  • Ecobonus
  • Bonus mobili
  • Bonus cultura


# ================================
# STRUTTURA DATI UTENTE
# ================================
struct Famiglia
    isee::Float64
    num_figli::Int
    figli_minori::Int
    figli_18::Int
    affitto::Float64
    spesa_casa::Float64
    spesa_green::Float64
    spesa_mobili::Float64
    ha_nido::Bool
end

# ================================
# BONUS
# ================================

# Assegno Unico (per figlio)
function assegno_unico(f::Famiglia)
    max_bonus = 190
    min_bonus = 50
    soglia_max = 15000
    soglia_min = 40000

    function bonus_figlio(isee)
        if isee <= soglia_max
            return max_bonus
        elseif isee >= soglia_min
            return min_bonus
        else
            return max_bonus - (max_bonus - min_bonus) *
                   (isee - soglia_max) / (soglia_min - soglia_max)
        end
    end

    return bonus_figlio(f.isee) * f.num_figli * 12
end

# Bonus nido
function bonus_nido(f::Famiglia)
    if !f.ha_nido
        return 0
    end

    if f.isee < 25000
        return 3000
    elseif f.isee < 40000
        return 2500
    else
        return 1500
    end
end

# Bonus bollette
function bonus_bollette(f::Famiglia)
    if f.isee < 9530
        return 200
    elseif f.isee < 20000
        return 100
    else
        return 0
    end
end

# Bonus affitto
function bonus_affitto(f::Famiglia)
    if f.affitto == 0
        return 0
    end

    percentuale = f.isee < 15000 ? 0.4 : 0.2
    return f.affitto * percentuale
end

# Bonus ristrutturazione (quota annua)
function bonus_ristrutturazione(f::Famiglia)
    max_spesa = min(f.spesa_casa, 96000)
    return (max_spesa * 0.5) / 10
end

# Ecobonus
function ecobonus(f::Famiglia)
    return f.spesa_green * 0.65
end

# Bonus mobili
function bonus_mobili(f::Famiglia)
    max_spesa = min(f.spesa_mobili, 8000)
    return max_spesa * 0.5
end

# Bonus cultura
function bonus_cultura(f::Famiglia)
    return f.figli_18 * 500
end

# ================================
# CALCOLO COMPLESSIVO
# ================================

function calcola_bonus(f::Famiglia)
    risultati = Dict{String, Float64}()

    risultati["Assegno Unico"] = assegno_unico(f)
    risultati["Bonus nido"] = bonus_nido(f)
    risultati["Bonus bollette"] = bonus_bollette(f)
    risultati["Bonus affitto"] = bonus_affitto(f)
    risultati["Bonus ristrutturazione"] = bonus_ristrutturazione(f)
    risultati["Ecobonus"] = ecobonus(f)
    risultati["Bonus mobili"] = bonus_mobili(f)
    risultati["Bonus cultura"] = bonus_cultura(f)

    totale = sum(values(risultati))

    return risultati, totale
end

# ================================
# ESEMPIO DI UTILIZZO
# ================================

famiglia = Famiglia(
    18000,   # ISEE
    2,       # numero figli
    1,       # figli minori
    1,       # figli di 18 anni
    6000,    # affitto annuo
    50000,   # spesa ristrutturazione
    10000,   # spesa green
    5000,    # mobili
    true     # usa asilo nido
)

risultati, totale = calcola_bonus(famiglia)

println("=== DETTAGLIO BONUS ===")
for (k, v) in risultati
    println(rpad(k, 25), ": €", round(v, digits=2))
end

println("\nTOTALE COMPLESSIVO: €", round(totale, digits=2))
=== DETTAGLIO BONUS ===
Bonus ristrutturazione   : €2500.0
Ecobonus                 : €6500.0
Bonus cultura            : €500.0
Bonus mobili             : €2500.0
Bonus affitto            : €1200.0
Assegno Unico            : €4156.8
Bonus bollette           : €100.0
Bonus nido               : €3000.0
TOTALE COMPLESSIVO: €20456.8