Generador de presupuestos
Presupuestos en Word y PDF, con borrador de correo listo.
Convierte unos pocos datos en un presupuesto comercial completo, identico en .docx y PDF, con numero de referencia, validez, condiciones de pago y un tono neutro, y deja ambos archivos como borrador de correo listo para enviar.
- Version
- 1.0.0
- Actualizado
- Extension
- 9 capitulos · aprox. 5 min de lectura
- Formato
- SKILL.md (Markdown, aleman)
- Licencia
- CC BY-NC-ND 4.0
Cuando actua este skill
Presupuestos en Word y PDF, con borrador de correo listo.
Que contiene
- 01Zweck
- 02Workflow
- 03Checkliste (vor dem Erstellen klären, falls nicht bekannt)
- 04Standardwerte (nicht nachfragen, ausser der Nutzer widerspricht)
- 05Struktur der Offerte (immer diese Reihenfolge, in Word und PDF identisch)
- 06Dateien in diesem Skill
- 07Technische Hinweise: Word
- 08Technische Hinweise: PDF
- 09E-Mail-Entwurf mit Anhängen (Outlook / Microsoft 365)
Instrucciones completas
El contenido completo del archivo, identico a la descarga. Redactado en aleman.
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
- 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.
- Daten strukturieren. Als JSON nach dem Schema in
assets/schema_beispiel.jsonablegen, z.B. unter/tmp/offerte_data.json. - Beide Dateien erzeugen:
- PDF:
python3 scripts/generate_pdf.py <data.json> <output.pdf> - Word:
node scripts/generate_docx.js <data.json> <output.docx>
- PDF:
- 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. - 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.
- 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)
| Feld | Herkunft |
|---|---|
| Absender: Name, Firma, Adresse, evtl. E-Mail/Telefon | vom Nutzer, immer erfragen, nie annehmen |
| Empfänger: Firma, Ansprechperson, Adresse | vom Nutzer |
| Leistungsbeschrieb: Art, Umfang, Dauer, Ort/Format | vom Nutzer |
| Preis pro Position + Total | vom Nutzer |
| Referenznummer + Datum | selbst generieren: OFF-JJJJ-NN, laufende Nummer falls bekannt, sonst grob geschätzt |
| Gültigkeit | Standard: 30 Tage ab Ausstellungsdatum |
| Zahlungskonditionen | Standard 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)
- Briefkopf: Absender links, Offerte-Nr./Datum/Gültigkeit rechts, Trennlinie darunter
- Empfänger-Adresse
- Betreffzeile (fett)
- Anrede
- Einleitungssatz: Bezug auf Anfrage oder Gespräch, ein bis zwei Sätze, kein Marketing
- Leistungstabelle: Position, Beschreibung, Menge, Einzelpreis, Total
- Summenblock: Zwischentotal, Total (fett), MWSt-Hinweis
- Zahlungs- und Gültigkeitsbedingungen
- 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
| Datei | Zweck |
|---|---|
assets/offerte_template.html.j2 | HTML/CSS-Vorlage (A4, WeasyPrint-tauglich, Jinja2-Platzhalter) |
assets/schema_beispiel.json | Beispiel-Datensatz, zeigt das erwartete JSON-Schema vollständig |
scripts/generate_pdf.py | füllt die HTML-Vorlage mit den Daten und rendert sie zu PDF |
scripts/generate_docx.js | baut 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 Zapier | selected_api | Für |
|---|---|---|
| Microsoft Outlook | MicrosoftOutlookCLIAPI | Persönliches Outlook/Outlook.com-Postfach |
| Microsoft Office 365 | MicrosoftOffice365CLIAPI | Geschä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):
- Prüfen, ob die passende App schon aktiv ist:
Zapier:inspect_zapier_actionsmitselected_apider gewählten App. - Falls nicht aktiv:
Zapier:discover_zapier_actionsmit dem App-Namen, dannZapier:enable_zapier_actionmit dem gefundenenselected_api. Das liefert bei Bedarf auch den Autorisierungslink für den Nutzer. - 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). - 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() Zapier:execute_zapier_write_actionmit der in Schritt 3 gefundenenaction,selected_apiund 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
Paso a paso: descargar, subir, adaptar
Sin instalacion, sin carpetas, sin terminal. Descarga el archivo, subelo a la herramienta de chat que prefieras y adaptalo con un prompt.
Haz clic arriba en «SKILL.md». Recibes un unico archivo markdown. Ademas existe un paquete completo con plantillas.
Los skills son texto plano: adapta tono, idioma, publico y formato de salida para tu uso propio. La licencia no permite republicar versiones modificadas. FAQ sobre adaptacion, uso propio y republicacion
Licencia y uso
Este skill se publica bajo Creative Commons BY-NC-ND 4.0 – atribucion, sin uso comercial y sin obras derivadas. Esta pensado unicamente para uso propio: descargalo, usalo en tu entorno de trabajo y compartelo citando la fuente. No se permiten la reventa, la redistribucion como producto propio, la explotacion comercial ni la publicacion de versiones modificadas. Para licencias comerciales, ponte en contacto.