From a7838e4db6773e9d7aaf0888acfa773549a5e677 Mon Sep 17 00:00:00 2001 From: JUSN Date: Thu, 16 Jul 2026 08:32:10 +0200 Subject: [PATCH] =?UTF-8?q?Pitch-Dokument=20(Word):=20Datenschutz=20&=20Si?= =?UTF-8?q?cherheit=20f=C3=BCr=20Kooperationspartner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - rechtliches/BehoerdenKlar-Datenschutz.docx — pitchfertiges Word-Dokument im Marken-Look (Kernaussage-Box, Datenfluss-Schritte, Maßnahmen-Tabelle, transparente Punkte, Kontakt-Box) - rechtliches/datenschutz-docx-generator.js — docx-js-Skript zum Neu-Erzeugen (node datenschutz-docx-generator.js , braucht `npm i docx`) Co-Authored-By: Claude Opus 4.8 --- .gitignore | 3 + rechtliches/BehoerdenKlar-Datenschutz.docx | Bin 0 -> 12042 bytes rechtliches/datenschutz-docx-generator.js | 280 +++++++++++++++++++++ 3 files changed, 283 insertions(+) create mode 100644 rechtliches/BehoerdenKlar-Datenschutz.docx create mode 100644 rechtliches/datenschutz-docx-generator.js diff --git a/.gitignore b/.gitignore index 0fe3ac6..fe138fe 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,6 @@ yarn-error.* # generated native folders /ios /android + +# generierte Vorschau-Bilder +*.docx.png diff --git a/rechtliches/BehoerdenKlar-Datenschutz.docx b/rechtliches/BehoerdenKlar-Datenschutz.docx new file mode 100644 index 0000000000000000000000000000000000000000..09a127834c3bfd8b76a4f038bf93e277b9c43720 GIT binary patch literal 12042 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 new TableRow({ + children: [ + zelle(a, { fett: true, breite: B1, farbe: i % 2 ? GRAU_HELL : WEISS }), + zelle(b, { breite: B2, farbe: i % 2 ? GRAU_HELL : WEISS }), + ], + })); + return new Table({ + columnWidths: [B1, B2], + width: { size: B1 + B2, type: WidthType.DXA }, + borders: { + top: { style: BorderStyle.SINGLE, size: 2, color: 'D5DBE2' }, + bottom: { style: BorderStyle.SINGLE, size: 2, color: 'D5DBE2' }, + left: { style: BorderStyle.SINGLE, size: 2, color: 'D5DBE2' }, + right: { style: BorderStyle.SINGLE, size: 2, color: 'D5DBE2' }, + insideHorizontal: { style: BorderStyle.SINGLE, size: 2, color: 'D5DBE2' }, + insideVertical: { style: BorderStyle.SINGLE, size: 2, color: 'D5DBE2' }, + }, + rows: [kopf, ...zeilen], + }); +} + +// ---------- Datenfluss-Schritt (nummerierte Box) ---------- +function flussSchritt(nr, titel, text) { + return new Table({ + columnWidths: [720, 8640], + width: { size: 9360, type: WidthType.DXA }, + borders: { + top: { style: BorderStyle.NONE }, bottom: { style: BorderStyle.NONE }, + left: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE }, + insideHorizontal: { style: BorderStyle.NONE }, insideVertical: { style: BorderStyle.NONE }, + }, + rows: [new TableRow({ children: [ + new TableCell({ + width: { size: 720, type: WidthType.DXA }, + verticalAlign: 'center', + children: [new Paragraph({ + alignment: AlignmentType.CENTER, spacing: { after: 0 }, + children: [new TextRun({ text: String(nr), bold: true, size: 34, color: BLAU, font: FONT })], + })], + }), + new TableCell({ + width: { size: 8640, type: WidthType.DXA }, + margins: { top: 40, bottom: 40, left: 120 }, + children: [new Paragraph({ + spacing: { after: 40, line: 264 }, + children: [ + new TextRun({ text: titel + ' ', bold: true, size: 21, color: TINTE, font: FONT }), + new TextRun({ text, size: 21, color: GRAU, font: FONT }), + ], + })], + }), + ] })], + }); +} + +function trennlinie() { + return new Paragraph({ + spacing: { before: 60, after: 200 }, + border: { bottom: { style: BorderStyle.SINGLE, size: 6, color: BLAU } }, + children: [new TextRun({ text: '', size: 2 })], + }); +} + +// ---------- Dokument ---------- +const doc = new Document({ + creator: 'BehördenKlar', + title: 'BehördenKlar — Datenschutz & Sicherheit', + numbering: { + config: [{ + reference: 'punkte', + levels: [{ + level: 0, format: LevelFormat.BULLET, text: '•', + alignment: AlignmentType.LEFT, + style: { run: { color: BLAU }, paragraph: { indent: { left: 360, hanging: 220 } } }, + }], + }], + }, + styles: { default: { document: { run: { font: FONT, size: 21, color: TINTE } } } }, + sections: [{ + properties: { + page: { + size: { width: 11906, height: 16838 }, // A4 + margin: { top: 1250, bottom: 1250, left: 1418, right: 1418 }, // ~2,5 cm + }, + }, + children: [ + // ===== Kopf ===== + new Paragraph({ + spacing: { after: 40 }, + children: [new TextRun({ text: '📬 BehördenKlar', bold: true, size: 40, color: BLAU, font: FONT })], + }), + new Paragraph({ + spacing: { after: 60 }, + children: [new TextRun({ text: 'Datenschutz & Sicherheit auf einen Blick', size: 26, color: TINTE, font: FONT })], + }), + new Paragraph({ + spacing: { after: 40 }, + children: [new TextRun({ text: 'Für Beratungsstellen, Sozialverbände und Kooperationspartner', italics: true, size: 21, color: GRAU, font: FONT })], + }), + new Paragraph({ + spacing: { after: 120 }, + children: [new TextRun({ text: 'Stand: 15.07.2026 · behoerdenbriefhelfer@gmail.com · behoerdenklar.pages.dev', size: 18, color: GRAU, font: FONT })], + }), + trennlinie(), + + // ===== Was ist die App ===== + absatz([ + new TextRun({ text: 'BehördenKlar hilft Menschen, Behördenbriefe zu verstehen: ', size: 21, color: TINTE, font: FONT }), + new TextRun({ text: 'Brief fotografieren, Erklärung in einfacher Sprache erhalten — mit Fristen, Checkliste und Antwort-Hilfe, auf Wunsch in 9 weiteren Sprachen. Weil Behördenbriefe hochsensible Daten enthalten, wurde die App von Grund auf datensparsam gebaut. Dieses Dokument erklärt transparent, was mit den Daten passiert — auch die Punkte, die noch offen sind.', size: 21, color: TINTE, font: FONT }), + ], { after: 160 }), + + // ===== Kernaussage-Box ===== + new Table({ + columnWidths: [9360], + width: { size: 9360, type: WidthType.DXA }, + borders: { + top: { style: BorderStyle.SINGLE, size: 2, color: BLAU_HELL }, + bottom: { style: BorderStyle.SINGLE, size: 2, color: BLAU_HELL }, + left: { style: BorderStyle.SINGLE, size: 18, color: BLAU }, + right: { style: BorderStyle.SINGLE, size: 2, color: BLAU_HELL }, + }, + rows: [new TableRow({ children: [new TableCell({ + width: { size: 9360, type: WidthType.DXA }, + shading: { type: ShadingType.CLEAR, fill: BLAU_HELL, color: 'auto' }, + margins: { top: 130, bottom: 130, left: 170, right: 170 }, + children: [new Paragraph({ + spacing: { after: 0, line: 276 }, + children: [ + new TextRun({ text: 'Das Wichtigste in einem Satz: ', bold: true, size: 21, color: BLAU, font: FONT }), + new TextRun({ text: 'Es gibt kein Nutzerkonto und keinen zentralen Datenspeicher — die Briefe Ihrer Klientinnen und Klienten liegen verschlüsselt auf deren eigenem Handy, nicht bei uns.', size: 21, color: TINTE, font: FONT }), + ], + })], + })] })], + }), + + // ===== Datenfluss ===== + h1('Der Datenfluss beim Scannen'), + flussSchritt(1, 'Foto entsteht auf dem Gerät', 'und wird vor dem Versand verkleinert.'), + flussSchritt(2, 'Übertragung TLS-verschlüsselt', 'an unseren Vermittlungsserver (Cloudflare). Dieser leitet nur weiter und speichert keine Briefinhalte — nur einen anonymen Tageszähler pro Gerät für 48 Stunden.'), + flussSchritt(3, 'KI-Analyse bei Anthropic (USA)', 'Verarbeitung nur zur Analyse, Löschung nach spätestens 30 Tagen, keine Nutzung zum KI-Training.'), + flussSchritt(4, 'Ergebnis zurück aufs Gerät', 'dort endet der Weg. Keine Kopie bei uns.'), + + // ===== Schutzmaßnahmen ===== + h1('Schutzmaßnahmen in der App'), + absatz([new TextRun({ text: 'Alle folgenden Maßnahmen sind umgesetzt und technisch überprüfbar:', size: 21, color: GRAU, font: FONT, italics: true })], { after: 120 }), + massnahmeTabelle(), + + // ===== Ehrliche Punkte (auf neuer Seite) ===== + new Paragraph({ + heading: HeadingLevel.HEADING_1, + pageBreakBefore: true, + spacing: { before: 320, after: 140 }, + children: [new TextRun({ text: 'Woran wir transparent erinnern', bold: true, size: 30, color: BLAU, font: FONT })], + }), + absatz([new TextRun({ text: 'Vertrauen entsteht durch Ehrlichkeit — deshalb benennen wir auch das, was nicht perfekt ist:', size: 21, color: GRAU, font: FONT, italics: true })], { after: 120 }), + bullet('Die KI-Analyse läuft bei Anthropic (USA), auf Grundlage des EU-U.S. Data Privacy Framework bzw. EU-Standardvertragsklauseln. Eine Verarbeitung in der EU ist beim Anbieter derzeit nicht verfügbar; als Ausbaupfad prüfen wir den Betrieb über EU-Rechenzentren (AWS Frankfurt).', { fett: 'Verarbeitung in den USA:' }), + bullet('Anthropic hält Anfragen bis zu 30 Tage zur Missbrauchserkennung vor — danach automatische Löschung. Wir sagen das offen, statt „Ihre Daten verlassen nie das Handy" zu behaupten.', { fett: '30-Tage-Fenster:' }), + bullet('Die App erklärt Briefe, ersetzt aber keine Beratung — sie ist als Ergänzung Ihrer Arbeit gedacht, nicht als Ersatz.', { fett: 'Keine Rechtsberatung:' }), + bullet('Dieses Dokument ist eine Selbstauskunft, kein Zertifikat. Die vollständige Datenschutzerklärung ist öffentlich unter behoerdenklar.pages.dev/datenschutz.', { fett: 'Transparenz:' }), + + // ===== Nutzen für die Beratung ===== + h1('Warum das für Ihre Beratungsarbeit interessant ist'), + bullet('Klientinnen und Klienten verstehen Briefe bereits vor dem Termin — Ihre Beratungszeit fließt in die Lösung, nicht ins Vorlesen.'), + bullet('9 Übersetzungssprachen (u. a. Türkisch, Arabisch, Ukrainisch, Farsi) — die deutschen Fachbegriffe bleiben sichtbar und wiedererkennbar.'), + bullet('Große Schrift, große Tasten, einfache Sprache (A2/B1), Vorlese-Funktion — gebaut für Menschen, für die normale Apps zu kompliziert sind.'), + + // ===== Abschluss-Box ===== + new Paragraph({ spacing: { before: 200 } }), + new Table({ + columnWidths: [9360], + width: { size: 9360, type: WidthType.DXA }, + borders: { + top: { style: BorderStyle.SINGLE, size: 2, color: GRUEN }, + bottom: { style: BorderStyle.SINGLE, size: 2, color: GRUEN }, + left: { style: BorderStyle.SINGLE, size: 18, color: GRUEN }, + right: { style: BorderStyle.SINGLE, size: 2, color: GRUEN }, + }, + rows: [new TableRow({ children: [new TableCell({ + width: { size: 9360, type: WidthType.DXA }, + shading: { type: ShadingType.CLEAR, fill: 'EAF6EE', color: 'auto' }, + margins: { top: 150, bottom: 150, left: 170, right: 170 }, + children: [ + new Paragraph({ spacing: { after: 60, line: 276 }, children: [ + new TextRun({ text: 'Sprechen Sie uns an. ', bold: true, size: 22, color: GRUEN, font: FONT }), + new TextRun({ text: 'Wir zeigen die App gern persönlich und beantworten jede Datenschutz-Rückfrage.', size: 21, color: TINTE, font: FONT }), + ] }), + new Paragraph({ spacing: { after: 0 }, children: [ + new TextRun({ text: '📧 behoerdenbriefhelfer@gmail.com 🌐 behoerdenklar.pages.dev', size: 21, color: TINTE, font: FONT, bold: true }), + ] }), + ], + })] })], + }), + ], + }], +}); + +Packer.toBuffer(doc).then((buf) => { + const out = process.argv[2] || 'BehoerdenKlar-Datenschutz.docx'; + fs.writeFileSync(out, buf); + console.log('geschrieben:', out); +});