Dokumente

Offerte-Generator

Offerten als Word und PDF – plus fertiger Mail-Entwurf.

Erstellt aus wenigen Eckdaten eine vollständige Geschäftsofferte: identisch aufgebaut als .docx und als PDF, mit Referenznummer, Gültigkeit, Zahlungskonditionen und neutralem Business-Ton – und legt beide Dateien als versandbereiten E-Mail-Entwurf ab.

Komplettpaket (.skill)
Version
1.0.0
Aktualisiert
Umfang
9 Kapitel · ca. 5 Min. Lesezeit
Format
SKILL.md (Markdown)
Lizenz
CC BY-NC-ND 4.0

Wann dieser Skill greift

Offerten als Word und PDF – plus fertiger Mail-Entwurf.

OfferteAngebotPDFWord

Was drinsteht

  1. 01Zweck
  2. 02Workflow
  3. 03Checkliste (vor dem Erstellen klären, falls nicht bekannt)
  4. 04Standardwerte (nicht nachfragen, ausser der Nutzer widerspricht)
  5. 05Struktur der Offerte (immer diese Reihenfolge, in Word und PDF identisch)
  6. 06Dateien in diesem Skill
  7. 07Technische Hinweise: Word
  8. 08Technische Hinweise: PDF
  9. 09E-Mail-Entwurf mit Anhängen (Outlook / Microsoft 365)

Vollständige Anleitung

Der komplette Inhalt der Datei – identisch mit dem Download.

Offerte-Generator

Zweck

Aus wenigen Eckdaten eine vollständige Geschäftsofferte erzeugen, in Word und PDF identisch aufgebaut, und als E-Mail-Entwurf versandbereit ablegen. Neutrale, klare Business-Korrespondenz, keine Marketingsprache und keine feste Markenstimme. Der Skill ist bewusst allgemein gehalten: er passt für Vorträge, Workshops, Beratungsmandate, Implementierungsprojekte oder jede andere Dienstleistung, unabhängig von Branche oder Firma.

Workflow

  1. Angaben sammeln. Checkliste unten durchgehen. Fehlt etwas Entscheidungsrelevantes (Empfänger, Leistung, Preis), kurz nachfragen statt zu raten. Für alles andere gelten die Standardwerte weiter unten, ohne Rückfrage.
  2. Daten strukturieren. Als JSON nach dem Schema in assets/schema_beispiel.json ablegen, z.B. unter /tmp/offerte_data.json.
  3. Beide Dateien erzeugen:
    • PDF: python3 scripts/generate_pdf.py <data.json> <output.pdf>
    • Word: node scripts/generate_docx.js <data.json> <output.docx>
  4. Kontrolle. Bei Layoutzweifeln PDF als Bild rendern (pdftoppm -jpeg -r 100 output.pdf page) und ansehen, bevor die Datei rausgeht. Angaben gegen die Checkliste abgleichen.
  5. E-Mail-Entwurf anlegen. Über Zapier den passenden Microsoft-Mail-Connector nutzen (Outlook oder Office 365, siehe Abschnitt unten), beide Dateien als Anhang. Betreff: "Offerte: [Titel]". Begleittext kurz halten (2-3 Sätze), Inhalt der Offerte nicht in der Mail wiederholen.
  6. Nie automatisch versenden. Der Entwurf ist das Ergebnis. Nur wenn der Nutzer im selben Auftrag ausdrücklich sagt, dass sofort verschickt werden soll ("schick das direkt ab", "sende es jetzt"), den Entwurf danach tatsächlich versenden.

Checkliste (vor dem Erstellen klären, falls nicht bekannt)

FeldHerkunft
Absender: Name, Firma, Adresse, evtl. E-Mail/Telefonvom Nutzer, immer erfragen, nie annehmen
Empfänger: Firma, Ansprechperson, Adressevom Nutzer
Leistungsbeschrieb: Art, Umfang, Dauer, Ort/Formatvom Nutzer
Preis pro Position + Totalvom Nutzer
Referenznummer + Datumselbst generieren: OFF-JJJJ-NN, laufende Nummer falls bekannt, sonst grob geschätzt
GültigkeitStandard: 30 Tage ab Ausstellungsdatum
ZahlungskonditionenStandard unten, ausser Nutzer gibt andere vor
Bezug/Kontext (Gespräch, Anfrage, Datum)vom Nutzer, für den Einleitungssatz

Standardwerte (nicht nachfragen, ausser der Nutzer widerspricht)

  • Zahlungskonditionen: "Zahlbar netto 30 Tage nach Rechnungsstellung. Preise verstehen sich exkl. gesetzlicher MWSt."
  • Gültigkeit: "Dieses Angebot ist gültig bis zum oben genannten Datum."
  • Ton: neutrale, klare Business-Sprache, kurze bis mittellange Sätze, keine Füllwörter, kein Marketing-Ton.
  • Typografie: gerade Anführungszeichen ("" statt «»), keine Halbgeviertstriche, ä/ö/ü direkt schreiben, ss statt ß, Tausendertrennzeichen mit Apostroph (7'600.00).
  • Zahlenformat: Preise immer mit zwei Nachkommastellen, Währung vor dem Betrag (CHF 7'600.00).

Absender-Daten nie aus früheren Läufen übernehmen oder erfinden. Jede Offerte braucht ihre eigenen, vom Nutzer bestätigten Angaben.

Struktur der Offerte (immer diese Reihenfolge, in Word und PDF identisch)

  1. Briefkopf: Absender links, Offerte-Nr./Datum/Gültigkeit rechts, Trennlinie darunter
  2. Empfänger-Adresse
  3. Betreffzeile (fett)
  4. Anrede
  5. Einleitungssatz: Bezug auf Anfrage oder Gespräch, ein bis zwei Sätze, kein Marketing
  6. Leistungstabelle: Position, Beschreibung, Menge, Einzelpreis, Total
  7. Summenblock: Zwischentotal, Total (fett), MWSt-Hinweis
  8. Zahlungs- und Gültigkeitsbedingungen
  9. Abschlusssatz, Grussformel, Unterschrift

Neue Positionen in line_items erweitern die Tabelle automatisch; das Schema ist nicht auf eine feste Anzahl Zeilen festgelegt.

Dateien in diesem Skill

DateiZweck
assets/offerte_template.html.j2HTML/CSS-Vorlage (A4, WeasyPrint-tauglich, Jinja2-Platzhalter)
assets/schema_beispiel.jsonBeispiel-Datensatz, zeigt das erwartete JSON-Schema vollständig
scripts/generate_pdf.pyfüllt die HTML-Vorlage mit den Daten und rendert sie zu PDF
scripts/generate_docx.jsbaut dasselbe Dokument nativ in Word, gleiche Struktur und Zahlen

Technische Hinweise: Word

docx (npm) ist im Environment vorinstalliert, kein npm install nötig. Tabellenspalten brauchen sowohl columnWidths auf der Tabelle als auch width auf jeder Zelle (beide WidthType.DXA), sonst bricht die Darstellung in Google Docs. Zellschattierung nur mit ShadingType.CLEAR, nie SOLID. Nach dem Erzeugen zur Kontrolle rendern:

python3 /mnt/skills/public/docx/scripts/office/soffice.py --headless --convert-to pdf output.docx
pdftoppm -jpeg -r 100 output.pdf page

Technische Hinweise: PDF

WeasyPrint und Jinja2 werden vom Skript bei Bedarf automatisch installiert (ensure_dependencies() in generate_pdf.py), da das Sandbox-Environment zwischen Sessions zurückgesetzt wird. Bei manueller Prüfung:

python3 -c "import weasyprint" || pip install weasyprint --break-system-packages

CSS bewusst auf WeasyPrint-Kompatibilität gehalten: @page-Regel mit @bottom-right für die Seitenzahl, kein inset-Shorthand für kritische Positionierung, normaler Dokumentfluss statt absoluter Positionierung (anders als im ebook-html-pdf-Skill, das ist dort nötig wegen fixer Seiten, hier nicht).

E-Mail-Entwurf mit Anhängen (Outlook / Microsoft 365)

Es gibt keinen dedizierten Outlook-Connector in diesem Environment, der Versand läuft über den generischen Zapier-Connector. Zapier führt zwei getrennte Microsoft-Mail-Apps mit unterschiedlichen selected_api-Werten:

App in Zapierselected_apiFür
Microsoft OutlookMicrosoftOutlookCLIAPIPersönliches Outlook/Outlook.com-Postfach
Microsoft Office 365MicrosoftOffice365CLIAPIGeschäftliches M365-Postfach (Business/Enterprise, kein Outlook.com)

Bei Unklarheit kurz fragen, welches der beiden zutrifft, statt zu raten. Die beiden Apps haben unterschiedliche Actions und Parameter.

Vorgehen bei jedem Lauf (Action-Namen und Parameter nie auswendig annehmen, immer live nachschlagen):

  1. Prüfen, ob die passende App schon aktiv ist: Zapier:inspect_zapier_actions mit selected_api der gewählten App.
  2. Falls nicht aktiv: Zapier:discover_zapier_actions mit dem App-Namen, dann Zapier:enable_zapier_action mit dem gefundenen selected_api. Das liefert bei Bedarf auch den Autorisierungslink für den Nutzer.
  3. Mit Zapier:inspect_zapier_actions (gefiltert auf die Draft-/Compose-Action, z.B. Suche nach "draft" oder "compose" im Aktionsnamen) das exakte Parameterschema holen, inkl. wie Anhänge übergeben werden (Feldname, Format, ob Base64 oder URL erwartet wird).
  4. PDF und Word als Anhang vorbereiten, Format gemäss Schema aus Schritt 3 (typischerweise Base64):
    import base64
    pdf_content = base64.b64encode(open("output.pdf", "rb").read()).decode()
    docx_content = base64.b64encode(open("output.docx", "rb").read()).decode()
    
  5. Zapier:execute_zapier_write_action mit der in Schritt 3 gefundenen action, selected_api und den passenden Parametern: Empfänger, Betreff ("Offerte: [Titel]"), kurzer Begleittext (2-3 Sätze, Inhalt der Offerte nicht wiederholen), beide Anhänge.

Wenn die gewählte App bzw. der Nutzer-Account mehrere Verbindungen hat (Zapier:list_zapier_connections), im Zweifel nachfragen statt die erste zu nehmen.

Der Entwurf landet im Postfach des Nutzers und ist bereit zum Absenden. Kein automatischer Versand, siehe Workflow-Schritt 6. Falls die verfügbare Action keinen reinen "Entwurf"-Modus kennt, sondern nur direktes Senden: das dem Nutzer explizit sagen und vor dem Versand bestätigen lassen, statt ungefragt zu senden.


Zuletzt aktualisiert: 02.09.2026 · Version 1.0.0 · skills.fragroger.ai

Lizenz: CC BY-NC-ND 4.0 (Namensnennung – nicht kommerziell – keine Bearbeitungen). Nutzung nur für den Eigengebrauch. https://creativecommons.org/licenses/by-nc-nd/4.0/deed.de

Schritt für Schritt: herunterladen, hochladen, anpassen

Keine Installation, keine Ordner, kein Terminal. Du lädst die Datei herunter, lädst sie im Chattool deiner Wahl hoch und passt sie per Prompt an.

  1. Oben auf „SKILL.md“ klicken. Du bekommst eine einzelne Markdown-Datei. Zusätzlich gibt es ein Komplettpaket mit Vorlagen.

Alle Skills sind reiner Text – Tonalität, Sprache, Zielgruppe und Output-Format darfst du für den Eigengebrauch anpassen. Veränderte Fassungen dürfen laut Lizenz nicht weiterveröffentlicht werden. FAQ zu Anpassung, Eigengebrauch und Wiederveröffentlichung

Lizenz und Nutzung

Dieser Skill steht unter Creative Commons BY-NC-ND 4.0 – Namensnennung, nicht kommerziell, keine Bearbeitungen. Die Nutzung ist ausschliesslich für den Eigengebrauch gedacht: herunterladen, in der eigenen Arbeitsumgebung einsetzen, mit Quellenangabe teilen. Weiterverkauf, Weitergabe als eigenes Produkt, kommerzielle Verwertung oder veränderte Wiederveröffentlichung sind nicht erlaubt. Für kommerzielle Lizenzen bitte Kontakt aufnehmen.