Design
Preisvererbung
In diesem Kapitel erfährst du, wie das Preissystem von CampsiteHero funktioniert: Wie Preise auf zwei Ebenen definiert werden, wie Saison-Preise Vorrang haben und welche Kombination am Ende gilt.
Währung: Alle Preise in der Preismatrix sind in der Platz-Währung gespeichert (z.B. € oder CHF). Welche Währung dein Campingplatz verwendet, siehst du unter Einstellungen → Campingplatz → Stammdaten. Mehr dazu im Kapitel Währung.
Übersicht
CampsiteHero nutzt ein Vererbungssystem für Preise. Das bedeutet: Du musst Preise nicht für jede einzelne Parzelle separat eingeben. Stattdessen kannst du globale Grundpreise setzen und diese bei Bedarf auf Parzellen-Ebene überschreiben.
Preise können auf drei Ebenen definiert werden:
| Ebene | Wo konfigurieren | Gilt für |
|---|---|---|
| Campingplatz | Tarife & Regeln → Preise | Alle Parzellen (globale Basis) |
| Kategorie | Tarife & Regeln → Preise → Kategorie-Spalte | Alle Parzellen dieser Kategorie |
| Parzelle | Parzellen → Parzelle öffnen → Tab Preise | Nur diese einzelne Parzelle |
Grundprinzip: Die spezifischere Ebene hat Vorrang. Ein Kategorie-Preis überschreibt den Campingplatz-Preis, ein Parzellen-Preis überschreibt den Kategorie-Preis.
Zusätzlich gibt es pro Ebene zwei Preistypen:
- Basis-Preis – gilt, wenn keine Saison aktiv ist (ganzjähriger Fallback)
- Saison-Preis – gilt in einem definierten Zeitraum (z.B. Hauptsaison Juli–August)
Der Grundpreis kennt keine Campingplatz-Ebene. Den Übernachtungspreis einer Parzelle setzt du auf der Parzelle oder auf der Kategorie – einen platzweiten Grundpreis für alle Parzellen gibt es bewusst nicht. Personen- und Vehikelpreise dagegen haben alle drei Ebenen.
Die Vererbungshierarchie
Campingplatz (globale Basis)
└── Kategorie (Override für alle Parzellen dieser Kategorie)
└── Parzelle (Override für genau diese Parzelle)Jede Ebene kann Preise setzen oder leer lassen. Ist eine Ebene leer, wird die nächst höhere Ebene verwendet.
Tabellarische Übersicht
| Parzelle hat eigenen Preis? | Kategorie hat Preis? | Campingplatz hat Preis? | Ergebnis |
|---|---|---|---|
| ✅ Ja | beliebig | beliebig | Parzellen-Preis gilt |
| ❌ Nein | ✅ Ja | beliebig | Kategorie-Preis gilt |
| ❌ Nein | ❌ Nein | ✅ Ja | Campingplatz-Preis gilt |
| ❌ Nein | ❌ Nein | ❌ Nein | Kein Preis definiert |
Die Auflösungsreihenfolge
Für jede Preisanfrage (Kombination aus Saison und Gästekategorie/Vehikeltyp) arbeitet das System eine feste Prüfliste ab. Der erste Treffer gewinnt – danach wird nicht weitergesucht.
Die Liste ist nach Ebenen geordnet, und innerhalb einer Ebene steht der Saison-Preis vor dem Basis-Preis:
Parzellen-Grundpreis
| # | Geprüft wird |
|---|---|
| 1 | Parzelle – Saison-Preis |
| 2 | Parzelle – Basis-Preis |
| 3 | Kategorie – Saison-Preis |
| 4 | Kategorie – Basis-Preis |
Findet sich nichts, hat die Parzelle keinen Grundpreis – und ist damit nicht buchbar (siehe Ohne Grundpreis nicht buchbar).
Personen- und Vehikelpreis
| # | Geprüft wird |
|---|---|
| 1 | Parzelle – Saison-Preis |
| 2 | Parzelle – Basis-Preis |
| 3 | Kategorie – Saison-Preis |
| 4 | Kategorie – Basis-Preis |
| 5 | Campingplatz – Saison-Preis |
| 6 | Campingplatz – Basis-Preis |
Findet sich nichts, kostet diese Gästekategorie bzw. dieser Vehikeltyp nichts (0,00 €).
Flussdiagramm: Personen- und Vehikelpreis
mermaid
flowchart TD
A([Preisanfrage:\nSaison + Gästekategorie]) --> B{Parzelle hat\nSaison-Preis?}
B -- Ja --> R1([Preis verwenden\nQuelle: Parzelle / Saison])
B -- Nein --> C{Parzelle hat\nBasis-Preis?}
C -- Ja --> R2([Preis verwenden\nQuelle: Parzelle / Basis])
C -- Nein --> D{Kategorie hat\nSaison-Preis?}
D -- Ja --> R3([Preis verwenden\nQuelle: Kategorie / Saison])
D -- Nein --> E{Kategorie hat\nBasis-Preis?}
E -- Ja --> R4([Preis verwenden\nQuelle: Kategorie / Basis])
E -- Nein --> F{Campingplatz hat\nSaison-Preis?}
F -- Ja --> R5([Preis verwenden\nQuelle: Campingplatz / Saison])
F -- Nein --> G{Campingplatz hat\nBasis-Preis?}
G -- Ja --> R6([Preis verwenden\nQuelle: Campingplatz / Basis])
G -- Nein --> R7([Kein Preis gefunden])Wichtige Regel: „Ebene schlägt Saison"
Dies ist die wichtigste Eigenschaft der Auflösung: Die speziellere Ebene gewinnt immer – auch mit einem Basis-Preis gegen einen Saison-Preis der allgemeineren Ebene.
Hat eine Parzelle einen eigenen Basis-Preis, gilt dieser das ganze Jahr – auch in der Hauptsaison, selbst wenn der Campingplatz für diese Saison einen anderen Preis hinterlegt hat.
Zusammengefasst:
- Erst die Ebene (Parzelle → Kategorie → Campingplatz), dann innerhalb der Ebene Saison vor Basis
- Ein Basis-Preis auf Parzellen-Ebene hat Vorrang vor einem Saison-Preis des Campingplatzes
Diagramm: Ebene schlägt Saison
mermaid
flowchart LR
subgraph Szenario["Szenario: Hauptsaison aktiv"]
direction TB
PAR["Parzelle\nNur Basis-Preis: 12 €\nKein Saison-Preis"]
CS["Campingplatz\nHauptsaison-Preis: 15 €"]
end
PAR -->|"Parzellen-Basis-Preis gefunden!"| ERG["Ergebnis: 12 €\nvon der Parzelle"]
CS -.->|"wird nicht mehr geprüft"| ERG
style ERG fill:#22c55e,color:#fff
style PAR fill:#3b82f6,color:#fffDer Hauptsaison-Preis des Campingplatzes (15 €) kommt nicht zum Zug, weil die Prüfliste schon beim Basis-Preis der Parzelle (12 €) endet.
Was heißt das für die Praxis? Sobald du auf einer Parzelle einen Preis setzt, koppelst du sie von den Saison-Preisen darüber ab. Soll sie in der Hauptsaison teurer werden, brauchst du dort einen eigenen Saison-Preis. Willst du das nicht pflegen, lass die Parzelle leer – dann greifen Kategorie und Campingplatz mit ihren Saison-Preisen.
Praxisbeispiele
Beispiel 1: Einfache Vererbung ohne Overrides
Du betreibst einen Campingplatz mit 30 Parzellen in einer einzigen Kategorie „Standard". Du möchtest einheitliche Preise setzen, die für alle gelten.
Konfiguration:
| Ebene | Preistyp | Basis-Preis | Hauptsaison |
|---|---|---|---|
| Kategorie „Standard" | Grundpreis | 12,00 € | 18,00 € |
| Campingplatz | Erwachsener | 5,00 € | 7,00 € |
| Campingplatz | Kind | 2,50 € | 3,50 € |
Alle Parzellen lassen die Preise leer (kein Override).
Ergebnis:
- Im Juli (Hauptsaison): Parzelle 18,00 €, Erwachsener 7,00 €, Kind 3,50 €
- Im März (keine Saison aktiv): Parzelle 12,00 €, Erwachsener 5,00 €, Kind 2,50 €
Vorteil: Eine zentrale Stelle, keine Redundanz.
Warum steht der Grundpreis bei der Kategorie? Weil es für den Grundpreis keine Campingplatz-Ebene gibt. Hast du nur eine Kategorie, ist deren Grundpreis faktisch dein platzweiter Preis.
Beispiel 2: Kategorie-Grundpreis für unterschiedliche Kategorien
Du hast zwei Kategorien – „Premium" und „Standard" – mit unterschiedlichen Parzellenpreisen. Alle Parzellen einer Kategorie sollen denselben Preis haben.
Konfiguration:
| Ebene | Kategorie | Parzelle (Basis) | Hauptsaison |
|---|---|---|---|
| Kategorie | Premium | 18,00 € | 25,00 € |
| Kategorie | Standard | 12,00 € | 16,00 € |
Alle Parzellen lassen die Preise leer und erben von ihrer Kategorie.
Ergebnis für Premium-Parzellen:
- Hauptsaison: 25,00 € (von der Kategorie)
- Außerhalb Saison: 18,00 € (von der Kategorie)
Ergebnis für Standard-Parzellen:
- Hauptsaison: 16,00 € (von der Kategorie)
- Außerhalb Saison: 12,00 € (von der Kategorie)
Vorteil: Preise nach Kategorien gestaffelt, ohne jede Parzelle einzeln zu bearbeiten.
Beispiel 3: Parzelle überschreibt Kategorie-Preis
Du hast eine Sonderparzelle (z.B. mit Seeblick), die generell teurer sein soll als die restlichen Parzellen ihrer Kategorie.
Konfiguration:
| Ebene | Parzelle (Basis) | Hauptsaison |
|---|---|---|
| Kategorie „Standard" | 12,00 € | 18,00 € |
| Parzelle „A-01" (Seeblick) | 15,00 € | 22,00 € |
Alle anderen Parzellen lassen die Preise leer und erben von der Kategorie.
Ergebnis für Standard-Parzellen:
- Hauptsaison: 18,00 € (von der Kategorie)
- Außerhalb Saison: 12,00 € (von der Kategorie)
Ergebnis für Parzelle A-01:
- Hauptsaison: 22,00 € (von der Parzelle – überschreibt Kategorie)
- Außerhalb Saison: 15,00 € (von der Parzelle – überschreibt Kategorie)
Beispiel 4: Die „Ebene schlägt Saison"-Regel in der Praxis
Der erklärungsbedürftigste Fall: Eine Parzelle hat nur einen Basis-Preis, die Kategorie darüber hat zusätzlich einen Saison-Preis.
Konfiguration (Grundpreis):
| Ebene | Basis-Preis | Hauptsaison |
|---|---|---|
| Kategorie „Standard" | 12,00 € | 20,00 € |
| Parzelle „A-01" | 16,00 € | (leer) |
Auflösung im Juli (Hauptsaison aktiv):
- Parzelle → Saison-Preis? Nein
- Parzelle → Basis-Preis 16,00 € gefunden → verwenden
Ergebnis Hauptsaison: 16,00 € (Parzellen-Basis-Preis, nicht die 20,00 € der Kategorie)
Auflösung im März (keine Saison aktiv):
- Parzelle → Saison-Preis? Es ist keine Saison aktiv
- Parzelle → Basis-Preis 16,00 € gefunden → verwenden
Ergebnis außerhalb Saison: 16,00 €
Interpretation: Sobald die Parzelle einen eigenen Preis trägt, ist sie von der Saison-Staffel ihrer Kategorie abgekoppelt – sie kostet ganzjährig 16,00 €. In der Hauptsaison ist sie damit sogar günstiger als eine Parzelle ohne Override (20,00 €).
Möchtest du, dass die Sonderparzelle auch in der Hauptsaison teurer ist, gib ihr explizit einen Hauptsaison-Preis (z.B. 24,00 €). Die Alternative: den Parzellen-Preis wieder entfernen, damit die Kategorie-Staffel greift.
Faustregel: Ein Override auf der Parzelle ist eine Entscheidung „für alle Saisons". Wer Saison-Staffeln nutzen will, pflegt sie auf derselben Ebene mit.
Ohne Grundpreis nicht buchbar
Löst sich für eine Parzelle kein Grundpreis auf – weder auf der Parzelle noch auf ihrer Kategorie –, dann ist sie nicht buchbar:
- Gäste sehen sie nicht mehr in der Buchungsstrecke. Früher erschien sie dort für 0,00 €; das war schlimmer als sie auszublenden.
- Legst du im Desk eine Buchung darauf an oder änderst eine bestehende darauf, wird das abgelehnt: „Für diese Parzelle ist im gewählten Zeitraum kein Grundpreis hinterlegt …".
- Dein Dashboard meldet den Fall unter „Handlungsbedarf": „Aktive Parzellen ohne Grundpreis vorhanden — sie sind für Gäste nicht buchbar." Der Beheben-Link führt direkt zu Tarife & Regeln → Preise.
0,00 € ist kein fehlender Preis. Trägst du bewusst
0ein, bleibt die Parzelle buchbar und kostenlos. Nur eine leere Zelle (–) auf allen Ebenen führt zum Ausschluss.
Einfacher und Fortgeschrittener Modus
CampsiteHero bietet zwei Modi für die Preiskonfiguration:
Einfacher Modus (Standard für neue Campingplätze)
Im einfachen Modus werden nur Basispreise verwendet. Saisons können zwar angelegt werden (z.B. für Öffnungszeiten), aber saisonale Preisunterschiede werden ignoriert. Das vereinfacht die Preispflege erheblich – du legst einen Preis pro Gästekategorie fest, und fertig.
Wann ist der einfache Modus sinnvoll?
- Kleine Campingplätze mit einheitlichen Preisen über das ganze Jahr
- Campingplätze die gerade erst einrichten und später Saisonpreise ergänzen möchten
Fortgeschrittener Modus
Im fortgeschrittenen Modus stehen Basis- und Saisonpreise zur Verfügung. Du kannst für jede Saison (Hauptsaison, Nebensaison etc.) unterschiedliche Preise definieren – auf allen drei Ebenen (Campingplatz, Kategorie und Parzelle).
Umschalten
- Klicke in der Navigation auf Tarife & Regeln → Preise
- Schalte den Toggle Saisonabhängige Preise oben rechts im Seitenkopf ein oder aus
Wichtig: Beim Umschalten gehen keine Daten verloren. Bestehende Saisonpreise bleiben in der Datenbank erhalten. Im einfachen Modus werden sie lediglich nicht angezeigt und bei der Preisberechnung ignoriert. Wenn du zurück in den fortgeschrittenen Modus wechselst, sind alle Saisonpreise wieder da.
Preise konfigurieren
Campingplatz- und Kategorie-Preise setzen
- Wechsle zum gewünschten Campingplatz
- Klicke in der Navigation auf Tarife & Regeln
- Wähle den Abschnitt Preise
- Klicke in die gewünschte Zelle und trage den Preis ein – getrennt nach Basis und Saison
- Bestätige mit Enter oder indem du das Feld verlässt
Die Personen- und Vehikel-Matrizen haben eine Spalte je Kategorie neben der platzweiten Spalte. Trägst du dort einen Preis ein, gilt er für alle Parzellen dieser Kategorie und überschreibt den platzweiten Wert.
Kategorie-Spalten wirken jetzt wirklich. Vor dem Update (August 2026) wurden dort eingetragene Personen- und Vehikelpreise zwar gespeichert, aber bei der Buchungsberechnung ignoriert – gerechnet wurde mit dem platzweiten Preis. Wenn du die Spalten damals befüllt hast, prüfe deine Preise einmal nach: Sie greifen ab sofort.
Hinweis: Nur Betreiber können Campingplatz- und Kategorie-Preise bearbeiten.

Parzellen-Preise setzen
- Öffne die gewünschte Parzelle (Klick auf Pill in der Seitenleiste)
- Wechsle zum Tab Preise
- Trage nur die Preise ein, die du überschreiben möchtest
- Bestätige jede Zelle mit Enter oder indem du das Feld verlässt
Leere Zellen zeigen den geerbten Wert kursiv mit einem Vererbungs-Pfeil. Der Tooltip am Pfeil nennt die Quelle – zum Beispiel „Erbt 8,00 € von Kategorie (Standard-Wiesenplatz)". Auf dem Smartphone steht dieser Hinweis als eigene Textzeile unter dem Wert, weil es dort keinen Hover gibt.
Hinweis: Mitarbeiter können Parzellen-Preise bearbeiten. Campingplatz- und Kategorie-Preise sind nur für Betreiber.

Preis wieder entfernen
Jede Zelle wird sofort gespeichert – es gibt keinen Speichern-Knopf. Zum Entfernen leerst du das Feld und bestätigst mit Enter oder indem du das Feld verlässt. Escape bricht die Bearbeitung ab, ohne etwas zu ändern.
| Eingabe | Ergebnis |
|---|---|
| Feld geleert, die Zelle erbt von keiner höheren Ebene | Der Preis wird gelöscht, die Zelle zeigt – |
| Feld geleert, die Zelle hat einen übergeordneten Wert | Dein eigener Preis wird gelöscht, die Zelle zeigt wieder den geerbten Wert (kursiv) |
- (Bindestrich) | Dasselbe wie ein geleertes Feld |
Feld enthält 0 | Gültiger Preis 0,00 € – wird gespeichert, nicht gelöscht |
ℹ️
–ist nicht dasselbe wie0,00 €:
–bedeutet „für diese Kombination ist kein Preis hinterlegt".0,00 €bedeutet „kostenlos" – ein bewusst gesetzter Preis.
Das gilt für beide oben beschriebenen Wege und für alle Preisarten der Matrix: Gästekategorie-Preise, Vehikelpreise und Kategorie-Grundpreise.
✅ Ein Vertipper löscht nichts mehr. Ist deine Eingabe nicht lesbar (z.B.
abc,€oder12.50mit Punkt statt Komma), erscheint eine rote Meldung an der Zelle und die Zelle bleibt zum Korrigieren offen – gespeichert oder gelöscht wird nichts. Dasselbe gilt für negative Beträge. Früher passierte in diesem Fall wortlos gar nichts.

Kategorie-Grundpreis
Der Kategorie-Grundpreis ist ein Übernachtungspreis, der direkt für eine Kategorie gilt – ohne Gästekategorie- oder Vehikelbezug. Er dient als Basis-Parzellenpreis für alle Parzellen dieser Kategorie.
Wann ist ein Kategorie-Grundpreis sinnvoll?
- Dein Campingplatz hat mehrere Kategorien mit unterschiedlichen Preisen (z.B. Premium-Kategorie: 18,00 € / Nacht, Standard-Kategorie: 12,00 € / Nacht)
- Du willst alle Parzellen einer Kategorie einheitlich bepreisen, ohne jeden Parzellen-Preis einzeln setzen zu müssen
Vererbungskette für den Grundpreis:
| Schritt | Was wird geprüft? | Priorität |
|---|---|---|
| 1 | Parzelle: Saison-Preis | Höchste |
| 2 | Parzelle: Basis-Preis | ↕ |
| 3 | Kategorie: Saison-Preis | ↕ |
| 4 | Kategorie: Basis-Preis | Niedrigste |
Erst die Parzelle vollständig, dann die Kategorie – „Ebene schlägt Saison".

Tipp: Wo setzt du welche Preise?
| Ziel | Empfohlene Ebene |
|---|---|
| Einheitliche Personen-/Vehikelpreise für alle Parzellen | Campingplatz |
| Einheitlicher Grundpreis für alle Parzellen | Kategorie (der Grundpreis hat keine Campingplatz-Ebene) |
| Alle Parzellen einer Kategorie sollen gleich sein | Kategorie |
| Einzelne Sonderparzelle hat abweichenden Preis | Parzelle |
| Alles gleich, nur eine Saison überschreiben | Campingplatz (Saison-Preis) |
| Bestimmte Kategorie in Saison teurer | Kategorie (Saison-Preis) |
| Bestimmte Parzelle in Saison teurer | Parzelle (Saison-Preis) |
Empfehlung: Setze Preise so weit oben wie möglich und überschreibe nur, wo nötig. Je weniger Overrides, desto einfacher die Pflege – und desto weniger Parzellen sind von den Saison-Staffeln abgekoppelt („Ebene schlägt Saison").
Nächste Schritte
- Saisons verwalten – Zeiträume für Saison-Preise definieren
- Parzellen konfigurieren – Individuelle Parzellen-Preise setzen
Hinweis für Entwickler: Bei Änderungen an der Preisvererbungs-Logik müssen sowohl dieses Dokument als auch die Frontend-Komponente
PriceInheritanceInfo.tsxaktualisiert werden. Sieheshared/AGENTS.md→ Abschnitt "Synchronisationspflicht".