Tariefgroepen en tarieven toevoegen
Elke kostencategorie voor de haven (havengeld, loodsgeld, bootlieden, afval…) is een tariefgroep. Binnen elke groep voeg je één of meer tarieven toe — de afzonderlijke kostenposten. Op deze pagina wordt uitgelegd hoe je beide aanmaakt.
Het scherm Tariefgroepen openen
Ga naar Zijbalk → Beheer → Cost Calculations → Tariefgroepen (route /invoicing-and-tariffs/tariff-groups/cost-calculation).
Je hebt de machtiging Tarief admin nodig (invoices.tariff_admin) om groepen aan te maken of te bewerken.
Stap 1 — Een tariefgroep aanmaken
Klik op New en vul de groepgegevens in:
| Veld | Wat in te voeren |
|---|---|
| Naam | Beschrijvende naam, bijv. Den Helder — Harbour dues |
| Systeemcode | pcc_<haven>_<categorie>, bijv. pcc_denhelder_havengeld |
| Valutacode | EUR |
| Begint op | Eerste datum waarop de kosten van toepassing zijn, bijv. 2026-01-01 |
| Eindigt op | Leeg laten voor onbepaalde tijd |
| UI-sjabloon | Label dat wordt weergegeven als de koptekst van de resultaatsectie, bijv. Harbour dues |
| Tariefgroep type | Invoice calculation |
| Application area | Alleen-lezen — al ingesteld op cost calculation |
Klik op Save. Je bevindt je nu op de detailspagina van de tariefgroep.
Stap 2 — De groep koppelen aan je haven
Elke tariefgroep moet een havenpoortvoorwaarde hebben. Zonder deze voorwaarde gelden de tarieven van de groep voor alle havens, niet alleen voor de jouwe.
Open op de kaart Bedrijfslogica het tabblad Voorwaarden en klik op Add:
| Veld | Waarde |
|---|---|
| Logisch type | Custom |
| Veld soort | ConditionString |
| Bronveld | $.__DefinitionSystemCode |
| Tekenreeksoperator | Equals |
| Waarde | pccDenHelder (de Systeemcode van je haven — precies zoals ingesteld op het object) |
Klik op Save bij de voorwaarde. Herhaal dit voor elke tariefgroep die je aanmaakt voor deze haven.
Stap 3 — De tarieven (kosten) toevoegen
Ga vanaf de detailspagina van de tariefgroep naar de tarieflijst van de groep en klik op Tarief toevoegen. Het tariefformulier heeft een kaart Details en een kaart Bedrijfslogica.
Veelgebruikte velden voor elk tarief:
| Veld | Wat in te voeren |
|---|---|
| Naam | Naam van de kostenpost, bijv. Harbour dues — zeeschip Nieuwe Diep |
| Bedragtype | Number |
| Tarieftype | Regular |
| Valutacode | EUR |
| Systeemcode | Korte, stabiele code |
| UI-sjabloon | Label dat wordt weergegeven op de resultaatregel — verplicht, mag niet leeg zijn |
| Begint op / Eindigt op | Laat aansluiten bij de geldigheidsperiode van de tarieflijst |
Het veld Bedrag bron bepaalt welke vorm het tarief aanneemt. Kies Direct of Matrix en vul de velden in die bij elke vorm worden beschreven.
Vorm A — een tarief per eenheid
Gebruik dit wanneer de kostenpost een vast tarief is vermenigvuldigd met een scheepsattribuut (bijv. €0,93 per GT).
Kaart Details:
| Veld | Waarde |
|---|---|
| Bedrag bron | Direct |
| Bedrag | Het tarief, bijv. 0.93 |
| UI-sjabloon | bijv. Port dues ({{$.ship.gt}} × 0.93) — zet de sjabloon letterlijk in het veld of gebruik de Handlebars-syntaxis |
Bedrijfslogica — tabblad Berekeningen → Add:
| Veld | Waarde |
|---|---|
| Logisch type | Custom |
| Veld soort | CalculationPricePerUnit |
| Bronveld | $.ship.gt (of $.ship.loa, $.tugsInbound.numberOfTugs, etc.) |
| Berekeningsvolgorde | 0 |
Dit geeft de engine de opdracht het Bedrag te vermenigvuldigen met de waarde op dat veldpad.
Bedrijfslogica — tabblad Voorwaarden (optioneel): als dit tarief alleen van toepassing is op bepaalde scheepstypen, voeg dan een ConditionArray toe (zie onderstaande Voorwaardenreferentie).
Den Helder voorbeeld: havengeld voor zeeschepen bij Nieuwe Diep — Bedrag 0.93, CalculationPricePerUnit bronveld $.ship.gt.
Vorm B — een staffelzoekopdracht
Gebruik dit wanneer de kostenpost afhankelijk is van de band waarin een waarde valt (bijv. loodsgeld op basis van diepgangband).
Kaart Details:
| Veld | Waarde |
|---|---|
| Bedrag bron | Matrix |
| Bedrag | 0 |
| Bedrag bron sjabloon | De Handlebars-sleutel die de zoekopdracht aanstuurt, bijv. {{pilotsOutbound.draft}} |
Bedrijfslogica — tabblad Voorwaarden → Voeg een ConditionNumeric toe om nul/lege invoer te blokkeren:
| Veld | Waarde |
|---|---|
| Veld soort | ConditionNumeric |
| Bronveld | pilotsOutbound.draft |
| Numerieke operator | GreaterThan |
| Waarde | 0 |
Vul daarna de kaart Tariefmatrix in (zie Stap 4).
Den Helder voorbeeld: inkomend loodsgeld — Bedrag bron Matrix, Bedrag bron sjabloon {{pilotsInbound.draft}}, 169 diepgangbanden in dm.
Vorm C — een vast bedrag
Gebruik dit wanneer de kostenpost een vast bedrag is, optioneel alleen voor bepaalde scheepstypen of condities.
Kaart Details:
| Veld | Waarde |
|---|---|
| Bedrag bron | Direct |
| Bedrag | Het vaste bedrag, bijv. 120 |
Bedrijfslogica — tabblad Voorwaarden: voeg voorwaarden toe om te beperken wanneer het tarief van toepassing is (bijv. ConditionArray op $.podh.callPeriod met Keys day). Laat voorwaarden leeg als de kostenpost altijd van toepassing is.
Voeg geen CalculationPricePerUnit-node toe — die is niet nodig voor een vast bedrag.
Den Helder voorbeeld: bootlieden overdag — Bedrag 120, ConditionArray op $.podh.callPeriod = ["day"].
Stap 4 — De tariefmatrix invullen (banden)
De kaart Tariefmatrix verschijnt alleen wanneer Bedrag bron = Matrix. Deze wordt niet getoond bij Direct-tarieven.
Elke rij is een band:
| Kolom | Opmerkingen |
|---|---|
| Naam | Bandlabel, bijv. 0–270 dm |
| Systeemcode | Automatisch ingevuld; bewerkbaar |
| Bedrag | Tarief voor deze band |
| Vanaf | Ondergrens (inclusief). De eerste band moet beginnen bij 0. |
| Naar | Bovengrens (exclusief). De laatste band moet een groot getal gebruiken, bijv. 9999, om alle waarden te dekken. |
| UI-sjabloon | Label voor de resultaatregel van deze band |
Banden moeten aaneengesloten zijn — de Naar-waarde van één rij is gelijk aan de Vanaf-waarde van de volgende. Gaten zorgen ervoor dat de zoekopdracht niets teruggeeft.
Klik op Add onderaan de kaart om een lege rij toe te voegen. Vul elke rij in en klik op Save.
Banden importeren vanuit Excel
Voor grote bandentabellen (Den Helder loodsgeld heeft 169 rijen), gebruik de import:
- Zorg ervoor dat Bedrag bron = Matrix is opgeslagen op het tarief — de knop Import Tariff Matrix verschijnt alleen in de weergavemodus (niet in de bewerkingsmodus).
- Klik op Import Tariff Matrix in de paginakoptekst.
- Klik in het dialoogvenster eerst op Voorbeeldbestand downloaden om de juiste kolomindeling te krijgen.
- Vul het voorbeeldbestand in met je banden.
- Vink Bestaande tarieventabel vervangen aan als je bestaande rijen wilt overschrijven.
- Klik op Import.
Begin altijd met Voorbeeldbestand downloaden — de kolomvolgorde in de sjabloon is de volgorde die de importer verwacht.
Voorwaardenreferentie
Voeg voorwaarden toe op het tabblad Voorwaarden van de kaart Bedrijfslogica (op het tarief, niet op de groep — tenzij het de havenpoortvoorwaarde betreft, die gaat op de groep).
| Voorwaardetype | Wanneer te gebruiken | Sleutelvelden |
|---|---|---|
| ConditionString | Havenpoort — overeenkomst met de Systeemcode van de haven | Bronveld $.__DefinitionSystemCode, Tekenreeksoperator Equals, Waarde = pccDenHelder |
| ConditionArray | Overeenkomst met een lijstveld (scheepstype, gebied, aanloopperiode…) | Bronveld bijv. $.general.shipType, Array-operator Any, Waarden = array van List-Keys bijv. tanker_lng, bulkcarrier |
| ConditionNumeric | Numerieke vergelijkingen (diepgang > 0, GT tussen twee waarden…) | Numerieke operator: Between / Equals / GreaterThan / SmallerThan |
| ConditionBoolean | Ja/nee-vlagvelden | Booleaanse operator True of False |
Het type ConditionBoolean (voor velden zoals ispsApplicable) was niet aanwezig in de referentiedata die voor deze documentatie is gebruikt. Het UI-formulier toont de operators True / False, maar verifieer het resultaat aan de hand van een live booleaanse voorwaarde voordat je het in productie gebruikt.
Sommige kosten mogen slechts éénmaal per havenbezoek worden berekend, ongeacht het aantal overeenkomende tariefregels (bijvoorbeeld een afvalvergoeding die niet dubbel mag worden meegeteld). Dit regelgroeperingsgedrag heeft geen UI-scherm — het vereist een configuratiewijziging door het SHIPM8-team. Neem contact op met support als een kostenpost dit nodig heeft.