> For the complete documentation index, see [llms.txt](https://docs.solutioo.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.solutioo.de/entwicklerdokumentationen-business-central-dhl-connector/dhl-connector-entwicklerdokumentation/codeunit-referenz/72242970-72242973-tarif-engine.md).

# 72242970–72242973 Tarif-Engine

## 72242970 SOUDHL Tariff Validation Mgt

### `ValidateTariff(var TariffHeader: Record "SOUDHL Tariff Header")`

Prüft Kopf, Datum, Währung, aktive Produkte, Zonenschema, Gewichtsregeln, vorhandene Rates, nicht überlappende Gewichtsstufen und Destination Rules. Erfolg setzt Status `Validated` und Timestamp.

### `ActivateTariff(var TariffHeader: Record "SOUDHL Tariff Header")`

Validiert erneut, archiviert zeitlich überlappende aktive Versionen desselben Tarifs und Billing Accounts und setzt die Version auf Active.

Lokale Helper: `CheckRateRanges`, `DateRangesOverlap`, `DecimalRangesOverlap`.

## 72242971 SOUDHL Destination Mgt

### `ResolveZone(TariffCode: Code[20]; VersionCode: Code[20]; ZoneSchemeCode: Code[20]; ShipmentDate: Date; DestinationCountry: Code[10]; DestinationPostCode: Code[20]; var ZoneCode: Code[20]): Boolean`

Wählt die passende Destination Rule nach Land, Datum, PLZ-Pattern/-Range und höchster Priority.

### `NormalizeCountryCode(CountryCode: Code[10]): Code[10]`

Uppercase und EL → GR.

Lokale Helper: `PostCodeMatches`, `IsDateValid`.

## 72242973 SOUDHL Charge Mgt

### `CalculateCharges(TariffHeader: Record "SOUDHL Tariff Header"; TariffProduct: Record "SOUDHL Tariff Product"; ServiceCode: Code[20]; ShipmentDate: Date; OriginCountry: Code[10]; DestinationCountry: Code[10]; ZoneCode: Code[20]; BillableWeight: Decimal; Length: Decimal; Width: Decimal; Height: Decimal; PackageCount: Integer; BaseAmount: Decimal; var ResultBuffer: Record "SOUDHL Rate Result Buffer" temporary): Decimal`

Filtert passende Zuschläge, löst Exclusion Groups über Priority auf, berechnet Fixed-, Percent- und Index-Percent-Beträge und fügt Detailzeilen ein. Rückgabe ist die Summe aller Zuschläge.

Lokale Helper: `ChargeApplies`, `IsWinningExclusion`, `CalculateChargeAmount`, `AddChargeLine`, `NextLineNo`.

## 72242972 SOUDHL Rate Provider

### `CalculateRate(ProductCode: Code[20]; ServiceCode: Code[20]; BillingAccountCode: Code[20]; ShipmentDate: Date; OriginCountry: Code[10]; OriginPostCode: Code[20]; DestinationCountry: Code[10]; DestinationPostCode: Code[20]; ActualWeight: Decimal; Length: Decimal; Width: Decimal; Height: Decimal; PackageCount: Integer; var ResultBuffer: Record "SOUDHL Rate Result Buffer" temporary; var ErrorCode: Code[30]; var ErrorText: Text): Boolean`

Öffentliche, unterstützte Tarif-API.

### Algorithmus

1. Defaults und Eingaben validieren.
2. eindeutigen aktiven Tarif wählen; kontospezifisch vor generisch.
3. Zone auflösen.
4. Volumen- und abrechenbares Gewicht ermitteln, runden und begrenzen.
5. Rate wählen; länderspezifisch vor zonenspezifisch.
6. Basisbetrag nach Weight Step, Fixed, Base Plus Kg oder Additional Kg berechnen.
7. Package-Billing-Level anwenden.
8. Charges berechnen.
9. Base-, Charge- und Summary-Zeilen schreiben.

Lokale Helper: `FindTariff`, `CalculateVolumeWeight`, `CalculateBillableWeight`, `FindRate`, `CalculateBaseAmount`, `AddBaseLine`, `AddSummaryLine`, `Fail`.

## Fehlervertrag

Fachliche Nichtberechenbarkeit liefert `false` und Fehlercode/-text statt `Error()`. Der temporäre Buffer enthält zusätzlich eine Information-Zeile.

## Bekannte Grenzen

`OriginPostCode`, Area Variant, Product `Additional Kg From`, VAT-Flag sowie einige reservierte Result Line Types werden derzeit nicht ausgewertet.

## Externe Verwendung

Consumer rufen nur `SOUDHL Rate Provider.CalculateRate` auf und lesen die Summary-Zeile. Validation, Destination und Charge Mgt sind öffentlich ausführbar, aber fachliche Engine-Bausteine und kein bevorzugter Integrationsentry.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.solutioo.de/entwicklerdokumentationen-business-central-dhl-connector/dhl-connector-entwicklerdokumentation/codeunit-referenz/72242970-72242973-tarif-engine.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
