Zur Startseite Live-Demo

Mehrere Standorte (Multi-Location)

Entscheidungshilfe: Welches Modell ist das richtige für Ihren Betrieb?#

KriteriumMehrere Standorte (Multi-Location)Franchise-Verbund (→ Kapitel 34)
Rechtsträger / BetreiberEin einziger Betreiber (eine juristische Person / ein Mandant)Mehrere rechtlich selbstständige Betreiber (mehrere Mandanten)
SteuernummerEine gemeinsame Steuernummer für alle FilialenEigene Steuernummer pro Betrieb
Kassenbuch & Z-BerichteEin Kassenbuch über alle Kassen des BetreibersGetrennte Kassenbücher und Z-Berichte pro Betreiber
DSFinV-K ExportEin gemeinsamer Export für das GesamtunternehmenGetrennte Exporte pro Rechtsträger / Steuernummer
GoBD-VerfahrensdokumentationEine Verfahrensdokumentation für das GesamtunternehmenEigene Verfahrensdokumentation pro Franchise-Nehmer
Preishoheit & KatalogZentrale Steuerung mit Standort-Preisen (LocationProductOverride)Empfohlene (UVP) oder verbindliche Vorlagen der Zentrale
Steuerliche Konsequenz bei FalschwahlWenn rechtlich getrennte Firmen fälschlicherweise als "Standorte" angelegt werden, droht die Schätzung der Buchführung durch das Finanzamt wegen Datenvermischung!Wenn Filialen desselben Unternehmens fälschlicherweise als "Franchise" angelegt werden, entstehen unnötige Kosten durch mehrfache TSE-Lizenzen und getrennte Mandanten.

Wozu dient das?#

Das Modul für Mehrere Standorte (Multi-Location Central Management) dient Unternehmen, die mehrere Filialen oder Verkaufsstätten unter dem Dach eines einzigen Rechtsträgers (gleiche Steuernummer) betreiben. Es ermöglicht die zentrale Steuerung des Stammdatenkatalogs, das gezielte Übertragen von Sortimentsänderungen an ausgewählte Filialen sowie die konsolidierte Auswertung von Umsatz- und Leistungsdaten über alle Standorte hinweg – bei gleichzeitiger Wahrung individueller Standort-Preise.


Rollen#

  • Administrator (Hauptgeschäft): Legt Standorte an, verwaltet den zentralen Stammdatenkatalog, führt den zentralen Katalog-Push durch und wertet die standortübergreifenden Berichte aus.
  • Filialleiter / Location Manager: Verantwortlich für die operative Betreuung einer konkreten Filiale. Kann lokale Preis-Überschreibungen (LocationProductOverride) im vorgegebenen Rahmen definieren und weist Kassenterminals dem Standort zu.
  • Servicekraft / Bediener: Meldet sich am Terminal einer bestimmten Filiale an. Kassiert und bucht ausschließlich im Kontext der zugewiesenen Filiale (location_id).

Bildschirm für Bildschirm#

1. Backoffice: Standortverwaltung (/api/v1/locations)#

Standortverwaltung Backoffice-Bereich Standorte mit der Schaltfläche Standort hinzufügen, den Standortkarten mit Adresse, Aktiv und Deaktivieren sowie der Küchenampel mit Gelb ab und Rot ab. BACKOFFICE VERLASSEN >_ BACKOFFICE Verwaltung PRODUKT-LAYOUT MENÜ-EDITOR LAGERVERWALTUNG PREIS- & RABATTREGELN RAUMPLAN-EDITOR TISCH-LEBENSZYKLUS GESCHÄFT FISKAL DRUCKEN GERÄTE ROLLEN & BERECHTIGUNGEN KI-ASSISTENT INHABER-DASHBOARD SCHICHTVERWALTUNG KARTENABSTIMMUNG DATENEXPORTE NEUER MANDANT QR-CODES KUNDEN STANDORTE GUTSCHEINE ARBEITSZEIT KORRIGIEREN MARKETING PMS FRANCHISE BRANDING Standortverwaltung Konfigurieren und fügen Sie Geschäftsstandorte hinzu. Standort hinzufügen Hauptstandort Musterstraße 1, Musterstadt ID: loc-1 AKTIV Deaktivieren Terrasse Keine Adresse angegeben ID: loc-2 INAKTIV Aktivieren Küchenampel Gelb ab (Min.) 10 Rot ab (Min.) 20 Speichern 1 2 3 4 5
Standortverwaltung mit Standortkarten und Küchenampel
  • 1 Standort hinzufügen öffnet die Maske Neuer Standort mit Standortname und Adresse (optional); Standort erstellen legt ihn an.
  • 2 Eine Karte je Standort mit Name, Adresse (oder Keine Adresse angegeben), ID und dem Status Aktiv oder Inaktiv.
  • 3 Deaktivieren oder Aktivieren schaltet den Standort.
  • 4 Die Karte Küchenampel mit Gelb ab (Min.) und Rot ab (Min.): ab wie vielen Minuten ein Bon im Küchenmonitor gelb oder rot erscheint (→ Kapitel 15).
  • 5 Speichern übernimmt die Schwellen. Die Kasse meldet Küchenampel gespeichert.
  • Standort-Liste: Übersicht aller eingerichteten Filialen mit Name, Adresse, ID und Aktivitätsstatus.
  • Schaltfläche: Standort hinzufügen; in der Maske Standort erstellen.
  • Eingabemaske: Standortname (z. B. Waterfront Bistro), Adresse (optional).

2. Backoffice: Standort-Katalog-Editor & Overrides (LocationProductOverride)#

  • Produkt-Detailansicht: Anzeige des zentralen Stammdatenpreises.
  • Standort-Auswahl: Wählen Sie die Filiale aus, für die abweichende Werte gelten sollen.
  • Eingabefeld Standort-Preis: Eigener Verkaufspreis in EUR für diese Filiale.
  • Schalter Artikel-Abmeldung: Checkbox Vom Standort abgemeldet (is_opted_out).
  • Statusanzeige: Zeigt an, ob der Preis überschrieben (is_overridden = True) oder abgemeldet ist.

3. Backoffice: Zentraler Katalog-Push Dialog (CentralCatalogPushRequest)#

  • Ziel-Standorte: Auswahl aller Filialen oder bestimmter Standorte.
  • Schalter Überschreiben erzwingen: Checkbox Bestehende Standort-Preise überschreiben (override_existing).
  • Schaltfläche: Katalog übertragen (push_catalog).

4. Backoffice: Push-Ausführungsbericht (CentralCatalogPushResponse)#

  • Zusammenfassung: Anzahl übertragener Produkte (pushed_product_count), aktualisierte Standorte (updated_locations), übersprungene Standorte (skipped_locations).
  • Detail-Audit-Log: Detaillierte Liste pro Produkt und Standort mit Grund für das Überspringen (location_opted_out oder location_override_active).

5. Backoffice: Standortübergreifendes Analytics-Dashboard (CrossLocationReportResponse)#

  • Kopfleiste Standort-Umschalter: Auswahl zwischen einzelnen Filialen oder Alle Standorte.
  • Gesamtkennzahlen: Summe aus Bruttoumsatz, Bestellungen, Gedecken (PAX), Rabatten und Stornos.
  • Filial-Vergleichstabelle: Anzeige pro Filiale mit Umsatz, Bon-Anzahl, Durchschnittsbon und Umsatzanteil in Prozent (share_of_tenant_revenue_percent).

Schritt für Schritt (mit Verzweigungen)#

Ablauf 1: Filiale anlegen und Kassen zuweisen#

  1. Gehen Sie im Backoffice zu Einstellungen > Standorte (/api/v1/locations).
  2. Tippen Sie auf Standort hinzufügen und geben Sie den Namen (z. B. Hafen-Filiale) ein.
  3. Nach dem Speichern ist die Filiale aktiv.
  4. Weisen Sie Kassenterminals unter Einstellungen > Geräte dem neuen Standort zu. Sämtliche Buchungen dieses Terminals tragen fortan automatisch die entsprechende location_id.

Ablauf 2: Zentraler Katalog-Push & Standort-Preise (Die 4 Prioritätsregeln)#

Beim Übertragen von Artikeländerungen aus der Zentrale an die Standorte (POST /locations/catalog/push) wendet das Kassensystem folgende strikte Prioritätsregeln an:

  1. Priorität 1: Opt-out (Abmeldung) gewinnt immer: Hat eine Filiale einen Artikel explizit abgemeldet (is_opted_out = True), wird der Artikel bei dieser Filiale niemals überschrieben oder aktiviert – selbst wenn beim Push die Option override_existing = True aktiviert ist. Anweisungen des Standorts haben absoluten Vorrang.
  2. Priorität 2: Lokaler Standort-Preis schützt vor regulärem Push: Hat eine Filiale für ein Produkt einen eigenen Preis festgelegt (is_overridden = True), überspringt ein Standard-Push diesen Artikel für den betroffenen Standort (location_override_active). Dadurch wird verhindert, dass bewusste Filialpreise (z. B. an Flughafen- oder Bahnhofsstandorten) versehentlich durch zentrale Preise überschrieben werden.
  3. Priorität 3: Erzwungener Push (override_existing = True): Mit dieser Option werden bestehende Standort-Preise bewusst durch die zentralen Stammdaten ersetzt. Ein aktives Opt-out kann jedoch auch dadurch nicht aufgehoben werden.
  4. Priorität 4: Standard-Push: Fehlt eine lokale Überschreibung, wird die Änderung für den Standort übernommen.

Ablauf 3: Standortübergreifende Berichte auswerten#

  1. Stellen Sie den Standort-Umschalter in der Kopfleiste auf Alle Standorte.
  2. Das System führt eine hochperformante Datenbankabfrage mit SQL GROUP BY Order.location_id durch.
  3. Verzweigung:
    • Standort mit Umsatz: Die Kennzahlen werden aufaddiert und der Prozentanteil am Gesamtumsatz (share_of_tenant_revenue_percent) berechnet.
    • Standort ohne Umsatz im Zeitraum: Die Filiale wird sauber mit 0 € Umsatz und 0 Bons in der Tabelle aufgeführt, ohne den Gesamtbericht zu beeinträchtigen.

Was passiert im Hintergrund#

Alle Standorte eines Betreibers teilen sich dieselbe Mandanten-ID (tenant_id). Sämtliche Verkaufsdaten, Schichten und Tischpläne tragen zusätzlich die jeweilige location_id.

Katalogabfragen an den Kassenterminals (CatalogService.get_products) prüfen bei jeder Anfrage, ob für die jeweilige location_id ein Eintrag in location_product_overrides existiert, und liefern automatisch den korrekten Standortpreis an das Terminal.

Die standortübergreifende Berichterstattung nutzt hochperformante Datenbankabfragen mit SQL GROUP BY Order.location_id innerhalb eines einzelnen Datenbankaufrufs. Dadurch werden Auswertungen auch bei zahlreichen Filialen ohne Verzögerung generiert.


Häufige Probleme#

1. Location not found#

  • Ursache: Die übergebene Standort-ID (location_id) existiert nicht in der Datenbank des Mandanten.
  • Lösung: Überprüfen Sie die Standort-ID unter Einstellungen > Standorte.

2. Start date must be before or equal to end date#

  • Ursache: Beim Aufruf des standortübergreifenden Berichts (CrossLocationReportResponse) wurde ein Startdatum gewählt, das zeitlich nach dem Enddatum liegt.
  • Lösung: Korrigieren Sie den Datumsfilter im Bericht.

3. No open shift for this location#

  • Ursache: Es wurde versucht, an einem Kassen-Terminal eine Bestellung abzuschließen, obwohl für diese location_id derzeit keine aktive Standortschicht geöffnet ist.
  • Lösung: Öffnen Sie zuerst eine Schicht für den entsprechenden Standort (→ Kapitel 12).

4. Invalid, inactive, or unresolvable location_id for tenant#

  • Ursache: Das Kassenterminal ist einer location_id zugewiesen, die deaktiviert (is_active = False) oder einem anderen Mandanten zugeordnet ist.
  • Lösung: Aktivieren Sie den Standort im Backoffice oder ordnen Sie das Terminal einem aktiven Standort zu.

5. Location does not belong to your tenant#

  • Ursache: Ein Benutzer hat versucht, auf Daten oder Berichte einer Filiale zuzugreifen, die zu einem fremden Mandanten gehört.
  • Lösung: Überprüfen Sie die Anmeldung und Mandanten-Zuordnung des Benutzers.

6. Location not found or access denied#

  • Ursache: Fehlende Berechtigung für Echtzeit-Nachrichten (WebSockets) für den angeforderten Standort.
  • Lösung: Vergewissern Sie sich, dass der angemeldete Bediener Zugriffsrechte auf die Filiale besitzt.

7. Location is closed at the requested reservation time#

  • Ursache: Es wurde versucht, eine Tischreservierung außerhalb der für diesen Standort hinterlegten Öffnungszeiten vorzunehmen.
  • Lösung: Überprüfen Sie die hinterlegten Standort-Öffnungszeiten in den Reservierungseinstellungen.

8. Some products do not belong to this tenant or do not exist: {missing} (oder Push-Überspringen durch location_override_active)#

  • Ursache: Beim zentralen Katalog-Push wurden Produkt-IDs übergeben, die im Mandantenstamm nicht existieren, oder der Push wurde für eine Filiale übersprungen, weil dort ein lokaler Standortpreis aktiv ist.
  • Lösung: Prüfen Sie den Ausführungsbericht des Katalog-Pushs (CentralCatalogPushResponse). Aktivieren Sie bei Bedarf die Option override_existing = True, um lokale Preise bewusst zu überschreiben.

Grenzen#

  • Alle Standorte in diesem Modul müssen zwingend zum selben Rechtsträger (gleiche Steuernummer) gehören. Sollen rechtlich selbstständige Betriebe verwaltet werden, muss das Franchise-Modul genutzt werden (→ Kapitel 34).
  • Standort-Überschreibungen müssen bei Bedarf manuell im Standort-Katalog zurückgesetzt werden, um wieder automatische Updates aus dem Hauptkatalog zu erhalten.

Dieses Kapitel gehört zum Merkuron-Handbuch für Inhaber und Servicepersonal.