Penali sulle fatture
Nell’ufficio amministrativo di una piccola azienda ti chiedono di automatizzare il calcolo delle penali per ritardato pagamento che vanno aggiunte alle fatture dei clienti in ritardo. Le condizioni sono scritte nel contratto standard: entro 10 giorni di ritardo non si applica nulla; da 11 a 30 giorni si aggiunge il 5% dell’importo; da 31 a 60 giorni il 10%; da 61 a 90 giorni il 20%; oltre i 90 giorni si applica il 20% più un 2% dell’importo per ogni giorno oltre il novantesimo. La penale però ha un tetto: non può mai superare il 50% dell’importo, e una volta arrivata lì smette di crescere.
Il programma riceve l’importo della fattura e i giorni di ritardo e restituisce il totale da pagare (importo più penale), con due decimali. I clienti litigano sempre sui giorni di confine, il decimo, il trentesimo, il novantesimo, e il giorno in cui si tocca il tetto: il tuo codice deve applicare esattamente ciò che dice il contratto.
importonumero — importo della fatturagiorni_ritardonumero — giorni di ritardo (intero, 0 se puntuale)
totale numero — importo più penale, 2 decimali
- entro 10 giorni di ritardo: nessuna penale;
- da 11 a 30 giorni: 5% dell’importo;
- da 31 a 60 giorni: 10%;
- da 61 a 90 giorni: 20%;
- oltre 90 giorni: 20% più il 2% per ogni giorno oltre il 90°;
- in ogni caso la penale non può superare il 50% dell’importo: raggiunto il tetto, smette di crescere.
- Arrotonda il totale a due decimali.
| importo | giorni_ritardo | totale |
|---|---|---|
| 1000 | 20 | 1050.0 |
| 1000 | 0 | 1000.0 |
Soluzione
| caso | importo | giorni_ritardo | atteso | ottenuto |
|---|
importo <- 1000
giorni_ritardo <- 20
if(giorni_ritardo <= 10){
penale <- 0
}else if(giorni_ritardo <= 30){
penale <- 0.05
}else if(giorni_ritardo <= 60){
penale <- 0.10
}else if(giorni_ritardo <= 90){
penale <- 0.20
}else{
penale <- 0.20 + 0.02 * (giorni_ritardo - 90)
if(penale > 0.50){
penale <- 0.50
}
}
totale <- round(importo * (1 + penale), 2)
totale