Skip to content

AVV-Onboarding — Umgesetzt (2026-04-22)

Ziel

Der Auftragsverarbeitungsvertrag (AVV nach Art. 28 DSGVO) wird waehrend des Onboarding-Prozesses automatisch mit den Kundendaten befuellt, als PDF gerendert und dem Kunden bereitgestellt. Kein manuelles Ausfuellen, kein Papier, kein Postversand.

Ist-Zustand

Onboarding-Schritte (6 Steps)

StepDatenRelevant fuer AVV
1. SubdomainhostingType, facilityType, subdomainJa (Leistungsmodell)
2. RechnungsadressebillingCompany, Strasse, PLZ, Ort, Land, USt-IDJa (Vertragspartner)
3. AnsprechpartnerVorname, Nachname, E-Mail, TelefonJa (Vertretungsberechtigt)
4. Admin-ZugangUsername, PasswortNein
5. Tarif & ZahlungstaffCount, studentsCount, parentsCount, Tier, ZahlungsartJa (Leistungsumfang)
6. RechtlichesAGB, Datenschutz, AV-Vertrag CheckboxenJa (Zustimmung)

AVV-Vorlage

AVV_priolog_Art28_DSGVO_Schulen_cleaned.md — 691 Zeilen, enthält:

  • Vertragsparteien (Platzhalter fuer Kundendaten)
  • §1-§13 Vertragsbedingungen
  • Anlage 1: Verarbeitungsbeschreibung (mit Leistungsmodell-Auswahl)
  • Anlage 2: TOMs
  • Anlage 3: Unterauftragsverarbeiter
  • Anlage 4: Elektronischer Abschluss

Platzhalter im AVV die befuellt werden muessen

PlatzhalterQuelle aus Onboarding
Name der Schule / EinrichtungbillingCompany
AnschriftbillingStreet, billingZip, billingCity
Vertretungsberechtigte PersoncontactTechFirstname + contactTechLastname
E-Mail / DatenschutzkontaktcontactTechEmail
Leistungsmodell (Light/Pro/On-Premises)hostingType → Light oder Pro
DatumZeitpunkt der Zustimmung

Architektur

Onboarding-Frontend (Step 6: Rechtliches)

        │  [1] Kunde sieht AVV-Vorschau mit eingesetzten Daten
        │  [2] Kunde klickt "AVV digital abschliessen"


Backend API: POST /api/public/orders

        │  [3] AVV-Template + Kundendaten → Markdown rendern
        │  [4] Markdown → PDF (via Puppeteer/html-pdf)
        │  [5] PDF in S3 speichern
        │  [6] Protokollierung (Version, Zeitstempel, IP, E-Mail)
        │  [7] PDF per Mail an Kunden senden


Ergebnisse:
  ├── S3: avv/{orderId}/AVV_{subdomain}_{date}.pdf
  ├── DB: avv_consent_log (Nachweis)
  ├── Admin: GET /admin/orders/{id}/avv (PDF Download)
  └── Kunde: Success-Page + E-Mail mit PDF-Link

Umsetzung in 5 Phasen

Phase 1: AVV-Template als Funktion (Backend)

Eine Funktion die das Markdown-Template nimmt und Platzhalter ersetzt:

typescript
function renderAvvMarkdown(data: {
  companyName: string;
  address: string;
  representative: string;
  email: string;
  plan: 'light' | 'pro' | 'on-premises';
  subdomain: string;
  signedAt: Date;
}): string {
  // Ersetzt Platzhalter im AVV-Template
  // Setzt Checkbox bei gewaehltem Leistungsmodell
  // Fuegt Datum und Unterschrifts-Block ein
}

Aufwand: 0.5 Tage

Phase 2: PDF-Rendering (Backend)

Markdown → HTML → PDF. Drei Optionen:

OptionVorteilNachteil
PuppeteerPerfektes Rendering, CSS-KontrolleSchwer (~300MB Chrome), langsam
md-to-pdfLeichtgewichtig, npm-PaketWeniger Kontrolle ueber Layout
Eigener HTML→PDF via wkhtmltopdfSchnell, kein Chrome noetigMuss installiert sein

Empfehlung: md-to-pdf — einfach, kein Chrome noetig, reicht fuer ein Vertragsdokument.

typescript
import { mdToPdf } from 'md-to-pdf';

async function generateAvvPdf(markdown: string): Promise<Buffer> {
  const result = await mdToPdf({ content: markdown }, {
    pdf_options: {
      format: 'A4',
      margin: { top: '25mm', bottom: '25mm', left: '20mm', right: '20mm' },
    },
    stylesheet: 'assets/avv-style.css', // Corporate Design
  });
  return result.content;
}

Aufwand: 0.5 Tage

Phase 3: Speicherung + Protokollierung (Backend)

S3-Speicherung:

s3://prilog-files/avv/{orderId}/AVV_{subdomain}_{YYYY-MM-DD}.pdf

DB-Protokollierung (neue Tabelle avv_consent_log):

FeldTypInhalt
idcuidPrimary Key
orderIdstringZuordnung zur Bestellung
tenantIdstringTenant-Referenz
versionstringAVV-Versionsnummer (z.B. "1.0")
contentHashstringSHA-256 des gerenderten Markdown
signedAtdatetimeZeitpunkt der Zustimmung
signedBystringName der zustimmenden Person
signedByEmailstringE-Mail
ipAddressstringIP zum Zeitpunkt der Zustimmung
userAgentstringBrowser-Info
pdfStorageKeystringS3-Pfad zur PDF
planstringGewaehltes Leistungsmodell

Entspricht exakt den Anforderungen aus Anlage 4, Abschnitt D des AVV.

Aufwand: 0.5 Tage

Phase 4: Onboarding-Integration (Frontend + Backend)

Frontend (step-legal.tsx) erweitern:

  1. AVV-Vorschau — unter der Checkbox ein aufklappbarer Bereich der den AVV mit eingesetzten Kundendaten zeigt
  2. PDF-Download-Button — "AVV als PDF herunterladen" (generiert on-demand)
  3. Checkbox-Text anpassen:

    "Ich habe den Auftragsverarbeitungsvertrag (AVV) einschliesslich Anlagen gelesen, konnte ihn herunterladen und schliesse ihn in elektronischer Form fuer die genannte Einrichtung ab."

Backend (POST /api/public/orders) erweitern:

Nach erfolgreicher Bestellung:

  1. AVV-Markdown rendern mit Kundendaten
  2. PDF generieren
  3. In S3 speichern
  4. Consent in avv_consent_log protokollieren
  5. PDF-URL in Order speichern

Aufwand: 1 Tag

Phase 5: Auslieferung (Success-Page + E-Mail + Admin)

Success-Page (nach Bestellung):

  • "Ihre Instanz wird eingerichtet..."
  • Download-Button: "Auftragsverarbeitungsvertrag (PDF)"
  • Link bleibt dauerhaft gueltig (S3 Presigned URL, 7 Tage, danach ueber Portal)

E-Mail (automatisch nach Bestellung):

  • Bestellbestaetigung + AVV als PDF-Anhang
  • Text: "Anbei erhalten Sie den Auftragsverarbeitungsvertrag fuer Ihre Unterlagen."

Admin-Panel (admin.prilog.chat):

  • Pro Order: "AVV herunterladen" Button
  • Consent-Log einsehbar (wer hat wann mit welcher IP zugestimmt)

Kunden-Portal (portal.prilog.chat):

  • Unter "Abrechnung" oder "Rechtliches": AVV jederzeit erneut downloadbar

Aufwand: 1 Tag


Gesamtaufwand

PhaseAufwand
1. Template-Rendering0.5 Tage
2. PDF-Generierung0.5 Tage
3. Speicherung + Protokollierung0.5 Tage
4. Onboarding-Integration1 Tag
5. Auslieferung (Success, Mail, Admin, Portal)1 Tag
Gesamt~3.5 Tage

Sicherheit + Compliance

Nachweis-Kette (Audit Trail)

Fuer jeden AVV-Abschluss wird dokumentiert:

  1. Vertragsversion + Content-Hash (beweist welche Version akzeptiert wurde)
  2. Zeitstempel (sekundengenau)
  3. Identitaet (Name + E-Mail des Zustimmenden)
  4. Technische Daten (IP, User-Agent, Session-ID)
  5. PDF-Kopie in S3 (unveraenderbar nach Erstellung)

DSGVO Art. 28 Abs. 9

"Der Vertrag [...] wird schriftlich abgefasst, was auch in einem elektronischen Format erfolgen kann."

Unser Prozess erfuellt diese Anforderung:

  • Vollstaendiger Vertragstext vor Abschluss einsehbar und downloadbar
  • Aktive Bestaetigungshandlung (Checkbox + Klick)
  • Vertretungsberechtigung wird bestaetigt
  • Nachweis wird dauerhaft gespeichert

Versionierung

Wenn sich der AVV aendert:

  • Neue Version in der Template-Datei
  • Bestehende Kunden behalten ihre unterzeichnete Version (in S3)
  • Neue Kunden bekommen die aktuelle Version
  • Bei wesentlichen Aenderungen: bestehende Kunden per Mail informieren + neue Zustimmung einholen