Contatta Lovato Damiano via mail
|  HOME  |  CURRICULUM  |  PROGETTI  |  GUESTBOOK  |          

FUEL SURCHARGE


Qui di seguito una serie di considerazioni su questa voce che viene sempre più spesso applicata ai costi di trasporto; non mi propongo certamente di asserire quale metodo o quale approccio interpretativo sia il più corretto da applicare; tali considerazioni sono in particolar modo scatturite a seguito di un'analisi del problema sotto l'aspetto computazionale.
Purtroppo esiste ancora moltissima confusione ed ognuno è propenso ad applicare un interpretazione differente. Viste le oscillazioni del prezzo dei carburanti le ragioni di fondo possono essere più che condivise, tuttavia la scarsa trasparenza, i problemi nella sua gestione e una standardizzazione inesistente probabilmente stanno facendo del fuel surcharge un elemento negativo in particolar modo agli occhi dei clienti e forse anche un costo per i trasportatori meno organizzati (Quasi tutti i siti delle aziende più grandi infatti hanno dedicato un intera pagina per chiarire cos'è e come funziona). In un mondo in cui le relazioni commerciali sono sempre meno trasparenti non applicarlo forse è un reale punto a favore.

1) Valori iniziali tabella incrementi decrementi
Non tutti partono dal medesimo valore per calcolare gli incrementi; alcuni da 0,9 altri da 1 ecc...; ovviamente l'1% su 0,9 porta a condizioni sfavorevoli rispetto all' 1% su 1 in quanto gli scaglioni vengono compressi maggiormente; tuttavia le differenze sono praticamente nulle per scarti così piccoli.

2) La percentuale di incremento degli scaglioni
Escludendo coloro che non utilizzano nemmeno uno standard e cioè propongono una tabella di incrementi/decrementi che non segue una logica definita, solitamente si ha che i limiti degli scaglioni sono ottenuti tramite incrementi pari all' 1%; spesso tuttavia ci si dimentica di specificare se tali incrementi sono semplici o composti (differenza riscontrata) o più chiaramente se la percentuale di incremento viene calcolata sul valore massimo dello scaglione precedente anzichè sul valore massimo di partenza.
Posto:
PMaxP = prezzo massimo di partenza
Inc = percentuale di incremento
PMaxS5_s = prezzo massimo 5° scaglione con calcolo semplice
PMaxS5_c= prezzo massimo 5° scaglione con calcolo composto

E' possibile notare che una differenza di 5 scaglioni porterebbe la percentuale reale di incremento al 5.1% anzichè 5%.

3) La tabella incrementi decrementi
Un valore minimo e massimo nella tabella incrementi decrementi ha una logica piuttosto debole; programmaticamente ha veramente poco senso visto che bisognerebbe considerare quanti decimali considerare dopo la virgola e gestire gli arrotondamenti; se ad esempio uno scaglione ha valori 1,131 1,140 ed il successivo ha valori 1,141 1,150 il programma non riuscirebbe a gestire valori quali 1,1405.
Risulterebbe pertanto molto più logico e corretto usare un singolo valore con la regola minore o uguale; per esempio se uno scaglione ha il valore 1,14 ed il successivo 1,15 si intende che quest'ultimo scaglione comprende tutti i valori maggiori di 1,14 fino ad 1,15 compreso e da lì in poi ha inizio lo scaglione successivo.

4) Decrementi ?
Molti la chiamano la tabelle incrementi/decrementi; altri tanti specificano che in caso di decrementi il fuel surcharge non viene calcolato; forse sarebbe più corretto chiamarla solamente tabella incrementi.

5) La percentuale di incremento
Anche nell' applicare la percentuale di incremento del nolo vengono utilizzate strade alternative; la più logica sembrerebbe quella di attribuire una percentuale sulla percentuale di incremento.
Quasi tutti propinano di farsi carico di una buona percentuale dell' incremento del carburante imputando nel conteggio soltanto una percentuale che va da circa il 20% al 40% dell' incremento del carburante, tuttavia molto spesso ci si dimentica però che la percentuale viene applicata sul nolo e tale voce non comprende sicuramente solamente le spese per il carburante.

6) Il primo scaglione di differenza.
Si dice molto spesso che tale costo viene applicato nel caso in cui ci sia un incremento del carburante dell' 1%.
Nel salto dal primo scaglione le cose non quadrano molto; ragionando per assurdo se lo scaglione fosse ipoteticamente 1,141 1,150 ed il prezzo di riferimento con cui viene stipulato il contratto 1,149 basterebbe superare lo 0,088% per passare allo scaglione successivo.

Qui di seguito una bozza molto approssimativa e non ottimizzata di codice VBA per la creazione della tabella incrementi decrementi ed il calcolo della differenza di scaglioni.

VBA : CodiceFuelSurcharge001
01 : '------------------------------------------------------------------
02 : Private Sub CalcolaFS_Click()
03 : Call CalcolaFuelSurcharge(1000, 1.002, 1.001, 1.432, 1.44, 1)
04 : End Sub
05 : '------------------------------------------------------------------
06 : Function CalcolaFuelSurcharge(ByVal LimiteIterazioni As Integer, ByVal PrezzoMinimoPartenza As Double, ByVal PrezzoMassimoPartenza As Double, ByVal PrezzoRiferimento As Double, ByVal PrezzoAttuale As Double, ByVal TipoProgressione As Integer)
07 : Dim sSQL As String
08 : Dim ScaglionePrezzoAttuale As Integer
09 : ScaglionePrezzoAttuale = 0
10 : Dim ScaglionePrezzoRiferimento As Integer
11 : ScaglionePrezzoRiferimento = 0
12 : ' CONFIGURARE I SEGUENTI PARAMETRI
13 : Dim PrezzoMinimoScaglione As Double           ' PREZZO MINIMO CALCOLATO SCAGLIONE
14 : Dim PrezzoMassimoScaglione As Double          ' PREZZO MASSIMO CALCOLATO SCAGLIONE
15 : Dim Scaglione As Integer
16 : Scaglione = 0
17 : Dim percentuale As Double                     ' PERCENTUALE DI INCREMENTO
18 : percentuale = 1.01
19 :     If PrezzoMinimoPartenza <= PrezzoMassimoPartenza Then
20 :       MessaggioErrore = "Il prezzo minimo dello scaglione di partenza non può essere inferiore o uguale al prezzo massimo dello scaglione precedente"
21 :     End If
22 : ' CICLO DI CALCOLO DEGLI SCAGLIONI
23 : If MessaggioErrore = "" Then
24 :   ' SVUOTA COMPLETAMENTE LA TABELLA
25 :   StringaSQL = "DELETE * FROM FS_TabellaIncrementiDecrementi"
26 :   DoCmd.SetWarnings False
27 :   DoCmd.RunSQL StringaSQL
28 :   DoCmd.SetWarnings True
29 :   ' ESEGUI LOOP CALCOLO
30 :   Do While Scaglione < LimiteIterazioni
31 :     ' Nel caso di progressione semplice gli scaglioni sono aumentati in salti del 1% rispetto a quello iniziale
32 :     If TipoProgressione = 0 Then
33 :       If Scaglione = 0 Then
34 :         PrezzoMinimoScaglione = 0
35 :         PrezzoMassimoScaglione = PrezzoMassimoPartenza
36 :       Else
37 :         PrezzoMinimoScaglione = PrezzoMinimoPartenza * (percentuale - 0.01)
38 :         PrezzoMassimoScaglione = PrezzoMassimoPartenza * percentuale
39 :         percentuale = percentuale + 0.01
40 :       End If
41 :     ' Nel caso di progressione composta gli scaglioni sono aumentati in salti del 1% rispetto allo scaglione precedente
42 :     ElseIf TipoProgressione = 1 Then
43 :       If Scaglione = 0 Then
44 :         PrezzoMinimoScaglione = 0
45 :         PrezzoMassimoScaglione = PrezzoMassimoPartenza
46 :       Else
47 :         If Scaglione = 1 Then
48 :           PrezzoMinimoScaglione = PrezzoMinimoPartenza
49 :         Else
50 :           PrezzoMinimoScaglione = PrezzoMinimoScaglione * 1.01
51 :         End If
52 :         PrezzoMassimoScaglione = PrezzoMassimoScaglione * 1.01
53 :       End If
54 :     End If
55 :     ' Verifica se il prezzo di riferimento è compreso nello scaglione
56 :     If (ScaglionePrezzoRiferimento = 0) And (Round(PrezzoMassimoScaglione, 10) >= Round(PrezzoRiferimento, 10)) Then ' Prezzo massimo compreso!
57 :       ScaglionePrezzoRiferimento = Scaglione
58 :       MsgBox "Scaglione rif: " & ScaglionePrezzoRiferimento
59 :     End If
60 :     ' Verifica se il prezzo attuale è compreso nello scaglione
61 :     If (ScaglionePrezzoAttuale = 0) And (Round(PrezzoMassimoScaglione, 10) >= Round(PrezzoAttuale, 10)) Then ' Prezzo massimo compreso!
62 :       ScaglionePrezzoAttuale = Scaglione
63 :       MsgBox "Scaglione att: " & ScaglionePrezzoAttuale
64 :     End If
65 :     ' Inserisci i dati nella tabella
66 :     sSQL = "INSERT INTO FS_TabellaIncrementiDecrementi"
67 :     sSQL = sSQL & " (PrezzoMinimo, PrezzoMassimo, Scaglione)"
68 :     sSQL = sSQL & " VALUES"
69 :     sSQL = sSQL & " ( '" & PrezzoMinimoScaglione & _
70 :                   "', '" & PrezzoMassimoScaglione & _
71 :                   "', '" & Scaglione & "')"
72 :     DoCmd.SetWarnings False
73 :     DoCmd.RunSQL sSQL
74 :     DoCmd.SetWarnings True
75 :     ' Se sono stati indivduati tutti e due gli scaglioni esci dal loop
76 :     If (ScaglionePrezzoRiferimento <> 0) And (ScaglionePrezzoAttuale <> 0) Then
77 :       DifferenzaScaglioni = ScaglionePrezzoAttuale - ScaglionePrezzoRiferimento
78 :       Exit Do
79 :     End If
80 :     ' Incrementa il numero dello scaglione
81 :     Scaglione = Scaglione + 1
82 :   Loop
83 : End If
84 : MsgBox DifferenzaScaglioni
85 : End Function