Transsmart biedt kostenvoorspelling op basis van de transportcontracten die een klant heeft met één of meerdere vervoerders. Naarmate het aantal gekoppelde vervoerders is gegroeid, is ook het aantal verschillende contracttypes dat zij gebruiken toegenomen. Om transportkosten efficiënt te berekenen, hebben we de tariefengine ontwikkeld. Dit artikel legt uit hoe de engine werkt en hoe klanten hun eigen tarieven kunnen configureren en onderhouden.
Onderdelen in dit artikel:
Procesbeschrijving
Het onderstaande diagram toont hoe het proces voor tariefberekening is opgebouwd.
Schematisch overzicht van het Transsmart tariefberekeningsproces:
Tijdens dit proces worden transportkosten berekend of voorspeld. Het maakt het ook mogelijk om voorspelde kosten te vergelijken met werkelijke kosten. Omdat verzendkosten en toeslagen afzonderlijk worden weergegeven, is het mogelijk om een volledige uitsplitsing van het totale tarief te analyseren.
Basisconfiguratie
De volgende tabellen zijn betrokken bij het tariefberekeningsproces:
| Previous table name (<2022) | Current table name |
| Client-carrier | Client Carriers |
| Zone Lookup | Zones |
| Weight Determination Lookup | Buy Weights |
| Sales Weight Determination Lookup | Sell Weights |
| Tariff Determination [DEV] | Buy Rates |
| Sales Tariff Determination [DEV] | Sell Rates |
| Sales Margins [DEV] | Sell Margins |
Alleen Buy Rates, Sell Rates en Sell Margins kunnen door klanten worden geconfigureerd. Alle andere tabellen kunnen uitsluitend door een nShift-medewerker worden beheerd.
De belangrijkste focus ligt op de Buy Rates-tabel. Om een volledig begrip van het systeem te ondersteunen, worden echter alle tabellen kort toegelicht in de sectie Overige tabellen.
Buy Rates
De Buy Rates-tabel vormt de basis van de tariefengine. In tegenstelling tot de vorige opzet, waarbij slechts één overeenkomende tarieflijn werd gebruikt, evalueert de engine nu alle toepasselijke regels en telt deze bij elkaar op om het uiteindelijke tarief te bepalen. Hierdoor kunnen regels die zijn gedefinieerd op collo-, pakket- of zendingniveau allemaal bijdragen aan de berekening.
In het volgende gedeelte worden de kolommen in de Buy Rates-tabel uitgelegd, gevolgd door voorbeelden.
| # | Element | Mandatory | Description |
| 1 | Identity | N | Dit veld bevat de unieke database-ID van het record. Als u bestaande records downloadt, wordt dit veld gevuld. Als u bestaande records wilt uploaden en overschrijven, moet dit veld gevuld blijven. Als u nieuwe regels wilt toevoegen, zorg er dan voor dat dit veld leeg is. |
| 2 | customerId | N | In deze kolom kunnen alle waarden uit de klant-hiërarchie worden gebruikt: customer_id, group_id en organisation_id |
| 3 | costcenter | N | Als een kostenplaats verschillende tarieven heeft, kan dit worden ingesteld door deze kolom in te vullen |
| 4 | level | Y | Tarieven kunnen op verschillende niveaus worden ingesteld: COLLO, PACKAGE en SHIPMENT. Op basis van deze waarde worden de tarieven verschillend berekend. Zie hieronder voor een uitleg van de verschillen per niveau |
| 5 | carrier | Y | Hier moet de vervoerder worden gespecificeerd |
| 6 | serviceLevelTime | N | De serviceleveltime kan hier worden gespecificeerd als verschillende tarieven van toepassing zijn voor verschillende serviceleveltime-waarden |
| 7 | serviceLevelOther | N | De servicelevelother kan hier worden gespecificeerd als verschillende tarieven van toepassing zijn voor verschillende servicelevelother-waarden |
| 8 | packageType | N | Het pakkettype kan hier worden gespecificeerd als verschillende tarieven van toepassing zijn voor verschillende pakkettypes |
| 9 | carrierAccountno | N | Het vervoerdersaccountnummer kan hier worden gespecificeerd als verschillende tarieven van toepassing zijn voor verschillende accountnummers |
| 10 | inbound | N | Hier kan worden aangegeven of tarieven gelden voor inkomende zendingen. Standaard staat dit op ‘0’, wat een uitgaande zending betekent |
| 11 | zone | N | De zone kan hier worden gespecificeerd als verschillende tarieven van toepassing zijn voor verschillende zones |
| 12 | minTotalWeight | N | Het minimale totale gewicht in KG van het gespecificeerde niveau (#3) wordt hier vermeld. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 13 | maxTotalWeight | N | Het maximale totale gewicht in KG van het gespecificeerde niveau (#3) wordt hier vermeld. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 14 | minLength | N | De minimale lengte in CM van elke collo wordt hier gespecificeerd. In het geval van multi-colli zendingen wordt elke collo afzonderlijk gecontroleerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 15 | maxLength | N | De maximale lengte in CM van elke collo wordt hier gespecificeerd. In het geval van multi-colli zendingen wordt elke collo afzonderlijk gecontroleerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 16 | minWidth | N | De minimale breedte in CM van elke collo wordt hier gespecificeerd. In het geval van multi-colli zendingen wordt elke collo afzonderlijk gecontroleerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 17 | maxWidth | N | De maximale breedte in CM van elke collo wordt hier gespecificeerd. In het geval van multi-colli zendingen wordt elke collo afzonderlijk gecontroleerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 18 | minHeight | N | De minimale hoogte in CM van elke collo wordt hier gespecificeerd. In het geval van multi-colli zendingen wordt elke collo afzonderlijk gecontroleerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 19 | maxHeight | N | De maximale hoogte van elke collo in CM wordt hier gespecificeerd. In het geval van multi-colli zendingen wordt elke collo afzonderlijk gecontroleerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 20 | minConveyDimension | N | De minimale afmeting van het niveau (collo, package, shipment) in CM wordt hier gespecificeerd. Dit wordt berekend door lengte + 2*breedte + 2*hoogte op te tellen. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 21 | maxConveyDimension | N | De maximale afmeting van het niveau (collo, package, shipment) in CM wordt hier gespecificeerd. Dit wordt berekend door lengte + 2*breedte + 2*hoogte op te tellen. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 22 | minLoadmeter | N | De minimale laadmeter van de zending, het pakket of de collo wordt hier gespecificeerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 23 | maxLoadmeter | N | De maximale laadmeter van de zending, het pakket of de collo wordt hier gespecificeerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 24 | minVolume | N | Het minimale volume van het niveau (collo, package, shipment) in CM3 wordt hier gespecificeerd. In het geval van multi-colli zendingen wordt elke collo afzonderlijk gecontroleerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 25 | maxVolume | N | Het maximale volume van het niveau (collo, package, shipment) in CM3 wordt hier gespecificeerd. In het geval van multi-colli zendingen wordt elke collo afzonderlijk gecontroleerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 26 | minValue | N | De minimale commerciële waarde van de zending, het pakket of de collo wordt hier gespecificeerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 27 | maxValue | N | De maximale commerciële waarde van de zending, het pakket of de collo wordt hier gespecificeerd. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 28 | colloQuantityFrom | N | Het minimale aantal colli kan hier worden gespecificeerd |
| 29 | colloQuantityTo | N | Het maximale aantal colli kan hier worden gespecificeerd |
| 30 | calcType | Y | De methode die moet worden gebruikt om het tarief te berekenen wordt hier ingesteld. Zie hieronder bij ‘Calculation Type’ voor aanvullende informatie |
| 31 | queryType | N | De methode die moet worden gebruikt om het tarief te berekenen wordt hier ingesteld. Zie hieronder bij ‘Query Type’ voor aanvullende informatie |
| 32 | tariffValue | Y | Het daadwerkelijke tarief wordt hier ingesteld. Dit kan een vast tarief, een percentage of een KG-tarief zijn. Dit kan worden opgegeven tot 4 cijfers achter de komma |
| 33 | currency | Y | Hier wordt de gebruikte valuta ingesteld |
| 34 | chargeGroup | N | De te gebruiken kostengroep wordt hier ingesteld. Zie hieronder bij ‘Charge Group’ voor aanvullende informatie |
| 35 | chargeType | N | De te gebruiken kostensoort wordt hier ingesteld. Zie hieronder bij ‘Charge Type’ voor aanvullende informatie |
| 36 | boundaryType | N | In dit element kunnen aanvullende beperkingen worden gespecificeerd waarmee rekening moet worden gehouden, zoals COLLOWEIGHT, PALLETWEIGHT of LOADMETER |
| 37 | boundaryMin | N | Als een beperking is gespecificeerd in element #25, dan stelt deze parameter de minimale waarde hiervoor in. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 38 | boundaryMax | N | Als een beperking is gespecificeerd in element #25, dan stelt deze parameter de maximale waarde hiervoor in. Dit kan worden opgegeven tot 3 cijfers achter de komma |
| 39 | validFrom | Y | Hier wordt de startdatum ingesteld waarop het tarief geldig is |
| 40 | validUntil | Y | Hier wordt de einddatum ingesteld waarop het tarief geldig is |
Calculation Type
| # | Calculation Type | Level | Description |
| 1 | BASE |
Shipment Collo Package |
Met dit type wordt een vaste prijs voor die specifieke regel ingesteld. Dit kan worden opgegeven tot 4 cijfers achter de komma |
| 2 | PIECE |
Shipment Collo Package |
Met dit type wordt een tarief per collo ingesteld. De te gebruiken formule is relevant aantal*tariffValue. Dit kan worden opgegeven tot 4 cijfers achter de komma |
| 3 | KG |
Shipment Collo Package |
Hiermee wordt een tarief per KG mogelijk gemaakt. Op basis van de Buy Weights-tabel wordt het berekende gewicht of het brutogewicht (welke het hoogst is) gebruikt en, indien ingesteld, wordt een afrondingsfactor toegepast. Het is belangrijk om de queryType in te stellen op STAFFEL. Dit berekeningstype zal waarschijnlijk altijd leiden tot meerdere tariefresultaten, aangezien doorgaans een staffel wordt toegepast voor verschillende gewichten en daarbovenop een KG-tarief wordt toegevoegd: als een zending 73,26 weegt, zal er een resultaat zijn voor de BASE-prijsschaal van 70,01 tot 9999,00 kg en een resultaat voor de KG – STAFFEL-regel van 70,01 tot 9999,00 kg. De te gebruiken formule is tariffValue (euro per kg)*aantal kg. Dit kan worden opgegeven tot 4 cijfers achter de komma |
| 4 | PERCENT_VALUE | Shipment | Op deze manier wordt een percentage berekend ten opzichte van de commerciële waarde van de zending. De methode om een percentage in te stellen is 0,01 is gelijk aan 1%. Het percentage kan worden opgegeven tot 3 cijfers achter de komma |
| 5 | PERCENT_SERVICE | Shipment | Dit berekeningstype gebruikt een vergelijkbare functionaliteit als PERCENT_VALUE, maar voegt dan een percentage van de inkoopwaarde toe. Een voorbeeld hiervan is een brandstoftoeslag en/of een toeslag voor overmaat. Het percentage kan worden opgegeven tot 3 cijfers achter de komma |
| 6 | LOADMETER |
Shipment Package Collo |
Op deze manier worden de berekende laadmeters gebruikt om de transportkosten te bepalen. |
| 7 | VOLUME |
Shipment Package Collo |
Op deze manier wordt het berekende volume gebruikt om de transportkosten te bepalen. |
| 8 | MINIMUM |
Shipment Collo Package |
Met dit type kan een minimumresultaat worden ingesteld in combinatie met de gespecificeerde chargeGroup. |
| 9 | MAXIMUM |
Shipment Collo Package |
Met dit type kan een maximumresultaat worden ingesteld in combinatie met de gespecificeerde chargeGroup. |
| 10 | MIN_PRICE_PIECE | Shipment | Dit berekeningstype kan worden gebruikt om een minimumprijs voor een volledige zending aan te geven. |
Query Type
De parameter Query Type is vereist om bepaalde uitzonderingen te berekenen. Standaard staat deze op SINGLE, maar er zijn twee andere waarden mogelijk:
- OR
- STAFFEL
OR
Gebruik OR voor toeslagen waarbij een zending of collo wordt gecontroleerd tegen meerdere limieten, zoals:
- Total weight
- Total length
- Total width
- Total height
- Total convey_dimension
Als één van deze limieten wordt overschreden, is de toeslag van toepassing. Een voorbeeld hiervan is de PostNL conveyor-toeslag.
STAFFEL
Gebruik STAFFEL voor op KG gebaseerde contracten met meerdere gewichtsschalen. Hiermee kunnen meerdere tariefniveaus bij elkaar worden opgeteld.
Voorbeeld: DHL Express tariefstructuur:
- Basistarief tot 10 kg
- Aanvullende schalen (10–30 kg, 30–70 kg, 70–200 kg, 200–2500 kg)
Met STAFFEL worden de basisprijs en de toepasselijke schaalprijs bij elkaar opgeteld om het uiteindelijke tarief te bepalen.
Charge Group
Er zijn twee charge groups: SHIPPING en SURCHARGE.
- SHIPPING dekt de basis transportkosten.
- SURCHARGE dekt extra kosten zoals brandstof-, douane- of overmaatkosten.
Charge Groups kunnen verder worden gespecificeerd met behulp van Charge Types.
Charge Type
Elke regel in de tariefengine bevat ook een Charge Type, die de exacte kostencomponent specificeert. Deze componenten worden beheerd in de Generics tabel.
Vind hier een voorbeeld van de Fuel Rates-tabel.
Overige tabellen
Client Carriers
Mogelijke parameters in de Client Carriers-tabel:
In de Client Carriers-tabel worden klant- en vervoerdersparameters gedefinieerd. Voor tariefberekening zijn de volgende parameters relevant:
SHOWRATES: Bepaalt welke tarieven zichtbaar zijn in het online platform en de API.
- BUY – toont alleen inkooptarieven
- SELL – toont alleen verkooptarieven
- BUYSELL – toont zowel inkoop- als verkooptarieven
USERATES: Geeft aan of inkoop- (BUY) of verkoop- (SELL) tarieven moeten worden gebruikt bij toepassing van CHEAPEST-logica (selecteren van de laagste transportoptie). Eén van de twee moet worden geselecteerd.
TARIFFLOOKUP: Definieert de bron van de tariefberekening.
- ENGINE – gebruikt de tariefengine (vereist voor werking van de tariefengine)
- NONE – er worden geen tarieven berekend
-
CARRIER – haalt tarieven rechtstreeks op bij de vervoerder, indien beschikbaar
TARIFF_LEVEL: Stelt het hiërarchieniveau in waarop inkoop (BUY) tarieven worden berekend. Dit is nuttig voor klanten met subaccountstructuren en wordt gebruikt om te bepalen op welk niveau de tarieven worden berekend:
- customer_id
- group_id
-
organisation_id
SALES_TARIFF_LEVEL: Dezelfde functie als TARIFF_LEVEL, maar toegepast op verkooptarieven.
CALC_SALES_MARGINS: Indien ingesteld op ACTUAL, maakt herberekening van tarieven op basis van inkoopfacturen mogelijk.
Zones
De Zones-tabel bepaalt de leveringszone voor elke boeking. Een zone kan op meerdere niveaus worden gedefinieerd:
- Carrier
- Customer
- Collection country
- Serviceleveltime
- Servicelevelother
- Cost center
- Of een combinatie hiervan
De resulterende zone wordt gebruikt in de tariefberekening, aangezien verschillende zones verschillende tarieven kunnen hebben.
Buy Weights
De Buy Weights-tabel definieert welk gewicht moet worden gebruikt in de tariefberekening. Omdat zendingen zowel zware als volumineuze goederen kunnen bevatten, is het brutogewicht niet altijd de juiste basis.
Wanneer factoren voor volumetrisch gewicht en/of laadmetergewicht worden toegepast, berekent het systeem drie soorten gewicht—gross, volume en load meter—en gebruikt het de hoogste waarde.
Houd er rekening mee dat sommige tariefstructuren (zoals die gebaseerd op het aantal colli) mogelijk niet afhankelijk zijn van gewicht, waardoor deze tabel niet altijd invloed heeft op de berekening.
Gewichtsregels kunnen op verschillende niveaus worden ingesteld:
- Carrier
- Customer
- Collection country
- Serviceleveltime
- Servicelevelother
- Cost center
- Packagetype
- Of combinaties hiervan
Sell Weights
De Sell Weights-tabel functioneert hetzelfde als Buy Weights, maar wordt gebruikt voor verkooptarieven en/of marges.