Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
Gobd Verfahrensdoku
翻譯準備中
正在載入完整 README。 以下為已儲存的摘錄。
Landing, Stripe Checkout (149 € Setup + 49 €/Monat), 5-Schritt-Intake, PDF-Entwurf (Kapitelgerüst + offene Punkte), Magic-Link-Konto. Ohne Stripe-, Sheets-, Blob- und Mail-Keys läuft der Demo-Pfad trotzdem (Stub-Checkout, Datei-Fallback, lokales PDF, Log-Stub statt E-Mail).檢視完整 README ↗
Landing, Stripe Checkout (149 € Setup + 49 €/Monat netto, zzgl. 19 % USt), 5-Schritt-Intake, PDF-Entwurf (Kapitelgerüst + offene Punkte), Magic-Link-Konto.
cp .env.example .env.local
npm install
npm run dev
Öffnen: http://localhost:3000
Ohne Stripe-, Sheets-, Blob- und Mail-Keys läuft der Demo-Pfad trotzdem (Stub-Checkout, Datei-Fallback, lokales PDF, Log-Stub statt E-Mail).
/checkout) — Primary; Preise netto zzgl. 19 % USt (brutto 177,31 € Einrichtung / 58,31 € Monat). Optional Readiness-Check (kostenlos) (/readiness) — 3 kurze Schritte, kein Stripe/readiness/success herunterladen; Lead in Tab readiness_leads (oder .data/readiness-leads.json)intakes) oder Datei-Fallback (lokal .data/intakes.json, auf Vercel /tmp/gobd-data/intakes.json)/success?session_id=…&document_id=…): PDF-Download, Angaben überarbeiten, Neue PDF-Version erzeugen, Versionshistorie. Fehlt document_id, reicht session_id — die App lädt die neueste Zeile zu dieser Stripe-Session./login (Magic Link) → /account (Firmen-Karten, Stammdaten bearbeiten, Neues Dokument, darunter Angaben überarbeiten + Dokument bearbeiten + Versionshistorie + Download + Abo verwalten → /account/billing). Alias: /meine-dokumente → /account. Neue Firma: /account/firma/neu (max. 5). Bearbeiten: /account/firma/{entity_id} (nur eigene Firma)./account → Dokument bearbeiten → /account/dokument/{document_id} (nur eingeloggt). Speichern schreibt Version N+1 inkl. chapter_content und neues PDF.Checkout Session im subscription-Modus mit zwei Line Items:
STRIPE_PRICE_SETUP_IDSTRIPE_PRICE_MONTHLY_IDSTRIPE_TAX_RATE_ID (Tax Rate, nicht Stripe Tax / automatic_tax)Beide Line Items bekommen tax_rates, das Abo zusätzlich subscription_data.default_tax_rates, damit auch die Folgerechnung 49 € netto + 19 % ausweist. Fehlt STRIPE_TAX_RATE_ID, läuft der Checkout ohne Steuer weiter und schreibt console.warn mit der Route /api/checkout. Der Build prüft nur den Codepfad (npm run check:checkout-tax), nicht die Variable. Es gibt keine Test-Tax-Rate; die ID nicht ins Repo schreiben.
Die Session ist fest currency: "eur" und locale: "de". adaptive_pricing.enabled ist false, damit Stripe keine Währungsumrechnung anbietet. Die Price-IDs bleiben die Euro-Preise.
Rechnungen entstehen über den Subscription-Modus. invoice_creation gilt nur für Einmalzahlungen und bleibt aus. Die USt-IdNr. des Anbieters ist der Account-Default in Stripe und steht dadurch auf der Rechnung, ohne Override im Code. Nur Inland: kein Reverse Charge.
success_url → {NEXT_PUBLIC_APP_URL}/intake?session_id={CHECKOUT_SESSION_ID}
cancel_url → {NEXT_PUBLIC_APP_URL}/
Kanonische Produktions-URL (kein Apex, kein trailing slash):
https://www.gobd-doku-erstellen.de
getAppUrl() normalisiert gobd-doku-erstellen.de → www. Der Apex-Host 308t auf www; Stripe muss direkt die www-success_url bekommen, sonst kann session_id in der Redirect-Kette verloren gehen.
Der Success-Redirect hängt nicht am Webhook. Intake prüft die Session per Stripe Retrieve (status === complete oder payment_status === paid).
In Stripe (Testmodus) anlegen:
.env.localSTRIPE_WEBHOOK_SECRET)Ohne Signing-Secret nimmt /api/stripe/webhook keine Events an (HTTP 503, klare Fehlermeldung; in Produktion production: true im JSON). Kein Platzhalter-Secret im Code — den Wert nur aus Stripe übernehmen.
Lokal (Stripe CLI):
stripe listen --forward-to localhost:3000/api/stripe/webhook
Die CLI gibt ein Secret aus (whsec_…). Das als STRIPE_WEBHOOK_SECRET in .env.local setzen (nach Änderung next dev neu starten).
Produktion (Stripe Dashboard):
https://www.gobd-doku-erstellen.de/api/stripe/webhookcheckout.session.completed, invoice.payment_failedwhsec_…) als STRIPE_WEBHOOK_SECRET in Vercel setzen und neu deployenEvents:
checkout.session.completed — Order-Zeile (status=paid, inkl. stripe_customer_id) + Onboarding-Stub; idempotent pro stripe_session_idinvoice.payment_failed — Failed-Payment-Stub (E-Mail aus Invoice oder Customer-Retrieve)In Stripe (Test- und Live-Modus): Settings → Billing → Customer portal aktivieren (Zahlungsmittel, Rechnungen, Abo kündigen — je nach Portal-Config). Ohne Live-Portal-Config schlägt billingPortal.sessions.create fehl (?portal=config).
Auf Meine Firmen (/account, Alias /meine-dokumente): Block Abo ist nach Login immer sichtbar. Abo verwalten führt auf /account/billing (nicht direkt ins Stripe-Portal). Ein Abo gilt für bis zu 5 Firmen (MAX_ENTITIES_PER_ACCOUNT).
/account/billing (Magic Link Pflicht):
以上為 README 的開頭部分。其餘內容請閱讀原文。 檢視完整 README ↗