Datenbankschemas
Dieses Dokument beschreibt alle in der Anwendung verwendeten Datenbankschemas, einschließlich ihrer Felder und Indizes.
Clients
Die clients-Kollektion speichert Informationen über verschiedene Kunden.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Client-Bezeichner |
code | String | Nein | Optionaler Client-Code |
name | String | Ja | Client-Name |
deleted | Boolean | Ja | Soft-Delete-Flag (Standard: false) |
Branches
Die branches-Kollektion enthält Informationen über die Filialen der Kunden.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Branch-Bezeichner |
clientId | String | Ja | ID des Clients, zu dem diese Branch gehört |
code | String | Nein | Optionaler Branch-Code |
name | String | Ja | Branch-Name |
deleted | Boolean | Ja | Soft-Delete-Flag (Standard: false) |
Projects
Die projects-Kollektion enthält Daten zu einer Inventur einer Filiale.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Projekt-Bezeichner |
branchId | String | Ja | ID der Branch, zu der dieses Projekt gehört (validiert mit idRegex) |
teamId | String | Nein | Dem Projekt zugewiesenes Team |
teamManagerId | String | Nein | Benutzer-ID des zugewiesenen Teamleiters |
projectManagerId | String | Nein | Benutzer-ID des zugewiesenen Projektleiters |
code | String | Nein | Optionaler Projekt-Code |
name | String | Ja | Projektname |
state | String | Ja | Projektstatus (erlaubte Werte: initiated,running,closed,published,archived; Standard: initiated) |
effectiveDate | Date | Nein | Geplantes Startdatum |
startDate | Date | Nein | Tatsächliches Startdatum |
endDate | Date | Nein | Enddatum (muss nach startDate liegen, wenn beide gesetzt sind) |
closedAt | Date | Nein | Zeitpunkt, zu dem das Projekt abgeschlossen wurde |
misc | Object | Ja | Beliebige Metadaten (Blackbox, Standard: {}) |
deleted | Boolean | Ja | Soft-Delete-Flag (Standard: false) |
emailProcessed | Boolean | Nein | Ob die E-Mail-Benachrichtigung über Kundenliefergegenstände gesendet wurde |
matchDataVerifiedEmailSent | Boolean | Nein | Ob die Benachrichtigungs-E-Mail für ungültige Kundendaten gesendet wurde |
notPaid | Boolean | Nein | Gibt an, ob dies ein nicht bezahltes Projekt war |
Indizes
deleted+startDate+endDate- Unterstützt Abfragen, die nach aktivem/gelöschtem Status und Projektzeitraum filternbranchId- Optimiert Abfragen von Projekten, die zu einer bestimmten Branch gehörendeleted+state+emailProcessed- Unterstützt die Filterung von Projekten nach Lebenszyklusstatus und E-Mail-Verarbeitungs-Workflow-Status
Users
Die users-Kollektion speichert Benutzerkontoinformationen und Profile.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Benutzer-Bezeichner |
username | String | Ja | Eindeutiger Benutzername |
emails | Array | Nein | Array von E-Mail-Objekten |
emails[].address | String | Ja | E-Mail-Adresse |
emails[].verified | Boolean | Ja | Ob die E-Mail verifiziert ist |
createdAt | Date | Ja | Datum der Kontoerstellung |
profile | Object | Ja | Benutzerprofilinformationen |
profile.firstName | String | Nein | Vorname des Benutzers |
profile.lastName | String | Nein | Nachname des Benutzers |
profile.preferedLanguage | String | Nein | Bevorzugte Sprache (Standard: 'en') |
profile.birthday | Date | Nein | Geburtstag des Benutzers |
profile.gender | String | Nein | Geschlecht ('Male' oder 'Female') |
profile.organization | String | Nein | Organisationsname |
profile.website | String | Nein | Website-URL |
profile.bio | String | Nein | Biografie |
profile.country | Object | Nein | Länderinformationen |
profile.country.name | String | Ja | Ländername |
profile.country.code | String | Ja | ISO-Ländercode (2 Buchstaben) |
profile.misc | Object | Nein | Sonstige Profildaten |
profile.forceChange | Boolean | Nein | Flag für erzwungene Passwortänderung |
services | Object | Nein | Daten zu Authentifizierungsdiensten (Blackbox) |
teamIds[string] | Array | Nein | Array von Team-IDs, denen der Benutzer angehört |
heartbeat | Date | Nein | Zeitstempel der letzten Aktivität |
deleted | Boolean | Ja | Soft-Delete-Flag (Standard: false) |
currentProjectId | String | Nein | Aktuell aktive Projekt-ID |
type | String | Ja | Benutzertyp: 'full' oder 'temp' (Standard: 'full') |
lastLogIn | Date | Nein | Zeitstempel der letzten Anmeldung |
projectId | String | Nein | Zugehörige Projekt-ID für temporäre Benutzer |
Indizes
teamIds- Indiziert für Abfragen von Benutzern nach Teammitgliedschaftdeleted+username- Indiziert für Abfragen aktiver Benutzer nach BenutzernameprojectId+username+deleted(partieller Filter:projectIdvorhanden)- Wird für Abfragen von Benutzern innerhalb eines bestimmten Projekts verwendet
Text-Indizes
username+profile.firstName+profile.lastName- Volltextsuche nach Benutzernamen
Matches
Die matches-Kollektion speichert Produkt-Match-Informationen. Kollektionen werden dynamisch pro Projekt erstellt.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Match-Bezeichner |
code | String | Ja | Match-Code (indiziert) |
type | String | Ja | Match-Typ (indiziert) |
locationCode | String | Nein | Standortcode |
productCode | String | Nein | Produktcode |
lotCode | String | Nein | Chargencode |
serialCode | String | Nein | Seriencode |
description | String | Nein | Produktbeschreibung |
extra1 | String | Nein | Zusatzfeld 1 |
extra2 | String | Nein | Zusatzfeld 2 |
extra3 | String | Nein | Zusatzfeld 3 |
extra4 | String | Nein | Zusatzfeld 4 |
extra5 | String | Nein | Zusatzfeld 5 |
price | Number | Ja | Produktpreis (Standard: 0) |
message | String | Nein | Zusätzliche Nachricht |
alternateCodes | String | Nein | Alternative Produktcodes |
zoneCode | String | Nein | Zonencode |
division | String | Nein | Abteilung |
productGroup | String | Nein | Produktgruppe |
batch | Integer | Ja | Chargennummer (Standard: 1) |
createdAt | Date | Ja | Erstellungszeitstempel (automatisch gesetzt) |
Hinweis: Dokumente laufen nach 15 Tagen ab (TTL-Index auf createdAt).
Indizes
type+code- Indiziert für Abfragen von Matches nach Typ und CodeproductCode+lotCode- Indiziert für Abfragen nach Produkt und Charge
TTL-Index
createdAt- Dokumente laufen nach 15 Tagen ab
Scans
Die scans-Kollektion speichert Scan-Datensätze, die während Zonensitzungen erstellt werden.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Scan-Bezeichner |
sessionId | String | Ja | Aktuelle Zonensitzungs-ID |
originalSessionId | String | Ja | Ursprüngliche Zonensitzungs-ID bei der Erstellung des Scans |
order | Integer | Ja | Reihenfolge des Scans innerhalb der Sitzung |
matchCode | String | Ja | Match-Code aus der Matches-Kollektion |
count | Number | Ja | Gescannte Menge |
modifiedAt | Date | Ja | Zeitstempel der letzten Änderung |
needsVerification | Boolean | Nein | Ob der Scan eine Verifizierung erfordert |
isVerified | Boolean | Ja | Ob der Scan verifiziert wurde |
addMarkerBelow | Boolean | Ja | Markierungsplatzierungs-Flag |
verifyReason | String | Nein | Grund für die Verifizierungsanforderung |
match | Object | Ja | Match-Daten aus der Match-Datenbank (Blackbox) |
deleted | Boolean | Ja | Soft-Delete-Flag (Standard: false) |
revisions[object] | Array | Nein | Revisionshistorie-Array |
projectId | String | Ja | Projekt-ID |
price | Number | Nein | Preis aus dem Match |
pieces | Number | Nein | Anzahl der Stücke |
zoneCode | String | Nein | Zonencode |
source | String | Nein | Scan-Quelle |
Indizes
projectId+originalSessionId+order- Indiziert für Abfragen von Scans nach Projekt und ursprünglicher SitzungprojectId+sessionId+deleted- Indiziert für Abfragen von Scans nach aktueller SitzungprojectId+deleted+count(absteigend) - Indiziert für Abfragen von Scans nach MengeprojectId+matchCode+deleted- Indiziert für Abfragen von Scans nach Match-CodeprojectId+revisions.sessionId- Indiziert für Abfragen von Scans nach RevisionssitzungprojectId- Allgemeiner Projektindex
Zones
Die zones-Kollektion speichert Zonen-/Arbeitsbereichsinformationen.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Zonen-Bezeichner |
projectId | String | Ja | Projekt-ID (nicht indiziert) |
code | String | Ja | Zonencode |
warehouseCode | String | Ja | Lagercode |
division | String | Nein | Abteilung |
remarks | String | Nein | Zonenanmerkungen |
errorVerifyFunction | String | Nein | Fehlermeldung der Prüffunktion |
errorTransformScans | String | Nein | Fehlermeldung bei der Scan-Transformation |
flags[string] | Array | Nein | Zonen-Flags-Array |
priority | String | Nein | Zonenpriorität |
extra1 | String | Nein | Zusatzfeld 1 |
extra2 | String | Nein | Zusatzfeld 2 |
extra3 | String | Nein | Zusatzfeld 3 |
extra4 | String | Nein | Zusatzfeld 4 |
extra5 | String | Nein | Zusatzfeld 5 |
status | String | Ja | Zonenstatus (Standard: 'undefined') |
deleted | Boolean | Ja | Soft-Delete-Flag (Standard: false) |
scanSessions | Integer | Nein | Anzahl der Scan-Sitzungen (automatisch durch Hooks aktualisiert) |
isVerified | Boolean | Nein | Ob die Zone verifiziert wurde |
meta | Object | Nein | Metadaten-Objekt (Blackbox) |
clientZoneCode | String | Nein | Kundenspezifischer Zonencode |
Statuswerte:
undefinedscan.plan,scan.busy,scan.readyverify.plan,verify.busy,verify.readyexport.plan,export.busy,export.readyblocked
Indizes
projectId+deleted+code- Indiziert für Abfragen von Zonen nach Projekt und CodeprojectId+deleted+status- Indiziert für Abfragen von Zonen nach Projekt und Status
Zone Sessions
Die zoneSessions-Kollektion speichert Sitzungsdatensätze für Scan-, Verifizierungs- und Exportvorgänge in Zonen.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Sitzungs-Bezeichner |
uuid | String | Ja | Eindeutige Sitzungs-UUID |
zoneId | String | Ja | Zonen-ID |
type | String | Ja | Sitzungstyp: 'scan', 'verify', 'zone-verify', 'export', 'change-request' |
deviceCode | String | Nein | Gerätecode, der für die Sitzung verwendet wird |
createdAt | Date | Ja | Zeitstempel der Sitzungserstellung |
startedAt | Date | Nein | Startzeitstempel der Sitzung |
closedAt | Date | Nein | Abschlusszeitstempel der Sitzung |
userId | String | Ja | Benutzer-ID, der die Sitzung erstellt hat |
flags[string] | Array | Nein | Sitzungs-Flags-Array |
busy | Boolean | Nein | Ob die Sitzung aktuell aktiv ist |
deleted | Boolean | Ja | Soft-Delete-Flag (Standard: false) |
projectId | String | Ja | Projekt-ID |
jobId | String | Nein | Zugehörige Job-ID (für Export-Sitzungen) |
revisions[object] | Array | Nein | Revisionshistorie-Array |
previousZoneId | String | Nein | Vorherige Zonen-ID (für verschobene Sitzungen) |
retryHistory | Array | Nein | Wiederholungshistorie für zone-verify-Sitzungen |
retryHistory[].count | Number | Ja | Anzahl der Wiederholungsversuche |
retryHistory[].createdAt | Date | Ja | Zeitstempel des Wiederholungsversuchs |
count | Number | Nein | Sitzungsanzahl |
Indizes
userId- Indiziert für Abfragen von Sitzungen nach BenutzerprojectId+busy- Indiziert für Abfragen aktiver/beschäftigter Sitzungen nach ProjektprojectId+zoneId+uuid(eindeutig, partieller Filter:uuidvorhanden) - Indiziert für eindeutige SitzungssucheprojectId+userId+closedAt- Indiziert für Abfragen von Benutzersitzungen nach ProjektprojectId+zoneId- Indiziert für Abfragen von Sitzungen nach ZoneprojectId+deleted+type- Indiziert für Abfragen von Sitzungen nach Typ (für Statistiken verwendet)
Registrations
Die registrations-Kollektion speichert Benutzerregistrierungsinformationen für Projekte.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Registrierungs-Bezeichner |
projectId | String | Ja | Projekt-ID |
username | String | Ja | Benutzername (eindeutig pro Projekt) |
password | String | Nein | Gehashtes Passwort |
deleted | Boolean | Ja | Soft-Delete-Flag (Standard: false) |
role | String | Ja | Projektrolle (aus roles.project Enum) |
type | String | Ja | Registrierungstyp: 'full' oder 'temp' |
isClient | Boolean | Ja | Ob die Registrierung für einen Client-Benutzer ist (Standard: false) |
firstName | String | Nein | Vorname des Benutzers |
lastName | String | Nein | Nachname des Benutzers |
teamIds[string] | Array | Nein | Array von Team-IDs |
createdAt | Date | Ja | Erstellungsdatum der Registrierung (Standard: jetzt) |
modifiedAt | Date | Nein | Zeitstempel der letzten Änderung |
modifiedBy | String | Ja | Benutzer-ID, der zuletzt geändert hat |
meta | Object | Nein | Metadaten-Objekt (Blackbox) |
revisions[object] | Array | Nein | Revisionshistorie-Array |
Indizes
username- Indiziert für Abfragen von Registrierungen nach Benutzername (verwendet von Registrierungsjobs)projectId- Indiziert für Abfragen von Registrierungen nach ProjektprojectId+username(eindeutig) - Indiziert für eindeutige Benutzernamensuche pro Projekt
Text-Indizes
username+firstName+lastName- Volltextsuche nach Registrierungsnamen
Assets
Die assets-Kollektion speichert Datei-Assets (Bilder), die mit Projekten, Branches, Clients oder globalen Einstellungen verknüpft sind.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Asset-Bezeichner |
meta | Object | Ja | Asset-Metadaten |
meta.fileName | String | Ja | Ursprünglicher Dateiname |
meta.objectId | String | Nein | ID des zugehörigen Objekts (Projekt/Branch/Client) |
meta.objectLevel | String | Ja | Objektebene: 'projectId', 'branchId', 'clientId' oder 'global' |
meta.uploaded_at | Date | Ja | Upload-Zeitstempel |
meta.uploaded_by | String | Ja | Benutzer-ID, der das Asset hochgeladen hat |
Hinweis: Diese Kollektion verwendet das ostrio:files-Paket. Zusätzliche Felder werden vom Paket verwaltet (Größe, Typ, Pfad usw.).
Akzeptierte Dateitypen:
image/pngimage/jpgimage/svg+xml
Maximale Dateigröße: 5 MB
Indizes
meta.objectLevel+meta.objectId- Indiziert für Abfragen von Assets nach Objektebene und ID
Stock
Die stock-Kollektion speichert Lager-/Inventurinformationen für Projekte.
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
_id | String | Ja | Eindeutiger Lager-Bezeichner |
projectId | String | Ja | Projekt-ID (indiziert) |
match | Object | Ja | Match-Datenobjekt (Blackbox) |
expected | Number | Ja | Erwartete Menge |
actual | Number | Ja | Tatsächliche Menge (Standard: 0) |
zoneIds[string] | Array | Nein | Array von Zonen-IDs |
verified | Boolean | Ja | Ob der Lagerbestand verifiziert wurde (Standard: false) |
difference | Number | Ja | Differenz zwischen erwartet und tatsächlich (Standard: 0) |
differencePrice | Number | Ja | Preisdifferenz (Standard: 0) |
Indizes
projectId- Indiziert für Abfragen des Lagerbestands nach Projekt
Hinweise
Index-Notation
- Text-Indizes: Volltextsuchindizes für Textsuchoperationen
- TTL-Indizes: Time-to-Live-Indizes, die Dokumente automatisch ablaufen lassen
Abfrageleistung
Verwenden Sie bei Abfragen von Kollektionen indizierte Felder in Ihren Abfragefiltern, um eine optimale Leistung zu gewährleisten. Zusammengesetzte Indizes unterstützen Abfragen, die die indizierten Felder in der Reihenfolge verwenden, in der sie im Index erscheinen.
Soft-Deletes
Die meisten Kollektionen verwenden ein boolesches deleted-Feld für Soft-Deletes. Bei Abfragen müssen Sie möglicherweise nach deleted: false filtern, um gelöschte Dokumente auszuschließen, es sei denn, Sie haben die Berechtigung, gelöschte Elemente anzuzeigen.
Scanner SQLite
Schemafelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| MatchCode | nvarchar(60) | Ja | Eindeutiger Match-Bezeichner (Primärschlüssel) |
| Division | nvarchar(250) | Nein | Abteilung, zu der der Match gehört |
| ProductGroup | nvarchar(250) | Nein | Produktgruppenklassifizierung |
| LocationCode | nvarchar(30) | Nein | Filial- oder Standortbezeichner |
| ProductCode | nvarchar(60) | Nein | Produktbezeichner |
| LotCode | nvarchar(60) | Nein | Chargen- oder Loskennung |
| SerialCode | nvarchar(60) | Nein | Produkt-Seriennummer |
| Description | nvarchar(250) | Nein | Produkt- oder Match-Beschreibung |
| ExtraCode1 | nvarchar(250) | Nein | Optionaler Zusatzcode 1 |
| ExtraCode2 | nvarchar(250) | Nein | Optionaler Zusatzcode 2 |
| ExtraCode3 | nvarchar(250) | Nein | Optionaler Zusatzcode 3 |
| ExtraCode4 | nvarchar(250) | Nein | Optionaler Zusatzcode 4 |
| ExtraCode5 | nvarchar(250) | Nein | Optionaler Zusatzcode 5 |
| Price | decimal(18,2) | Nein | Produktpreis |
| Message | nvarchar(60) | Nein | Freitextnachricht oder Hinweis |
| AlternateMatchCodes | nvarchar(1000) | Nein | Alternative Match-Codes (z. B. kommagetrennt) |
| ZoneCode | nvarchar(60) | Nein | Zonen- oder Bereichscode |
| Batch | INT | Nein | Chargen- oder Importbezeichner |
Alternative Match-Codes
Die Spalte "AlternateMatchCode" wird erst verarbeitet, nachdem der eingegebene Match verifiziert wurde.
Wenn der generierte Match ein Feld "AlternateMatchCode" enthält, das nicht leer ist, teilt das System dieses durch Komma in eine Liste von Optionen auf. Die erste Option ist ein Modifikator: Wenn er auf 0 gesetzt ist, ist der folgende Dialog optional. Wenn er auf 1 gesetzt ist, ist der Dialog für alternative Match-Codes obligatorisch. Zur Verwendung siehe Android -> Alternative Barcode
Die folgenden Werte der Liste werden erneut durch ein Gleichheitszeichen (=) in Spalten aufgeteilt. Diese Werte werden dem Benutzer im Dialog angezeigt.
- Der erste Wert jeder dieser Optionen ist der Wert, den das Feld erhält, wenn er ausgewählt wird. - Der zweite Wert ist der scannbare Wert. Wenn keine Option scannbar ist (indem das zweite Feld leer gelassen wird), wird der Barcode-Leser deaktiviert.
- Alle Werte nach dem zweiten Wert werden dem Benutzer in einer Tabelle angezeigt. Die erste Option wird als Überschrift interpretiert und kann nicht ausgewählt werden. Alle anderen Optionen werden darunter aufgelistet, wo der Benutzer sie entweder mit den Pfeiltasten auswählen und ENTER drücken kann, sobald das gewünschte Element ausgewählt ist, oder durch Scannen.
Der Wert der ersten Spalte wird dann so verarbeitet, als ob dies der ursprüngliche Wert wäre, es sei denn, er ist gleich.
Wenn der Match, der durch den ausgewählten Code abgerufen wird, erneut Daten in der Spalte
"AlternateMatchCode" enthält, beginnt dieser Vorgang von vorne.
Beispiel:
1,==Description=Price=Unit,2085001003227==Alternate 1=1.99€=pcs,2085001003234==Alternate 2=14.99€=pcs
