Shop Projekt - Dokumentation

Shop LDM

Teil 07: Versand & Kostenberechnung

Dieses Modul regelt Versand, Gebühren, Zonen und internationale Abwicklungen.

Es bildet die Grundlage, um Transportkosten, Zölle und Gebühren automatisch zu berechnen und dynamisch auf Basis von Ländern, Tarifen und Währungen anzuwenden.

Die Basiswährung wird im Code unter config definiert.

🗺️ Stufe 2 | 📚 Aktuell | 📟 2026 06 15 | 📍 Datenbank - Versand & Kostenberechnung

  • Country: Stammdaten aller Länder inkl. ISO-Codes.
  • Shipping_zone & tb_s_zone_country: Gruppierung von Ländern zu Versandzonen.
  • Customs_zone & tb_c_zone_country: Definition von Zollbereichen.
  • Currency_rate: Wechselkurse zur Referenzwährung.
  • Customs_rule: Zollregeln mit Freigrenzen und Steuersätzen.
  • Carrier: Versanddienstleister mit Herkunftsland.
  • Shipping_tariff: Versandarten mit Limits und Preisen.
  • Shipping_extra: Zusatzoptionen (Express, Versicherung).
  • Fees: Shop-interne Gebühren.

Dieses Modul sorgt für transparente, dynamische und internationale Versandkostenberechnung und kann weltweit eingesetzt werden.

Country (Länder)

Felder:
    - cun_ID               (PK)
    - cun_name             VARCHAR(100)
    - cun_international_name VARCHAR(150)
    - cun_abbrev           VARCHAR(10)            -- Abkürzung
    - cun_iso2             CHAR(2)                -- ISO 3166-1 Alpha-2 (z.B. 'CH')
    - cun_iso3             CHAR(3)                -- ISO 3166-1 Alpha-3 (z.B. 'CHE')

Hinweis: Erstelle ein Frendschlüssel in address aus 02 user und in Set aus teil 04 Product.

Shipping_zone (Versandzonen)

Felder:
    - siz_ID               (PK)
    - siz_name             VARCHAR(100)            -- Zonenname (z.B. 'EU', 'Weltweit')
    - siz_type             CHAR(1)                 -- Typ: R=Region, C=CountryGroup

Customs_zone (Zollzonen)

Felder:
    - cuz_ID               (PK)
    - cuz_name             VARCHAR(100)            -- Zonenname
    - cuz_type             CHAR(1)                 -- Typ: N=National, I=International

S_zone_country (Verknüpfung)

Felder:
    - cun_ID               (PK → country)
    - siz_ID               (PK → shipping_zone)

C_zone_country (Verknüpfung)

Felder:
    - cun_ID               (PK → country)
    - cuz_ID               (PK → customs_zone)

Carrier (Versanddienstleister)

Zweck: Enthält Versanddienstleister und deren Vertriebsländer.

Felder:
    - car_ID               (PK)
    - cun_ID               (FK → country)       -- Vertriebsländer
    - car_name             VARCHAR(100)            -- Name (z.B. 'DHL Schweiz', 'FedEx')

Currency_rate (Wechselkurse)

Zweck: Enthält Wechselkurse zur Referenzwährung.

Felder:
    - cur_ID               (PK)
    - cur_code             CHAR(3)                 -- ISO-Code (CHF, EUR, USD)
    - cur_rate             DECIMAL(12,6)           -- Relativer Kurs (z.B. 1 EUR = 0.95 CHF)
    - cur_valid_from       DATETIME                -- Gültig ab
    - cur_valid_to         DATETIME NULL           -- Gültig bis

Hinweis: API-Update möglich, Shop-Referenzwährung als Basis.

Customs_rule (Zollregeln)

Zweck: Definiert Zollregeln für Zollzonen (als Information für Kunden oder vorab geregelte Zollgebühren).

Felder:
    - cus_ID               (PK)
    - cuz_ID               (FK → customs_zone)
    - cus_threshold        DECIMAL(12,2)           -- Freigrenze für Abgaben
    - cus_tax_rate         DECIMAL(5,2)            -- MwSt./Umsatzsteuer %
    - cus_duty_rate        DECIMAL(5,2)            -- Zollsatz %
    - cus_valid_from       DATETIME                -- Gültig ab
    - cus_valid_to         DATETIME NULL           -- Gültig bis

Shipping_tariff (Versandtarife)

Zweck: Enthält Versandtarife mit Gewicht-/Größenlimits und Preisen.

Felder:
    - sip_ID             (PK)
    - siz_ID             (FK → shipping_zone)      -- Zielgebiet
    - car_ID             (FK → carrier)
    - sip_name           VARCHAR(100)              -- Name (z.B. 'Brief Inland 100g')
    - sip_valid_from     DATETIME                  -- Gültig ab
    - sip_valid_to       DATETIME NULL             -- Gültig bis
    - sip_max_weight     DECIMAL(12)               -- Maximalgewicht in g
    - sip_max_length     DECIMAL(12)               -- Maximallänge in mm
    - sip_max_width      DECIMAL(12)               -- Maximalbreite in mm
    - sip_max_height     DECIMAL(12)               -- Maximalhöhe in mm
    - sip_price          DECIMAL(12,2)             -- Preis lokale Währung
    - sip_currency       CHAR(3)                   -- ISO Währungscode

Hinweis: Beim Versand wird automatisch der kleinste passende Tarif gewählt.
Hinweis: Erstelle einen Fremdschlüssel in purchase aus 06 purchase.

Shipping_extra (Zusatzoptionen)

Zweck: Enthält Zusatzoptionen für Versandtarife (carrier- und tarifgebunden).

Felder:
    - six_ID             (PK)
    - car_ID             (FK → carrier)
    - sip_ID             (FK → shipping_tariff)
    - six_name           VARCHAR(100)              -- Name (z.B. 'Express', 'Versicherung')
    - six_price          DECIMAL(12,2)             -- Zusatzpreis
    - six_currency       CHAR(3)                   -- ISO Währungscode
    - six_valid_from     DATETIME                  -- Gültig ab
    - six_valid_to       DATETIME NULL             -- Gültig bis

Fees (Shop-Gebühren)

Zweck: Enthält shop-interne Gebühren, unabhängig von Versandkosten (nur auf Waren berechnet).

Felder:
    - fes_ID             (PK)
    - fes_name           VARCHAR(100)              -- Gebührenname
    - fes_threshold      DECIMAL(12,2)             -- Mindestwert, ab dem die Gebühr greift
    - fes_percentage     DECIMAL(5,2)              -- Prozentsatz (z.B. 2.00 = 2%)
    - fes_valid_from     DATETIME                  -- Gültig ab
    - fes_valid_to       DATETIME NULL             -- Gültig bis

Hinweis: Fremdschlüssel muss in purchase aus 06 purchase gesetzt werden.