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)
|
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)
|
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
|
17 : | Dim percentuale As Double ' PERCENTUALE DI INCREMENTO
|
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"
|
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
|
37 : | PrezzoMinimoScaglione = PrezzoMinimoPartenza * (percentuale - 0.01)
|
38 : | PrezzoMassimoScaglione = PrezzoMassimoPartenza * percentuale
|
39 : | percentuale = percentuale + 0.01
|
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
|
47 : | If Scaglione = 1 Then
|
48 : | PrezzoMinimoScaglione = PrezzoMinimoPartenza
|
50 : | PrezzoMinimoScaglione = PrezzoMinimoScaglione * 1.01
|
52 : | PrezzoMassimoScaglione = PrezzoMassimoScaglione * 1.01
|
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
|
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
|
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
|
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
|
80 : | ' Incrementa il numero dello scaglione
|
81 : | Scaglione = Scaglione + 1
|
84 : | MsgBox DifferenzaScaglioni
|