> For the complete documentation index, see [llms.txt](https://one-loop.gitbook.io/help/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://one-loop.gitbook.io/help/marketplace-apps/lexware-office/workflow-actions/angebot-erstellen.md).

# Angebot erstellen

Die Action **Create Quotation** erstellt ein finalisiertes Angebot in Lexware Office, speichert dessen offizielles PDF im aktuellen Kontakt und gibt die finalen Daten an den Workflow zurück.

> **Teststatus:** Implementiert, aber noch nicht als allgemein verfügbar bestätigt. Zuerst nur mit kontrollierten Testvorgängen verwenden.

## Kundentyp und Kontaktzuordnung

Das Pflichtfeld **Lexware customer type** bestimmt, ob das Dokument einer Firma oder einer Privatperson zugeordnet wird. Die Integration prüft zuerst eine bestehende, passende Zuordnung; danach eine exakte E-Mail- oder Stammdatenübereinstimmung und legt erst dann einen neuen Lexware-Kontakt an. Ein Wechsel von Privatperson zu Firma wandelt keinen bestehenden Kontakt um.

Die vollständige Entscheidungskette, Pflichtdaten, Rückgabevariablen und Fehlerfälle findest du unter [Firmen- und Privatkunden zuordnen](/help/marketplace-apps/lexware-office/firmen-und-privatkunden-zuordnen.md).

## Wann diese Action passt

* Nach einem Formular, Termin oder einer Verkaufschance
* Mit Produkten aus dem CRM
* Mit eigenen Positionen aus Workflow-Variablen

Die Action erstellt kein Zahlungsereignis und keinen öffentlichen Annahme-Link.

## Positionsquelle

| Auswahl               | Technischer Wert | Verwendung                                                 |
| --------------------- | ---------------- | ---------------------------------------------------------- |
| **CRM products**      | `product`        | Produkte und EUR-Beträge sind im CRM gepflegt.             |
| **Map my own fields** | `manual`         | Positionen und Steuerwerte kommen aus Feldern im Workflow. |

Eine Quelle aus bezahlten Vorgängen gibt es bei Angeboten bewusst nicht.

## Gemeinsame Felder

| Feld / Referenz                              | Pflicht | Format und Standard                    | Bedeutung                                                   |
| -------------------------------------------- | ------- | -------------------------------------- | ----------------------------------------------------------- |
| Title / `title`                              | Nein    | Text bis 25 Zeichen                    | Angebotsüberschrift; leer verwendet den Lexware-Standard.   |
| Introduction / `introduction`                | Nein    | Text bis 2.000 Zeichen                 | Text vor den Positionen.                                    |
| Remark / `remark`                            | Nein    | Text bis 2.000 Zeichen                 | Text nach den Positionen.                                   |
| Expiration Date / `expirationDate`           | Ja      | Exakt `YYYY-MM-DD`, z. B. `2026-09-30` | Gültigkeitsdatum. Ungültige Kalendertage werden abgewiesen. |
| Lexware customer type / `customerEntityType` | Ja      | `auto`, `company`, `person`            | Kontaktstruktur in Lexware Office.                          |

## Produkt- und manuelle Felder

Für **CRM products** gelten bis zu zehn Plätze mit `productNSelection` und optional `productNQuantity`; die Menge ist leer standardmäßig `1`. Die Produkt-Auswahl verbindet genau ein Produkt mit einem EUR-Betrag und wird serverseitig erneut geprüft.

Für **Map my own fields** sind die Positionen identisch aufgebaut wie bei Rechnung erstellen:

| Feldmuster                                              | Pflicht                | Bedeutung                                  |
| ------------------------------------------------------- | ---------------------- | ------------------------------------------ |
| `itemNName`                                             | Bei genutzter Position | Bezeichnung der Position.                  |
| `itemNDescription`                                      | Nein                   | Zusätzliche Beschreibung.                  |
| `itemNQuantity`                                         | Bei genutzter Position | Positive Menge, leer = `1`.                |
| `itemNUnit`                                             | Nein                   | Einheit, leer = `Stück`.                   |
| `itemNUnitPrice`                                        | Bei genutzter Position | EUR-Betrag je Einheit.                     |
| `itemNTaxRate`                                          | Bei genutzter Position | Steuersatz ohne Prozentzeichen.            |
| `itemNDiscount`                                         | Nein                   | Rabatt in Prozent, leer = `0`.             |
| `taxType`, `taxSubType`, `taxTypeNote`, `customerVatId` | Steuerfallabhängig     | Steuerart, Unterart, Hinweis und USt-IdNr. |

## Payload-Beispiel

```json
{
  "data": {
    "sourceMode": "manual",
    "customerEntityType": "auto",
    "title": "Angebot",
    "expirationDate": "2026-09-30",
    "taxType": "net",
    "item1Name": "Konzept-Workshop",
    "item1Quantity": "1",
    "item1Unit": "Pauschale",
    "item1UnitPrice": "1200.00",
    "item1TaxRate": "19"
  },
  "extras": {
    "locationId": "location_example_123",
    "contactId": "contact_example_123",
    "executionId": "execution_example_123"
  },
  "meta": {
    "key": "one_loop_lexware_create_quotation"
  }
}
```

## Alle Ausgabevariablen

| Variable                                                                        | Bedeutung im Workflow                                               |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| `success`, `status`                                                             | Vollständiger Erfolg und Ergebnisstatus.                            |
| `errorCode`, `errorMessage`, `retryable`, `warnings`                            | Fehler- und Hinweiswerte für Prüfung oder interne Benachrichtigung. |
| `sourceMode`, `sourceReferenceType`, `sourceReferenceId`                        | Verwendete Quelle und technische Zuordnung.                         |
| `lexwareContactId`, `customerMatchMethod`, `customerCreated`, `customerUpdated` | Ergebnis der Kontaktauflösung.                                      |
| `quotationId`                                                                   | Lexware-Kennung des Angebots.                                       |
| `quotationNumber`                                                               | Sichtbare Angebotsnummer.                                           |
| `quotationStatus`                                                               | Status, etwa `open`.                                                |
| `voucherDate`, `expirationDate`                                                 | Beleg- und Gültigkeitsdatum.                                        |
| `currency`, `netAmount`, `taxAmount`, `grossAmount`                             | Währung und finale Gesamtwerte.                                     |
| `officialDocumentMimeType`, `officialDocumentFileName`                          | Typ und Name des offiziellen Dokuments.                             |
| `quotationDocumentId`                                                           | Kennung der PDF-Kopie am Kontakt; nicht die Lexware-Angebots-ID.    |
| `quotationFileUrl`                                                              | URL der PDF-Kopie für nachfolgende Workflow-Schritte.               |
| `quotationFileName`, `quotationMimeType`                                        | Dateiname und Typ der PDF-Kopie.                                    |
| `contactDocumentStatus`                                                         | Bei vollständigem Erfolg `uploaded`.                                |
| `lexwareViewUrl`                                                                | Interner Lexware-Link; nicht öffentlich versenden.                  |
| `customerCenterAvailable`                                                       | In Version 1 immer `false`.                                         |
| `customerCenterUrl`, `quotationAcceptUrl`                                       | In Version 1 immer leer. Es wird kein Annahme-Link erzeugt.         |

## Praxisbeispiel: Angebot in Auftragsbestätigung überführen

1. Mit dieser Action ein Angebot erstellen.
2. Den Trigger Angebotsstatus geändert mit Filter `accepted` anlegen.
3. In der Action „Auftragsbestätigung erstellen“ die Trigger-Ausgabe `quotationId` in das Feld `quotationId` mappen.
4. Anschließend `orderConfirmationFileUrl` für die interne Weiterverarbeitung verwenden.
