Anmelden (Benutzer + Passwort)
Login gegen Benutzername/Passwort, liefert Zugriffs- und Erneuerungs-Token
Funktionen · Plattform & Betrieb
Hier steht alles, was einmal eingestellt wird und danach für den ganzen Betrieb gilt: Wie man sich anmeldet, was das Haus heißt und wie es aussieht, über welches Postfach Mails hinausgehen, welche Steuersätze und Zahlarten gelten, welche Bereiche überhaupt sichtbar sind. Dazu gehört die Ersteinrichtung eines frischen Systems, ein Assistent, der durch die Pflichtangaben führt, und eine Ampel, die zeigt, was noch fehlt. Und es gehört das dazu, was man erst braucht, wenn etwas klemmt: ein Protokoll aller wichtigen Handlungen, eine Systemzustandsanzeige und Alarme, die jemanden rufen. In der Cloud entscheidet dieser Bereich außerdem, welcher Betrieb hinter einer Adresse steckt — jeder Kunde bekommt seine eigene Unteradresse und seine eigenen Daten.
Stammdaten des Betriebs zentral pflegen.
Echte Oberfläche
Keine Stockmotive: Die Aufnahmen stammen aus den reproduzierbaren DiKAS-Demos und zeigen die jeweilige Funktion im Produkt.
Vollständiger Überblick
Alle folgenden Punkte stammen aus dem gegen den Programmcode geprüften Funktionskatalog.
Login gegen Benutzername/Passwort, liefert Zugriffs- und Erneuerungs-Token
Nach dem Passwort ein 6-stelliger Code aus der Authenticator-App; Zwischenticket gilt 5 Minuten, max. 5 Fehlversuche
Jeder Benutzer trägt einen Stempel (User.SecurityStamp); der Zugangstoken trägt ihn als Claim sec, der Erneuerungs-Token als Feld stm. Passt er nicht mehr, ist die Sitzung sofort zu Ende — ohne Sitzungsliste, auf jedem Gerät. Erneuert bei Passwortwechsel, Deaktivierung, Login-Sperre, Rollen-/Rechteänderung, Löschen und dem automatischen Austrittslauf
POST api/v1/staff/{id}/sessions/revoke (Admin/SupportAdmin) — für verlorene Tablets und weitergegebene Passwörter. Setzt einen neuen Stempel; das Passwort bleibt, der Mitarbeiter kann sich sofort neu anmelden. Bedienweg seit 06.09.2026: Knopf „Alle Sitzungen abmelden" im Reiter Sicherheit der Personalmaske — auf dem EIGENEN Datensatz steht dort bewusst nur ein Hinweis (s. 14)
Geheimnis erzeugen, per Code bestätigen und damit scharf schalten
Login über NFC-/RFID-Karte statt Passwort
Erneuerungs-Token (auch als HttpOnly-Cookie) gegen neues Token-Paar tauschen, Logout
Angemeldeten Benutzer abfragen, Passwort ändern, Anzeigesprache und UI-Skalierung setzen
Wörterbuch nur aus österreichischen Begriffen (Bankomat, Kassa, Beleg, RKSV, BMD, UID-Nummer) über dem deutschen Satz; wählbar im Umschalter, per Geräte-Sprache de-AT oder automatisch auf Instanzen mit Fiscal:Country=AT
Zentrale Betriebskonfiguration: Zahlarten, Währung, Steuersatz-Zeiträume, Drucker, Terminals, Modulschalter sowie die standardmässig ausgeschaltete Rückfrage, ob eine freie Bonuskarte dem ausgewählten Kunden zugeordnet werden soll (AskAssignBonusCardToCustomer; unter Betrieb → Bonus)
Unter Finanzen → Steuersätze hat jede Periode neben Normal/Ermässigt jetzt „Stark ermässigt %" (SuperReduced, Steuerklasse 2: ES 4 %, CH 3,8 %) und „Steuerbezeichnung" (TaxName: leer = „MwSt", CH „MWST", ES „IVA"). Die Bezeichnung wird an EINER Stelle aufgelöst — TaxRateHelper.ResolveTaxName(periods, date) — und von Textbon (Kundenbeleg, Bewirtungsbeleg, Tagesabschluss), Grafik-Bon (GraphicBonReceiptData.TaxName, gesetzt im Mapper) und Rechnungs-PDF (InvoicePdfLabels.MitSteuername) gelesen. TaxRatePeriod.Label ist der Periodenname („Standard") und erscheint auf keinem Beleg. Die Maske schickt JEDES Feld zurück (leerer dritter Satz = 0 = ausdrücklich „gibt es nicht"; null hiesse dem Server „behalte den gespeicherten Wert").
MainCurrency steuert die Anzeige-Währung der Web-Oberfläche: formatEur() hängt das aktive Symbol an ('€' nur für EUR, sonst ISO-Code, z. B. "12,50 CHF"), currency-Pipes laufen ohne EUR-Literal über DEFAULT_CURRENCY_CODE, die Gäste-Strecke (formatShopMoney) folgt mit; gespeist über den Operational-Config-Load, letzter Code in localStorage gecacht
Mandanten-Einstellung für die Rappenrundung (CH 0.05, sonst 0) — durchgereicht über Domain, Query, Update-Command, Controller-Mapping, Request/Response und config.model.ts (Full-Replace-Maske: ein Feld, das an einer Stelle fehlt, wird bei jeder Speicherung genullt; OperationalConfigControllerMappingTests pinnt es). Noch ohne Auswertung im Kassencode — der CH-Demo-Seed setzt 0.05, gerundet wird derzeit nirgends (CH-MVP T2-Rest)
OperationalConfig.CashRoundingUnit (decimal, Default 0 = keine Rundung; CH-Seed 0.05) rundet an der Kasse nur den BAR-Zahlbetrag auf die kleinste Münze (Rappenrundung). Wird wie MainCurrency durchgereicht: Request → Command (Validator ≥ 0) → Entity → Query → Response → FE config.model.ts (cashRoundingUnit); Maske Betrieb → „Währung & Steuer" → Auswahl „keine Rundung / 0.05 / 0.10". Full-Replace: fehlt das Feld in einer Mapping-Richtung, springt es beim nächsten Speichern still auf 0 (Wächter CashRoundingUnitConfigTests, OperationalConfigControllerMappingTests). Wirkung: Katalog 01 Kasse „Rappenrundung"
Externe Webseite als Kassen-Menüpunkt: eingebettet anzeigen oder in neuem Tab öffnen (openMode); die Icon-Auswahl öffnet sich am unteren Fensterrand nach oben und ihr Raster bleibt auf kleinen Bildschirmen scrollbar
Prüft, ob die Zielseite die Anzeige im Kassen-Fenster erlaubt, und nennt den blockierenden Header samt fertiger Server-Zeile
Servernahe Werte: SMTP, Portal, Proxy-Dienste, Rechnungs-Absender, Fussnoten
Abschnitt Einstellungen → Backend → Passkey-Anmeldung (Kundenportal): Schalter, Portal-Domain (leer = die aufgerufene Adresse) und Anzeigename der Passkey-Abfrage. Der Schalter WIRKT — ohne ihn liefern die Passkey-Endpunkte available:false mit Grund PASSKEY_DISABLED, und weder der Knopf auf der Anmeldemaske noch die Karte im Kundenkonto erscheinen
Anzeigeverhalten der Kasse: welche Felder, Sortierungen und Schaltflächen erscheinen
Globale Scrollleisten sind 11 px breit; Haupt- und Unterreiter bleiben bei jeder Breite einzeilig horizontal scrollbar, sodass auch der letzte Reiter erreichbar ist
Admin-Maske mit sechs Kategorien (Kasse, Hardware, Druck, Betrieb, Finanzen, System) und Unterreitern
Schalter je Arbeitsplatz, nur mit Admin-Rolle — ohne eingerichteten Arbeitsplatz gilt die Geräte-Kennung (Owner 25.08.2026: „soll einfach nur funktionieren, ein Klick zum Testen“): der Arbeitsplatz wechselt für eine einstellbare Zeit (Vorgabe 60 Minuten, Obergrenze 240) auf einen frisch provisionierten Demo-Mandanten; im produktiven Mandanten entsteht dabei nichts. Der Start prüft ausdrücklich, dass der Übungsmandant angelegt wurde (X-Debug-Tenant → X-Tenant-Id); antwortet das Übungssystem nicht oder ohne diesen Nachweis, startet der Modus sichtbar nicht (503 TRAINING_DEMO_UNREACHABLE) statt in den Echtbetrieb zurückzufallen. Vorgabe AUS (TrainingMode:Enabled=false) — der Betreiber schaltet je Umgebung ein
Das Seed-Profil des Übungsmandanten kommt aus dem BETRIEB, nicht aus einer festen Einstellung: Disco eingeschaltet → club, Tische vorhanden → gastro, sonst basic. Eine ausdrückliche Einstellung (TrainingMode:DemoMode) schlägt weiterhin alles; ein Lesefehler verhindert die Übung nicht, sie wird dann eine Basis-Demo. 🪤 Das Disco-Profil heißt club — ein disco gibt es in DemoSeedProfiles.KnownModes NICHT, ein Tippfehler fällt still auf ein anderes Profil zurück. Gelesen wird der echte Zustand, nicht die Lizenz: man kann Tische lizenziert haben und keine angelegt
Gibt es keinen Arbeitsplatz, ist die Geräte-Kennung der Sitzungsschlüssel. Vorher brach der Start ab — bei null eingerichteten Arbeitsplätzen eine Sackgasse: die Auswahl in den Kasseneinstellungen steht unter @if (workplaces().length > 0), die Pille im Kopf unter @if (currentWorkplace()), beide erscheinen also nie. Start, Status und Stopp benutzen DENSELBEN Schlüssel — zwei wären eine Übung, die unter einem Namen startet und unter einem anderen gesucht wird
Nicht wegklickbarer Balken mit Restzeit, farbiger Rahmen um die ganze Oberfläche und fünf Übungsaufgaben (Bestellung mit zwei Gängen, Rechnung splitten, Storno, Gutschein einlösen, Tagesabschluss ansehen), de+en. Ab T-5 min warnt der Balken, beim Ablauf steht ein Hinweisschirm — kein stummer Wechsel mitten aus einem offenen Bon. Die Markierung hängt am Host (Übungs-Subdomain), nicht am Browser-Speicher
Diagonalaufdruck „ÜBUNG — kein Beleg" auf jedem Bon einer Übungssitzung. Greift nur auf einer Demo-Instanz UND mit gesetztem Übungs-Kopf — ein echter Beleg kann ihn nicht bekommen. Gestempelt werden nur reine Textzeilen; bleiben zu wenige davon übrig (ESC/POS-Schriftbefehle inline), entfällt die Diagonale, der Balken bleibt, und der Dekorierer protokolliert eine Warnung
Was nur an diesem Gerät gilt: Drucker, Terminal, Arbeitsplatz, Sprache, Zweitbildschirm und auf der Linux-Appliance die Wahl zwischen DiKAS- und OSD-Systemtastatur
Theme, Marken- und Akzentfarbe, Schriften, Claim, Logo; whiteLabel erstreckt es auf Plattform-Dokumente
Logo hochladen, ausliefern, löschen (auch anonym abrufbar für Login und Belege)
Postfach für ausgehende Mails hinterlegen, Absender und Fusszeile setzen
Zu einer Domain die passenden Servereinstellungen vorschlagen
Probemail an eine Adresse schicken, um die Einstellungen zu prüfen
Betreff und HTML-Text je Vorgang (Rechnung, Mahnstufen 1-3, eigene) und je Sprache
Kundenmails stilllegen oder auf eine Adresse umleiten — wirkt nur, wo das Gate gesetzt ist
Eingangspostfächer anlegen, testen und abrufen (Grundlage für Beleg-Einlesen)
Öffentlicher Endpunkt für Formulare der Website; leitet als Mail an die hinterlegte Zieladresse weiter
Schlüssel anlegen, umbenennen, neu erzeugen, löschen; Zugriffsart je Schlüssel
In der Cloud bestimmt die Unteradresse den Betrieb; der Lizenzserver liefert Datenbank-Prefix und Zugangsdaten
Positiv-, Negativ- und Stale-Cache plus Circuit-Breaker, damit ein langsamer oder ausgefallener Lizenzserver den Betrieb nicht anhält
Pro Unteradresse eine eigene Demo-Datenbank aus einem Modus-Master, Aufräumen nach Inaktivität
Frisches System: Kasse installieren, testen, Betragsanzeige-Modus oder Lizenz erwerben
Anonymer Status eines frischen Systems und Aktivierung mit dem Lizenzschlüssel
Öffentliche Seite /activate: Bestandskunde gibt Lizenznummer und Passwort ein, das System wird freigeschaltet
Eigene Ansichten, wenn die Lizenz fehlt oder die Next-Umstellung noch läuft
Live berechneter Einrichtungsstand mit wichtigstem offenen Punkt; wegklickbar bis sich der Punkt ändert
healthz für den Loadbalancer, ready mit Datenbankprüfung, version mit Bau-Stand
Liefert den Online-Namen der Instanz an die Oberfläche
Anonyme Auskunft, ob die Instanz auf DiKAS Next umgestellt bzw. gerade in Umstellung ist
Aggregierter Zustand von TSE, Bondrucker, EC-Terminal und Hardware-Agent für die Admin-Dashboard-Ampel
Welche Feature-Pakete geladen und welche Module lizenziert sind — steuert das Ein-/Ausblenden im Frontend. tables gilt dabei als Kassen-/Gastro-Nachweis und impliziert finance; dadurch bleiben Normal/Experte und die Aktivierung von Lager/QR-Modulen sichtbar
Tagesweise, seitenweise Liste aller protokollierten Handlungen, neueste zuerst
Unbehandelte Fehler der Oberfläche (Template, undefined, abgelehnte Promises) melden sich gedrosselt beim Server und tauchen damit im täglichen Fehlerbericht auf (SourceContext=ClientError); höchstens 1 Meldung/10 s und je Nachricht einmal, ohne Personenbezug
Vorhandene Protokolltage auflisten und als Datei ziehen (nur Admin)
Kompakte Protokollansicht direkt im Kassenbereich
Alarm mit Typ, Farbe, Ton und Ort auslösen, bestätigen, schließen; Eskalationszähler
Alarmtypen pflegen, Verlauf und Kennzahlen ansehen
Aktive Alarme im Kassenbereich sehen und quittieren
JWKS unter .well-known/jwks.json für die Prüfung ausgestellter Proxy-Token
Rechnungs- und weitere Vorlagen hochladen, herunterladen, löschen, Vorschau
Anonym abrufbare Adressen (Shop, Bestellung) und Tracking-Einstellungen für die Oberfläche
Verborgene Diagnose-Funktion: sammelt Lizenz- und Systemdaten und legt sie als GitLab-Issue an
Operator-Konsole: Tickets aller Kunden einsehen, beantworten, Status setzen, löschen (Soft-Delete mit Protokoll). Nur Admin/SupportAdmin
Telefon-Fall: der Support eröffnet ein Ticket für den anrufenden Kunden
Lieferschein zum Warenanteil der zugehörigen Bestellung — nur Hardware-Positionen, Lizenz/Paket/Add-ons sind Software und kommen nicht auf den Beleg. Seit Etappe W4 (07.09.2026) ein GESPEICHERTER Beleg mit Nummer LS-0001, PDF-Ablage am Dokument und Verweis SupportTicket.DeliveryNoteId. Vorher war er ephemer: nicht gespeichert, ohne Nummer, ohne Spur — wer fragte „was haben wir dieser Firma am 3. März geschickt?", bekam keine Antwort. Ein zweiter Druck liefert denselben Beleg und dasselbe PDF (Regel C3) statt eine neue Nummer zu ziehen
Freitext aus dem Hilfe-Panel plus automatische technische Diagnose, per Mail an Support:ProblemReportEmail
Eigener Reiter (Betrieb → Lager) mit zwei Feldern: Seriennummern-Präfix und Garantie-Vorgabe. Etappe W0 (07.09.2026, Owner-Entscheid): von 17 auf 2 geschrumpft — die sechs Nummernkreis-Zähler bekommen eigene Serien über ISequenceService (Konfliktwiederholung und Bestandsabgleich, die ein Zähler in der Konfiguration beide nicht hat). Korrektur 07.09.2026 (W1): hier stand InvoiceSeriesService — das ist die Präfix-Konfiguration für RECHNUNGEN und gleicht gegen CustomerInvoice.InvoiceNumber ab; gemeinsam ist die Mechanik, nicht das Dokument, s. Application/Common/Nummernkreis.cs. Erste gebaute Serie: die Lieferantennummer LFR-0001 (W1), zweite die Bestellnummer BES-0001 (W2), die acht DHL-Felder sind ersatzlos gefallen (Versand zunächst ohne Carrier). Etappe W5 (07.09.2026) hat das eingelöst und dabei bewusst KEINEN Schalter „Carrier" nachgezogen: ein Schalter mit genau einem zulässigen Wert wäre wieder eine Fläche ohne Wirkung (Regel B2). Die Wahl der Versandumsetzung steht in einer DI-Zeile (IVersanddienst → ManuellerVersand), und der Lieferschein trägt hinterher in ShippingProvider, welche es war — gemessen statt behauptet. Kommt ein echter Carrier, kommt mit ihm der Schalter, der dann etwas zu schalten hat, s. 07 Lager & HACCP. Damit entfällt auch 400 WAREHOUSE_NUMBER_DECREASE, und der Vertrag trägt kein Geheimnis mehr. Seit Etappe W3 sichtbar, gebunden an das Modul wawi (settings.component.ts): die interne Seriennummer entsteht aus QrPrefix, das Garantieende aus DefaultWarrantyMonths — beides beim Wareneingang serialisierter Artikel. Und seit Etappe W6 hat DefaultWarrantyMonths einen ZWEITEN Leser: die Garantieprüfung der Reklamation nimmt es als Rückfall, wenn am Gerät kein Garantieende steht — dann zählt Lieferdatum + Hausfrist (Features/ERP/ClaimGarantie.cs). 0 Monate heißt „dieses Haus führt keine Garantie" und ergibt kein Datum — die Reklamation antwortet dann „nicht feststellbar" statt „abgelaufen". Bis W2 stand der Reiter bedingungslos auf unsichtbar, weil beide Werte keinen Leser hatten (Regel B2); wer ihn mit W1 aufgemacht hätte, hätte eine Maske ohne Wirkung freigeschaltet. 🪤 Auf Demo-Mandanten ist er damit sichtbar — die Demo-Lizenz gewährt jeden GatedKey
Unter Hardware → Zahlungsoptionen stehen Kartenterminals sowie die gemeinsamen Stripe-/PayPal-Zugangsdaten. Eigene Unterreiter trennen EC, Stripe und PayPal: EC ist immer sichtbar; Stripe/PayPal erscheinen nur, sobald ein aktiver Weg sie braucht (QR-Tisch/Selbstbezahlen, Online-Abholung, Lieferservice, Reservierungsanzahlung, Disco-Checkout oder Stripe-Terminal) oder bereits Zugangsdaten gespeichert sind. Ohne Online-Anbieter entfällt die Reiterleiste und EC steht direkt da. Die jeweilige Aktivierung/Vorkasse bleibt beim Bestellweg. SumUp liegt ebenfalls unter Hardware → SumUp, Bizum/Redsys nur auf ES unter Kasse → Bizum. Geheimnisse: verschlüsselt gespeichert, Antwort nur als Has…-Marker, leeres Eingabefeld = beibehalten
Löscht seit 04.09.2026 (Owner: „alles noch entfernen") ALLE Bewegungsdaten hart: Kasse (Belege, Zahlungen, Schichten, Tagesabschlüsse, offene Bons, Ausgaben, Eingangsbelege, Gutscheine, Konto-/Punktebuchungen, TSE-Transaktionen, Trinkgeld-Konten, aus Mails erfasste Eingangsbelege), Bestellwege (Online-, Liefer-, Selbstbestellung, Gast-Feedback), Disco (Tageslog, Gäste, öffentlicher Checkout), Bank (Umsätze, Auszüge, Import-Sitzungen, Überweisungen samt Vorlagen und Echtzeit-Bestätigung, Bizum-Sitzungen), Faktura (Rechnungen, Sammelrechnungen, Zahlungsjournal, Mahnläufe, Angebote, Abos, Abo-Lauf-Sperre), Kommunikation (WhatsApp-Verläufe und -Nachrichten, Mail-Warteschlange, Mailing-Spur), Lager (Buchungen, Inventuren, Bestellungen), Betrieb (Dienstplan samt Quittungen und Tauschanträgen, Abwesenheiten, Zeiterfassung, HACCP, Tischreservierungen, Ressourcen-Sperren, Werkstattaufträge) sowie die Bewegungsdaten der Feature-Module Hotel (Folios, Reservierungen, Meldescheine, Hausdame, Zimmersperren, Kanal-Meldungen), BookingEngine (Buchungen, Tischreservierungen) und Ticketing (Tickets). Setzt die zugehörigen Nummernkreise auf 1, Kundensalden auf 0, Tische auf frei, Inventurlisten auf 0. Sichtbar bis 500 Belege, hart gesperrt sobald ein Beleg fiskalisch festgeschrieben ist. Betriebs- und Hardwarezuordnungen wie TseHostConfig bleiben erhalten. Nur Admin, nur dikas-next (nicht MAUI)
Kein Treffer in diesem Bereich. Gesamte Website durchsuchen
Oft gesucht
Marketing-Cookies erlauben?
Wir würden gerne mit Google Ads messen, welche Anzeigen zu einer Anmeldung führen. Dafür werden Cookies gesetzt und Daten an Google (USA) übertragen — nur mit deiner Einwilligung. Unsere anonyme Reichweitenmessung (Matomo) läuft davon unabhängig. Details und Widerruf in der Datenschutzerklärung.