> ## Documentation Index
> Fetch the complete documentation index at: https://help.mathership.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CSV-Upload

> POS-Verkaufsdaten manuell aus CSV-Dateien hochladen

# CSV-Upload

Verwende CSV Upload, um POS-Verkaufsdaten aus einer CSV-Datei zu importieren und in Bestandsbewegungen umzuwandeln.

CSV Upload ist nützlich, wenn du keine direkte POS-Integration verwendest oder wenn Verkaufsdaten aus einem anderen System als Exportdatei bereitgestellt werden.

Der CSV-Upload kann:

* Verkaufsdaten aus einer CSV-Datei lesen
* POS-Artikelcodes aus ausgewählten Spalten extrahieren
* Mengen aus einer Mengenspalte lesen
* Daten aus einer Datumsspalte lesen
* POS-Codes mit POS-Zuordnungen abgleichen
* Rezeptzuordnungen in Zutaten aufschlüsseln
* Bestands-Ledger-Einträge erstellen

## So funktioniert es

Mathership liest die hochgeladene CSV-Datei Zeile für Zeile.

Für jede Zeile wendet Mathership die konfigurierten CSV-Regeln an und extrahiert verkaufte POS-Artikel.

Der grundlegende Ablauf ist:

1. CSV-Integration erstellen
2. CSV-Regeln konfigurieren
3. POS-Zuordnungen erstellen
4. CSV-Datei hochladen
5. Mathership liest die Datei
6. Verkaufte POS-Artikel werden mit Zuordnungen abgeglichen
7. Zutatenabbuchungen werden im Bestands-Ledger erstellt

## Bevor du beginnst

Stelle sicher, dass du bereits Folgendes hast:

* Ein Unternehmen in Mathership
* In Mathership erstellte Zutaten
* Erstellte Rezepte, wenn du POS-Artikel Rezepten zuordnen möchtest
* Erstellte Lagereinheiten
* Konfigurierte POS-Zuordnungen
* Eine CSV-Datei mit Verkaufsdaten

## CSV-Integration erstellen

CSV Upload verwendet eine POS-Integration mit dem Integrationstyp `CSV`.

So erstellst du sie:

1. Gehe zu **Manage** → **Integrations**
2. Wähle **CSV Upload**
3. Erstelle eine neue CSV-Integration
4. Konfiguriere die Regeln für das Datenschema
5. Speichere die Integration

Die Integration speichert die Regeln, die Mathership mitteilen, wie die CSV-Datei gelesen werden soll.

## CSV-Regeln

CSV-Regeln legen fest, welche Spalten Mathership aus der hochgeladenen Datei lesen soll.

Der unterstützte Regeltyp ist:

| Regeltyp                     | Zweck                                |
| ---------------------------- | ------------------------------------ |
| `column_values_to_pos_codes` | Liest POS-Codes aus einer CSV-Spalte |

Eine Regel kann Folgendes verwenden:

| Feld                     | Bedeutung                                                          |
| ------------------------ | ------------------------------------------------------------------ |
| `source_column`          | Spalte, die den POS-Code oder die POS-Codes enthält                |
| `quantity_source_column` | Optionale Spalte, die die Menge enthält                            |
| `date_source_column`     | Optionale Spalte, die das Verkaufsdatum enthält                    |
| `delimiter`              | Optionales Trennzeichen, wenn eine Zelle mehrere POS-Codes enthält |

## Beispiel-CSV-Datei

Eine einfache CSV-Datei könnte so aussehen:

| pos\_code       | qty | date       |
| --------------- | --: | ---------- |
| BURGER\_CLASSIC |   2 | 2025-10-20 |
| COLA\_033       |   4 | 2025-10-20 |
| ESPRESSO        |   3 | 2025-10-20 |

In diesem Beispiel:

* `pos_code` ist die Quellspalte
* `qty` ist die Mengenspalte
* `date` ist die Datumsspalte

## Beispielregel

Beispielhafte Regelkonfiguration:

| Einstellung  | Wert                         |
| ------------ | ---------------------------- |
| Regeltyp     | `column_values_to_pos_codes` |
| Quellspalte  | `pos_code`                   |
| Mengenspalte | `qty`                        |
| Datumsspalte | `date`                       |
| Trennzeichen | leer                         |

Mit dieser Regel liest Mathership jeden POS-Code aus der Spalte `pos_code`.

## Mehrere POS-Codes in einer Zelle

Wenn eine CSV-Zelle mehrere POS-Codes enthält, verwende ein Trennzeichen.

Beispiel-CSV:

| pos\_codes                | qty | date       |
| ------------------------- | --: | ---------- |
| BURGER\_CLASSIC,COLA\_033 |   1 | 2025-10-20 |

Beispielregel:

| Einstellung  | Wert        |
| ------------ | ----------- |
| Quellspalte  | `pos_codes` |
| Mengenspalte | `qty`       |
| Datumsspalte | `date`      |
| Trennzeichen | `,`         |

Mathership teilt den Wert auf und verarbeitet beide POS-Codes.

## Umgang mit Mengen

Wenn eine Mengenspalte konfiguriert ist, verwendet Mathership den Wert aus dieser Spalte.

Wenn keine Mengenspalte konfiguriert ist, verwendet Mathership `1` als Standardmenge.

Beispiel:

| POS-Code                     |       Mengenergebnis |
| ---------------------------- | -------------------: |
| `BURGER_CLASSIC` mit qty `2` |  2 verkaufte Artikel |
| `COLA_033` ohne Mengenspalte | 1 verkaufter Artikel |

## Umgang mit Daten

Wenn eine Datumsspalte konfiguriert ist, verwendet Mathership dieses Datum für die Bestandsbewegung.

Wenn keine Datumsspalte konfiguriert ist, verwendet Mathership das aktuelle Datum und die aktuelle Uhrzeit.

Das Datum sollte als ISO-ähnliches Datum oder Datum mit Uhrzeit lesbar sein, zum Beispiel:

| Format            | Beispiel              |
| ----------------- | --------------------- |
| Datum             | `2025-10-20`          |
| Datum und Uhrzeit | `2025-10-20T14:30:00` |

## POS-Zuordnungen

Erstelle POS-Zuordnungen, bevor du Verkaufsdaten hochlädst.

Eine POS-Zuordnung verbindet einen POS-Artikelcode oder -namen mit einer Mathership-Zutat oder einem Mathership-Rezept.

Beispiele:

| POS-Code         | Zugeordnetes Objekt   | Menge |
| ---------------- | --------------------- | ----: |
| `COLA_033`       | Cola-Flasche          |     1 |
| `ESPRESSO`       | Kaffeebohnen          | 0.009 |
| `BURGER_CLASSIC` | Classic-Burger-Rezept |     1 |

Ohne Zuordnungen kann Mathership POS-Verkäufe nicht in Bestandsabbuchungen umwandeln.

## Zutat-Zuordnung

Verwende eine Zutat-Zuordnung, wenn ein POS-Artikel eine einzelne Zutat direkt abbuchen soll.

Beispiel:

| Verkaufte POS-Artikel | Bestandsabbuchung              |
| --------------------- | ------------------------------ |
| 1 × `COLA_033`        | 1 Cola-Flasche abbuchen        |
| 1 × `ESPRESSO`        | 0.009 kg Kaffeebohnen abbuchen |

## Rezeptzuordnung

Verwende eine Rezeptzuordnung, wenn ein POS-Artikel aus mehreren Zutaten besteht.

Beispiel:

| Verkaufte POS-Artikel | Zugeordnet zu         |
| --------------------- | --------------------- |
| `BURGER_CLASSIC`      | Classic-Burger-Rezept |

Wenn die CSV-Datei `BURGER_CLASSIC` enthält, schlüsselt Mathership das Rezept auf und bucht alle Rezeptzutaten ab.

## CSV-Datei hochladen

So lädst du eine Datei hoch:

1. Öffne **Manage** → **Integrations**
2. Öffne die CSV-Integration
3. Wähle die CSV-Datei aus
4. Starte den Upload
5. Prüfe das Ergebnis

Die hochgeladene Datei muss eine CSV-Datei mit Kopfzeilen sein.

Mathership liest die Spaltennamen aus der ersten Zeile.

## Was während des Uploads passiert

Wenn eine CSV-Datei hochgeladen wird, führt Mathership Folgendes aus:

1. CSV-Datei lesen
2. Konfigurierte Regeln auf jede Zeile anwenden
3. POS-Codes, Mengen und Daten extrahieren
4. POS-Codes mit POS-Zuordnungen abgleichen
5. Rezeptzuordnungen in Zutaten aufschlüsseln
6. Zutatenmengen berechnen
7. Bestands-Ledger-Einträge erstellen
8. Letzte Ausführungszeit der Integration aktualisieren
9. Verarbeitungszusammenfassung zurückgeben

## Upload-Ergebnis

Ein erfolgreicher Upload gibt eine Zusammenfassung der erstellten Bestandsabbuchungen zurück.

Das Ergebnis kann Folgendes enthalten:

* Zutatenname
* Abgebuchte Menge
* Lagereinheit
* Datum der Bestandsbewegung

Beispielergebnis:

| Zutat      | Abgebuchte Menge | Lagereinheit   | Datum      |
| ---------- | ---------------: | -------------- | ---------- |
| Burger Bun |               12 | Main Storage   | 2025-10-20 |
| Beef Patty |               12 | Main Storage   | 2025-10-20 |
| Cola 0.33l |               24 | Drinks Storage | 2025-10-20 |

## Bestands-Ledger-Einträge

CSV-Uploads erstellen Bestands-Ledger-Einträge mit dem Transaktionstyp `ISSUE`.

Das bedeutet, dass die hochgeladenen Verkäufe den Bestand reduzieren.

Jeder erstellte Eintrag enthält:

* Unternehmen
* Zutat
* Lagereinheit
* Transaktionstyp
* Menge
* Stückkosten
* Wert
* Datum

Siehe [Inventory Ledger](/restaurants/inventory/inventory-ledger) für Details.

## Auswahl der Lagereinheit

Bei CSV-Uploads bestimmt Mathership die Lagereinheit über die Logik der zugeordneten Zutat oder des zugeordneten Rezepts.

Das System versucht, eine Lagereinheit aus folgenden Quellen zu ermitteln:

1. Ausgabelager der Rezeptzeile
2. Bevorzugtes Ausgabelager der Zutat
3. Standard-Ausgabelager des Rezepts
4. Eine Lagereinheit mit verfügbarem Bestand
5. Erste verfügbare Lagereinheit als Fallback

Für korrekte Bestandsabbuchungen solltest du die Lagereinstellungen für Zutaten und Rezepte konfigurieren.

## Typischer Einrichtungsablauf

Verwende diese Reihenfolge für eine saubere CSV-Einrichtung:

1. Lagereinheiten erstellen
2. Zutaten erstellen
3. Bei Bedarf Rezepte erstellen
4. CSV-Integration erstellen
5. CSV-Regeln konfigurieren
6. POS-Zuordnungen erstellen
7. Kleine Test-CSV hochladen
8. Bestands-Ledger prüfen
9. Vollständige CSV-Datei hochladen

## Zuerst mit einer kleinen Datei testen

Bevor du einen großen Export hochlädst, teste mit einer kleinen CSV-Datei.

Verwende nur wenige Zeilen, zum Beispiel:

| pos\_code       | qty | date       |
| --------------- | --: | ---------- |
| COLA\_033       |   1 | 2025-10-20 |
| BURGER\_CLASSIC |   1 | 2025-10-20 |

Prüfe nach dem Upload, ob:

* Der Upload erfolgreich abgeschlossen wurde
* Die richtigen Zutaten abgebucht wurden
* Die Mengen korrekt sind
* Die richtigen Lagereinheiten verwendet wurden
* Die Ledger-Einträge das richtige Datum haben

## Häufige Fehler

### Datei nicht bereitgestellt

Dies passiert, wenn keine CSV-Datei angehängt wurde.

Lade eine CSV-Datei hoch und versuche es erneut.

### CSV-Integration nicht gefunden

Dies passiert, wenn die ausgewählte Integration nicht existiert oder keine CSV-Integration ist.

Prüfe, ob:

* Die Integration existiert
* Die Integration zum ausgewählten Unternehmen gehört
* Der Integrationstyp `CSV` ist

### Verarbeitungsfehler

Dies passiert, wenn Mathership während der Verarbeitung Probleme findet.

Häufige Ursachen sind:

* POS-Code hat keine Zuordnung
* Rezept hat einen Zyklus
* Lagereinheit kann nicht ermittelt werden
* Zutat existiert nicht mehr
* Rezeptzeile ist unvollständig

Korrigiere die Zuordnungen oder die Rezepteinrichtung und lade die Datei erneut hoch.

### Nicht zugeordneter POS-Code

Das bedeutet, dass die CSV-Datei einen POS-Code enthält, der keine POS-Zuordnung hat.

Beispiel:

| Problem                            | Lösung                                           |
| ---------------------------------- | ------------------------------------------------ |
| `unmapped_pos_code:BURGER_CLASSIC` | Erstelle eine POS-Zuordnung für `BURGER_CLASSIC` |

### Falsche Menge

Prüfe:

* Die Mengenspalte in der CSV
* Die konfigurierte Mengen-Quellspalte
* Die Menge in der POS-Zuordnung
* Die Mengen der Rezeptzeilen
* Die Basiseinheit der Zutat

### Falsches Datum

Prüfe:

* Die Datumsspalte in der CSV
* Die konfigurierte Datums-Quellspalte
* Ob das Datumsformat korrekt gelesen werden kann

Wenn das Datum nicht gelesen werden kann, verwendet Mathership möglicherweise das aktuelle Datum und die aktuelle Uhrzeit.

## Best Practices

* Verwende nach Möglichkeit stabile POS-Codes statt Produktnamen
* Halte CSV-Kopfzeilen konsistent
* Vermeide Änderungen an Spaltennamen nach der Einrichtung
* Teste zuerst mit einer kleinen Datei
* Ordne zuerst POS-Artikel mit hohem Verkaufsvolumen zu
* Verwende Rezepte für vorbereitete Gerichte
* Verwende direkte Zutat-Zuordnungen für einfache Artikel
* Prüfe den Bestands-Ledger nach jedem ersten Upload
* Bewahre eine Kopie hochgeladener CSV-Dateien zur Nachvollziehbarkeit auf

## Beispiel für eine CSV-Einrichtung

Beispielhafte CSV-Kopfzeilen:

| Spalte         | Zweck           |
| -------------- | --------------- |
| `article_code` | POS-Code        |
| `quantity`     | Verkaufte Menge |
| `sold_at`      | Verkaufsdatum   |

Beispielregel:

| Einstellung  | Wert                         |
| ------------ | ---------------------------- |
| Regeltyp     | `column_values_to_pos_codes` |
| Quellspalte  | `article_code`               |
| Mengenspalte | `quantity`                   |
| Datumsspalte | `sold_at`                    |
| Trennzeichen | leer                         |

Beispielzuordnungen:

| POS-Code         | Zuordnungstyp | Zugeordnet zu  | Menge |
| ---------------- | ------------- | -------------- | ----: |
| `COLA_033`       | Zutat         | Cola 0.33l     |     1 |
| `ESPRESSO`       | Zutat         | Kaffeebohnen   | 0.009 |
| `BURGER_CLASSIC` | Rezept        | Classic Burger |     1 |

## Verwandte Seiten

<CardGroup cols={2}>
  <Card title="POS-Zuordnung" icon="arrows-turn-to-dots" href="/en/restaurants/integrations/pos-mapping">
    Ordne POS-Codes Zutaten oder Rezepten zu.
  </Card>

  <Card title="Integrationsübersicht" icon="plug" href="/en/restaurants/integrations/overview">
    Zurück zur Integrationsübersicht.
  </Card>

  <Card title="Lagereinheiten" icon="warehouse" href="/en/restaurants/inventory/storage-units">
    Verwalte Lagereinheiten, die für Bestandsabbuchungen verwendet werden.
  </Card>

  <Card title="Bestands-Ledger" icon="list-check" href="/en/restaurants/inventory/inventory-ledger">
    Prüfe Bestandsbewegungen, die durch CSV-Uploads erstellt wurden.
  </Card>
</CardGroup>
