generated from knso/webklar-preview-template
Compare commits
7
Commits
91437d37b4
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a5d237eca5 | ||
|
|
808d0dbbfe | ||
|
|
f5eea8ca66 | ||
|
|
82235dc529 | ||
|
|
6dc0207716 | ||
|
|
220e54b815 | ||
|
|
2af4b7ed41 |
No files matched your search
@@ -0,0 +1,146 @@
|
||||
# Stand: Präsentation MBE Kirchheimbolanden (Do 29.10.2026)
|
||||
|
||||
> Diese Datei halte ich (Claude) bei jedem Schritt aktuell.
|
||||
> Zeichen: ✅ erledigt · 🔄 läuft gerade · ⏳ als Nächstes · 👤 **machst du** · 💤 nach dem Termin
|
||||
>
|
||||
> Ausführlicher Prüfbericht mit allen 61 Funden: [plan-bis-29-10.md](plan-bis-29-10.md)
|
||||
|
||||
**Zuletzt aktualisiert:** Do 22.10.2026, nachts: **alles live**, inklusive Handy-Bedienung in 27 Sprachen. Nächster Schritt: deine Generalprobe.
|
||||
|
||||
---
|
||||
|
||||
## Wo wir stehen (in einem Satz)
|
||||
|
||||
**Live auf behoerdenklar.de** (Gesundheits-Check 10/10 grün). Dein Vorführ-Code: **`VORF-2EDF`**
|
||||
(30 Briefe, bis 30.11.). Morgen: Generalprobe 1 mit deinem Laptop und Handy.
|
||||
|
||||
---
|
||||
|
||||
## 1. Fertig gebaut (heute, 22.10.)
|
||||
|
||||
### Für die Beratungsstellen
|
||||
- ✅ **Einrichtungs-Code:** Die MBE bekommt einen Code wie `MBE-K7QX`, damit ist es für ihre Ratsuchenden kostenlos.
|
||||
Das Einlösen geht per QR-Code oder über ein Eingabefeld, auch mit Tippfehlern wie „mbe k7qx“.
|
||||
- ✅ **Werkzeug für Codes:** anlegen, Stand abfragen, aufladen, verlängern. Der Stand zeigt auch, **wie viele Briefe pro Woche und in welcher Sprache** genutzt wurden (für das Auswertungsgespräch).
|
||||
- ✅ **Kontingent leer oder abgelaufen:** kein Kaufangebot, stattdessen ein Hinweis mit deiner Telefonnummer.
|
||||
|
||||
### Handy ↔ PC (verschlüsselt per QR-Code)
|
||||
- ✅ **Handy als Kamera für den PC:** Die Erklärung erscheint am PC auf **Deutsch** und am Handy in der **Muttersprache**.
|
||||
- ✅ **Ergebnis aufs Handy mitnehmen** (QR-Code vom PC).
|
||||
- ✅ **Guthaben/Zugang aufs Handy holen** (QR-Code vom PC).
|
||||
- ✅ **App:** „Am Computer zeigen“ und „Vom Computer übernehmen“, im iPhone-Simulator getestet.
|
||||
|
||||
### Korrekturen aus der großen Prüfung (6 Blickwinkel)
|
||||
- ✅ Die Ampel zeigt am 29.10. **Rot** statt Gelb (sie rechnet jetzt in Kalendertagen).
|
||||
- ✅ Kein „Deutsch | Deutsch“ mehr, wenn die Übersetzung scheitert.
|
||||
- ✅ Die Beraterin bekommt **immer** eine deutsche Fassung.
|
||||
- ✅ Das Code-Feld bleibt sichtbar, auch nach den 2 Gratis-Analysen.
|
||||
- ✅ Das Handy sagt nach dem ersten Brief klar, wie es weitergeht.
|
||||
- ✅ Die Einwilligung gilt **pro Brief** und nennt Gesundheit, Herkunft und Aufenthalt.
|
||||
- ✅ Arabisch und Farsi werden richtig herum angezeigt (rechts nach links).
|
||||
- ✅ Der PC meldet Probleme („dauert ungewöhnlich lange“, „keine Verbindung“), statt endlos zu warten.
|
||||
- ✅ Die Seite funktioniert auch in Browsern, die das Speichern verbieten.
|
||||
- ✅ Größerer QR-Code und eine Sprachliste mit deutschem Zusatz („العربية – Arabisch“).
|
||||
|
||||
### Material
|
||||
- ✅ [Handzettel](handzettel.pdf) (A4 zum Dalassen). Der **QR-Code zeigt noch nicht auf den MBE-Code**, siehe Di 27.10.
|
||||
- ✅ [Musterbrief Ausländerbehörde](musterbrief-auslaenderbehoerde.pdf) (Termin 03.11., damit die Ampel rot ist)
|
||||
- ✅ [Ablaufplan / Spickzettel](ablaufplan.pdf) (2 Seiten, nur für dich)
|
||||
- ✅ Datenschutzerklärung ergänzt (Einrichtungs-Code, Übergabe, Nutzungszähler, „in der Regel 30 Tage“)
|
||||
|
||||
### Design
|
||||
- ✅ Die App sieht jetzt aus wie die Webseite (Papier, Amtsblau, Textmarker, Georgia-Schrift).
|
||||
|
||||
---
|
||||
|
||||
## 2. Gegenprüfung erledigt
|
||||
|
||||
- ✅ **Zweite Prüfung der Korrekturen:** 17 Funde, alle behoben und lokal getestet:
|
||||
- Bei der allerletzten Analyse einer Beratungsstelle erscheint kein Kaufangebot mehr, sondern dein Hinweis mit Telefonnummer.
|
||||
- Nach dem Aufladen oder Verlängern reicht ein Neuladen der Seite.
|
||||
- Das Handy erkennt seine eigene Sprache, wenn am PC „Deutsch“ steht, und speichert auf dem Handy der Person nichts dauerhaft.
|
||||
- Handy ohne Zugang: klarer Hinweis auf beiden Geräten statt einer Sackgasse.
|
||||
- Ein Neuladen am Handy beendet die Verbindung zum PC nicht mehr.
|
||||
- Kommt das Ergebnis nicht beim PC an, sagt das Handy das ehrlich und bietet „Noch einmal an den Computer senden“.
|
||||
- Der PC wartet geduldig, solange das Handy verbunden ist (z. B. wenn erst noch geredet wird).
|
||||
- Die Ampel nimmt das nächste kommende Datum, nicht ein schon vergangenes.
|
||||
- Der Worker antwortet bei jedem Fehler mit einer verständlichen Meldung, und die Protokolle enthalten keinen Briefinhalt.
|
||||
- Datenschutzerklärung: Server-Protokolle (max. 7 Tage) ergänzt, Nutzungszähler max. 13 Monate.
|
||||
- Startseite, **alle 27 Sprachseiten** und App: „in der Regel nach 30 Tagen gelöscht“ statt „spätestens“ (von Übersetzern umformuliert und gegengeprüft).
|
||||
- ✅ Alle Prüfungen grün: Webseite, Worker, App, 43 Tests.
|
||||
|
||||
> ⚠️ **Hinweis für die Generalproben:** Beim Musterbrief zeigt die Ampel **am Sa 24.10. Gelb** („Noch 10 Tage“) und am Mo 26.10. ebenfalls Gelb. Das ist richtig so. **Ab Di 27.10. ist sie rot.** Bildschirmfotos für den Notfall deshalb erst am Mi 28.10. machen.
|
||||
|
||||
## 2b. Zweiter Deploy (Do 22.10., nachts): live ✅
|
||||
|
||||
- ✅ **Bedienung am Handy in 27 Sprachen.** Einwilligung, Knöpfe, Hinweise, Fehlermeldungen, Ergebnis-Überschriften, Ampel, Kalender und Anruf-Hilfe kommen in der Sprache der Person, Arabisch/Farsi/Urdu/Paschtu von rechts nach links. **Am PC bleibt alles deutsch.** Je Sprache übersetzt und von einem Lektor geprüft, maschinell auf Vollständigkeit geprüft (0 Fehler).
|
||||
- ✅ Cloudflare-Kästchen passt auf schmale Handys. Oben steht „Für Sie kostenlos über …“ statt „2 Analysen gratis“.
|
||||
- ✅ Knopf für die Beratung umbenannt: „🔑 Zugang dauerhaft auf ein Handy geben (nur für Mitarbeitende)“, damit man ihn nicht mit „Lieber mit dem Handy fotografieren“ verwechselt.
|
||||
- ✅ **[Datenschutz-Blatt](datenschutz-blatt.pdf)** für die Datenschutzbeauftragte des Trägers (2 Seiten, gegen den Code geprüft).
|
||||
- ✅ **[Kurzanleitung](kurzanleitung-beratung.pdf)** für Beraterinnen (1 Seite). Der Code wird am Di 27.10. eingetragen.
|
||||
- ✅ **Webseite veröffentlicht**, Gesundheits-Check 12/12 grün.
|
||||
- ℹ️ Der Live-Test im automatisierten Browser ging nicht, weil Cloudflare ferngesteuerte Browser blockt. Deshalb ist der echte Test die **Generalprobe morgen mit deinen Geräten**.
|
||||
- ✅ **Sprach-Durchlauf (lokal, Handy-Größe 375 px):** alle 27 Sprachen nacheinander eingestellt. In jeder Sprache ist **kein deutscher Text mehr übrig**, **nichts ragt über den Rand**, die Schreibrichtung stimmt (Arabisch, Farsi, Urdu und Paschtu von rechts). Tigrinya und Hindi zusätzlich mit Bildschirmfoto angeschaut: Schrift sauber.
|
||||
- Noch offen: die **echte KI-Erklärung** in den Sprachen (kommt erst mit der Generalprobe) und eine Prüfung durch Muttersprachler für Tigrinya, Somali, Paschtu und Kurdisch (nach dem Termin).
|
||||
|
||||
## 3. Was du tun musst
|
||||
|
||||
- ✅ ~~„deploy“ schreiben~~: erledigt, live seit Do 22.10. abends.
|
||||
- 👤 **Fr 23.10.: Generalprobe 1** mit Laptop und Handy: `behoerdenklar.de/demo?code=VORF-2EDF`, Arabisch, Musterbrief (Ampel noch gelb = richtig).
|
||||
- ✅ ~~Mo 26.10. MBE anrufen~~: Entscheidung vom 22.10.: Träger und AVV klärst du **erst, wenn die MBE Interesse hat**, also im Termin oder danach. Den Satz dafür findest du im Spickzettel.
|
||||
- 👤 **Entscheiden: Testzeitraum.** „1 Monat“ (deine Wahl) oder ein festes Datum „bis 18.12.“ (mein Vorschlag, damit der Code nicht mitten in der Bestellung abläuft). Wichtig ist das erst beim Anlegen des Codes am Di 27.10.
|
||||
- 👤 **Generalproben mitmachen** (mit deinem Handy und Laptop, siehe unten).
|
||||
- 👤 🔴 **Alten Anthropic-Schlüssel tauschen**, der im Juli im Chat gepostet wurde (console.anthropic.com → API Keys).
|
||||
|
||||
---
|
||||
|
||||
## 4. Wochenplan
|
||||
|
||||
| Tag | Was | Wer |
|
||||
|---|---|---|
|
||||
| **Do 22.** | Korrekturen ✅, Gegenprüfung ✅, alles gesichert ✅ | Claude |
|
||||
| **Do 22.** | **Deploy** ✅, Vorführ-Code `VORF-2EDF` ✅, `npm run pruefung` ✅ | Claude |
|
||||
| **Fr 23. / Sa 24.** | **Generalprobe 1 mit echter KI:** Musterbrief, Arabisch **und** Farsi, mit Stoppuhr, Bildschirmfotos für den Notfall | du und Claude |
|
||||
| **So 25.** | Fehler aus der Probe beheben. (Datenschutz-Blatt und Kurzanleitung sind schon fertig ✅) | Claude |
|
||||
| **Mo 26.** | **Generalprobe 2.** Spätester Tag für Code-Änderungen am Worker. | du und Claude |
|
||||
| **Di 27.** | **MBE-Code anlegen**, in den Handzettel eintragen, gedruckten QR mit dem Handy testen, alles drucken (Handzettel 5×, Musterbrief 2×, Kurzanleitung 5×, Datenschutz-Blatt 2×). Ab abends **nichts mehr am Code ändern.** | du und Claude |
|
||||
| **Mi 28.** | **Generalprobe 3**, genau wie am Termin. Geräte laden, Checkliste vom Spickzettel. | du |
|
||||
| **Do 29.** | **Termin.** Ziel: Code übergeben und Auswertungstermin am 26.11. ausmachen. | du |
|
||||
|
||||
---
|
||||
|
||||
## 5. Wenn noch Zeit ist (vor dem Termin)
|
||||
|
||||
- ✅ ~~Arabische Bedienung~~: erledigt, sogar in allen 27 Sprachen.
|
||||
- ✅ ~~„Kostenlos über …“ im Seitenkopf~~: erledigt.
|
||||
|
||||
---
|
||||
|
||||
## 6. Nach dem Termin
|
||||
|
||||
- 💤 **AVV-Entwurf**, TOMs und Eintrag für das Verarbeitungsverzeichnis, bevor die MBE echte Briefe hochlädt.
|
||||
- 💤 **Mehrere Fotos pro Brief** (mehrseitige Briefe).
|
||||
- 💤 Knopf **„Drucken / als PDF“**.
|
||||
- 💤 Knopf **„Fertig, nächste Person“** für den Beratungs-PC.
|
||||
- 💤 Verbindung PC ↔ Handy übersteht ein Neuladen der Seite.
|
||||
- 💤 Wöchentliche Stand-Mail an die MBE, Erinnerung 7 Tage vor Testende.
|
||||
- 💤 Angebot und Rechnung (§ 19 UStG) bis zum 26.11.
|
||||
- 💤 App: Haiku 5.5 statt 4.5 prüfen (laut Preisliste ca. 10× günstiger).
|
||||
|
||||
---
|
||||
|
||||
## 7. Befehle, falls du selbst etwas machen willst
|
||||
|
||||
```bash
|
||||
# Stand eines Codes (inkl. Nutzung pro Woche und Sprache)
|
||||
node tools/einrichtungs-code.js stand MBE-XXXX
|
||||
|
||||
# Code verlängern
|
||||
node tools/einrichtungs-code.js verlaengern MBE-XXXX 2026-12-31
|
||||
|
||||
# Gesundheits-Check der Live-Seite (nach jedem Deploy)
|
||||
npm run pruefung
|
||||
|
||||
# Live-Logs des Workers ansehen (wenn bei der Probe etwas hakt)
|
||||
cd proxy && npx wrangler tail
|
||||
```
|
||||
@@ -14,25 +14,25 @@
|
||||
:root { --papier: #faf7f0; --tinte: #21211d; --grau: #6b675e; --amtsblau: #1d4e89; --rot: #b3372b; --marker: #ffe66b; --gruen: #2e7d4f; }
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
||||
body { font-family: Georgia, 'Times New Roman', serif; color: var(--tinte); }
|
||||
.seite { width: 210mm; height: 297mm; padding: 11mm 14mm; background: var(--papier); overflow: hidden; position: relative; page-break-after: always; font-size: 9.6pt; line-height: 1.4; }
|
||||
.seite { width: 210mm; height: 297mm; padding: 11mm 14mm; background: var(--papier); overflow: hidden; position: relative; page-break-after: always; font-size: 9.3pt; line-height: 1.34; }
|
||||
.seite:last-child { page-break-after: auto; }
|
||||
.mono { font-family: 'Courier New', monospace; }
|
||||
.kopf { display: flex; justify-content: space-between; align-items: baseline; border-bottom: 0.6mm solid var(--tinte); padding-bottom: 2mm; }
|
||||
.kopf b { font-size: 12.5pt; }
|
||||
.kopf span { font-family: 'Courier New', monospace; font-size: 8pt; color: var(--grau); }
|
||||
h1 { font-size: 20pt; line-height: 1.15; margin-top: 4mm; }
|
||||
h1 { font-size: 18pt; line-height: 1.15; margin-top: 3mm; }
|
||||
.markiert { background: linear-gradient(104deg, transparent 2%, var(--marker) 4%, var(--marker) 96%, transparent 98%); padding: 0 1.5mm; }
|
||||
.unter { color: var(--grau); margin-top: 1.5mm; font-size: 9.5pt; }
|
||||
h2 { font-family: 'Courier New', monospace; font-weight: 400; font-size: 8pt; text-transform: uppercase; letter-spacing: .14em; color: var(--grau);
|
||||
margin: 5mm 0 2.5mm; display: flex; gap: 3mm; align-items: center; }
|
||||
h2::after { content: ''; flex: 1; border-top: 0.25mm solid rgba(33,33,29,.25); }
|
||||
.schritt { display: grid; grid-template-columns: 17mm 1fr; gap: 3mm; padding: 2.4mm 0; border-bottom: 0.25mm dotted rgba(33,33,29,.35); }
|
||||
.schritt { display: grid; grid-template-columns: 17mm 1fr; gap: 3mm; padding: 1.6mm 0; border-bottom: 0.25mm dotted rgba(33,33,29,.35); }
|
||||
.zeit { font-family: 'Courier New', monospace; font-weight: 700; color: var(--amtsblau); font-size: 9pt; }
|
||||
.schritt h3 { font-size: 10.5pt; margin-bottom: .8mm; }
|
||||
.sag { border-left: 0.8mm solid var(--amtsblau); background: #fff; padding: 1.2mm 2.5mm; margin: 1mm 0; font-style: italic; }
|
||||
.sag { border-left: 0.8mm solid var(--amtsblau); background: #fff; padding: 1mm 2.5mm; margin: 0.8mm 0; font-style: italic; }
|
||||
ol, ul { padding-left: 5mm; }
|
||||
li { margin-bottom: .6mm; }
|
||||
.ziel { margin-top: 4mm; border: 0.6mm solid var(--tinte); box-shadow: 1.5mm 1.8mm 0 rgba(33,33,29,.9); background: #fff; padding: 3mm 4mm; }
|
||||
.ziel { margin-top: 3mm; border: 0.6mm solid var(--tinte); box-shadow: 1.5mm 1.8mm 0 rgba(33,33,29,.9); background: #fff; padding: 3mm 4mm; }
|
||||
.ziel b { color: var(--rot); }
|
||||
.zwei { display: grid; grid-template-columns: 1fr 1fr; gap: 5mm; }
|
||||
.kasten { background: #fff; border: 0.3mm solid rgba(33,33,29,.3); padding: 2.5mm 3.5mm; }
|
||||
@@ -68,23 +68,24 @@
|
||||
<h3>Live-Vorführung mit dem Musterbrief</h3>
|
||||
<ol>
|
||||
<li>Laptop: <b>behoerdenklar.de/demo</b> ist schon offen, Sprache <b>Arabisch</b> gewählt, Vorführ-Code eingelöst.</li>
|
||||
<li>„Lieber mit dem Handy fotografieren“ antippen, mit dem Handy den QR-Code scannen.</li>
|
||||
<li>Ausgedruckten Musterbrief fotografieren. <i>„Das dauert etwa eine Minute.“</i></li>
|
||||
<li>„Lieber mit dem Handy fotografieren“ erst jetzt antippen (QR gilt 15 Min.), mit dem Handy scannen. Am Handy: Häkchen, „Brief auswählen“, Foto, „Foto verwenden“.</li>
|
||||
<li>Ausgedruckten Musterbrief fotografieren. <i>„Das dauert ein bis zwei Minuten.“</i> In der Wartezeit den Datenschutz-Teil erzählen.</li>
|
||||
<li>Laptop zeigt die Erklärung <b>auf Deutsch</b>, das Handy <b>auf Arabisch</b>. Kurz umschalten.</li>
|
||||
<li>Zeigen: <b>rote Ampel</b> (Termin in 7 Tagen), <b>„In meinen Kalender“</b>, <b>Anruf-Hilfe</b> mit Aktenzeichen, Fachbegriff „Fiktionsbescheinigung“ bleibt deutsch.</li>
|
||||
<li>„Ergebnis aufs Handy mitnehmen“: So nimmt jemand die Erklärung nach der Beratung mit nach Hause.</li>
|
||||
<li>Zeigen: <b>rote Ampel</b> (Termin nächste Woche), <b>„In meinen Kalender“</b>, <b>Anruf-Hilfe</b> mit Aktenzeichen, Fachbegriff „Fiktionsbescheinigung“ bleibt deutsch.</li>
|
||||
<li>„Ergebnis aufs Handy mitnehmen“: eine Beraterin mit <b>ihrem</b> Handy scannen lassen. Den Kalender-Eintrag am Handy zeigen, nicht am Laptop.</li>
|
||||
</ol>
|
||||
<p class="sag">„Alles, was Sie sehen, geht ohne App, im Browser, auf jedem Handy, ohne Konto. Eine App kommt später dazu, zum Beispiel für Erinnerungen.“</p>
|
||||
</div></div>
|
||||
|
||||
<div class="schritt"><span class="zeit">8–9'</span><div>
|
||||
<h3>Datenschutz ehrlich (bevor sie fragen)</h3>
|
||||
<p class="sag">„Kein Konto, wir speichern keine Briefe. Zwischen PC und Handy ist alles Ende-zu-Ende verschlüsselt. Die Erklärung macht ein KI-Dienst in den USA, Anthropic. Der löscht nach spätestens 30 Tagen und trainiert nicht damit. Das steht auch vor dem Hochladen auf der Seite.“</p>
|
||||
<p class="sag">„Kein Konto, wir speichern keine Briefe. Zwischen PC und Handy ist alles Ende-zu-Ende verschlüsselt. Die Erklärung macht ein KI-Dienst in den USA, Anthropic. Der löscht in der Regel nach 30 Tagen und trainiert nicht damit. Das steht vor dem Hochladen auf der Seite, und die Person willigt für jeden Brief einzeln ein.“</p>
|
||||
</div></div>
|
||||
|
||||
<div class="schritt"><span class="zeit">9–11'</span><div>
|
||||
<h3>Das Angebot: Handzettel übergeben</h3>
|
||||
<p class="sag">„Ich möchte Ihnen einen Testzugang dalassen: einen Monat, bis zu 100 Briefe, kostenlos. Ihre Ratsuchenden zahlen nichts. Der Code steht hier auf dem Zettel.“</p>
|
||||
<p><b>Wenn Interesse da ist:</b> „Zu welchem Träger gehören Sie, und gibt es bei Ihnen eine Datenschutzbeauftragte? Dann schicke ich ihr unser Datenschutz-Blatt und auf Wunsch einen AVV.“</p>
|
||||
<p><b>Gleich den Auswertungstermin ausmachen:</b> „Darf ich in vier Wochen wiederkommen, am <b>Do 26.11.</b>, und hören, was es gebracht hat?“</p>
|
||||
</div></div>
|
||||
|
||||
@@ -113,7 +114,7 @@
|
||||
<li><b>Deploy erledigt</b>, <span class="mono">npm run pruefung</span> alles grün</li>
|
||||
<li>MBE-Code angelegt, im Handzettel eingetragen</li>
|
||||
<li>Handzettel <b>5×</b> gedruckt, Musterbrief <b>2×</b> gedruckt</li>
|
||||
<li>Einmal komplett durchgespielt, mit Stoppuhr</li>
|
||||
<li>Einmal komplett durchgespielt, mit Stoppuhr (Ampel erst ab Di 27.10. rot, vorher Gelb ist richtig)</li>
|
||||
<li>Screenshots und kurzes Video als Notfall offline auf dem Laptop</li>
|
||||
<li>Laptop und Handy laden, Ladekabel einpacken</li>
|
||||
</ul>
|
||||
@@ -121,7 +122,9 @@
|
||||
<ul class="check kasten">
|
||||
<li><b>Eigener Handy-Hotspot</b> an (nicht ihr WLAN)</li>
|
||||
<li>Demo-Seite offen, <b>Vorführ-Code</b> eingelöst, Arabisch gewählt</li>
|
||||
<li>Handy entsperrt, Kamera-App bereit, Ton aus</li>
|
||||
<li>Handy: Automatische Sperre „Nie“, Stromsparmodus aus, Ton aus</li>
|
||||
<li>Mac wach halten: im Terminal <span class="mono">caffeinate -d</span></li>
|
||||
<li>Oben steht „Kostenlos über MBE Donnersberg (Vorführung)“</li>
|
||||
<li>Notizblock und Stift</li>
|
||||
</ul>
|
||||
<h2>Notfallplan</h2>
|
||||
@@ -129,17 +132,22 @@
|
||||
<p><b>Kein Internet:</b> Hotspot. Wenn das auch nicht geht: Screenshots zeigen, <i>„Ich lasse Ihnen den Link da, probieren Sie es selbst.“</i></p>
|
||||
<p style="margin-top: 1.5mm;"><b>Die KI braucht lange:</b> ruhig weitererzählen (Datenschutz-Teil vorziehen).</p>
|
||||
<p style="margin-top: 1.5mm;"><b>Fehlermeldung:</b> nicht nervös werden, zweiten Musterbrief nehmen oder Screenshots.</p>
|
||||
<p style="margin-top: 1.5mm;"><b>Laptop hängt, Handy hat das Ergebnis:</b> einfach das Handy zeigen, dort auf Deutsch umschalten.</p>
|
||||
<p style="margin-top: 1.5mm;"><b>„Deutsch | Arabisch“ fehlt:</b> „Hier hat die Übersetzung gehakt“, Screenshots zeigen.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2 style="margin-top: 0;">Typische Fragen</h2>
|
||||
<div class="frage"><b>„Was passiert mit den Daten?“</b>Kein Konto. Wir speichern den Brief nicht. Die KI (Anthropic, USA) löscht nach spätestens 30 Tagen, kein Training. PC ↔ Handy Ende-zu-Ende verschlüsselt.</div>
|
||||
<div class="frage"><b>„Was passiert mit den Daten?“</b>Kein Konto. Wir speichern den Brief nicht. Den Brief muss die KI lesen (Anthropic, USA): in der Regel nach 30 Tagen gelöscht, kein Training. Die Übergabe PC ↔ Handy ist zusätzlich Ende-zu-Ende verschlüsselt. Einen AVV bekommt Ihr Datenschutzbeauftragter von mir.</div>
|
||||
<div class="frage"><b>„Ist das nicht einfach ChatGPT?“</b>ChatGPT braucht ein Konto und eine gute Frage, und danach ist der Brief vergessen. Hier reicht ein Foto: Frist in den Kalender, Spickzettel fürs Telefon. Wir erfinden keine Nummern oder Daten.</div>
|
||||
<div class="frage"><b>„Ersetzt das unsere Beratung?“</b>Nein. Jede Erklärung verweist bei wichtigen Entscheidungen auf eine Beratungsstelle. Die einfachen Fälle werden abgefangen, die schweren kommen vorbereitet.</div>
|
||||
<div class="frage"><b>„Was kostet das nach dem Test?“</b>Ein festes Briefkontingent für die Einrichtung, Ratsuchende zahlen nichts. <span class="klein">Nur auf Nachfrage Zahlen: 100 Briefe 20 €, 500 Briefe 75 €. Untergrenze 10 ct pro Brief. Keine USt. (§ 19).</span></div>
|
||||
<div class="frage"><b>„Was kostet Sie ein Brief?“</b>Ehrlich: ein paar Cent für die KI, dazu Server, Zahlungsgebühren und Arbeitszeit.</div>
|
||||
<div class="frage"><b>„Gibt es eine App?“</b>Sie ist in Arbeit. Alles Gezeigte geht ohne App. <i>Keinen Termin versprechen.</i></div>
|
||||
<div class="frage"><b>„Mehrseitige Briefe?“</b>Zurzeit ein Foto pro Erklärung: die Seite mit Betreff und Frist. Ein Scanner-PDF am PC geht mehrseitig.</div>
|
||||
<div class="frage"><b>„Die Bedienung ist ja Deutsch?“</b>Die Erklärung kommt in der Muttersprache. Die Knöpfe übersetze ich als Nächstes, gern mit Ihrer Hilfe beim Gegenlesen.</div>
|
||||
<div class="frage"><b>„Kann man das ausdrucken?“</b>Kommt als Nächstes. Bis dahin: Kalender-Eintrag und „Mitnehmen“ aufs Handy.</div>
|
||||
<div class="frage"><b>„Wer steckt dahinter?“</b>Ich, mit der Webklar GbR in Winnweiler. Aus dem Donnersbergkreis.</div>
|
||||
|
||||
<h2>Nicht sagen</h2>
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,357 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Datenschutz-Blatt für die Datenschutzbeauftragte des Trägers (2 Seiten A4).
|
||||
Beschreibt die WEBSEITE behoerdenklar.de/demo inkl. Einrichtungs-Code und
|
||||
Übergabe PC <-> Handy. Ersetzt für die Webseite das alte Factsheet vom Juli
|
||||
(rechtliches/datenschutz-factsheet.md beschreibt die App).
|
||||
Quellen: webseite/datenschutz.html (Stand 22.10.2026), proxy/src/index.ts,
|
||||
webseite/demo.html, webseite/uebergabe.js, proxy/wrangler.toml.
|
||||
PDF: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless=new \
|
||||
--disable-gpu --allow-file-access-from-files --no-pdf-header-footer \
|
||||
--print-to-pdf=datenschutz-blatt.pdf "file://$PWD/datenschutz-blatt.html"
|
||||
-->
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Datenschutz auf einen Blick</title>
|
||||
<script src="../../webseite/qrcode.js"></script>
|
||||
<style>
|
||||
@page { size: A4; margin: 0; }
|
||||
:root {
|
||||
--papier: #faf7f0; --tinte: #21211d; --grau: #6b675e; --text: #3a3833;
|
||||
--amtsblau: #1d4e89; --stempelrot: #b3372b; --marker: #ffe66b; --gruen: #2e7d4f;
|
||||
}
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
||||
body { font-family: Georgia, 'Times New Roman', serif; color: var(--tinte); background: #fff; }
|
||||
.seite {
|
||||
width: 210mm; height: 297mm; overflow: hidden; position: relative;
|
||||
padding: 11mm 14mm 0;
|
||||
background: repeating-linear-gradient(0deg, transparent 0 6.5mm, rgba(33,33,29,0.03) 6.5mm 6.7mm), var(--papier);
|
||||
font-size: 8.8pt; line-height: 1.36;
|
||||
page-break-after: always; break-after: page;
|
||||
}
|
||||
.seite:last-child { page-break-after: auto; break-after: auto; }
|
||||
.mono { font-family: 'Courier New', ui-monospace, monospace; }
|
||||
|
||||
.briefkopf { display: flex; justify-content: space-between; align-items: baseline; padding-bottom: 2mm; border-bottom: 0.6mm solid var(--tinte); }
|
||||
.absender { font-weight: 700; font-size: 12.5pt; }
|
||||
.absender small { font-weight: 400; font-size: 8pt; opacity: .6; letter-spacing: .04em; }
|
||||
.az { color: var(--grau); font-size: 8pt; }
|
||||
.betreff { margin-top: 4mm; font-size: 8pt; color: var(--grau); text-transform: uppercase; letter-spacing: .14em; }
|
||||
h1 { font-size: 22pt; line-height: 1.14; margin-top: 1mm; letter-spacing: -0.01em; }
|
||||
.markiert { background: linear-gradient(104deg, transparent 2%, var(--marker) 4%, var(--marker) 96%, transparent 98%); padding: 0 1.5mm; }
|
||||
.anrede { margin-top: 2mm; font-size: 9.6pt; line-height: 1.4; }
|
||||
.anrede i { color: var(--grau); }
|
||||
|
||||
h2 { font-size: 8pt; text-transform: uppercase; letter-spacing: .14em; color: var(--grau); font-weight: 400;
|
||||
margin: 3.8mm 0 2mm; display: flex; align-items: center; gap: 2.5mm; }
|
||||
h2 .nr { font-family: 'Courier New', monospace; font-weight: 700; color: var(--amtsblau); letter-spacing: 0; font-size: 9pt; }
|
||||
h2::after { content: ''; flex: 1; border-top: 0.25mm solid rgba(33,33,29,.25); }
|
||||
|
||||
.zwei { display: grid; grid-template-columns: 1fr 1fr; gap: 5mm; }
|
||||
.eins-box { display: grid; grid-template-columns: 1fr 81mm; gap: 5mm; align-items: start; }
|
||||
|
||||
.kasten { background: #fff; border: 0.5mm solid var(--tinte); padding: 3.4mm 3.6mm 2.4mm; position: relative; }
|
||||
.kasten .label { position: absolute; top: -2.6mm; left: 3.5mm; font-family: 'Courier New', monospace; font-size: 7pt;
|
||||
text-transform: uppercase; letter-spacing: .1em; background: var(--tinte); color: var(--papier); padding: .4mm 2mm; }
|
||||
ul.haken { list-style: none; font-size: 8.5pt; line-height: 1.32; }
|
||||
ul.haken li { padding-left: 4mm; position: relative; margin-bottom: .9mm; }
|
||||
ul.haken li::before { content: '✓'; position: absolute; left: 0; color: var(--gruen); font-weight: 700; }
|
||||
ul.haken li.ehrlich::before { content: '!'; color: var(--stempelrot); left: .8mm; }
|
||||
|
||||
/* Datenfluss */
|
||||
.schritte { display: grid; grid-template-columns: 1fr 1fr; gap: 2mm 5mm; }
|
||||
.schritt { display: grid; grid-template-columns: 6mm 1fr; gap: 1.2mm; font-size: 8.5pt; line-height: 1.32; color: var(--text); }
|
||||
.schritt .n { font-family: 'Courier New', monospace; font-weight: 700; font-size: 10.5pt; color: var(--amtsblau);
|
||||
border: 0.35mm solid var(--amtsblau); background: #fff; width: 5.4mm; height: 5.4mm; display: flex; align-items: center; justify-content: center; }
|
||||
.schritt b { color: var(--tinte); }
|
||||
.wege { display: grid; grid-template-columns: 1fr 1fr; gap: 5mm; margin-top: 2.6mm; }
|
||||
.weg { border: 0.3mm solid rgba(33,33,29,.35); background: #fff; padding: 1.5mm 2.4mm; font-size: 8pt; line-height: 1.3; color: var(--text); }
|
||||
.weg b { color: var(--tinte); }
|
||||
|
||||
/* Tabellen */
|
||||
table { width: 100%; border-collapse: collapse; font-size: 8pt; line-height: 1.24; }
|
||||
th { font-family: 'Courier New', monospace; font-weight: 400; font-size: 7pt; text-transform: uppercase; letter-spacing: .1em;
|
||||
color: var(--grau); text-align: left; padding: 0 2mm .8mm 0; border-bottom: 0.4mm solid var(--tinte); }
|
||||
td { padding: .8mm 2mm .8mm 0; vertical-align: top; border-bottom: 0.25mm dotted rgba(33,33,29,.35); color: var(--text); }
|
||||
td:first-child { color: var(--tinte); font-weight: 700; }
|
||||
td.dauer { color: var(--tinte); }
|
||||
td.dauer b { color: var(--amtsblau); }
|
||||
tr.gruppe td { font-family: 'Courier New', monospace; font-weight: 400; font-size: 7pt; text-transform: uppercase; letter-spacing: .1em;
|
||||
color: var(--papier); background: var(--tinte); padding: .4mm 2mm; border-bottom: none; }
|
||||
tr.gruppe.hell td { background: rgba(33,33,29,.12); color: var(--grau); }
|
||||
tr.nebensache td { color: var(--grau); }
|
||||
tr.nebensache td:first-child { color: #4d4a43; }
|
||||
.tabfuss { font-size: 7.8pt; color: var(--grau); margin-top: 1.4mm; line-height: 1.32; }
|
||||
.tabfuss b { color: var(--tinte); }
|
||||
|
||||
/* Rollen */
|
||||
.fall h3 { font-size: 9.8pt; line-height: 1.22; margin-bottom: .9mm; }
|
||||
.fall p { font-size: 8.4pt; line-height: 1.32; color: var(--text); margin-bottom: 1mm; }
|
||||
.fall p:last-child { margin-bottom: 0; }
|
||||
.fall .folge { color: var(--tinte); border-left: 0.8mm solid var(--amtsblau); padding-left: 2.2mm; }
|
||||
.fall .folge b { color: var(--amtsblau); }
|
||||
.absprache { margin-top: 3mm; font-size: 8.4pt; line-height: 1.34; color: var(--text); }
|
||||
.absprache .gross { font-weight: 700; font-size: 10.4pt; color: var(--tinte); display: inline-block; margin-bottom: .8mm; }
|
||||
|
||||
/* Einwilligung */
|
||||
.zitat { background: #fff; border-left: 1mm solid var(--amtsblau); padding: 2mm 3mm; font-style: italic; font-size: 8.5pt; line-height: 1.36; }
|
||||
.zitat .quelle { display: block; font-style: normal; font-family: 'Courier New', monospace; font-size: 6.8pt; color: var(--grau); margin-top: .8mm; letter-spacing: .04em; }
|
||||
ul.punkte { list-style: none; font-size: 8.4pt; line-height: 1.32; color: var(--text); }
|
||||
ul.punkte li { padding-left: 3.5mm; position: relative; margin-bottom: .9mm; }
|
||||
ul.punkte li::before { content: '›'; position: absolute; left: 0; color: var(--amtsblau); font-weight: 700; }
|
||||
ul.punkte b { color: var(--tinte); }
|
||||
|
||||
/* Grenzen */
|
||||
.grenzen { display: grid; grid-template-columns: 1fr 1fr; gap: 1.3mm 5mm; list-style: none; font-size: 8.4pt; line-height: 1.32; color: var(--text); }
|
||||
.grenzen li { padding-left: 4mm; position: relative; }
|
||||
.grenzen li::before { content: '!'; position: absolute; left: .8mm; color: var(--stempelrot); font-weight: 700; }
|
||||
.grenzen b { color: var(--tinte); }
|
||||
|
||||
/* Kontakt (Seite 2 unten, ersetzt dort die Fußzeile) */
|
||||
.kontakt-unten { position: absolute; left: 14mm; right: 14mm; bottom: 9mm; }
|
||||
.kontakt-unten h2 { margin-top: 0; }
|
||||
.kontakt { display: grid; grid-template-columns: 1fr 1fr 19mm; gap: 5mm; align-items: center; border: 0.7mm solid var(--tinte);
|
||||
box-shadow: 1.6mm 1.8mm 0 rgba(33,33,29,.9); background: #fff; padding: 2.8mm 4mm; }
|
||||
.kontakt .name { font-size: 11pt; font-weight: 700; line-height: 1.2; }
|
||||
.kontakt p { font-size: 8.4pt; line-height: 1.36; }
|
||||
.kontakt .link { font-family: 'Courier New', monospace; color: var(--amtsblau); font-size: 9.5pt; font-weight: 700; }
|
||||
.kontakt .klein { color: var(--grau); font-size: 7.8pt; }
|
||||
#qr { width: 19mm; height: 19mm; }
|
||||
#qr svg { width: 100%; height: 100%; display: block; }
|
||||
.stempel { display: inline-block; padding: .8mm 2.2mm; border: 0.5mm solid var(--stempelrot); color: var(--stempelrot);
|
||||
font-family: 'Courier New', monospace; font-weight: 700; font-size: 7pt; letter-spacing: .1em;
|
||||
text-transform: uppercase; transform: rotate(-3deg); }
|
||||
|
||||
.fuss { position: absolute; left: 14mm; right: 14mm; bottom: 8mm; border-top: 0.4mm solid var(--tinte); padding-top: 2mm;
|
||||
display: flex; justify-content: space-between; align-items: flex-end; font-size: 8pt; line-height: 1.4; }
|
||||
.fuss .wer b { font-size: 9.5pt; }
|
||||
.fuss .seitenzahl { font-family: 'Courier New', monospace; font-size: 7.5pt; color: var(--grau); letter-spacing: .06em; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- ============================ SEITE 1 ============================ -->
|
||||
<div class="seite">
|
||||
|
||||
<div class="briefkopf">
|
||||
<span class="absender">📬 BehördenKlar <small>by Webklar</small></span>
|
||||
<span class="az mono">Az: KLAR-DATENSCHUTZ/2026 · Stand: 22.10.2026</span>
|
||||
</div>
|
||||
|
||||
<p class="betreff">Für die Datenschutzbeauftragte Ihres Trägers · Webseite behoerdenklar.de/demo</p>
|
||||
<h1>Datenschutz <span class="markiert">auf einen Blick</span></h1>
|
||||
<p class="anrede">
|
||||
Was mit den Daten passiert, wenn Ihre Beratungsstelle BehördenKlar im Browser nutzt, geprüft am
|
||||
Server-Code und an der Datenschutzerklärung. <i>Das Blatt vom Juli 2026 beschrieb die App, nicht die Webseite.</i>
|
||||
</p>
|
||||
|
||||
<h2><span class="nr">1</span> Was BehördenKlar tut</h2>
|
||||
<div class="eins-box">
|
||||
<p>
|
||||
BehördenKlar erklärt Behördenbriefe in einfacher Sprache, auf Wunsch in 27 Sprachen.
|
||||
Ein Foto oder PDF genügt: Eine KI (Claude von Anthropic) schreibt auf, was das Amt will,
|
||||
was zu tun ist und bis wann. Kein Nutzerkonto, keine Anmeldung. Mit einem
|
||||
<b>Einrichtungs-Code</b> ist der Dienst für Ihre Ratsuchenden kostenlos. Über den Code erfährt
|
||||
Ihre Stelle nichts über Briefe, nur Zahlen: übrige Analysen und Nutzung pro Woche und Sprache.
|
||||
</p>
|
||||
<div class="kasten">
|
||||
<span class="label">Kurz gesagt</span>
|
||||
<ul class="haken">
|
||||
<li>Briefe speichern wir nicht, Erklärungen nur verschlüsselt zur Übergabe (max. 15 Min.).</li>
|
||||
<li>Mit Code: kein Konto, keine E-Mail-Adresse nötig.</li>
|
||||
<li class="ehrlich">Den Brief liest die KI: Anthropic (USA), in der Regel 30 Tage gespeichert, kein Training.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2><span class="nr">2</span> So läuft ein Brief durch das System · Knopf „Lieber mit dem Handy fotografieren“</h2>
|
||||
<div class="schritte">
|
||||
<div class="schritt"><span class="n">1</span><div>
|
||||
<b>QR-Code am Beratungs-PC.</b> Der Browser des PCs erzeugt eine zufällige Kennung und einen
|
||||
neuen AES-256-Schlüssel. Beides steht im QR-Code hinter dem
|
||||
„#“ der Adresse. <b>Den Schlüssel bekommt unser Server nie.</b>
|
||||
</div></div>
|
||||
<div class="schritt"><span class="n">4</span><div>
|
||||
<b>Erklärung.</b> Anthropic (Modell Claude) erklärt den Brief auf Deutsch. Für eine andere
|
||||
Sprache übersetzt ein zweiter KI-Aufruf die Erklärung. Die Antwort geht über unseren Server
|
||||
zurück ans Handy, ohne dort gespeichert zu werden.
|
||||
</div></div>
|
||||
<div class="schritt"><span class="n">2</span><div>
|
||||
<b>Einwilligung am eigenen Handy.</b> Die ratsuchende Person scannt den Code, setzt das
|
||||
Häkchen für diesen einen Brief (Abschnitt 6) und fotografiert ihn. Kein Konto, keine App.
|
||||
</div></div>
|
||||
<div class="schritt"><span class="n">5</span><div>
|
||||
<b>Übergabe, Ende-zu-Ende verschlüsselt.</b> Das Handy verschlüsselt die Erklärung mit dem
|
||||
Schlüssel aus dem QR-Code (AES-256-GCM) und legt sie bei uns ab. Der PC holt sie und
|
||||
entschlüsselt sie. <b>Unser Server kann sie nicht lesen.</b>
|
||||
</div></div>
|
||||
<div class="schritt"><span class="n">3</span><div>
|
||||
<b>Weg zur KI.</b> Das Foto geht über eine verschlüsselte Verbindung (TLS) an unseren Server
|
||||
(Cloudflare). Er prüft Bot-Schutz und Guthaben und reicht es an Anthropic weiter,
|
||||
<b>ohne es zu speichern</b>.
|
||||
</div></div>
|
||||
<div class="schritt"><span class="n">6</span><div>
|
||||
<b>Löschen.</b> Der Zwischenspeicher wird beim Abholen gelöscht, sonst <b>spätestens
|
||||
15 Minuten</b> nach dem letzten Päckchen. Am PC bleibt die Erklärung nur in der offenen
|
||||
Seite, bis diese neu geladen wird.
|
||||
</div></div>
|
||||
</div>
|
||||
<div class="wege">
|
||||
<div class="weg"><b>Beraterin lädt am Dienst-PC hoch:</b> nur Schritt 3 und 4. Das Häkchen setzt
|
||||
dann die Beraterin (zur Rolle siehe Abschnitt 4).</div>
|
||||
<div class="weg"><b>„Ergebnis aufs Handy mitnehmen“:</b> genauso verschlüsselt, beim Abholen
|
||||
gelöscht, sonst nach spätestens 15 Minuten.</div>
|
||||
</div>
|
||||
|
||||
<h2><span class="nr">3</span> Was gespeichert wird und wie lange</h2>
|
||||
<table>
|
||||
<colgroup><col style="width: 37mm"><col><col style="width: 45mm"></colgroup>
|
||||
<thead><tr><th>Was</th><th>Was genau</th><th>Wie lange</th></tr></thead>
|
||||
<tbody>
|
||||
<tr class="gruppe"><td colspan="3">Beim Zugang über einen Einrichtungs-Code</td></tr>
|
||||
<tr><td>Brief und Erklärung</td><td>Laufen nur durch unseren Server. Ausnahme: Übergabe, nächste Zeile.</td><td class="dauer"><b>bei uns: gar nicht</b></td></tr>
|
||||
<tr><td>Übergabe-Päckchen</td><td>Erklärung und Statusmeldungen, verschlüsselt, für uns nicht lesbar. Dazu eine Schreib-Bremse pro IP-Adresse (Zeitfenster 1 Minute).</td><td class="dauer">beim Abholen, <b>spätestens 15 Min.</b> nach dem letzten Päckchen</td></tr>
|
||||
<tr><td>Bei Anthropic (KI)</td><td>Foto und Erklärung. Keine Nutzung zum Training der KI.</td><td class="dauer"><b>in der Regel 30 Tage</b>, länger nur bei Missbrauchsverdacht</td></tr>
|
||||
<tr><td>Einrichtungs-Guthaben</td><td>Code, Kennung, Name der Stelle, Ablaufdatum, Restbriefe. Nichts über Ratsuchende.</td><td class="dauer">ohne automatische Frist</td></tr>
|
||||
<tr><td>Nutzungszähler</td><td>Je Analyse nur Datum und Sprache. Kein Briefinhalt, kein Personenbezug.</td><td class="dauer"><b>max. 13 Monate</b></td></tr>
|
||||
<tr><td>Code-Fehlversuche</td><td>Zähler pro IP-Adresse und Tag, nur bei falscher Eingabe.</td><td class="dauer"><b>48 Stunden</b></td></tr>
|
||||
<tr><td>Server-Protokolle</td><td>Zeitpunkt, aufgerufene Adresse, Fehlerart, technische Metadaten. Kein Briefinhalt.</td><td class="dauer"><b>max. 7 Tage</b></td></tr>
|
||||
<tr><td>Im Browser des Geräts</td><td>Zugangs-Nachweis, Code und Name der Stelle, Ablaufdatum, Zahl übriger Briefe, Sprache. Keine Briefe.</td><td class="dauer">bis zum Löschen im Browser</td></tr>
|
||||
<tr class="gruppe hell"><td colspan="3">Nur ohne Einrichtungs-Code: 2 Gratis-Analysen für Privatpersonen</td></tr>
|
||||
<tr class="nebensache"><td>Gratis-Zähler</td><td>Zähler pro IP-Adresse und Tag, dazu die Tagessumme aller Gratis-Analysen.</td><td class="dauer">48 Stunden (Datenschutz­erklärung: „max. 30 Tage“)</td></tr>
|
||||
<tr class="nebensache"><td>E-Mail-Prüfsumme</td><td>Nur für die 2. Gratis-Analyse: SHA-256-Prüfsumme, die Adresse selbst nicht.</td><td class="dauer">unbefristet</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="tabfuss">
|
||||
<b>Rechtsgrundlagen laut Datenschutzerklärung:</b> Brief und Erklärung: Einwilligung (Art. 6 Abs. 1 lit. a,
|
||||
Art. 9 Abs. 2 lit. a DSGVO). Zähler, Schutz vor Missbrauch, Protokolle: berechtigtes Interesse (Art. 6 Abs. 1 lit. f DSGVO).
|
||||
</p>
|
||||
|
||||
<div class="fuss">
|
||||
<div class="wer">
|
||||
<b>Justin Klein</b> · Webklar GbR · Am Schwimmbad 10, 67722 Winnweiler<br>
|
||||
Tel. 0170 4969375 · justin@webklar.com · <b>behoerdenklar.de/datenschutz</b>
|
||||
</div>
|
||||
<span class="seitenzahl">Seite 1 von 2 · bitte wenden</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ============================ SEITE 2 ============================ -->
|
||||
<div class="seite">
|
||||
|
||||
<div class="briefkopf">
|
||||
<span class="absender">📬 BehördenKlar <small>by Webklar</small></span>
|
||||
<span class="az mono">Datenschutz auf einen Blick · Seite 2 von 2</span>
|
||||
</div>
|
||||
|
||||
<h2 style="margin-top: 5mm; margin-bottom: 3mm;"><span class="nr">4</span> Wer ist verantwortlich? Das hängt davon ab, wer hochlädt</h2>
|
||||
<div class="zwei">
|
||||
<div class="kasten fall">
|
||||
<span class="label">Fall A · Die Person selbst</span>
|
||||
<h3>Die ratsuchende Person nutzt den Dienst selbst</h3>
|
||||
<p>Eigenes Handy, eigenes Häkchen für jeden Brief: zu Hause oder in der Beratung über
|
||||
„Lieber mit dem Handy fotografieren“.</p>
|
||||
<p class="folge"><b>Verantwortlich ist die Webklar GbR</b> (BehördenKlar). Grundlage ist die
|
||||
Einwilligung der Person.</p>
|
||||
<p>Bitte beachten: In der Beratung erscheint die Erklärung auch am Bildschirm Ihrer Stelle.
|
||||
Gespeichert wird sie dort nicht.</p>
|
||||
</div>
|
||||
<div class="kasten fall">
|
||||
<span class="label">Fall B · Ihre Stelle</span>
|
||||
<h3>Ihre Beratungsstelle lädt den Brief selbst hoch</h3>
|
||||
<p>Die Beraterin lädt den Brief einer Klientin am Dienst-PC hoch.</p>
|
||||
<p class="folge">Dann arbeiten <b>wir als Auftragsverarbeiter</b> für Ihre Stelle (Art. 28 DSGVO),
|
||||
mit Cloudflare und Anthropic als Unterauftragsverarbeitern. Einen <b>AVV mit
|
||||
Verschwiegenheitsklausel</b> stellen wir auf Wunsch.</p>
|
||||
<p>Das Häkchen am Dienst-PC setzt dann die Beraterin. Es ersetzt keine Einwilligung der Klientin.</p>
|
||||
</div>
|
||||
</div>
|
||||
<p class="absprache">
|
||||
<span class="gross"><span class="markiert">Vor dem ersten echten Brief am Dienst-PC sprechen wir das ab.</span></span><br>
|
||||
Unser Vorschlag für den Test: Fall A. Haben Sie eine eigene AVV-Vorlage (z. B. nach DSG-EKD oder KDG),
|
||||
schicken Sie sie uns gern.
|
||||
</p>
|
||||
|
||||
<h2><span class="nr">5</span> Dienstleister</h2>
|
||||
<table>
|
||||
<colgroup><col style="width: 37mm"><col><col style="width: 30mm"></colgroup>
|
||||
<thead><tr><th>Wer</th><th>Wofür</th><th>Beim Code-Zugang</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Cloudflare, Inc. (USA)</td><td>Unser Server (Cloudflare Workers), Zwischenspeicher und Zähler, Bot-Schutz (Turnstile), Hosting der Webseite, Besucherstatistik ohne Cookies</td><td class="dauer"><b>ja</b></td></tr>
|
||||
<tr><td>Anthropic PBC (USA)</td><td>KI-Erklärung und Übersetzung (Modell Claude), keine Nutzung zum Training</td><td class="dauer"><b>ja</b></td></tr>
|
||||
<tr class="nebensache"><td>Stripe und Brevo</td><td>Nur für Privatpersonen: Bezahlung beim Kauf von Guthaben (Stripe, Irland/USA), E-Mail mit dem Guthaben-Link und Warteliste (Brevo, Deutschland/Frankreich)</td><td class="dauer">nein, nicht relevant</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="tabfuss" style="color: var(--text); font-size: 8.2pt;">
|
||||
<b>Übermittlung in die USA:</b> gestützt auf EU-Standardvertragsklauseln (Art. 46 Abs. 2 lit. c DSGVO).
|
||||
Sie sind Teil der Auftragsverarbeitungsverträge (DPA) von Cloudflare und Anthropic, die mit deren
|
||||
Geschäftsbedingungen gelten. Die Fundstellen nennen wir Ihnen gern.
|
||||
</p>
|
||||
|
||||
<h2><span class="nr">6</span> Einwilligung: für jeden Brief neu</h2>
|
||||
<div class="zwei" style="grid-template-columns: 1.12fr 1fr;">
|
||||
<p class="zitat">
|
||||
„Ich bin einverstanden, dass das Foto dieses Briefs zur Erklärung an den Server von BehördenKlar
|
||||
und an den KI-Dienst Anthropic (USA) geschickt wird. Briefe können sehr persönliche Angaben
|
||||
enthalten, zum Beispiel zu Gesundheit, Herkunft oder Aufenthalt. BehördenKlar speichert den Brief
|
||||
nicht. Anthropic löscht ihn in der Regel nach 30 Tagen und nutzt ihn nicht zum Training.“
|
||||
<span class="quelle">Text am Häkchen vor dem Hochladen, mit Link zur Datenschutzerklärung</span>
|
||||
</p>
|
||||
<ul class="punkte">
|
||||
<li><b>Ohne Häkchen wird nichts hochgeladen.</b></li>
|
||||
<li><b>Für genau einen Brief:</b> Nach jeder Erklärung ist das Häkchen wieder leer. Die nächste Person wird neu gefragt.</li>
|
||||
<li><b>Grundlage:</b> Art. 6 Abs. 1 lit. a und Art. 9 Abs. 2 lit. a DSGVO.</li>
|
||||
<li><b>Sprache:</b> Der Text steht derzeit nur auf Deutsch, Übersetzungen sind in Arbeit.
|
||||
Bis dahin erklärt die Beraterin ihn bei Bedarf mündlich.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h2><span class="nr">7</span> Ehrliche Grenzen</h2>
|
||||
<ul class="grenzen">
|
||||
<li><b>USA.</b> Anthropic und Cloudflare sitzen in den USA. Eine Beschränkung auf Rechenzentren
|
||||
in der EU ist nicht eingestellt.</li>
|
||||
<li><b>30 Tage bei Anthropic</b> in der Regel, bei Verdacht auf Missbrauch länger. Darauf haben
|
||||
wir keinen Einfluss.</li>
|
||||
<li><b>Ende-zu-Ende gilt nur für die Übergabe.</b> Der Brief selbst geht per TLS über unseren
|
||||
Server zur KI.</li>
|
||||
<li><b>QR-Code nur der richtigen Person zeigen.</b> Wer ihn abfotografiert, kann die Erklärung
|
||||
in diesen 15 Minuten öffnen.</li>
|
||||
<li><b>Gemeinsamer Dienst-PC.</b> Nach jedem Gespräch die Seite neu laden. Kalender-Einträge am
|
||||
Handy der Person anlegen, am PC landet sonst eine Datei mit der Frist im Download-Ordner.</li>
|
||||
<li><b>Keine Rechtsberatung.</b> BehördenKlar erklärt Briefe, ersetzt aber keine Beratung. Auch
|
||||
eine KI kann sich irren.</li>
|
||||
<li><b>Selbstauskunft, kein Zertifikat.</b> Eine anwaltliche Prüfung von Datenschutzerklärung und
|
||||
Blatt steht noch aus.</li>
|
||||
<li><b>Noch offen:</b> AVV-Entwurf, TOMs und ein Textbaustein fürs Verarbeitungsverzeichnis.
|
||||
Sie kommen vor dem ersten echten Brief am Dienst-PC.</li>
|
||||
</ul>
|
||||
|
||||
<div class="kontakt-unten">
|
||||
<h2><span class="nr">8</span> Kontakt und vollständige Datenschutzerklärung</h2>
|
||||
<div class="kontakt">
|
||||
<div>
|
||||
<p class="name">Justin Klein</p>
|
||||
<p>Webklar GbR, vertreten durch<br>Justin Klein und Kenso Grimm<br>
|
||||
Am Schwimmbad 10, 67722 Winnweiler<br>
|
||||
Tel. 0170 4969375 · justin@webklar.com</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="link">behoerdenklar.de/datenschutz</p>
|
||||
<p class="klein">Für die Webseite besonders die Abschnitte 3a, 4, 5, 8, 9a, 9b und 10.
|
||||
Rückfragen beantworten wir gern, auch im Gespräch mit Ihnen.</p>
|
||||
<p style="margin-top: 1.4mm;"><span class="stempel">Selbstauskunft · Stand 22.10.2026</span></p>
|
||||
</div>
|
||||
<div id="qr"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var qr = qrcode(0, 'M');
|
||||
qr.addData('https://behoerdenklar.de/datenschutz');
|
||||
qr.make();
|
||||
document.getElementById('qr').innerHTML = qr.createSvgTag({ cellSize: 4, margin: 0, scalable: true });
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
@@ -66,7 +66,7 @@
|
||||
.angebot .gross { font-size: 13pt; font-weight: 700; line-height: 1.25; margin: 1.5mm 0; }
|
||||
.angebot .gross .markiert { padding: 0 1mm; }
|
||||
.angebot .klein { font-size: 8pt; color: var(--grau); line-height: 1.35; }
|
||||
#qr { width: 34mm; height: 34mm; margin: 2.5mm auto 1.5mm; }
|
||||
#qr { width: 30mm; height: 30mm; margin: 2mm auto 1mm; }
|
||||
#qr svg { width: 100%; height: 100%; display: block; }
|
||||
.code { font-family: 'Courier New', monospace; font-weight: 700; font-size: 13pt; letter-spacing: .08em; background: var(--marker); display: inline-block; padding: .3mm 2.5mm; }
|
||||
.link { font-family: 'Courier New', monospace; font-size: 7.5pt; color: var(--amtsblau); word-break: break-all; margin-top: 1mm; }
|
||||
@@ -147,9 +147,9 @@
|
||||
<ul>
|
||||
<li>Kein Konto, keine Anmeldung, keine Installation nötig.</li>
|
||||
<li>Briefe werden bei uns nicht dauerhaft gespeichert.</li>
|
||||
<li>Übergabe zwischen PC und Handy Ende-zu-Ende verschlüsselt: Der Schlüssel steckt nur im QR-Code, unser Server sieht nichts.</li>
|
||||
<li>Übergabe zwischen PC und Handy zusätzlich Ende-zu-Ende verschlüsselt: Der Schlüssel steckt nur im QR-Code.</li>
|
||||
<li>Keine Werbung, kein Verkauf von Daten.</li>
|
||||
<li class="ehrlich">Die Erklärung erstellt der KI-Dienst Anthropic (USA). Er löscht Anfragen nach spätestens 30 Tagen und nutzt sie nicht zum Training. Das sagen wir offen, auch auf der Seite vor dem Hochladen.</li>
|
||||
<li class="ehrlich">Den Brief selbst muss die KI lesen: Anthropic (USA). Gelöscht in der Regel nach 30 Tagen, kein Training. Das steht offen auf der Seite, und die Person willigt für jeden Brief einzeln ein.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p class="chatgpt">
|
||||
@@ -170,9 +170,10 @@
|
||||
<p class="gross">1 Monat · bis 100 Briefe<br><span class="markiert">kostenlos</span></p>
|
||||
<p class="klein">Ratsuchende zahlen nichts. Kein Vertrag, endet von selbst, verlängerbar.</p>
|
||||
<div id="qr"></div>
|
||||
<p class="klein">Code für Ihre Ratsuchenden:</p>
|
||||
<p class="klein">Ihr Zugangscode für den Beratungs-PC:</p>
|
||||
<p><span class="code" id="codeText"></span></p>
|
||||
<p class="link" id="linkText"></p>
|
||||
<p class="klein" style="margin-top: 1.5mm;">Einmal am Beratungs-PC öffnen, dann ist auch „Mit dem Handy fotografieren“ für Ihre Ratsuchenden kostenlos.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 615 KiB After Width: | Height: | Size: 630 KiB |
@@ -0,0 +1,203 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Kurzanleitung „So geht's am Beratungs-PC“ (DIN A4, 1 Seite, für Beraterinnen).
|
||||
CODE (und ggf. STELLE) unten im Skript eintragen, sobald der Einrichtungs-Code
|
||||
angelegt ist, dann neu als PDF ausgeben (im Ordner marketing/praesentation-mbe):
|
||||
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless=new --disable-gpu \
|
||||
--allow-file-access-from-files --no-pdf-header-footer \
|
||||
--print-to-pdf=kurzanleitung-beratung.pdf "file://$PWD/kurzanleitung-beratung.html"
|
||||
Knopf- und Meldungstexte stammen wörtlich aus webseite/demo.html, „Der Zugang über …
|
||||
ist abgelaufen“ aus proxy/src/index.ts (Stand 22.10.2026).
|
||||
-->
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>So geht's am Beratungs-PC</title>
|
||||
<script src="../../webseite/qrcode.js"></script>
|
||||
<style>
|
||||
@page { size: A4; margin: 0; }
|
||||
:root {
|
||||
--papier: #faf7f0; --tinte: #21211d; --grau: #6b675e;
|
||||
--amtsblau: #1d4e89; --stempelrot: #b3372b; --marker: #ffe66b; --gruen: #2e7d4f;
|
||||
}
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
||||
body { font-family: Georgia, 'Times New Roman', serif; color: var(--tinte); background: #fff; }
|
||||
.seite {
|
||||
width: 210mm; height: 297mm; overflow: hidden; position: relative;
|
||||
padding: 10mm 14mm 0;
|
||||
background: repeating-linear-gradient(0deg, transparent 0 6.5mm, rgba(33,33,29,0.03) 6.5mm 6.7mm), var(--papier);
|
||||
font-size: 11pt; line-height: 1.36;
|
||||
}
|
||||
.mono { font-family: 'Courier New', ui-monospace, monospace; }
|
||||
.briefkopf { display: flex; justify-content: space-between; align-items: baseline; padding-bottom: 2mm; border-bottom: 0.6mm solid var(--tinte); }
|
||||
.absender { font-weight: 700; font-size: 12.5pt; }
|
||||
.absender small { font-weight: 400; font-size: 8pt; opacity: .6; letter-spacing: .04em; }
|
||||
.az { color: var(--grau); font-size: 8pt; }
|
||||
.betreff { margin-top: 3.5mm; font-size: 8pt; color: var(--grau); text-transform: uppercase; letter-spacing: .14em; }
|
||||
h1 { font-size: 23pt; line-height: 1.12; margin-top: 1mm; letter-spacing: -0.01em; }
|
||||
.markiert { background: linear-gradient(104deg, transparent 2%, var(--marker) 4%, var(--marker) 96%, transparent 98%); padding: 0 1.5mm; }
|
||||
.anrede { margin-top: 2mm; font-size: 11.5pt; line-height: 1.36; }
|
||||
|
||||
/* Knöpfe und Bildschirm-Texte so, wie man sie auf der Seite wiedererkennt */
|
||||
.k { font-weight: 700; background: #fff; border: 0.35mm solid var(--tinte); border-radius: 1mm;
|
||||
padding: 0 1.3mm; margin-right: .5mm; box-shadow: 0.5mm 0.5mm 0 var(--tinte);
|
||||
-webkit-box-decoration-break: clone; box-decoration-break: clone; }
|
||||
.m { background: rgba(29,78,137,.09); padding: 0 .8mm; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
|
||||
|
||||
.kasten { background: #fff; border: 0.5mm solid var(--tinte); padding: 3.6mm 4mm 3.2mm; position: relative; }
|
||||
.kasten .label { position: absolute; top: -2.6mm; left: 3.5mm; font-family: 'Courier New', monospace; font-size: 7.5pt;
|
||||
text-transform: uppercase; letter-spacing: .1em; background: var(--tinte); color: var(--papier); padding: .4mm 2mm; }
|
||||
|
||||
.einmalig { margin-top: 4.4mm; display: grid; grid-template-columns: 1fr 27mm; gap: 5mm; align-items: start; }
|
||||
.einmalig p { font-size: 10.6pt; line-height: 1.34; }
|
||||
.adresse { font-family: 'Courier New', monospace; font-weight: 700; font-size: 12.5pt; color: var(--amtsblau);
|
||||
background: var(--marker); display: inline-block; padding: .4mm 2mm; margin: 1.2mm 0 1.6mm; word-break: break-all; }
|
||||
.luecke { display: inline-block; width: 26mm; border-bottom: 0.35mm solid var(--amtsblau); height: 4.2mm; vertical-align: -0.6mm; }
|
||||
.einmalig ul { list-style: none; font-size: 10pt; line-height: 1.32; }
|
||||
.einmalig li { padding-left: 4mm; position: relative; margin-top: .9mm; }
|
||||
.einmalig li::before { content: '›'; position: absolute; left: .5mm; color: var(--amtsblau); font-weight: 700; }
|
||||
.qrteil { text-align: center; }
|
||||
#qr { width: 25mm; height: 25mm; margin: 0 auto 1.2mm; }
|
||||
#qr svg { width: 100%; height: 100%; display: block; }
|
||||
.qrteil .klein { font-size: 7.8pt; color: var(--grau); line-height: 1.3; }
|
||||
.code { font-family: 'Courier New', monospace; font-weight: 700; font-size: 11pt; letter-spacing: .08em; background: var(--marker); padding: 0 1.5mm; margin-right: 1mm; }
|
||||
|
||||
h2 { font-size: 8pt; text-transform: uppercase; letter-spacing: .14em; color: var(--grau); font-weight: 400;
|
||||
margin: 3.6mm 0 1.4mm; display: flex; align-items: center; gap: 3mm; }
|
||||
h2::after { content: ''; flex: 1; border-top: 0.25mm solid rgba(33,33,29,.25); order: 1; }
|
||||
h2 .legende { order: 2; text-transform: none; letter-spacing: 0; font-size: 9.5pt; color: var(--grau); }
|
||||
|
||||
.schritte { list-style: none; }
|
||||
.schritte li { display: grid; grid-template-columns: 9mm 1fr; gap: 1.5mm; padding: 0.8mm 0; border-bottom: 0.25mm dashed rgba(33,33,29,.22); }
|
||||
.schritte li:last-child { border-bottom: none; }
|
||||
.nr { font-family: 'Courier New', monospace; font-weight: 700; font-size: 17pt; line-height: 1; color: var(--amtsblau); padding-top: .4mm; }
|
||||
.schritte b.t { font-size: 11.6pt; }
|
||||
.schritte p { font-size: 11pt; line-height: 1.34; }
|
||||
.schritte .zusatz { font-size: 9.6pt; color: #3a3833; margin-top: .4mm; }
|
||||
|
||||
.wichtig { margin-top: 3.8mm; border-color: var(--stempelrot); border-width: 0.6mm; }
|
||||
.wichtig .label { background: var(--stempelrot); }
|
||||
.wichtig > p { font-size: 10.4pt; line-height: 1.33; padding-left: 4.5mm; position: relative; margin-bottom: .8mm; }
|
||||
.wichtig > p::before { content: '!'; position: absolute; left: .6mm; color: var(--stempelrot); font-weight: 700; }
|
||||
.meldungen { width: 100%; border-collapse: collapse; margin-top: 1.4mm; font-size: 9.6pt; line-height: 1.28; }
|
||||
.meldungen caption { text-align: left; font-family: 'Courier New', monospace; font-size: 7.5pt; text-transform: uppercase; letter-spacing: .1em; color: var(--grau); padding-bottom: .8mm; }
|
||||
.meldungen td { padding: .4mm 0; vertical-align: top; border-top: 0.25mm solid rgba(33,33,29,.15); }
|
||||
.meldungen td:first-child { width: 39%; padding-right: 3mm; }
|
||||
.meldungen tr.leer td { background: rgba(255,230,107,.45); }
|
||||
.meldungen tr.leer td:first-child { padding-left: 1mm; }
|
||||
|
||||
.fuss { position: absolute; left: 14mm; right: 14mm; bottom: 8mm; border-top: 0.4mm solid var(--tinte); padding-top: 2mm;
|
||||
display: flex; justify-content: space-between; align-items: flex-end; font-size: 8pt; line-height: 1.4; }
|
||||
.fuss .anruf { font-size: 12.5pt; font-weight: 700; line-height: 1.3; }
|
||||
.fuss .anruf .nummer { font-family: 'Courier New', monospace; background: var(--marker); padding: 0 1.5mm; }
|
||||
.stempel { display: inline-block; padding: 1mm 2.5mm; border: 0.5mm solid var(--stempelrot); color: var(--stempelrot);
|
||||
font-family: 'Courier New', monospace; font-weight: 700; font-size: 7.5pt; letter-spacing: .1em;
|
||||
text-transform: uppercase; transform: rotate(-4deg); margin-bottom: 1mm; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="seite">
|
||||
|
||||
<div class="briefkopf">
|
||||
<span class="absender">📬 BehördenKlar <small>by Webklar</small></span>
|
||||
<span class="az mono">Az: KLAR-BERATUNG/2026 · Kurzanleitung Beratungs-PC</span>
|
||||
</div>
|
||||
|
||||
<p class="betreff">Kurzanleitung · Für Beraterinnen und Berater</p>
|
||||
<h1>So geht's am <span class="markiert">Beratungs-PC</span></h1>
|
||||
<p class="anrede">
|
||||
Die Person fotografiert ihren Brief mit dem eigenen Handy. Sie lesen am PC mit.
|
||||
</p>
|
||||
|
||||
<div class="kasten einmalig">
|
||||
<span class="label">Einmal einrichten: Lesezeichen</span>
|
||||
<div>
|
||||
<p>Diese Adresse am Beratungs-PC als Lesezeichen speichern, genau so, mit Code:</p>
|
||||
<p><span class="adresse" id="adresseText"></span></p>
|
||||
<ul>
|
||||
<li><b>Lesezeichen von Hand anlegen</b> und die Adresse eintragen. Nicht nur den Stern ☆ klicken: Nach dem Öffnen ist der Code aus der Adresszeile verschwunden.</li>
|
||||
<li>Ihr Code: <span class="code" id="codeText"></span> Nur für die Beratungsstelle: nicht an Ratsuchende weitergeben, Blatt nicht offen auslegen.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="qrteil">
|
||||
<div id="qr"></div>
|
||||
<p class="klein">Gleiche Adresse als QR-Code</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2><span>Ablauf für jede Person</span><span class="legende"><span class="k">Knopf</span> = klicken oder tippen · <span class="m">„Text“</span> = steht so auf dem Bildschirm</span></h2>
|
||||
<ol class="schritte">
|
||||
<li><span class="nr">1</span><div>
|
||||
<p><b class="t">Seite öffnen.</b> Lesezeichen anklicken. Oben steht <span class="m">„🤝 Kostenlos über <span id="stelleText"></span> …“</span></p>
|
||||
<p class="zusatz">Fehlt das? Unten <span class="k">🤝 Sie haben einen Code von einer Beratungsstelle?</span> öffnen und den Code einlösen.</p>
|
||||
</div></li>
|
||||
<li><span class="nr">2</span><div>
|
||||
<p><b class="t">Sprache wählen.</b> Bei <span class="m">„🌐 Erklärung in dieser Sprache:“</span> die Sprache der Person einstellen.
|
||||
Oder <span class="m">„Deutsch“</span> lassen: Dann erkennt das Handy seine Sprache selbst.</p>
|
||||
</div></li>
|
||||
<li><span class="nr">3</span><div>
|
||||
<p><b class="t">QR-Code zeigen.</b> <span class="k">📱 Lieber mit dem Handy fotografieren</span> klicken. Die Person scannt den QR-Code mit der Handy-Kamera.
|
||||
Am PC steht dann <span class="m">„✅ Handy verbunden …“</span></p>
|
||||
<p class="zusatz">Nicht <span class="k">🔑 Zugang dauerhaft auf ein Handy geben</span> klicken: Das gibt Ihren Zugang dauerhaft aufs Handy.</p>
|
||||
</div></li>
|
||||
<li><span class="nr">4</span><div>
|
||||
<p><b class="t">Am Handy: Häkchen und Foto.</b> Das Häkchen setzt <b>die Person selbst</b>. Es ist ihre Einwilligung: Das Foto geht an BehördenKlar und an den KI-Dienst Anthropic (USA).
|
||||
Dann tippt sie auf <span class="k">📷 Brief auswählen & erklären lassen</span> und fotografiert den Brief.</p>
|
||||
<p class="zusatz">Häkchen-Text unklar? Kurz erklären. Ein Foto pro Brief, bei mehreren Seiten die mit Betreff und Frist.</p>
|
||||
</div></li>
|
||||
<li><span class="nr">5</span><div>
|
||||
<p><b class="t">1 bis 2 Minuten warten.</b> Dann steht die Erklärung am PC auf Deutsch und am Handy in der Sprache der Person.
|
||||
Umschalten über dem Ergebnis, z. B. <span class="k">Deutsch</span> <span class="k">العربية</span></p>
|
||||
</div></li>
|
||||
<li><span class="nr">6</span><div>
|
||||
<p><b class="t">Kalender am Handy.</b> Die Person tippt am Handy auf <span class="k">📅 In meinen Kalender eintragen</span>. Nicht am PC, sonst landet die Datei auf dem Dienst-PC.</p>
|
||||
<p class="zusatz">Seite am Handy schon zu? Am PC <span class="k">📱 Ergebnis aufs Handy mitnehmen</span> klicken.</p>
|
||||
</div></li>
|
||||
<li><span class="nr">7</span><div>
|
||||
<p><b class="t">Fertig: Seite neu laden (Taste F5).</b> Nächste Person: Sprache neu wählen.</p>
|
||||
</div></li>
|
||||
</ol>
|
||||
|
||||
<div class="kasten wichtig">
|
||||
<span class="label">Wichtig</span>
|
||||
<p><b>Beim Warten nicht neu laden.</b> Falls doch: Das Ergebnis steht am Handy, dort <span class="k">Deutsch</span> tippen.</p>
|
||||
<p><b>Ein QR-Code gilt für einen Brief.</b> Nächster Brief: ab Schritt 3.</p>
|
||||
<table class="meldungen">
|
||||
<caption>Meldungen am PC und was sie bedeuten</caption>
|
||||
<tr><td><span class="m">„⚠️ Am Handy hat es nicht geklappt: …“</span></td><td>Am Handy steht, warum. Dort neu fotografieren.</td></tr>
|
||||
<tr><td><span class="m">„⚠️ Das dauert ungewöhnlich lange …“</span></td><td>Am Handy: <span class="k">🔁 Noch einmal an den Computer senden</span><br>Kein Knopf da? Am PC <span class="k">Abbrechen</span>, dann ab Schritt 3.</td></tr>
|
||||
<tr><td><span class="m">„Der QR-Code ist abgelaufen …“</span></td><td>Schritt 3 wiederholen.</td></tr>
|
||||
<tr><td><span class="m">„⚠️ Keine Verbindung zum Server …“</span></td><td>Internet am PC prüfen, sonst Ihre IT fragen.</td></tr>
|
||||
<tr class="leer"><td><span class="m">„Die kostenlosen Analysen sind aufgebraucht oder abgelaufen …“</span><br><span class="m">„Der Zugang über … ist abgelaufen …“</span></td><td><b>Kontingent leer oder Test zu Ende: Justin anrufen, <span style="white-space: nowrap;">0170 4969375</span>.</b> Danach das Lesezeichen neu öffnen.</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="fuss">
|
||||
<div class="wer">
|
||||
<span class="anruf">Bei Fragen einfach anrufen: Justin Klein · <span class="nummer">0170 4969375</span></span><br>
|
||||
Webklar GbR · Am Schwimmbad 10, 67722 Winnweiler · justin@webklar.com · <b>behoerdenklar.de</b>
|
||||
</div>
|
||||
<span class="stempel">Stand Oktober 2026</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Einrichtungs-Code hier eintragen, sobald er angelegt ist (z. B. 'MBE-K7QX').
|
||||
var CODE = '';
|
||||
// Name der Einrichtung, so wie er beim Anlegen des Codes vergeben wurde (steht oben auf der Seite).
|
||||
var STELLE = 'MBE Donnersberg';
|
||||
var url = CODE ? 'https://behoerdenklar.de/demo?code=' + CODE : 'https://behoerdenklar.de/demo';
|
||||
var qr = qrcode(0, 'M');
|
||||
qr.addData(url);
|
||||
qr.make();
|
||||
document.getElementById('qr').innerHTML = qr.createSvgTag({ cellSize: 4, margin: 0, scalable: true });
|
||||
var codeEl = document.getElementById('codeText');
|
||||
codeEl.textContent = CODE || 'wird beim Termin eingetragen';
|
||||
if (!CODE) { codeEl.style.fontSize = '9pt'; codeEl.style.letterSpacing = '0'; }
|
||||
var adresseEl = document.getElementById('adresseText');
|
||||
adresseEl.textContent = 'behoerdenklar.de/demo?code=' + CODE;
|
||||
if (!CODE) { var l = document.createElement('span'); l.className = 'luecke'; adresseEl.appendChild(l); }
|
||||
document.getElementById('stelleText').textContent = STELLE || 'Ihre Beratungsstelle';
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
@@ -109,7 +109,7 @@
|
||||
<span class="fett">bis spätestens 12.11.2026</span> bei der Ausländerbehörde einzureichen.</p>
|
||||
|
||||
<p>Zur Aufnahme Ihrer biometrischen Merkmale (Fingerabdrücke, Unterschrift) werden Sie
|
||||
gebeten, am <span class="fett">Donnerstag, den 05.11.2026, um 10:30 Uhr</span> in Zimmer 2.14
|
||||
gebeten, am <span class="fett">Dienstag, den 03.11.2026, um 10:30 Uhr</span> in Zimmer 2.14
|
||||
persönlich vorzusprechen. Bitte bringen Sie dieses Schreiben sowie Ihren derzeitigen
|
||||
Aufenthaltstitel mit. Sollten Sie den Termin nicht wahrnehmen können, ist dieser rechtzeitig
|
||||
vorher telefonisch abzusagen.</p>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 420 KiB After Width: | Height: | Size: 420 KiB |
+56
-12
@@ -245,7 +245,8 @@ async function uebersetzeAnalyse(env: Env, analyse: unknown, sprachName: string)
|
||||
if (d.stop_reason !== 'end_turn' || !text) return null;
|
||||
return JSON.parse(text);
|
||||
} catch (e) {
|
||||
console.log('Übersetzung fehlgeschlagen', String(e));
|
||||
// Nur den Fehlertyp loggen: JSON.parse-Meldungen zitieren Teile der Eingabe (= Briefinhalt)
|
||||
console.log('Übersetzung fehlgeschlagen', e instanceof Error ? e.name : 'unbekannt');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -392,7 +393,9 @@ async function demoHandler(request: Request, env: Env): Promise<Response> {
|
||||
? { type: 'document', source: { type: 'base64', media_type: 'application/pdf', data: bild } }
|
||||
: { type: 'image', source: { type: 'base64', media_type: mimeType, data: bild } };
|
||||
|
||||
const antwort = await fetch(ANTHROPIC_URL, {
|
||||
let antwort: Response;
|
||||
try {
|
||||
antwort = await fetch(ANTHROPIC_URL, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
@@ -417,6 +420,10 @@ async function demoHandler(request: Request, env: Env): Promise<Response> {
|
||||
],
|
||||
}),
|
||||
});
|
||||
} catch (e) {
|
||||
console.log('Demo-KI nicht erreichbar', String(e));
|
||||
return demoFehler(503, 'ki', 'Der KI-Dienst ist gerade nicht erreichbar. Bitte versuchen Sie es in einer Minute erneut.', origin);
|
||||
}
|
||||
|
||||
if (!antwort.ok) {
|
||||
const status = antwort.status;
|
||||
@@ -433,7 +440,13 @@ async function demoHandler(request: Request, env: Env): Promise<Response> {
|
||||
return demoFehler(502, 'ki', 'Die Analyse ist fehlgeschlagen. Bitte versuchen Sie es mit einem neuen, gut beleuchteten Foto.', origin);
|
||||
}
|
||||
|
||||
const daten = (await antwort.json()) as {
|
||||
let datenRoh: unknown;
|
||||
try {
|
||||
datenRoh = await antwort.json();
|
||||
} catch {
|
||||
return demoFehler(502, 'ki', 'Die KI hat keine verwertbare Antwort geliefert. Bitte erneut versuchen.', origin);
|
||||
}
|
||||
const daten = datenRoh as {
|
||||
stop_reason?: string;
|
||||
content?: { type: string; text?: string }[];
|
||||
};
|
||||
@@ -444,6 +457,17 @@ async function demoHandler(request: Request, env: Env): Promise<Response> {
|
||||
if (bezahlt) {
|
||||
// Bezahlte Analyse: Guthaben um 1 verringern (kein TTL — bleibt bestehen)
|
||||
await env.RATE_LIMIT.put(`wallet:${walletId}`, String(walletRest - 1));
|
||||
if (einrichtungsName) {
|
||||
// Für die Auswertung mit der Beratungsstelle: nur Datum und Sprache,
|
||||
// kein Briefinhalt, kein Bezug zu einer Person. Ein Schlüssel pro
|
||||
// Analyse, damit gleichzeitige Analysen sich nicht überschreiben.
|
||||
// Lesen: node tools/einrichtungs-code.js stand <CODE>
|
||||
await env.RATE_LIMIT.put(
|
||||
`nutzung:${walletId}:${heute}:${sprachCode}:${crypto.randomUUID().slice(0, 8)}`,
|
||||
'1',
|
||||
{ expirationTtl: 60 * 60 * 24 * 390 }, // < 13 Monate (siehe Datenschutzerklärung 9a)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
const schreiben: Promise<void>[] = [
|
||||
env.RATE_LIMIT.put(tagKey, String(tagZahl + 1), { expirationTtl: TAG_TTL }),
|
||||
@@ -476,11 +500,18 @@ async function demoHandler(request: Request, env: Env): Promise<Response> {
|
||||
|
||||
let analyseDe: unknown = undefined;
|
||||
let ausgabeSprache = sprachCode;
|
||||
let uebersetzungFehlgeschlagen = false;
|
||||
if (zweisprachig) {
|
||||
analyseDe = analyse;
|
||||
const uebersetzt = await uebersetzeAnalyse(env, analyse, sprachName);
|
||||
if (uebersetzt) analyse = uebersetzt;
|
||||
else ausgabeSprache = 'de'; // lieber Deutsch als gar nichts
|
||||
if (uebersetzt) {
|
||||
analyseDe = analyse;
|
||||
analyse = uebersetzt;
|
||||
} else {
|
||||
// lieber Deutsch als gar nichts — aber nur EINE Fassung schicken,
|
||||
// sonst zeigt die Seite zwei Knöpfe „Deutsch | Deutsch"
|
||||
ausgabeSprache = 'de';
|
||||
uebersetzungFehlgeschlagen = true;
|
||||
}
|
||||
}
|
||||
|
||||
return Response.json(
|
||||
@@ -491,6 +522,7 @@ async function demoHandler(request: Request, env: Env): Promise<Response> {
|
||||
guthaben: bezahlt ? walletRest - 1 : undefined,
|
||||
einrichtung: einrichtungsName ?? undefined,
|
||||
sprache: ausgabeSprache,
|
||||
uebersetzung_fehlgeschlagen: uebersetzungFehlgeschlagen || undefined,
|
||||
},
|
||||
{ headers: demoCorsHeaders(origin) }
|
||||
);
|
||||
@@ -685,7 +717,15 @@ async function kaufStatusHandler(request: Request, env: Env): Promise<Response>
|
||||
// Der zufällige Teil im Code macht Raten aussichtslos; zusätzlich sind
|
||||
// Fehlversuche pro IP und Tag begrenzt.
|
||||
|
||||
const CODE_FEHLVERSUCHE_PRO_TAG = 10;
|
||||
// Großzügig, weil sich eine ganze Beratungsstelle eine IP teilt. Raten bleibt
|
||||
// trotzdem aussichtslos: 31^4 ≈ 920.000 Codes je Präfix.
|
||||
const CODE_FEHLVERSUCHE_PRO_TAG = 30;
|
||||
|
||||
/** „mbe k7qx", „MBEK7QX", „MBE-K7QX" → „MBE-K7QX" (Bindestrich vor den letzten 4 Zeichen). */
|
||||
function normCode(eingabe: string): string {
|
||||
const roh = eingabe.toUpperCase().replace(/[^A-Z0-9]/g, '');
|
||||
return roh.length > 4 ? `${roh.slice(0, -4)}-${roh.slice(-4)}` : roh;
|
||||
}
|
||||
|
||||
interface Einrichtung {
|
||||
name: string;
|
||||
@@ -716,7 +756,7 @@ async function codeHandler(request: Request, env: Env): Promise<Response> {
|
||||
} catch {
|
||||
return demoFehler(400, 'json', 'Ungültige Anfrage.', origin);
|
||||
}
|
||||
const code = typeof body.code === 'string' ? body.code.trim().toUpperCase().replace(/\s+/g, '') : '';
|
||||
const code = typeof body.code === 'string' ? normCode(body.code) : '';
|
||||
|
||||
const ip = request.headers.get('cf-connecting-ip') ?? 'unbekannt';
|
||||
const heute = new Date().toISOString().slice(0, 10);
|
||||
@@ -782,9 +822,8 @@ export class Uebergabe extends DurableObject<Env> {
|
||||
const zahl = (await this.ctx.storage.get<number>('zahl')) ?? 0;
|
||||
if (zahl >= UEBERGABE_MAX_SCHREIBVORGAENGE) return false;
|
||||
await this.ctx.storage.put({ [`fach:${fach}`]: wert, zahl: zahl + 1 });
|
||||
if ((await this.ctx.storage.getAlarm()) === null) {
|
||||
await this.ctx.storage.setAlarm(Date.now() + UEBERGABE_LEBENSDAUER_MS);
|
||||
}
|
||||
// gleitend: 15 Minuten nach dem LETZTEN Päckchen löschen, nicht nach dem ersten
|
||||
await this.ctx.storage.setAlarm(Date.now() + UEBERGABE_LEBENSDAUER_MS);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -896,7 +935,12 @@ export default {
|
||||
const pfad = new URL(request.url).pathname;
|
||||
lokalTest = env.LOKAL_TEST === '1';
|
||||
// Web-Demo + Bezahl-Routen haben eigene Regeln
|
||||
if (pfad === '/demo') return demoHandler(request, env);
|
||||
if (pfad === '/demo') {
|
||||
return demoHandler(request, env).catch((e) => {
|
||||
console.log('Demo-Fehler', e instanceof Error ? e.name : 'unbekannt');
|
||||
return demoFehler(503, 'dienst', 'Der Dienst ist gerade nicht erreichbar. Bitte versuchen Sie es in einer Minute erneut.', request.headers.get('origin'));
|
||||
});
|
||||
}
|
||||
if (pfad === '/kaufen') return kaufenHandler(request, env);
|
||||
if (pfad === '/kauf-status') return kaufStatusHandler(request, env);
|
||||
if (pfad === '/code') return codeHandler(request, env);
|
||||
|
||||
@@ -2,6 +2,11 @@ name = "behoerdenklar-proxy"
|
||||
main = "src/index.ts"
|
||||
compatibility_date = "2026-07-01"
|
||||
|
||||
# Worker-Logs im Cloudflare-Dashboard (und `npx wrangler tail`) — hilft,
|
||||
# wenn live etwas schiefgeht (z. B. die Übersetzung)
|
||||
[observability]
|
||||
enabled = true
|
||||
|
||||
# Erlaubte Anfragen pro Tag: pro Gerät (normale Nutzung) und pro IP-Adresse
|
||||
# (dämmt Angreifer ein, die Geräte-IDs fälschen; höher, weil sich viele
|
||||
# Nutzer eine IP teilen können)
|
||||
|
||||
@@ -249,7 +249,7 @@ export function EinstellungenScreen({ navigation }: Props) {
|
||||
<View style={styles.karte}>
|
||||
<Text style={styles.text}>
|
||||
• Brieffotos werden nur zur Analyse an den KI-Dienst Anthropic (USA)
|
||||
gesendet und dort nach spätestens 30 Tagen gelöscht. Sie werden nicht
|
||||
gesendet und dort in der Regel nach 30 Tagen gelöscht. Sie werden nicht
|
||||
zum Training der KI verwendet.{'\n\n'}
|
||||
• Alle Ergebnisse liegen ausschließlich auf Ihrem Gerät — verschlüsselt
|
||||
gespeichert (AES-256).{'\n\n'}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
/**
|
||||
* Einrichtungs-Codes für Beratungsstellen anlegen und verwalten.
|
||||
*
|
||||
* node tools/einrichtungs-code.js neu "MBE Donnersberg" MBE --briefe 100 --bis 2026-12-18
|
||||
* node tools/einrichtungs-code.js neu "MBE Donnersberg" MBE --briefe 100 --monate 1
|
||||
* node tools/einrichtungs-code.js stand MBE-K7QX
|
||||
* node tools/einrichtungs-code.js stand MBE-K7QX (mit Nutzung nach Woche und Sprache)
|
||||
* node tools/einrichtungs-code.js aufladen MBE-K7QX 100
|
||||
* node tools/einrichtungs-code.js verlaengern MBE-K7QX 2027-06-30
|
||||
*
|
||||
@@ -49,8 +50,26 @@ function plusMonate(monate) {
|
||||
return d.toISOString().slice(0, 10);
|
||||
}
|
||||
|
||||
/** Wie im Worker: „mbe k7qx" → „MBE-K7QX". */
|
||||
function normCode(c) {
|
||||
const roh = String(c || '').toUpperCase().replace(/[^A-Z0-9]/g, '');
|
||||
return roh.length > 4 ? `${roh.slice(0, -4)}-${roh.slice(-4)}` : roh;
|
||||
}
|
||||
|
||||
/** Nutzung je Analyse (vom Worker: nutzung:<walletId>:<datum>:<sprache>:<zufall>). */
|
||||
function nutzung(walletId) {
|
||||
let liste = [];
|
||||
try {
|
||||
liste = JSON.parse(kv('list', '--prefix', `nutzung:${walletId}:`));
|
||||
} catch { return null; }
|
||||
return liste.map((e) => {
|
||||
const [, , datum, sprache] = e.name.split(':');
|
||||
return { datum, sprache };
|
||||
});
|
||||
}
|
||||
|
||||
function ladeCode(code) {
|
||||
code = String(code || '').toUpperCase();
|
||||
code = normCode(code);
|
||||
const walletId = lies(`code:${code}`);
|
||||
if (!walletId) abbruch(`Code ${code} gibt es nicht.`);
|
||||
const einrichtung = JSON.parse(lies(`einrichtung:${walletId}`) || '{}');
|
||||
@@ -58,14 +77,31 @@ function ladeCode(code) {
|
||||
return { code, walletId, einrichtung, rest };
|
||||
}
|
||||
|
||||
function zeige({ code, einrichtung, rest }) {
|
||||
function zeige({ code, einrichtung, rest, walletId }) {
|
||||
const heute = new Date().toISOString().slice(0, 10);
|
||||
const n = walletId ? nutzung(walletId) : null;
|
||||
let auswertung = '';
|
||||
if (n && n.length) {
|
||||
const proWoche = {}, proSprache = {};
|
||||
for (const { datum, sprache } of n) {
|
||||
const d = new Date(`${datum}T00:00:00Z`);
|
||||
const montag = new Date(d.getTime() - ((d.getUTCDay() + 6) % 7) * 86400000).toISOString().slice(0, 10);
|
||||
proWoche[montag] = (proWoche[montag] || 0) + 1;
|
||||
proSprache[sprache] = (proSprache[sprache] || 0) + 1;
|
||||
}
|
||||
auswertung = `
|
||||
Genutzt: ${n.length} Briefe
|
||||
Pro Woche: ${Object.keys(proWoche).sort().map((w) => `ab ${w}: ${proWoche[w]}`).join(' · ')}
|
||||
Sprachen: ${Object.entries(proSprache).sort((a, b) => b[1] - a[1]).map(([s, z]) => `${s} ${z}`).join(' · ')}`;
|
||||
} else if (n) {
|
||||
auswertung = '\n Genutzt: noch keine Briefe';
|
||||
}
|
||||
console.log(`
|
||||
Einrichtung: ${einrichtung.name}
|
||||
Code: \x1b[1m${code}\x1b[0m
|
||||
Übrig: ${rest} Briefe
|
||||
Gültig bis: ${einrichtung.ablauf}${einrichtung.ablauf < heute ? ' \x1b[31m(abgelaufen)\x1b[0m' : ''}
|
||||
Link: https://behoerdenklar.de/demo?code=${code}
|
||||
Link: https://behoerdenklar.de/demo?code=${code}${auswertung}
|
||||
`);
|
||||
}
|
||||
|
||||
@@ -78,7 +114,10 @@ if (befehl === 'neu') {
|
||||
abbruch('So geht es: node tools/einrichtungs-code.js neu "MBE Donnersberg" MBE --briefe 100 --monate 1');
|
||||
}
|
||||
const briefe = parseInt(option('briefe', '100'), 10);
|
||||
const ablauf = option('bis', plusMonate(parseInt(option('monate', '1'), 10)));
|
||||
const monate = parseInt(option('monate', '1'), 10);
|
||||
const ablauf = option('bis', Number.isFinite(monate) && monate > 0 ? plusMonate(monate) : '');
|
||||
if (!(briefe > 0)) abbruch('--briefe braucht eine Zahl größer 0, z. B. --briefe 100');
|
||||
if (!/^\d{4}-\d{2}-\d{2}$/.test(ablauf)) abbruch('--bis braucht ein Datum wie 2026-12-18 (oder --monate 1)');
|
||||
const code = `${praefix}-${zufall(4)}`;
|
||||
if (lies(`code:${code}`)) abbruch('Zufällig schon vergeben — einfach nochmal ausführen.');
|
||||
const walletId = crypto.randomUUID();
|
||||
@@ -86,7 +125,7 @@ if (befehl === 'neu') {
|
||||
schreib(`einrichtung:${walletId}`, JSON.stringify({ name, ablauf }));
|
||||
schreib(`code:${code}`, walletId);
|
||||
console.log('\n \x1b[32m✓ Code angelegt\x1b[0m');
|
||||
zeige({ code, einrichtung: { name, ablauf }, rest: briefe });
|
||||
zeige({ code, einrichtung: { name, ablauf }, rest: briefe, walletId });
|
||||
} else if (befehl === 'stand') {
|
||||
zeige(ladeCode(a));
|
||||
} else if (befehl === 'aufladen') {
|
||||
|
||||
+27
-27
@@ -60,7 +60,7 @@ TEXTE.tr = {
|
||||
faq: [
|
||||
{ f: "Ücreti ne kadar?", a: "İlk 3 mektup ücretsiz (bekleme listesi koduyla 5). Sonrasında kontör satın alırsınız: 5 analiz 2,99 €, 15 analiz 6,99 €. Abonelik yok, hesap açmak yok." },
|
||||
{ f: "Hangi mektupları açıklayabilir?", a: "İş ve İşçi Bulma Kurumu (Jobcenter), Yabancılar Dairesi, emeklilik kurumu, hastalık sigortası, aile kasası (Kindergeld), vergi dairesi veya ceza dairesinden gelen mektuplar — kısacası hemen hemen her resmî mektup." },
|
||||
{ f: "Verilerime ne oluyor?", a: "Mektuplarınız şifreli olarak kendi cihazınızda kalır. Analiz için fotoğraf bir kez güvenli şekilde yapay zekâya gönderilir ve orada en geç 30 gün sonra silinir. Hesap açmanız gerekmez." },
|
||||
{ f: "Verilerime ne oluyor?", a: "Mektuplarınız şifreli olarak kendi cihazınızda kalır. Analiz için fotoğraf bir kez güvenli şekilde yapay zekâya gönderilir ve orada genellikle 30 gün sonra silinir. Hesap açmanız gerekmez." },
|
||||
],
|
||||
locale: 'tr_TR', navLabel: 'Dil seçin',
|
||||
titel: 'BehördenKlar – Alman resmî mektuplarını anlayın',
|
||||
@@ -104,7 +104,7 @@ TEXTE.ar = {
|
||||
faq: [
|
||||
{ f: "كم التكلفة؟", a: "أول 3 رسائل مجاناً (5 مع رمز قائمة الانتظار). بعد ذلك تشتري رصيداً: 5 تحليلات بـ 2,99 يورو أو 15 بـ 6,99 يورو. بدون اشتراك وبدون حساب." },
|
||||
{ f: "أي الرسائل يمكن شرحها؟", a: "رسائل من مركز العمل (Jobcenter)، دائرة الأجانب، التأمين التقاعدي، التأمين الصحي، صندوق الأسرة (Kindergeld)، مكتب الضرائب أو دائرة المخالفات — باختصار: تقريباً كل رسالة رسمية." },
|
||||
{ f: "ماذا يحدث لبياناتي؟", a: "تبقى رسائلك مشفّرة على جهازك. للتحليل تُرسل الصورة مرة واحدة بشكل آمن إلى الذكاء الاصطناعي وتُحذف هناك خلال 30 يوماً كحد أقصى. لا تحتاج إلى حساب." },
|
||||
{ f: "ماذا يحدث لبياناتي؟", a: "تبقى رسائلك مشفّرة على جهازك. للتحليل تُرسل الصورة مرة واحدة بشكل آمن إلى الذكاء الاصطناعي وتُحذف هناك عادةً بعد 30 يوماً. لا تحتاج إلى حساب." },
|
||||
],
|
||||
locale: 'ar_AR', navLabel: 'اختر اللغة',
|
||||
titel: 'BehördenKlar – افهم الرسائل الرسمية الألمانية',
|
||||
@@ -148,7 +148,7 @@ TEXTE.ru = {
|
||||
faq: [
|
||||
{ f: "Сколько это стоит?", a: "Первые 3 письма бесплатно (5 с кодом из списка ожидания). Дальше вы покупаете баланс: 5 разборов за 2,99 €, 15 за 6,99 €. Без подписки и без учётной записи." },
|
||||
{ f: "Какие письма приложение объясняет?", a: "Письма из джобцентра, ведомства по делам иностранцев, пенсионного страхования, больничной кассы, семейной кассы (Kindergeld), налоговой или органа по штрафам — словом, почти любое официальное письмо." },
|
||||
{ f: "Что происходит с моими данными?", a: "Ваши письма остаются зашифрованными на вашем устройстве. Для разбора фото один раз безопасно отправляется ИИ и удаляется там не позднее чем через 30 дней. Учётная запись не нужна." },
|
||||
{ f: "Что происходит с моими данными?", a: "Ваши письма остаются зашифрованными на вашем устройстве. Для разбора фото один раз безопасно отправляется ИИ и удаляется там обычно через 30 дней. Учётная запись не нужна." },
|
||||
],
|
||||
locale: 'ru_RU', navLabel: 'Выберите язык',
|
||||
titel: 'BehördenKlar – понять письмо из немецкого ведомства',
|
||||
@@ -192,7 +192,7 @@ TEXTE.uk = {
|
||||
faq: [
|
||||
{ f: "Скільки це коштує?", a: "Перші 3 листи безкоштовно (5 з кодом зі списку очікування). Далі ви купуєте баланс: 5 аналізів за 2,99 €, 15 за 6,99 €. Без підписки й без облікового запису." },
|
||||
{ f: "Які листи застосунок пояснює?", a: "Листи з джобцентру, відомства у справах іноземців, пенсійного страхування, лікарняної каси, сімейної каси (Kindergeld), податкової або органу зі штрафів — словом, майже будь-який офіційний лист." },
|
||||
{ f: "Що відбувається з моїми даними?", a: "Ваші листи залишаються зашифрованими на вашому пристрої. Для аналізу фото один раз безпечно надсилається до ШІ і видаляється там щонайпізніше через 30 днів. Обліковий запис не потрібен." },
|
||||
{ f: "Що відбувається з моїми даними?", a: "Ваші листи залишаються зашифрованими на вашому пристрої. Для аналізу фото один раз безпечно надсилається до ШІ і видаляється там зазвичай через 30 днів. Обліковий запис не потрібен." },
|
||||
],
|
||||
locale: 'uk_UA', navLabel: 'Оберіть мову',
|
||||
titel: 'BehördenKlar – зрозуміти лист із німецької установи',
|
||||
@@ -236,7 +236,7 @@ TEXTE.pl = {
|
||||
faq: [
|
||||
{ f: "Ile to kosztuje?", a: "Pierwsze 3 pisma za darmo (5 z kodem z listy oczekujących). Potem kupujesz doładowanie: 5 analiz za 2,99 €, 15 za 6,99 €. Bez abonamentu i bez konta." },
|
||||
{ f: "Jakie pisma aplikacja wyjaśnia?", a: "Pisma z Jobcenter, urzędu do spraw cudzoziemców, ubezpieczenia emerytalnego, kasy chorych, kasy rodzinnej (Kindergeld), urzędu skarbowego lub organu mandatowego — krótko mówiąc prawie każde oficjalne pismo." },
|
||||
{ f: "Co dzieje się z moimi danymi?", a: "Twoje pisma pozostają zaszyfrowane na Twoim urządzeniu. Do analizy zdjęcie jest raz bezpiecznie wysyłane do SI i usuwane tam najpóźniej po 30 dniach. Konto nie jest potrzebne." },
|
||||
{ f: "Co dzieje się z moimi danymi?", a: "Twoje pisma pozostają zaszyfrowane na Twoim urządzeniu. Do analizy zdjęcie jest raz bezpiecznie wysyłane do SI i usuwane tam zwykle po 30 dniach. Konto nie jest potrzebne." },
|
||||
],
|
||||
locale: 'pl_PL', navLabel: 'Wybierz język',
|
||||
titel: 'BehördenKlar – zrozum pismo z niemieckiego urzędu',
|
||||
@@ -280,7 +280,7 @@ TEXTE.ro = {
|
||||
faq: [
|
||||
{ f: "Cât costă?", a: "Primele 3 scrisori sunt gratuite (5 cu codul din lista de așteptare). Apoi cumperi credit: 5 analize la 2,99 €, 15 la 6,99 €. Fără abonament și fără cont." },
|
||||
{ f: "Ce scrisori poate explica aplicația?", a: "Scrisori de la Jobcenter, Oficiul pentru Străini, asigurarea de pensie, casa de sănătate, casa familială (Kindergeld), administrația fiscală sau oficiul de amenzi — pe scurt, aproape orice scrisoare oficială." },
|
||||
{ f: "Ce se întâmplă cu datele mele?", a: "Scrisorile tale rămân criptate pe dispozitivul tău. Pentru analiză, fotografia este trimisă o singură dată în siguranță către IA și este ștearsă acolo în cel mult 30 de zile. Nu ai nevoie de cont." },
|
||||
{ f: "Ce se întâmplă cu datele mele?", a: "Scrisorile tale rămân criptate pe dispozitivul tău. Pentru analiză, fotografia este trimisă o singură dată în siguranță către IA și este ștearsă acolo de regulă după 30 de zile. Nu ai nevoie de cont." },
|
||||
],
|
||||
locale: 'ro_RO', navLabel: 'Alege limba',
|
||||
titel: 'BehördenKlar – înțelege scrisoarea de la autoritățile germane',
|
||||
@@ -324,7 +324,7 @@ TEXTE.en = {
|
||||
faq: [
|
||||
{ f: "What does it cost?", a: "Your first 3 letters are free (5 with the waiting-list code). After that you buy credit: 5 analyses for €2.99 or 15 for €6.99. No subscription, no account." },
|
||||
{ f: "Which letters can the app explain?", a: "Letters from the Jobcenter, the immigration office, pension insurance, health insurance, the family benefits office (Kindergeld), the tax office or the fines authority — in short, almost any official letter." },
|
||||
{ f: "What happens to my data?", a: "Your letters stay encrypted on your own device. For the analysis the photo is sent once, securely, to the AI and is deleted there after 30 days at the latest. You do not need an account." },
|
||||
{ f: "What happens to my data?", a: "Your letters stay encrypted on your own device. For the analysis the photo is sent once, securely, to the AI and is usually deleted there after 30 days. You do not need an account." },
|
||||
],
|
||||
locale: 'en_US', navLabel: 'Choose language',
|
||||
titel: 'BehördenKlar – understand letters from German authorities',
|
||||
@@ -368,7 +368,7 @@ TEXTE.fa = {
|
||||
faq: [
|
||||
{ f: "هزینه آن چقدر است؟", a: "سه نامه اول رایگان است (با کد فهرست انتظار ۵ نامه). پس از آن اعتبار میخرید: ۵ تحلیل با ۲٫۹۹ یورو یا ۱۵ تحلیل با ۶٫۹۹ یورو. بدون اشتراک و بدون حساب کاربری." },
|
||||
{ f: "چه نامههایی را میتواند توضیح دهد؟", a: "نامههای مرکز کاریابی (Jobcenter)، اداره اتباع خارجی، بیمه بازنشستگی، بیمه درمانی، صندوق خانواده (Kindergeld)، اداره مالیات یا اداره جرایم — بهطور خلاصه تقریباً هر نامه رسمی." },
|
||||
{ f: "با اطلاعات من چه میشود؟", a: "نامههای شما رمزگذاریشده روی دستگاه خودتان میمانند. برای تحلیل، عکس یک بار بهصورت امن به هوش مصنوعی فرستاده میشود و حداکثر پس از ۳۰ روز آنجا پاک میشود. به حساب کاربری نیاز ندارید." },
|
||||
{ f: "با اطلاعات من چه میشود؟", a: "نامههای شما رمزگذاریشده روی دستگاه خودتان میمانند. برای تحلیل، عکس یک بار بهصورت امن به هوش مصنوعی فرستاده میشود و معمولاً پس از ۳۰ روز آنجا پاک میشود. به حساب کاربری نیاز ندارید." },
|
||||
],
|
||||
locale: 'fa_IR', navLabel: 'زبان را انتخاب کنید',
|
||||
titel: 'BehördenKlar – نامههای اداری آلمان را بفهمید',
|
||||
@@ -412,7 +412,7 @@ TEXTE.ku = {
|
||||
faq: [
|
||||
{ f: "Ew çiqas dike?", a: "Sê nameyên pêşîn belaş in (bi koda lîsteya bendewariyê 5). Piştre tu krediyê dikirî: 5 analîz bi 2,99 €, 15 bi 6,99 €. Bê abone, bê hesab." },
|
||||
{ f: "Kîjan name dikare rave bike?", a: "Nameyên ji Jobcenter, Daîreya Biyaniyan, sîgorteya teqawidiyê, sîgorteya tenduristiyê, sindoqa malbatê (Kindergeld), daîreya bacê an daîreya cezayan — bi kurtî hema hema her nameya fermî." },
|
||||
{ f: "Bi daneyên min çi tê kirin?", a: "Nameyên te bi şîfre li ser amûra te dimînin. Ji bo analîzê wêne carekê bi ewlehî ji AI re tê şandin û li wir herî dereng piştî 30 rojan tê jêbirin. Tu hewceyî hesabekî nînî." },
|
||||
{ f: "Bi daneyên min çi tê kirin?", a: "Nameyên te bi şîfre li ser amûra te dimînin. Ji bo analîzê wêne carekê bi ewlehî ji AI re tê şandin û li wir bi gelemperî piştî 30 rojan tê jêbirin. Tu hewceyî hesabekî nînî." },
|
||||
],
|
||||
locale: 'ku_TR', navLabel: 'Zimên hilbijêre',
|
||||
titel: 'BehördenKlar – nameyên fermî yên Almanyayê fêm bike',
|
||||
@@ -456,7 +456,7 @@ TEXTE.bg = {
|
||||
faq: [
|
||||
{ f: "Колко струва?", a: "Първите 3 писма са безплатни (5 с кода от списъка на чакащите). След това купувате кредит: 5 анализа за 2,99 €, 15 за 6,99 €. Без абонамент и без регистрация." },
|
||||
{ f: "Кои писма може да обясни приложението?", a: "Писма от Jobcenter, службата за чужденци, пенсионното осигуряване, здравната каса, семейната каса (Kindergeld), данъчната служба или службата за глоби — накратко почти всяко официално писмо." },
|
||||
{ f: "Какво става с данните ми?", a: "Писмата ви остават криптирани на вашето устройство. За анализа снимката се изпраща еднократно и защитено към ИИ и се изтрива там най-късно след 30 дни. Не ви трябва регистрация." },
|
||||
{ f: "Какво става с данните ми?", a: "Писмата ви остават криптирани на вашето устройство. За анализа снимката се изпраща еднократно и защитено към ИИ и се изтрива там обикновено след 30 дни. Не ви трябва регистрация." },
|
||||
],
|
||||
locale: 'bg_BG', navLabel: 'Изберете език',
|
||||
titel: 'BehördenKlar – разберете писмото от немска институция',
|
||||
@@ -500,7 +500,7 @@ TEXTE.hr = {
|
||||
faq: [
|
||||
{ f: "Koliko košta?", a: "Prva 3 pisma su besplatna (5 s kodom s liste čekanja). Zatim kupujete bodove: 5 analiza za 2,99 €, 15 za 6,99 €. Bez pretplate i bez računa." },
|
||||
{ f: "Koja pisma aplikacija objašnjava?", a: "Pisma Jobcentra, Ureda za strance, mirovinskog osiguranja, zdravstvenog osiguranja, obiteljske blagajne (Kindergeld), porezne uprave ili ureda za kazne — ukratko, gotovo svako službeno pismo." },
|
||||
{ f: "Što se događa s mojim podacima?", a: "Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje umjetnoj inteligenciji i ondje se briše najkasnije nakon 30 dana. Račun nije potreban." },
|
||||
{ f: "Što se događa s mojim podacima?", a: "Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje umjetnoj inteligenciji i ondje se u pravilu briše nakon 30 dana. Račun nije potreban." },
|
||||
],
|
||||
locale: 'hr_HR', navLabel: 'Odaberite jezik',
|
||||
titel: 'BehördenKlar – razumite pismo njemačke ustanove',
|
||||
@@ -544,7 +544,7 @@ TEXTE.sr = {
|
||||
faq: [
|
||||
{ f: "Колико кошта?", a: "Прва 3 писма су бесплатна (5 са кодом са листе чекања). Затим купујете бодове: 5 анализа за 2,99 €, 15 за 6,99 €. Без претплате и без налога." },
|
||||
{ f: "Која писма апликација објашњава?", a: "Писма Јобцентра, Управе за странце, пензијског осигурања, здравственог осигурања, породичне благајне (Kindergeld), пореске управе или службе за казне — укратко, готово свако службено писмо." },
|
||||
{ f: "Шта се дешава са мојим подацима?", a: "Ваша писма остају шифрована на вашем уређају. За анализу се фотографија једном безбедно шаље вештачкој интелигенцији и тамо се брише најкасније после 30 дана. Налог није потребан." },
|
||||
{ f: "Шта се дешава са мојим подацима?", a: "Ваша писма остају шифрована на вашем уређају. За анализу се фотографија једном безбедно шаље вештачкој интелигенцији и тамо се по правилу брише после 30 дана. Налог није потребан." },
|
||||
],
|
||||
locale: 'sr_RS', navLabel: 'Изаберите језик',
|
||||
titel: 'BehördenKlar – разумејте писмо немачке установе',
|
||||
@@ -588,7 +588,7 @@ TEXTE.bs = {
|
||||
faq: [
|
||||
{ f: "Koliko košta?", a: "Prva 3 pisma su besplatna (5 s kodom s liste čekanja). Zatim kupujete bodove: 5 analiza za 2,99 €, 15 za 6,99 €. Bez pretplate i bez računa." },
|
||||
{ f: "Koja pisma aplikacija objašnjava?", a: "Pisma Jobcentra, Ureda za strance, penzionog osiguranja, zdravstvenog osiguranja, porodične blagajne (Kindergeld), poreske uprave ili ureda za kazne — ukratko, gotovo svako službeno pismo." },
|
||||
{ f: "Šta se dešava s mojim podacima?", a: "Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje vještačkoj inteligenciji i tamo se briše najkasnije nakon 30 dana. Račun nije potreban." },
|
||||
{ f: "Šta se dešava s mojim podacima?", a: "Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje vještačkoj inteligenciji i tamo se u pravilu briše nakon 30 dana. Račun nije potreban." },
|
||||
],
|
||||
locale: 'bs_BA', navLabel: 'Odaberite jezik',
|
||||
titel: 'BehördenKlar – razumijte pismo njemačke ustanove',
|
||||
@@ -632,7 +632,7 @@ TEXTE.sq = {
|
||||
faq: [
|
||||
{ f: "Sa kushton?", a: "3 letrat e para janë falas (5 me kodin e listës së pritjes). Më pas blini kredi: 5 analiza për 2,99 €, 15 për 6,99 €. Pa abonim dhe pa llogari." },
|
||||
{ f: "Cilat letra mund të shpjegojë?", a: "Letra nga Jobcenter, Zyra e të Huajve, sigurimi i pensionit, sigurimi shëndetësor, arka familjare (Kindergeld), zyra e tatimeve ose zyra e gjobave — shkurt, pothuajse çdo letër zyrtare." },
|
||||
{ f: "Çfarë ndodh me të dhënat e mia?", a: "Letrat tuaja mbeten të koduara në pajisjen tuaj. Për analizën, fotoja dërgohet një herë në mënyrë të sigurt te inteligjenca artificiale dhe fshihet atje më së voni pas 30 ditësh. Nuk ju duhet llogari." },
|
||||
{ f: "Çfarë ndodh me të dhënat e mia?", a: "Letrat tuaja mbeten të koduara në pajisjen tuaj. Për analizën, fotoja dërgohet një herë në mënyrë të sigurt te inteligjenca artificiale dhe fshihet atje zakonisht pas 30 ditësh. Nuk ju duhet llogari." },
|
||||
],
|
||||
locale: 'sq_AL', navLabel: 'Zgjidhni gjuhën',
|
||||
titel: 'BehördenKlar – kuptoni letrën e një institucioni gjerman',
|
||||
@@ -676,7 +676,7 @@ TEXTE.it = {
|
||||
faq: [
|
||||
{ f: "Quanto costa?", a: "Le prime 3 lettere sono gratis (5 con il codice della lista d’attesa). Poi acquisti credito: 5 analisi a 2,99 € o 15 a 6,99 €. Nessun abbonamento, nessun account." },
|
||||
{ f: "Quali lettere può spiegare?", a: "Lettere del Jobcenter, dell’Ufficio stranieri, dell’assicurazione pensionistica, della cassa malattia, della cassa familiare (Kindergeld), dell’ufficio delle imposte o dell’ufficio sanzioni — in breve, quasi ogni lettera ufficiale." },
|
||||
{ f: "Che fine fanno i miei dati?", a: "Le tue lettere restano cifrate sul tuo dispositivo. Per l’analisi la foto viene inviata una sola volta in modo sicuro all’IA e viene cancellata lì al più tardi dopo 30 giorni. Non serve un account." },
|
||||
{ f: "Che fine fanno i miei dati?", a: "Le tue lettere restano cifrate sul tuo dispositivo. Per l’analisi la foto viene inviata una sola volta in modo sicuro all’IA e viene cancellata lì di norma dopo 30 giorni. Non serve un account." },
|
||||
],
|
||||
locale: 'it_IT', navLabel: 'Scegli la lingua',
|
||||
titel: 'BehördenKlar – capire le lettere degli uffici tedeschi',
|
||||
@@ -720,7 +720,7 @@ TEXTE.el = {
|
||||
faq: [
|
||||
{ f: "Πόσο κοστίζει;", a: "Τα πρώτα 3 γράμματα είναι δωρεάν (5 με τον κωδικό της λίστας αναμονής). Έπειτα αγοράζετε μονάδες: 5 αναλύσεις 2,99 € ή 15 για 6,99 €. Χωρίς συνδρομή, χωρίς λογαριασμό." },
|
||||
{ f: "Ποια γράμματα μπορεί να εξηγήσει;", a: "Γράμματα από το Jobcenter, την Υπηρεσία Αλλοδαπών, την ασφάλιση σύνταξης, το ταμείο υγείας, το οικογενειακό ταμείο (Kindergeld), την εφορία ή την υπηρεσία προστίμων — με λίγα λόγια, σχεδόν κάθε επίσημο γράμμα." },
|
||||
{ f: "Τι γίνεται με τα δεδομένα μου;", a: "Τα γράμματά σας παραμένουν κρυπτογραφημένα στη συσκευή σας. Για την ανάλυση η φωτογραφία στέλνεται μία φορά με ασφάλεια στην ΤΝ και διαγράφεται εκεί το αργότερο μετά από 30 ημέρες. Δεν χρειάζεστε λογαριασμό." },
|
||||
{ f: "Τι γίνεται με τα δεδομένα μου;", a: "Τα γράμματά σας παραμένουν κρυπτογραφημένα στη συσκευή σας. Για την ανάλυση η φωτογραφία στέλνεται μία φορά με ασφάλεια στην ΤΝ και διαγράφεται εκεί συνήθως μετά από 30 ημέρες. Δεν χρειάζεστε λογαριασμό." },
|
||||
],
|
||||
locale: 'el_GR', navLabel: 'Επιλέξτε γλώσσα',
|
||||
titel: 'BehördenKlar – κατανοήστε το γράμμα γερμανικής υπηρεσίας',
|
||||
@@ -764,7 +764,7 @@ TEXTE.es = {
|
||||
faq: [
|
||||
{ f: "¿Cuánto cuesta?", a: "Las primeras 3 cartas son gratis (5 con el código de la lista de espera). Después compras saldo: 5 análisis por 2,99 € o 15 por 6,99 €. Sin suscripción y sin cuenta." },
|
||||
{ f: "¿Qué cartas puede explicar?", a: "Cartas del Jobcenter, de la Oficina de Extranjería, del seguro de pensiones, de la mutua de salud, de la caja familiar (Kindergeld), de Hacienda o de la oficina de multas — en resumen, casi cualquier carta oficial." },
|
||||
{ f: "¿Qué pasa con mis datos?", a: "Tus cartas permanecen cifradas en tu propio dispositivo. Para el análisis, la foto se envía una sola vez de forma segura a la IA y allí se borra como máximo a los 30 días. No necesitas cuenta." },
|
||||
{ f: "¿Qué pasa con mis datos?", a: "Tus cartas permanecen cifradas en tu propio dispositivo. Para el análisis, la foto se envía una sola vez de forma segura a la IA y allí se borra normalmente a los 30 días. No necesitas cuenta." },
|
||||
],
|
||||
locale: 'es_ES', navLabel: 'Elige idioma',
|
||||
titel: 'BehördenKlar – entiende las cartas de las oficinas alemanas',
|
||||
@@ -808,7 +808,7 @@ TEXTE.pt = {
|
||||
faq: [
|
||||
{ f: "Quanto custa?", a: "As primeiras 3 cartas são grátis (5 com o código da lista de espera). Depois compra saldo: 5 análises por 2,99 € ou 15 por 6,99 €. Sem assinatura e sem conta." },
|
||||
{ f: "Que cartas consegue explicar?", a: "Cartas do Jobcenter, do Serviço de Estrangeiros, do seguro de pensões, da caixa de saúde, da caixa familiar (Kindergeld), das finanças ou do serviço de multas — em resumo, quase qualquer carta oficial." },
|
||||
{ f: "O que acontece aos meus dados?", a: "As suas cartas ficam cifradas no seu próprio dispositivo. Para a análise, a foto é enviada uma única vez de forma segura para a IA e é apagada lá no máximo ao fim de 30 dias. Não precisa de conta." },
|
||||
{ f: "O que acontece aos meus dados?", a: "As suas cartas ficam cifradas no seu próprio dispositivo. Para a análise, a foto é enviada uma única vez de forma segura para a IA e é apagada lá normalmente ao fim de 30 dias. Não precisa de conta." },
|
||||
],
|
||||
locale: 'pt_PT', navLabel: 'Escolha o idioma',
|
||||
titel: 'BehördenKlar – perceber as cartas das repartições alemãs',
|
||||
@@ -852,7 +852,7 @@ TEXTE.fr = {
|
||||
faq: [
|
||||
{ f: "Combien ça coûte ?", a: "Les 3 premiers courriers sont gratuits (5 avec le code de la liste d’attente). Ensuite vous achetez du crédit : 5 analyses pour 2,99 € ou 15 pour 6,99 €. Sans abonnement et sans compte." },
|
||||
{ f: "Quels courriers peut-elle expliquer ?", a: "Les courriers du Jobcenter, du service des étrangers, de l’assurance retraite, de la caisse maladie, de la caisse familiale (Kindergeld), du fisc ou du service des amendes — bref, presque tout courrier officiel." },
|
||||
{ f: "Que deviennent mes données ?", a: "Vos courriers restent chiffrés sur votre appareil. Pour l’analyse, la photo est envoyée une seule fois de façon sécurisée à l’IA et y est supprimée au plus tard au bout de 30 jours. Aucun compte nécessaire." },
|
||||
{ f: "Que deviennent mes données ?", a: "Vos courriers restent chiffrés sur votre appareil. Pour l’analyse, la photo est envoyée une seule fois de façon sécurisée à l’IA et y est supprimée en général au bout de 30 jours. Aucun compte nécessaire." },
|
||||
],
|
||||
locale: 'fr_FR', navLabel: 'Choisir la langue',
|
||||
titel: 'BehördenKlar – comprendre les courriers administratifs allemands',
|
||||
@@ -896,7 +896,7 @@ TEXTE.hu = {
|
||||
faq: [
|
||||
{ f: "Mennyibe kerül?", a: "Az első 3 levél ingyenes (a várólista kódjával 5). Utána egyenleget vásárol: 5 elemzés 2,99 €, 15 elemzés 6,99 €. Előfizetés és fiók nélkül." },
|
||||
{ f: "Milyen leveleket tud elmagyarázni?", a: "A Jobcenter, az idegenrendészet, a nyugdíjbiztosító, a betegpénztár, a családi pénztár (Kindergeld), az adóhivatal vagy a bírságoló hatóság leveleit — röviden szinte minden hivatalos levelet." },
|
||||
{ f: "Mi történik az adataimmal?", a: "A levelei titkosítva a saját készülékén maradnak. Az elemzéshez a fénykép egyszer, biztonságosan kerül el az MI-hez, és ott legkésőbb 30 nap múlva törlődik. Nincs szükség fiókra." },
|
||||
{ f: "Mi történik az adataimmal?", a: "A levelei titkosítva a saját készülékén maradnak. Az elemzéshez a fénykép egyszer, biztonságosan kerül el az MI-hez, és ott általában 30 nap múlva törlődik. Nincs szükség fiókra." },
|
||||
],
|
||||
locale: 'hu_HU', navLabel: 'Válasszon nyelvet',
|
||||
titel: 'BehördenKlar – értse meg a német hivatali levelet',
|
||||
@@ -940,7 +940,7 @@ TEXTE.vi = {
|
||||
faq: [
|
||||
{ f: "Giá bao nhiêu?", a: "3 lá thư đầu tiên miễn phí (5 nếu có mã từ danh sách chờ). Sau đó bạn mua lượt: 5 lần phân tích 2,99 €, 15 lần 6,99 €. Không thuê bao, không cần tài khoản." },
|
||||
{ f: "Ứng dụng giải thích được những thư nào?", a: "Thư từ Jobcenter, Sở Ngoại kiều, bảo hiểm hưu trí, bảo hiểm y tế, quỹ gia đình (Kindergeld), sở thuế hoặc cơ quan xử phạt — nói ngắn gọn là hầu hết mọi thư chính thức." },
|
||||
{ f: "Dữ liệu của tôi thì sao?", a: "Thư của bạn được mã hóa và nằm trên thiết bị của bạn. Để phân tích, ảnh được gửi một lần duy nhất và an toàn tới AI, rồi bị xóa ở đó chậm nhất sau 30 ngày. Bạn không cần tài khoản." },
|
||||
{ f: "Dữ liệu của tôi thì sao?", a: "Thư của bạn được mã hóa và nằm trên thiết bị của bạn. Để phân tích, ảnh được gửi một lần duy nhất và an toàn tới AI, rồi thường bị xóa ở đó sau 30 ngày. Bạn không cần tài khoản." },
|
||||
],
|
||||
locale: 'vi_VN', navLabel: 'Chọn ngôn ngữ',
|
||||
titel: 'BehördenKlar – hiểu thư từ cơ quan công quyền Đức',
|
||||
@@ -984,7 +984,7 @@ TEXTE.hi = {
|
||||
faq: [
|
||||
{ f: "इसकी कीमत क्या है?", a: "पहली 3 चिट्ठियाँ मुफ़्त हैं (प्रतीक्षा सूची के कोड से 5)। उसके बाद आप क्रेडिट खरीदते हैं: 5 विश्लेषण 2,99 € में या 15 विश्लेषण 6,99 € में। कोई सदस्यता नहीं, कोई खाता नहीं।" },
|
||||
{ f: "यह कौन-सी चिट्ठियाँ समझा सकता है?", a: "जॉबसेंटर, विदेशी विभाग, पेंशन बीमा, स्वास्थ्य बीमा, परिवार कोष (Kindergeld), कर विभाग या जुर्माना विभाग की चिट्ठियाँ — संक्षेप में, लगभग हर सरकारी चिट्ठी।" },
|
||||
{ f: "मेरे डेटा का क्या होता है?", a: "आपकी चिट्ठियाँ आपके अपने उपकरण पर एन्क्रिप्टेड रहती हैं। विश्लेषण के लिए फ़ोटो एक बार सुरक्षित रूप से एआई को भेजी जाती है और वहाँ अधिकतम 30 दिनों में मिटा दी जाती है। आपको खाते की ज़रूरत नहीं।" },
|
||||
{ f: "मेरे डेटा का क्या होता है?", a: "आपकी चिट्ठियाँ आपके अपने उपकरण पर एन्क्रिप्टेड रहती हैं। विश्लेषण के लिए फ़ोटो एक बार सुरक्षित रूप से एआई को भेजी जाती है और वहाँ आमतौर पर 30 दिन बाद मिटा दी जाती है। आपको खाते की ज़रूरत नहीं।" },
|
||||
],
|
||||
locale: 'hi_IN', navLabel: 'भाषा चुनें',
|
||||
titel: 'BehördenKlar – जर्मन सरकारी चिट्ठी समझें',
|
||||
@@ -1028,7 +1028,7 @@ TEXTE.ur = {
|
||||
faq: [
|
||||
{ f: "اس کی قیمت کیا ہے؟", a: "پہلے 3 خط مفت ہیں (انتظار کی فہرست کے کوڈ کے ساتھ 5)۔ اس کے بعد آپ کریڈٹ خریدتے ہیں: 5 تجزیے 2,99 € میں یا 15 تجزیے 6,99 € میں۔ کوئی سبسکرپشن نہیں، کوئی اکاؤنٹ نہیں۔" },
|
||||
{ f: "یہ کون سے خط سمجھا سکتا ہے؟", a: "جاب سینٹر، غیر ملکی دفتر، پنشن انشورنس، ہیلتھ انشورنس، فیملی فنڈ (Kindergeld)، ٹیکس دفتر یا جرمانہ دفتر کے خطوط — مختصراً تقریباً ہر سرکاری خط۔" },
|
||||
{ f: "میرے ڈیٹا کا کیا ہوتا ہے؟", a: "آپ کے خطوط آپ کے اپنے آلے پر خفیہ شکل میں رہتے ہیں۔ تجزیے کے لیے تصویر ایک بار محفوظ طریقے سے اے آئی کو بھیجی جاتی ہے اور وہاں زیادہ سے زیادہ 30 دن میں مٹا دی جاتی ہے۔ آپ کو اکاؤنٹ کی ضرورت نہیں۔" },
|
||||
{ f: "میرے ڈیٹا کا کیا ہوتا ہے؟", a: "آپ کے خطوط آپ کے اپنے آلے پر خفیہ شکل میں رہتے ہیں۔ تجزیے کے لیے تصویر ایک بار محفوظ طریقے سے اے آئی کو بھیجی جاتی ہے اور وہاں عام طور پر 30 دن بعد مٹا دی جاتی ہے۔ آپ کو اکاؤنٹ کی ضرورت نہیں۔" },
|
||||
],
|
||||
locale: 'ur_PK', navLabel: 'زبان منتخب کریں',
|
||||
titel: 'BehördenKlar – جرمن سرکاری خط سمجھیں',
|
||||
@@ -1072,7 +1072,7 @@ TEXTE.ps = {
|
||||
faq: [
|
||||
{ f: "بیه یې څومره ده؟", a: "لومړي ۳ لیکونه وړیا دي (د انتظار لړلیک کوډ سره ۵). وروسته تاسو کریډیټ اخلئ: ۵ شننې په ۲٫۹۹ یورو یا ۱۵ په ۶٫۹۹ یورو. نه ګډون، نه حساب." },
|
||||
{ f: "کوم لیکونه رابرسېره کولی شي؟", a: "د جاب سنټر، د بهرنیانو ادارې، د تقاعد بیمې، روغتیايي بیمې، کورنۍ صندوق (Kindergeld)، مالیې ادارې یا د جریمو ادارې لیکونه — په لنډه توګه نږدې هر رسمي لیک." },
|
||||
{ f: "زما معلوماتو ته څه کیږي؟", a: "ستاسو لیکونه پټ شوي ستاسو په خپله وسیله پاتې کیږي. د شننې لپاره عکس یو ځل په خوندي ډول مصنوعي ځیرکتیا ته لیږل کیږي او هلته تر ۳۰ ورځو وروسته ړنګېږي. حساب ته اړتیا نشته." },
|
||||
{ f: "زما معلوماتو ته څه کیږي؟", a: "ستاسو لیکونه پټ شوي ستاسو په خپله وسیله پاتې کیږي. د شننې لپاره عکس یو ځل په خوندي ډول مصنوعي ځیرکتیا ته لیږل کیږي او هلته معمولاً تر ۳۰ ورځو وروسته ړنګېږي. حساب ته اړتیا نشته." },
|
||||
],
|
||||
locale: 'ps_AF', navLabel: 'ژبه وټاکئ',
|
||||
titel: 'BehördenKlar – د آلمان رسمي لیکونه پوه شئ',
|
||||
@@ -1116,7 +1116,7 @@ TEXTE.ti = {
|
||||
faq: [
|
||||
{ f: "ክንደይ ይኸፍል?", a: "እቶም ቀዳሞት 3 ደብዳበታት ብነጻ እዮም (ብናይ ምጽባይ ዝርዝር ኮድ 5)። ድሕሪኡ ክሬዲት ትገዝእ፦ 5 መጽናዕቲ ብ2,99 € ወይ 15 ብ6,99 €። ዝኾነ ምዝገባ ወይ ኣካውንት ኣየድልን።" },
|
||||
{ f: "ኣየኖት ደብዳበታት ከብርህ ይኽእል?", a: "ካብ Jobcenter፣ ቤት ጽሕፈት ወጻእተኛታት፣ ውሕስነት ጡረታ፣ ውሕስነት ጥዕና፣ ስድራቤታዊ ካሳ (Kindergeld)፣ ቤት ጽሕፈት ግብሪ ወይ ቤት ጽሕፈት መቕጻዕቲ ዝመጹ ደብዳበታት — ብሓጺሩ ኩሉ ወግዓዊ ደብዳበ ማለት እዩ።" },
|
||||
{ f: "ብዛዕባ ዳታይ እንታይ ይኸውን?", a: "ደብዳበታትካ ኣብ ናትካ መሳርሒ ተመስጢሮም ይጸንሑ። ንመጽናዕቲ እቲ ስእሊ ሓንሳብ ብውሑስ መንገዲ ናብ AI ይለኣኽ፣ ኣብኡ ድማ ዝበዝሐ ድሕሪ 30 መዓልቲ ይድምሰስ። ኣካውንት ኣየድልየካን።" },
|
||||
{ f: "ብዛዕባ ዳታይ እንታይ ይኸውን?", a: "ደብዳበታትካ ኣብ ናትካ መሳርሒ ተመስጢሮም ይጸንሑ። ንመጽናዕቲ እቲ ስእሊ ሓንሳብ ብውሑስ መንገዲ ናብ AI ይለኣኽ፣ ኣብኡ ድማ ብልሙድ ድሕሪ 30 መዓልቲ ይድምሰስ። ኣካውንት ኣየድልየካን።" },
|
||||
],
|
||||
locale: 'ti_ER', navLabel: 'ቋንቋ ምረጽ',
|
||||
titel: 'BehördenKlar – ናይ ጀርመን ወግዓዊ ደብዳበ ተረዳእ',
|
||||
@@ -1160,7 +1160,7 @@ TEXTE.so = {
|
||||
faq: [
|
||||
{ f: "Intee ayey ku kacaysaa?", a: "3-da warqadood ee ugu horreeya waa bilaash (5 haddii aad haysato koodhka liiska sugitaanka). Kadib waxaad iibsanaysaa rasiid: 5 falanqayn 2,99 € ama 15 falanqayn 6,99 €. Rukun ma jiro, koonto looma baahna." },
|
||||
{ f: "Warqadaha noocee ah ayuu sharxi karaa?", a: "Warqadaha ka yimid Jobcenter, Xafiiska Ajaanibta, caymiska hawlgabka, caymiska caafimaadka, sanduuqa qoyska (Kindergeld), xafiiska canshuuraha ama xafiiska ganaaxyada — kooban: ku dhawaad warqad kasta oo rasmi ah." },
|
||||
{ f: "Maxaa ku dhacaya xogtayda?", a: "Warqadahaagu waxay ku hadhayaan qalabkaaga iyagoo sir ah. Falanqaynta awgeed sawirka hal mar ayaa si ammaan ah loogu diraa AI-ga, halkaasna waxaa laga tirtiraa ugu badnaan 30 maalmood gudahood. Koonto uma baahnid." },
|
||||
{ f: "Maxaa ku dhacaya xogtayda?", a: "Warqadahaagu waxay ku hadhayaan qalabkaaga iyagoo sir ah. Falanqaynta awgeed sawirka hal mar ayaa si ammaan ah loogu diraa AI-ga, halkaasna waxaa laga tirtiraa inta badan 30 maalmood kadib. Koonto uma baahnid." },
|
||||
],
|
||||
locale: 'so_SO', navLabel: 'Dooro luqadda',
|
||||
titel: 'BehördenKlar – faham warqadda hay’adaha Jarmalka',
|
||||
@@ -1204,7 +1204,7 @@ TEXTE.zh = {
|
||||
faq: [
|
||||
{ f: "收费多少?", a: "前 3 封信免费(用等候名单的兑换码则是 5 封)。之后购买额度:5 次分析 2,99 €,15 次 6,99 €。无订阅,无需注册账号。" },
|
||||
{ f: "能解释哪些信件?", a: "来自劳动介绍所(Jobcenter)、外管局、养老保险、医疗保险、家庭金库(Kindergeld)、税务局或罚款机关的信件——简而言之,几乎任何官方信件。" },
|
||||
{ f: "我的数据会怎样?", a: "您的信件以加密方式保存在您自己的设备上。分析时照片会安全地发送给人工智能一次,并最迟在 30 天后在那里删除。您不需要账号。" },
|
||||
{ f: "我的数据会怎样?", a: "您的信件以加密方式保存在您自己的设备上。分析时照片会安全地发送给人工智能一次,并通常在 30 天后在那里删除。您不需要账号。" },
|
||||
],
|
||||
locale: 'zh_CN', navLabel: '选择语言',
|
||||
titel: 'BehördenKlar – 看懂德国政府部门的信件',
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "ماذا يحدث لبياناتي؟",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "تبقى رسائلك مشفّرة على جهازك. للتحليل تُرسل الصورة مرة واحدة بشكل آمن إلى الذكاء الاصطناعي وتُحذف هناك خلال 30 يوماً كحد أقصى. لا تحتاج إلى حساب."
|
||||
"text": "تبقى رسائلك مشفّرة على جهازك. للتحليل تُرسل الصورة مرة واحدة بشكل آمن إلى الذكاء الاصطناعي وتُحذف هناك عادةً بعد 30 يوماً. لا تحتاج إلى حساب."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>ماذا يحدث لبياناتي؟</summary>
|
||||
<p>تبقى رسائلك مشفّرة على جهازك. للتحليل تُرسل الصورة مرة واحدة بشكل آمن إلى الذكاء الاصطناعي وتُحذف هناك خلال 30 يوماً كحد أقصى. لا تحتاج إلى حساب.</p>
|
||||
<p>تبقى رسائلك مشفّرة على جهازك. للتحليل تُرسل الصورة مرة واحدة بشكل آمن إلى الذكاء الاصطناعي وتُحذف هناك عادةً بعد 30 يوماً. لا تحتاج إلى حساب.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Какво става с данните ми?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Писмата ви остават криптирани на вашето устройство. За анализа снимката се изпраща еднократно и защитено към ИИ и се изтрива там най-късно след 30 дни. Не ви трябва регистрация."
|
||||
"text": "Писмата ви остават криптирани на вашето устройство. За анализа снимката се изпраща еднократно и защитено към ИИ и се изтрива там обикновено след 30 дни. Не ви трябва регистрация."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Какво става с данните ми?</summary>
|
||||
<p>Писмата ви остават криптирани на вашето устройство. За анализа снимката се изпраща еднократно и защитено към ИИ и се изтрива там най-късно след 30 дни. Не ви трябва регистрация.</p>
|
||||
<p>Писмата ви остават криптирани на вашето устройство. За анализа снимката се изпраща еднократно и защитено към ИИ и се изтрива там обикновено след 30 дни. Не ви трябва регистрация.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Šta se dešava s mojim podacima?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje vještačkoj inteligenciji i tamo se briše najkasnije nakon 30 dana. Račun nije potreban."
|
||||
"text": "Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje vještačkoj inteligenciji i tamo se u pravilu briše nakon 30 dana. Račun nije potreban."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Šta se dešava s mojim podacima?</summary>
|
||||
<p>Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje vještačkoj inteligenciji i tamo se briše najkasnije nakon 30 dana. Račun nije potreban.</p>
|
||||
<p>Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje vještačkoj inteligenciji i tamo se u pravilu briše nakon 30 dana. Račun nije potreban.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+16
-10
@@ -61,8 +61,9 @@
|
||||
<li>
|
||||
<strong>Anthropic PBC (USA)</strong> — den Betreiber des KI-Modells
|
||||
„Claude". Anthropic verarbeitet die Daten ausschließlich zur
|
||||
Erstellung der Analyse, speichert sie maximal 30 Tage (zur
|
||||
Missbrauchserkennung) und verwendet sie nicht zum Training der KI.
|
||||
Erstellung der Analyse, löscht sie in der Regel nach 30 Tagen
|
||||
(länger nur, wenn ein Verdacht auf Missbrauch geprüft werden muss)
|
||||
und verwendet sie nicht zum Training der KI.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
@@ -105,15 +106,16 @@
|
||||
<h2>4. Übermittlung in die USA</h2>
|
||||
<p>
|
||||
Anthropic PBC und Cloudflare, Inc. haben ihren Sitz in den USA. Die
|
||||
Übermittlung stützt sich auf den Angemessenheitsbeschluss der
|
||||
EU-Kommission zum EU-U.S. Data Privacy Framework bzw. auf
|
||||
EU-Standardvertragsklauseln (Art. 46 DSGVO).
|
||||
Übermittlung stützt sich auf EU-Standardvertragsklauseln (Art. 46
|
||||
Abs. 2 lit. c DSGVO), die Bestandteil der
|
||||
Auftragsverarbeitungsverträge beider Anbieter sind.
|
||||
</p>
|
||||
|
||||
<h2>5. Speicherdauer</h2>
|
||||
<ul>
|
||||
<li>Brieffotos bei Anthropic: maximal 30 Tage, danach automatische Löschung</li>
|
||||
<li>Brieffotos bei Anthropic: in der Regel 30 Tage, danach automatische Löschung (länger nur bei Prüfung eines Missbrauchsverdachts)</li>
|
||||
<li>Anonyme Geräte-Kennung + Tageszähler auf unserem Server: maximal 48 Stunden</li>
|
||||
<li>Technische Server-Protokolle (Cloudflare Workers Logs: Zeitpunkt, aufgerufene Adresse, Fehlerart, technische Metadaten, kein Briefinhalt) zur Fehlersuche: maximal 7 Tage (Art. 6 Abs. 1 lit. f DSGVO)</li>
|
||||
<li>Daten auf Ihrem Gerät: bis Sie sie löschen („Alle Daten löschen" in den Einstellungen oder Deinstallation der App)</li>
|
||||
</ul>
|
||||
|
||||
@@ -157,7 +159,7 @@
|
||||
(Häkchen vor dem Hochladen, Art. 6 Abs. 1 lit. a, Art. 9 Abs. 2
|
||||
lit. a DSGVO) — über unseren Server (Cloudflare) an Anthropic (USA)
|
||||
zur Analyse geschickt. Es wird auf unserem Server nicht gespeichert;
|
||||
bei Anthropic wird es nach spätestens 30 Tagen gelöscht (wie in
|
||||
bei Anthropic wird es in der Regel nach 30 Tagen gelöscht (wie in
|
||||
Abschnitt 3a beschrieben). Das Ergebnis sehen nur Sie in Ihrem
|
||||
Browser; wir speichern es nicht.
|
||||
</li>
|
||||
@@ -222,9 +224,13 @@
|
||||
Guthaben der Einrichtung, das wie in Abschnitt 9 beschrieben unter
|
||||
einer zufälligen Kennung verwaltet wird. Wir erfahren dabei nicht, wer
|
||||
den Code nutzt, und die Beratungsstelle sieht keine Briefe oder
|
||||
Ergebnisse, nur wie viele Analysen noch übrig sind. Gegen das Erraten
|
||||
von Codes zählen wir falsche Eingaben pro IP-Adresse (Speicherung
|
||||
max. 48 Stunden, Art. 6 Abs. 1 lit. f DSGVO).
|
||||
Ergebnisse, nur Zahlen: wie viele Analysen noch übrig sind und wie
|
||||
viele pro Woche und Sprache genutzt wurden. Für die Auswertung
|
||||
mit der Beratungsstelle zählen wir pro Analyse über einen Code nur das
|
||||
Datum und die gewählte Sprache, ohne Briefinhalt und ohne Bezug zu
|
||||
einer Person (Speicherung max. 13 Monate). Gegen das Erraten von
|
||||
Codes zählen wir falsche Eingaben pro IP-Adresse (Speicherung max.
|
||||
48 Stunden). Rechtsgrundlage ist jeweils Art. 6 Abs. 1 lit. f DSGVO.
|
||||
</p>
|
||||
|
||||
<h2>9b. Übergabe zwischen Handy und Computer</h2>
|
||||
|
||||
+436
-121
@@ -68,6 +68,17 @@
|
||||
}
|
||||
.mono { font-family: 'Courier New', ui-monospace, monospace; letter-spacing: 0.02em; }
|
||||
.wrap { max-width: 720px; margin: 0 auto; padding: 0 20px 72px; }
|
||||
/* Schriften mit verbundenen Buchstaben (Arabisch, Devanagari …): kein
|
||||
Buchstabenabstand und keine Schreibmaschine — sonst reißen Wörter auseinander */
|
||||
html.verbundene-schrift .formular-kopf, html.verbundene-schrift .betreff-label,
|
||||
html.verbundene-schrift h2, html.verbundene-schrift .karten-label {
|
||||
font-family: inherit; letter-spacing: 0; text-transform: none;
|
||||
}
|
||||
@media (max-width: 420px) {
|
||||
/* Cloudflare-Prüfung ist fest 300 px breit — sonst ragt sie aus dem Kasten */
|
||||
.wrap { padding: 0 14px 56px; }
|
||||
.antrag { padding: 22px 14px; }
|
||||
}
|
||||
|
||||
.briefkopf {
|
||||
display: flex; justify-content: space-between; align-items: baseline;
|
||||
@@ -183,7 +194,7 @@
|
||||
font-size: 16px; font-weight: 700;
|
||||
}
|
||||
.todo { padding: 8px 0 8px 2px; border-bottom: 1px dotted rgba(33,33,29,0.3); font-size: 16.5px; }
|
||||
.todo::before { content: '☐'; margin-right: 10px; color: var(--amtsblau); font-size: 18px; }
|
||||
.todo::before { content: '☐'; margin-inline-end: 10px; color: var(--amtsblau); font-size: 18px; }
|
||||
details { border-bottom: 1px solid rgba(33, 33, 29, 0.2); padding: 12px 4px; }
|
||||
summary { font-weight: 700; cursor: pointer; font-size: 16.5px; list-style: none; }
|
||||
summary::-webkit-details-marker { display: none; }
|
||||
@@ -215,7 +226,7 @@
|
||||
background: #eaf1fa; border: 2px solid var(--amtsblau); font-size: 16px;
|
||||
}
|
||||
.qr-box { display: none; margin-top: 16px; padding: 18px; background: #fff; border: 2px dashed var(--amtsblau); text-align: center; }
|
||||
.qr-box .qr { width: 220px; height: 220px; margin: 10px auto; }
|
||||
.qr-box .qr { width: 290px; max-width: 100%; aspect-ratio: 1; height: auto; margin: 10px auto; }
|
||||
.qr-box .qr svg { width: 100%; height: 100%; display: block; }
|
||||
.qr-box ol { text-align: start; margin: 8px auto 0; max-width: 420px; padding-inline-start: 22px; font-size: 15.5px; }
|
||||
.qr-box .zustand { margin-top: 12px; font-weight: 700; font-size: 16.5px; }
|
||||
@@ -265,23 +276,23 @@
|
||||
|
||||
<div class="briefkopf">
|
||||
<span class="absender"><a href="index.html">📬 BehördenKlar</a> <span style="font-weight:400;font-size:.62em;opacity:.6;letter-spacing:.04em;">by Webklar</span></span>
|
||||
<span class="az mono">Formular D-01 · Gratis-Demo</span>
|
||||
<span class="az mono" id="kopfAz">Formular D-01 · Gratis-Demo</span>
|
||||
</div>
|
||||
|
||||
<header>
|
||||
<p class="betreff-label">Betreff</p>
|
||||
<h1>Probieren Sie es aus —<br><span class="markiert">mit Ihrem eigenen Brief.</span></h1>
|
||||
<p class="betreff-label" data-t="betreff">Betreff</p>
|
||||
<h1><span data-t="titel1">Probieren Sie es aus —</span><br><span class="markiert" data-t="titel2">mit Ihrem eigenen Brief.</span></h1>
|
||||
<p class="anrede">
|
||||
Kein Konto. Keine App-Installation. Laden Sie ein Foto Ihres
|
||||
Behördenbriefs hoch — in etwa einer Minute lesen Sie ihn in einfacher
|
||||
Sprache. <strong>2 Analysen gratis.</strong>
|
||||
<span data-t="anrede">Kein Konto. Keine App-Installation. Laden Sie ein Foto Ihres
|
||||
Behördenbriefs hoch — nach ein bis zwei Minuten lesen Sie ihn in einfacher
|
||||
Sprache.</span> <strong id="anredeAngebot" data-t="anredeGratis">2 Analysen gratis.</strong>
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<section id="demo">
|
||||
<h2><span class="nr">§ 1</span> Brief hochladen</h2>
|
||||
<h2><span class="nr">§ 1</span> <span data-t="abschnittHochladen">Brief hochladen</span></h2>
|
||||
<div class="antrag">
|
||||
<p class="formular-kopf">Antrag auf Klartext · 2 Gratis-Analysen</p>
|
||||
<p class="formular-kopf" data-t="formKopfGratis">Brief erklären lassen · 2 kostenlose Analysen</p>
|
||||
|
||||
<p class="verbunden" id="verbundenBanner"></p>
|
||||
|
||||
@@ -290,7 +301,7 @@
|
||||
✅ Kauf erfolgreich! Ihr Guthaben wurde aktiviert.
|
||||
</p>
|
||||
<p id="guthabenBanner" class="bonus-zeile" style="display: none;">
|
||||
<span id="guthabenText">💳 Ihr Guthaben:</span> <strong id="guthabenZahl">0</strong> Analysen — laden Sie den nächsten Brief hoch.
|
||||
<span id="guthabenText">💳 Ihr Guthaben:</span> <strong id="guthabenZahl">0</strong> <span data-t="bannerRest">Analysen — laden Sie den nächsten Brief hoch.</span>
|
||||
<br><button type="button" class="link-knopf" id="guthabenHandyKnopf" style="font-size: 14.5px;">📱 Auch auf dem Handy nutzen</button>
|
||||
</p>
|
||||
<div class="qr-box" id="guthabenQrBox">
|
||||
@@ -299,19 +310,20 @@
|
||||
<p class="klein" style="margin-top: 0;">Mit der Handy-Kamera scannen. Danach können Sie Briefe auch direkt am Handy erklären lassen.</p>
|
||||
</div>
|
||||
<p style="margin-bottom: 14px; font-size: 15.5px;">
|
||||
🌐 <label for="sprachWahl">Erklärung in dieser Sprache:</label>
|
||||
🌐 <label for="sprachWahl" data-t="spracheLabel">Erklärung in dieser Sprache:</label>
|
||||
<select id="sprachWahl" style="font-family: inherit; font-size: 15.5px; padding: 5px 8px; border: 1.5px solid var(--tinte); background: #fff; margin-inline-start: 6px;"></select>
|
||||
</p>
|
||||
|
||||
<label class="konsens">
|
||||
<input type="checkbox" id="konsens">
|
||||
<span>
|
||||
Ich bin einverstanden, dass mein Brief-Foto zur Analyse an den
|
||||
Server von BehördenKlar und an den KI-Dienst Anthropic (USA)
|
||||
geschickt wird. Es wird dort nicht dauerhaft gespeichert.
|
||||
Behördenbriefe enthalten persönliche Daten — laden Sie nur hoch,
|
||||
was Sie analysieren lassen möchten.
|
||||
<a href="datenschutz.html" target="_blank">Datenschutzerklärung</a>
|
||||
<span data-t="konsens">Ich bin einverstanden, dass das Foto dieses Briefs zur Erklärung
|
||||
an den Server von BehördenKlar und an den KI-Dienst Anthropic
|
||||
(USA) geschickt wird. Briefe können sehr persönliche Angaben
|
||||
enthalten, zum Beispiel zu Gesundheit, Herkunft oder Aufenthalt.
|
||||
BehördenKlar speichert den Brief nicht. Anthropic löscht ihn in
|
||||
der Regel nach 30 Tagen und nutzt ihn nicht zum Training.</span>
|
||||
<a href="datenschutz.html" target="_blank" data-t="datenschutzLink">Datenschutzerklärung</a>
|
||||
</span>
|
||||
</label>
|
||||
|
||||
@@ -329,7 +341,7 @@
|
||||
</div>
|
||||
|
||||
<input type="file" id="datei" accept="image/jpeg,image/png,application/pdf" style="display: none;">
|
||||
<button class="cta" id="startKnopf" disabled>📷 Brief auswählen & erklären lassen</button>
|
||||
<button class="cta" id="startKnopf" data-t="startKnopf">📷 Brief auswählen & erklären lassen</button>
|
||||
<button class="cta cta-zwei" id="handyKnopf" type="button" style="display: none;">📱 Lieber mit dem Handy fotografieren</button>
|
||||
<div class="qr-box" id="handyBox">
|
||||
<strong>Mit dem Handy fotografieren</strong>
|
||||
@@ -341,7 +353,7 @@
|
||||
</ol>
|
||||
<label class="konsens" id="handyDeutschZeile" style="justify-content: center; margin: 14px 0 0;">
|
||||
<input type="checkbox" id="handyDeutsch" checked>
|
||||
<span>Hier am Bildschirm auf Deutsch zeigen, am Handy in der gewählten Sprache</span>
|
||||
<span>Hier am Bildschirm immer auf Deutsch zeigen, am Handy in der Sprache der Person</span>
|
||||
</label>
|
||||
<p class="zustand" id="handyZustand">⏳ Warte auf das Handy …</p>
|
||||
<p class="klein" style="margin-top: 6px;">Verschlüsselt: Den Schlüssel kennt nur dieser QR-Code. Der Code gilt 15 Minuten.</p>
|
||||
@@ -354,36 +366,39 @@
|
||||
if (/^(localhost|127\.0\.0\.1)$/.test(location.hostname)) {
|
||||
document.querySelector('.cf-turnstile').setAttribute('data-sitekey', '1x00000000000000000000AA');
|
||||
}
|
||||
// Sehr schmale Handys (< 350 px): kompakte Cloudflare-Prüfung
|
||||
if (window.innerWidth < 350) document.querySelector('.cf-turnstile').setAttribute('data-size', 'compact');
|
||||
</script>
|
||||
|
||||
<p class="klein">
|
||||
<p class="klein" data-t="tippFoto">
|
||||
Geht mit Foto (JPG/PNG) oder PDF, max. 5 MB. Tipp: gutes Licht,
|
||||
Brief von oben, ganzer Text im Bild.
|
||||
</p>
|
||||
<p class="klein">
|
||||
📱 <strong>Am Handy:</strong> Wählen Sie „Galerie" oder „Dateien",
|
||||
<strong data-t="tippHandyTitel">📱 Am Handy:</strong> <span data-t="tippHandy">Wählen Sie „Galerie" oder „Dateien",
|
||||
wenn Sie den Brief schon fotografiert haben. Tippen Sie auf
|
||||
„Kamera", öffnet sich die Kamera-App Ihres Handys — und die fragt
|
||||
nach ihren eigenen Berechtigungen. <strong>Diese Abfrage kommt von
|
||||
Ihrem Handy, nicht von uns:</strong> Diese Seite greift weder auf
|
||||
Kamera noch auf Mikrofon zu.
|
||||
nach ihren eigenen Berechtigungen. Diese Abfrage kommt von
|
||||
Ihrem Handy, nicht von uns: Diese Seite greift weder auf
|
||||
Kamera noch auf Mikrofon zu.</span>
|
||||
</p>
|
||||
|
||||
<details id="codeTeil" style="margin-top: 14px; border-top: 1px solid rgba(33, 33, 29, 0.2);">
|
||||
<summary>🤝 Sie haben einen Code von einer Beratungsstelle?</summary>
|
||||
<p>Dann ist BehördenKlar für Sie kostenlos. Geben Sie den Code hier ein:</p>
|
||||
<input class="wl-input" id="codeFeld" placeholder="z. B. MBE-K7QX" autocapitalize="characters" autocomplete="off" spellcheck="false" style="margin-top: 10px; text-transform: uppercase;">
|
||||
<button class="cta" id="codeKnopf" type="button">Code einlösen</button>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
<div class="status" id="status">
|
||||
<span class="sanduhr">⏳</span>
|
||||
<p class="gross">Ihr Brief wird analysiert…</p>
|
||||
<p class="sub">Das dauert bis zu einer Minute. Bitte lassen Sie die Seite geöffnet.</p>
|
||||
<p class="gross">Ihr Brief wird erklärt …</p>
|
||||
<p class="sub" data-t="statusDauer">Das dauert ein bis zwei Minuten. Bitte lassen Sie die Seite geöffnet.</p>
|
||||
</div>
|
||||
|
||||
<div class="fehlerbox" id="fehler"></div>
|
||||
|
||||
<details id="codeTeil" style="margin-top: 16px; border-top: 1px solid rgba(33, 33, 29, 0.2);">
|
||||
<summary data-t="codeFrage">🤝 Sie haben einen Code von einer Beratungsstelle?</summary>
|
||||
<p data-t="codeText">Dann ist BehördenKlar für Sie kostenlos. Geben Sie den Code hier ein:</p>
|
||||
<input class="wl-input" id="codeFeld" placeholder="z. B. MBE-K7QX" autocapitalize="characters" autocomplete="off" spellcheck="false" style="margin-top: 10px; text-transform: uppercase;">
|
||||
<button class="cta" id="codeKnopf" type="button" data-t="codeKnopf">Code einlösen</button>
|
||||
</details>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -433,11 +448,11 @@
|
||||
</section>
|
||||
|
||||
<section id="ergebnis">
|
||||
<h2><span class="nr">§ 3</span> Ihr Brief in Klartext</h2>
|
||||
<h2><span class="nr">§ 3</span> <span data-t="ergebnisTitel">Ihr Brief in Klartext</span></h2>
|
||||
<div class="umschalter" id="sprachUmschalter" role="group" aria-label="Sprache der Erklärung"></div>
|
||||
|
||||
<div class="brief-karte">
|
||||
<span class="karten-label neutral" id="ergBrieftyp">Brief</span>
|
||||
<span class="karten-label neutral" id="ergBrieftyp" dir="auto" style="font-family: inherit; letter-spacing: 0; text-transform: none;">Brief</span>
|
||||
<p style="margin-top: 6px;"><strong id="ergKern" dir="auto"></strong></p>
|
||||
<p class="ampelzeile" id="ergAmpel" style="display: none;"></p>
|
||||
</div>
|
||||
@@ -445,31 +460,31 @@
|
||||
<div class="brief-karte" id="ergKalenderKarte" style="display: none;">
|
||||
<span class="karten-label" id="ergKalenderLabel">Nicht vergessen</span>
|
||||
<div id="ergKalenderText" style="margin-top: 6px;"></div>
|
||||
<button class="cta" id="kalenderKnopf" type="button" style="margin-top: 12px;">📅 In meinen Kalender eintragen</button>
|
||||
<p class="klein" id="ergKalenderHinweis">
|
||||
Ihr Handy erinnert Sie <strong>3 Tage</strong> und <strong>1 Tag</strong> vorher.
|
||||
<button class="cta" id="kalenderKnopf" type="button" style="margin-top: 12px;" data-t="kalenderKnopf">📅 In meinen Kalender eintragen</button>
|
||||
<p class="klein" id="ergKalenderHinweis" data-t="kalenderHinweis">
|
||||
Ihr Handy erinnert Sie 3 Tage und 1 Tag vorher.
|
||||
Der Eintrag landet nur in Ihrem eigenen Kalender — wir speichern nichts.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="brief-karte">
|
||||
<span class="karten-label">Einfach erklärt</span>
|
||||
<span class="karten-label" data-t="labelEinfach">Einfach erklärt</span>
|
||||
<p id="ergErklaerung" dir="auto" style="white-space: pre-line;"></p>
|
||||
</div>
|
||||
|
||||
<div class="brief-karte" id="ergChecklisteKarte" style="display: none;">
|
||||
<span class="karten-label neutral">Das müssen Sie tun</span>
|
||||
<span class="karten-label neutral" data-t="labelTun">Das müssen Sie tun</span>
|
||||
<div id="ergCheckliste"></div>
|
||||
</div>
|
||||
|
||||
<div class="brief-karte" id="ergAnrufKarte" style="display: none;">
|
||||
<span class="karten-label neutral">Anrufen</span>
|
||||
<span class="karten-label neutral" data-t="labelAnrufen">Anrufen</span>
|
||||
<div id="ergAnrufKontakt" style="margin-top: 6px;"></div>
|
||||
<div id="ergAnrufSaetze"></div>
|
||||
</div>
|
||||
|
||||
<div class="brief-karte" id="ergBegriffeKarte" style="display: none;">
|
||||
<span class="karten-label neutral">Schwere Wörter erklärt</span>
|
||||
<span class="karten-label neutral" data-t="labelWoerter">Schwere Wörter erklärt</span>
|
||||
<div id="ergBegriffe"></div>
|
||||
</div>
|
||||
|
||||
@@ -482,9 +497,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="hinweis-recht">
|
||||
<p class="hinweis-recht" data-t="rechtHinweis">
|
||||
⚖️ BehördenKlar erklärt Briefe, ersetzt aber keine Rechtsberatung. Bei
|
||||
wichtigen Entscheidungen hilft eine Beratungsstelle oder ein Anwalt.
|
||||
wichtigen Entscheidungen hilft eine Beratungsstelle oder eine Anwältin bzw. ein Anwalt.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
@@ -534,6 +549,7 @@
|
||||
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
|
||||
<script src="qrcode.js"></script>
|
||||
<script src="uebergabe.js"></script>
|
||||
<script src="ui-texte.js"></script>
|
||||
<script>
|
||||
(function () {
|
||||
'use strict';
|
||||
@@ -551,8 +567,27 @@
|
||||
{ priceId: 'price_1U6BPRBsRA1AOdnemDUalzb8', titel: '15 Analysen', preis: '6,99 €', best: true },
|
||||
];
|
||||
|
||||
// Browser-Speicher abgesichert: Manche Browser (Safari „Alle Cookies
|
||||
// blockieren", App-interne Browser) werfen schon beim Zugriff einen Fehler.
|
||||
// Dann merken wir uns die Werte nur, solange die Seite offen ist.
|
||||
var speicher = (function () {
|
||||
var ersatz = {};
|
||||
return {
|
||||
get: function (k) { try { return window.localStorage.getItem(k); } catch (e) { return k in ersatz ? ersatz[k] : null; } },
|
||||
set: function (k, v) { try { window.localStorage.setItem(k, v); } catch (e) { ersatz[k] = String(v); } },
|
||||
remove: function (k) { try { window.localStorage.removeItem(k); } catch (e) { delete ersatz[k]; } },
|
||||
};
|
||||
})();
|
||||
|
||||
// Zielsprache: kommt als ?sprache=tr von den Sprachseiten, wird gemerkt.
|
||||
var SPRACH_SCHLUESSEL = 'bk_sprache';
|
||||
var SPRACH_DEUTSCH = {
|
||||
tr:'Türkisch', ar:'Arabisch', ru:'Russisch', uk:'Ukrainisch', pl:'Polnisch', ro:'Rumänisch',
|
||||
en:'Englisch', fa:'Farsi/Dari', ku:'Kurdisch', bg:'Bulgarisch', hr:'Kroatisch', sr:'Serbisch',
|
||||
bs:'Bosnisch', sq:'Albanisch', it:'Italienisch', el:'Griechisch', es:'Spanisch', pt:'Portugiesisch',
|
||||
fr:'Französisch', hu:'Ungarisch', vi:'Vietnamesisch', hi:'Hindi', ur:'Urdu', ps:'Paschtu',
|
||||
ti:'Tigrinya', so:'Somali', zh:'Chinesisch'
|
||||
};
|
||||
var SPRACH_NAMEN = {
|
||||
de:'Deutsch', tr:'Türkçe', ar:'العربية', ru:'Русский', uk:'Українська', pl:'Polski',
|
||||
ro:'Română', en:'English', fa:'فارسی', ku:'Kurdî', bg:'Български', hr:'Hrvatski',
|
||||
@@ -560,10 +595,21 @@
|
||||
pt:'Português', fr:'Français', hu:'Magyar', vi:'Tiếng Việt', hi:'हिन्दी', ur:'اردو',
|
||||
ps:'پښتو', ti:'ትግርኛ', so:'Soomaali', zh:'中文'
|
||||
};
|
||||
var sitzungsSprache = null; // vom PC per QR vorgegeben — gilt nur, solange die Seite offen ist
|
||||
function zielsprache() {
|
||||
if (sitzungsSprache) return sitzungsSprache;
|
||||
var p = new URLSearchParams(window.location.search).get('sprache');
|
||||
if (p && SPRACH_NAMEN[p]) { try { localStorage.setItem(SPRACH_SCHLUESSEL, p); } catch (e) {} return p; }
|
||||
try { var g = localStorage.getItem(SPRACH_SCHLUESSEL); if (g && SPRACH_NAMEN[g]) return g; } catch (e) {}
|
||||
if (p && SPRACH_NAMEN[p]) { speicher.set(SPRACH_SCHLUESSEL, p); return p; }
|
||||
var g = speicher.get(SPRACH_SCHLUESSEL); if (g && SPRACH_NAMEN[g]) return g;
|
||||
// RA4: Sprache des HANDYS vorschlagen (nicht speichern — eine Auswahl von Hand gewinnt).
|
||||
// Nicht am PC: Dort wählt die Beraterin die Sprache ihres Gegenübers.
|
||||
var amPc = window.matchMedia && window.matchMedia('(hover: hover) and (pointer: fine)').matches;
|
||||
var liste = amPc ? [] : (navigator.languages && navigator.languages.length) ? navigator.languages : [navigator.language || ''];
|
||||
for (var i = 0; i < liste.length; i++) {
|
||||
var kurz = String(liste[i] || '').toLowerCase().split('-')[0];
|
||||
if (kurz === 'de') break;
|
||||
if (SPRACH_NAMEN[kurz]) return kurz;
|
||||
}
|
||||
return 'de';
|
||||
}
|
||||
|
||||
@@ -591,18 +637,58 @@
|
||||
// Wallet (passwortloses Guthaben) — Token + zuletzt bekannter Stand lokal.
|
||||
var WALLET_SCHLUESSEL = 'bk_wallet';
|
||||
var GUTHABEN_SCHLUESSEL = 'bk_guthaben';
|
||||
function walletToken() { return localStorage.getItem(WALLET_SCHLUESSEL) || ''; }
|
||||
function setzeWallet(t) { localStorage.setItem(WALLET_SCHLUESSEL, t); }
|
||||
function guthaben() { return parseInt(localStorage.getItem(GUTHABEN_SCHLUESSEL) || '0', 10); }
|
||||
function setzeGuthaben(n) { localStorage.setItem(GUTHABEN_SCHLUESSEL, String(Math.max(0, n | 0))); }
|
||||
function walletToken() { return speicher.get(WALLET_SCHLUESSEL) || ''; }
|
||||
function setzeWallet(t) { speicher.set(WALLET_SCHLUESSEL, t); }
|
||||
function guthaben() { return parseInt(speicher.get(GUTHABEN_SCHLUESSEL) || '0', 10); }
|
||||
function setzeGuthaben(n) { speicher.set(GUTHABEN_SCHLUESSEL, String(Math.max(0, n | 0))); }
|
||||
function hatGuthaben() { return !!walletToken() && guthaben() > 0; }
|
||||
// Einrichtungs-Code: Name der Beratungsstelle, über die das Guthaben läuft
|
||||
var EINRICHTUNG_SCHLUESSEL = 'bk_einrichtung';
|
||||
function einrichtung() { return localStorage.getItem(EINRICHTUNG_SCHLUESSEL) || ''; }
|
||||
function einrichtung() { return speicher.get(EINRICHTUNG_SCHLUESSEL) || ''; }
|
||||
// BE3: Ablaufdatum des Einrichtungs-Zugangs (kommt beim Einlösen vom Server)
|
||||
var ABLAUF_SCHLUESSEL = 'bk_einrichtung_bis';
|
||||
var CODE_SCHLUESSEL = 'bk_einrichtung_code';
|
||||
function einrichtungBis() { return speicher.get(ABLAUF_SCHLUESSEL) || ''; }
|
||||
function setzeEinrichtung(name) {
|
||||
if (name) localStorage.setItem(EINRICHTUNG_SCHLUESSEL, name);
|
||||
else localStorage.removeItem(EINRICHTUNG_SCHLUESSEL);
|
||||
if (name) speicher.set(EINRICHTUNG_SCHLUESSEL, name);
|
||||
else { speicher.remove(EINRICHTUNG_SCHLUESSEL); speicher.remove(ABLAUF_SCHLUESSEL); speicher.remove(CODE_SCHLUESSEL); }
|
||||
}
|
||||
// ── Bediensprache ─────────────────────────────────────────────────
|
||||
// Am PC (Beratung) bleibt alles deutsch. Am Handy richtet sich die
|
||||
// Bedienung nach der gewählten Erklärungssprache (Texte: ui-texte.js).
|
||||
var UI = window.BK_UI_TEXTE || { de: {} };
|
||||
var RTL = { ar: 1, fa: 1, ur: 1, ps: 1 };
|
||||
var VERBUNDEN = { ar: 1, fa: 1, ur: 1, ps: 1, hi: 1, ti: 1, zh: 1 };
|
||||
var uiSprache = 'de';
|
||||
function t(schluessel, werte) {
|
||||
var text = (UI[uiSprache] && UI[uiSprache][schluessel]) || (UI.de && UI.de[schluessel]) || schluessel;
|
||||
if (werte) for (var k in werte) text = text.split('{' + k + '}').join(werte[k]);
|
||||
return text;
|
||||
}
|
||||
function wendeUiSpracheAn() {
|
||||
var amPc = window.matchMedia && window.matchMedia('(hover: hover) and (pointer: fine)').matches;
|
||||
var gewuenscht = amPc ? 'de' : zielsprache();
|
||||
uiSprache = UI[gewuenscht] ? gewuenscht : 'de';
|
||||
document.documentElement.lang = uiSprache;
|
||||
document.documentElement.dir = RTL[uiSprache] ? 'rtl' : 'ltr';
|
||||
document.documentElement.classList.toggle('verbundene-schrift', !!VERBUNDEN[uiSprache]);
|
||||
var elemente = document.querySelectorAll('[data-t]');
|
||||
for (var i = 0; i < elemente.length; i++) {
|
||||
var el = elemente[i], key = el.getAttribute('data-t');
|
||||
if (UI.de && UI.de[key]) el.textContent = t(key);
|
||||
}
|
||||
// Was gerade dynamisch angezeigt wird, in der neuen Sprache neu setzen
|
||||
var stelle = (typeof handyModus !== 'undefined' && handyModus && handyModus.e) || (einrichtung() && hatGuthaben() ? einrichtung() : '');
|
||||
if (stelle) zeigeEinrichtungImKopf(stelle);
|
||||
if (typeof handyModus !== 'undefined' && handyModus && !handyModus.fertig) verbundenBanner.textContent = t('verbunden');
|
||||
}
|
||||
/** Meldung des Servers: am Handy in der Bediensprache, sonst die genaue deutsche. */
|
||||
function serverMeldung(daten) {
|
||||
var zuordnung = { turnstile: 'srvTurnstile', ki: 'srvKi', ki_konfig: 'srvDienst', dienst: 'srvDienst', datei: 'srvDatei', inhalt: 'srvInhalt', aufgebraucht: 'srvAufgebraucht' };
|
||||
if (uiSprache !== 'de' && zuordnung[daten.code]) return t(zuordnung[daten.code]);
|
||||
return daten.meldung || t('srvKi');
|
||||
}
|
||||
|
||||
// Handy ↔ PC: Ist dieses Gerät gerade das Handy, das für einen PC
|
||||
// fotografiert? Ein Guthaben aus dem QR-Code (w) gilt nur für diese
|
||||
// Sitzung und wird hier NICHT gespeichert.
|
||||
@@ -613,12 +699,28 @@
|
||||
if (handyModus && handyModus.w) return handyModus.w;
|
||||
return hatGuthaben() ? walletToken() : '';
|
||||
}
|
||||
/** An den PC melden. Liefert true/false, ob es geklappt hat (Fehler werden nicht geworfen). */
|
||||
function meldeAnPc(daten, fach) {
|
||||
if (!handyModus) return Promise.resolve();
|
||||
return BKUebergabe.senden(handyModus.ue, fach || 'status', daten).catch(function () {});
|
||||
if (!handyModus) return Promise.resolve(false);
|
||||
return BKUebergabe.senden(handyModus.ue, fach || 'status', daten)
|
||||
.then(function () { return true; }, function () { return false; });
|
||||
}
|
||||
/** Das Ergebnis ist das Wichtigste: bis zu 3 Versuche mit kurzer Pause. */
|
||||
async function ergebnisAnPc(paket) {
|
||||
for (var i = 0; i < 3; i++) {
|
||||
if (await meldeAnPc(paket, 'ergebnis')) return true;
|
||||
await new Promise(function (r) { setTimeout(r, 1500); });
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function zeigeGuthabenBanner(n) {
|
||||
guthabenText.textContent = einrichtung() ? '🤝 Kostenlos über ' + einrichtung() + ':' : '💳 Ihr Guthaben:';
|
||||
var bis = einrichtungBis();
|
||||
document.getElementById('guthabenHandyKnopf').textContent = einrichtung()
|
||||
? '🔑 Zugang dauerhaft auf ein Handy geben (nur für Mitarbeitende)'
|
||||
: '📱 Auch auf dem Handy nutzen';
|
||||
guthabenText.textContent = einrichtung()
|
||||
? t('bannerKostenlos', { name: einrichtung() + (bis ? ' ' + t('bannerBis', { datum: deDatum(bis) }) : '') })
|
||||
: '💳 Ihr Guthaben:';
|
||||
guthabenZahl.textContent = n;
|
||||
guthabenBanner.style.display = 'block';
|
||||
}
|
||||
@@ -626,10 +728,52 @@
|
||||
// Schlüsselname bewusst 'v2': setzt evtl. falsch gezählte Stände (aus der
|
||||
// Testphase) bei bestehenden Besuchern automatisch einmalig zurück.
|
||||
var SPEICHER_SCHLUESSEL = 'bk_demo_v2';
|
||||
function benutzt() { return parseInt(localStorage.getItem(SPEICHER_SCHLUESSEL) || '0', 10); }
|
||||
function setzeBenutzt(n) { localStorage.setItem(SPEICHER_SCHLUESSEL, String(n)); }
|
||||
function benutzt() { return parseInt(speicher.get(SPEICHER_SCHLUESSEL) || '0', 10); }
|
||||
function setzeBenutzt(n) { speicher.set(SPEICHER_SCHLUESSEL, String(n)); }
|
||||
|
||||
/** Text mit {name}: der Name kommt in ein <bdi>, damit „(Test)." in arabischem Text richtig steht. */
|
||||
function mitName(el, vorlage, name) {
|
||||
var teile = vorlage.split('{name}');
|
||||
el.textContent = teile[0];
|
||||
var b = document.createElement('bdi'); b.textContent = name; el.appendChild(b);
|
||||
if (teile[1]) el.appendChild(document.createTextNode(teile[1]));
|
||||
}
|
||||
/** Einrichtungs-Zugang: oben nicht mehr „2 Analysen gratis" anpreisen. */
|
||||
function zeigeEinrichtungImKopf(name) {
|
||||
mitName(document.querySelector('#demo .formular-kopf'), t('formKopfKostenlos'), name);
|
||||
mitName(document.getElementById('anredeAngebot'), t('anredeKostenlos'), name);
|
||||
document.getElementById('kopfAz').textContent = 'Formular D-01 · ' + name;
|
||||
}
|
||||
function zeigeStand() {
|
||||
if (handyModus && handyModus.fertig) return;
|
||||
// Handy-Modus: nie Kaufangebot oder Code-Feld (die Beratung ist dabei)
|
||||
if (handyModus && !handyModus.w) {
|
||||
kaufBlock.style.display = 'none';
|
||||
codeTeil.style.display = 'none';
|
||||
guthabenBanner.style.display = 'none';
|
||||
if (benutzt() >= 2) {
|
||||
eingabe.style.display = 'none';
|
||||
fehlerBox.style.display = 'block';
|
||||
fehlerBox.textContent = t('keinZugangHandy');
|
||||
meldeAnPc({ schritt: 'fehler', code: 'kein_zugang', meldung: 'Am Handy sind die kostenlosen Analysen verbraucht.' });
|
||||
} else {
|
||||
eingabe.style.display = 'block';
|
||||
emailTeil.style.display = benutzt() === 1 ? 'block' : 'none';
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Einrichtungs-Zugang leer: kein Kaufangebot (Ratsuchende zahlen nichts),
|
||||
// Code-Feld bleibt, damit nach dem Aufladen ein neues Öffnen reicht
|
||||
if (einrichtung() && walletToken() && guthaben() <= 0 && !(handyModus && handyModus.w)) {
|
||||
eingabe.style.display = 'none';
|
||||
guthabenBanner.style.display = 'none';
|
||||
kaufBlock.style.display = 'none';
|
||||
codeTeil.style.display = 'block';
|
||||
fehlerBox.style.display = 'block';
|
||||
fehlerBox.textContent = t('leerHinweis');
|
||||
return;
|
||||
}
|
||||
if (einrichtung() && hatGuthaben()) zeigeEinrichtungImKopf(einrichtung());
|
||||
if (handyModus && handyModus.w) {
|
||||
eingabe.style.display = 'block';
|
||||
guthabenBanner.style.display = 'none';
|
||||
@@ -657,16 +801,25 @@
|
||||
if (benutzt() >= 2) {
|
||||
eingabe.style.display = 'none';
|
||||
fehlerBox.style.display = 'block';
|
||||
fehlerBox.innerHTML = 'Ihre 2 Gratis-Analysen sind verbraucht. Kaufen Sie unten <strong>Guthaben</strong>, um hier direkt weiterzumachen — oder tragen Sie sich für die App ein.';
|
||||
fehlerBox.innerHTML = 'Ihre 2 Gratis-Analysen sind verbraucht. Haben Sie einen <strong>Code von einer Beratungsstelle</strong>? Dann geben Sie ihn direkt hier unten ein. Sonst können Sie unten <strong>Guthaben</strong> kaufen.';
|
||||
werbung.style.display = 'block';
|
||||
} else if (benutzt() === 1) {
|
||||
emailTeil.style.display = 'block';
|
||||
}
|
||||
}
|
||||
|
||||
konsens.addEventListener('change', function () { startKnopf.disabled = !konsens.checked; });
|
||||
konsens.addEventListener('change', function () {
|
||||
if (konsens.checked && fehlerBox.dataset.art === 'konsens') fehlerBox.style.display = 'none';
|
||||
});
|
||||
startKnopf.addEventListener('click', function () {
|
||||
fehlerBox.style.display = 'none';
|
||||
if (!konsens.checked) {
|
||||
zeigeFehler(t('fehlerKonsens'));
|
||||
fehlerBox.dataset.art = 'konsens';
|
||||
konsens.closest('label').scrollIntoView({ behavior: 'smooth', block: 'center' });
|
||||
konsens.focus();
|
||||
return;
|
||||
}
|
||||
if (!walletFuerAnalyse() && benutzt() >= 1 && !emailFeld.value.trim()) {
|
||||
emailTeil.style.display = 'block';
|
||||
emailFeld.focus();
|
||||
@@ -676,10 +829,37 @@
|
||||
dateiFeld.click();
|
||||
});
|
||||
dateiFeld.addEventListener('change', function () {
|
||||
if (dateiFeld.files && dateiFeld.files[0]) starteAnalyse(dateiFeld.files[0]);
|
||||
var datei = dateiFeld.files && dateiFeld.files[0];
|
||||
// Feld leeren: sonst meldet der Browser dieselbe Datei beim zweiten Versuch nicht
|
||||
dateiFeld.value = '';
|
||||
if (datei) starteAnalyse(datei);
|
||||
});
|
||||
|
||||
/** Freundlicher Hinweis (kein Fehler) — nutzt das Feld über dem Upload. */
|
||||
function zeigeHinweis(text) {
|
||||
kaufOk.textContent = 'ℹ️ ' + text;
|
||||
kaufOk.style.display = 'block';
|
||||
}
|
||||
|
||||
function zeigeFertigBanner(angekommen, ohneUebersetzung, paket) {
|
||||
verbundenBanner.innerHTML = '';
|
||||
verbundenBanner.appendChild(document.createTextNode(angekommen ? t('fertig') : t('nichtAngekommen')));
|
||||
if (ohneUebersetzung) verbundenBanner.appendChild(document.createTextNode(' ' + t('ohneUebersetzung')));
|
||||
if (!angekommen) {
|
||||
var knopf = document.createElement('button');
|
||||
knopf.type = 'button'; knopf.className = 'cta cta-zwei';
|
||||
knopf.textContent = t('nochmalSenden');
|
||||
knopf.addEventListener('click', async function () {
|
||||
knopf.disabled = true; knopf.textContent = t('wirdGesendet');
|
||||
var ok = await ergebnisAnPc(paket);
|
||||
zeigeFertigBanner(ok, ohneUebersetzung, paket);
|
||||
});
|
||||
verbundenBanner.appendChild(knopf);
|
||||
}
|
||||
}
|
||||
|
||||
function zeigeFehler(text) {
|
||||
fehlerBox.dataset.art = '';
|
||||
fehlerBox.style.display = 'block';
|
||||
fehlerBox.textContent = text;
|
||||
}
|
||||
@@ -720,17 +900,17 @@
|
||||
async function starteAnalyse(datei) {
|
||||
fehlerBox.style.display = 'none';
|
||||
if (datei.size > 5 * 1024 * 1024 && datei.type === 'application/pdf') {
|
||||
zeigeFehler('Die PDF-Datei ist zu groß (max. 5 MB). Tipp: Fotografieren Sie den Brief stattdessen.');
|
||||
zeigeFehler(t('fehlerPdfGross'));
|
||||
return;
|
||||
}
|
||||
var token = turnstileToken();
|
||||
if (!token) {
|
||||
zeigeFehler('Die Sicherheitsprüfung lädt noch — bitte warten Sie 2 Sekunden und versuchen Sie es erneut.');
|
||||
zeigeFehler(t('fehlerTurnstileLaedt'));
|
||||
return;
|
||||
}
|
||||
|
||||
eingabe.style.display = 'none';
|
||||
status.querySelector('.gross').textContent = 'Ihr Brief wird analysiert…';
|
||||
status.querySelector('.gross').textContent = t('statusLaeuft');
|
||||
status.style.display = 'block';
|
||||
|
||||
try {
|
||||
@@ -761,10 +941,19 @@
|
||||
status.style.display = 'none';
|
||||
eingabe.style.display = 'block';
|
||||
if (window.turnstile) window.turnstile.reset();
|
||||
meldeAnPc({ schritt: 'fehler', meldung: daten.meldung || '' });
|
||||
meldeAnPc({ schritt: 'fehler', code: daten.code || '', meldung: daten.meldung || '' });
|
||||
// Guthaben vom PC: Fehler nur anzeigen, am Handy nichts umstellen
|
||||
if (handyModus && handyModus.w) {
|
||||
zeigeFehler(daten.meldung || 'Etwas ist schiefgelaufen. Bitte erneut versuchen.');
|
||||
zeigeFehler(serverMeldung(daten));
|
||||
return;
|
||||
}
|
||||
// Handy ohne Zugang vom PC: Kontingent-Fehler nicht als Kaufangebot zeigen
|
||||
if (handyModus && /^(aufgebraucht|kein_guthaben|budget)$/.test(daten.code || '')) {
|
||||
if (daten.code === 'aufgebraucht') setzeBenutzt(2);
|
||||
eingabe.style.display = 'none';
|
||||
fehlerBox.style.display = 'block';
|
||||
fehlerBox.textContent = t('keinZugangHandy');
|
||||
meldeAnPc({ schritt: 'fehler', code: 'kein_zugang', meldung: 'Am Handy sind die kostenlosen Analysen verbraucht.' });
|
||||
return;
|
||||
}
|
||||
if (daten.code === 'email_noetig') {
|
||||
@@ -781,11 +970,9 @@
|
||||
return;
|
||||
}
|
||||
if (daten.code === 'kontingent_leer' || daten.code === 'kontingent_abgelaufen') {
|
||||
setzeWallet('');
|
||||
vergissHandySitzung();
|
||||
setzeGuthaben(0);
|
||||
setzeEinrichtung(null);
|
||||
zeigeStand();
|
||||
zeigeFehler(daten.meldung);
|
||||
return;
|
||||
}
|
||||
if (daten.code === 'kein_guthaben') {
|
||||
@@ -795,23 +982,38 @@
|
||||
kaufBlock.scrollIntoView({ behavior: 'smooth' });
|
||||
return;
|
||||
}
|
||||
zeigeFehler(daten.meldung || 'Etwas ist schiefgelaufen. Bitte erneut versuchen.');
|
||||
zeigeFehler(serverMeldung(daten));
|
||||
return;
|
||||
}
|
||||
|
||||
// Token erneuern — sonst würde die nächste Analyse ein "Seite neu laden" verlangen
|
||||
if (window.turnstile) window.turnstile.reset();
|
||||
// Die Einwilligung gilt für genau diesen Brief: für den nächsten neu fragen
|
||||
konsens.checked = false;
|
||||
|
||||
// Handy fotografiert für den PC: Ergebnis verschlüsselt hinüberschicken
|
||||
await meldeAnPc({
|
||||
var paketFuerPc = {
|
||||
analyse: daten.analyse, analyse_de: daten.analyse_de, sprache: daten.sprache,
|
||||
guthaben: daten.guthaben, einrichtung: daten.einrichtung,
|
||||
}, 'ergebnis');
|
||||
};
|
||||
var amPcAngekommen = handyModus ? await ergebnisAnPc(paketFuerPc) : false;
|
||||
var analyse = bereiteVersionen(daten, false);
|
||||
if (daten.uebersetzung_fehlgeschlagen) {
|
||||
zeigeHinweis('Die Übersetzung hat diesmal nicht geklappt. Die Erklärung steht hier auf Deutsch.');
|
||||
}
|
||||
|
||||
if (handyModus && handyModus.w) {
|
||||
// Handy hat für den PC fotografiert: Verbindung ist damit erledigt.
|
||||
// (Der PC wartet nicht mehr — ein zweiter Brief käme dort nie an.)
|
||||
if (handyModus) {
|
||||
if (!handyModus.w && typeof daten.versuch === 'number') setzeBenutzt(Math.max(benutzt(), daten.versuch));
|
||||
handyModus.fertig = true;
|
||||
zeigeAnalyse(analyse);
|
||||
eingabe.style.display = 'block';
|
||||
eingabe.style.display = 'none';
|
||||
kaufBlock.style.display = 'none';
|
||||
codeTeil.style.display = 'none';
|
||||
werbung.style.display = 'none';
|
||||
vergissHandySitzung();
|
||||
zeigeFertigBanner(amPcAngekommen, daten.uebersetzung_fehlgeschlagen, paketFuerPc);
|
||||
document.getElementById('ergebnis').scrollIntoView({ behavior: 'smooth' });
|
||||
return;
|
||||
}
|
||||
@@ -829,25 +1031,42 @@
|
||||
status.style.display = 'none';
|
||||
eingabe.style.display = 'block';
|
||||
if (window.turnstile) window.turnstile.reset();
|
||||
zeigeFehler('Verbindung fehlgeschlagen. Bitte prüfen Sie Ihr Internet und versuchen Sie es erneut.');
|
||||
meldeAnPc({ schritt: 'fehler', code: 'verbindung', meldung: 'Verbindung fehlgeschlagen.' });
|
||||
zeigeFehler(t('fehlerVerbindung'));
|
||||
}
|
||||
}
|
||||
|
||||
/** Ampel wie in der App: rot ≤ 7 Tage, gelb ≤ 21, sonst grün. */
|
||||
/** Ganze Kalendertage von heute bis zum ISO-Datum (wie tageBis() in der App).
|
||||
* Früher wurde bis 12 Uhr mittags gerechnet — dann zeigte ein Termin in
|
||||
* 7 Tagen vormittags „8 Tage" und Gelb statt Rot. */
|
||||
function kalenderTage(iso) {
|
||||
var t = String(iso).split('-');
|
||||
var heute = new Date();
|
||||
var a = Date.UTC(heute.getFullYear(), heute.getMonth(), heute.getDate());
|
||||
var b = Date.UTC(+t[0], +t[1] - 1, +t[2]);
|
||||
return Math.round((b - a) / 86400000);
|
||||
}
|
||||
function ampel(analyse) {
|
||||
var daten = [];
|
||||
if (analyse.frist && analyse.frist.datum) daten.push(analyse.frist.datum);
|
||||
if (analyse.termin && analyse.termin.datum) daten.push(analyse.termin.datum);
|
||||
if (analyse.frist && isoGueltig(analyse.frist.datum)) daten.push({ iso: analyse.frist.datum, art: 'Frist' });
|
||||
if (analyse.termin && isoGueltig(analyse.termin.datum)) daten.push({ iso: analyse.termin.datum, art: 'Termin' });
|
||||
if (!daten.length) return null;
|
||||
daten.sort();
|
||||
var tage = Math.ceil((new Date(daten[0] + 'T12:00:00') - new Date()) / 86400000);
|
||||
daten.sort(function (x, y) { return x.iso < y.iso ? -1 : x.iso > y.iso ? 1 : 0; });
|
||||
// Das nächste kommende Datum zählt; nur wenn alles vorbei ist, das zuletzt vergangene
|
||||
var kommend = daten.filter(function (d) { return kalenderTage(d.iso) >= 0; });
|
||||
var erstes = kommend.length ? kommend[0] : daten[daten.length - 1];
|
||||
var tage = kalenderTage(erstes.iso);
|
||||
if (isNaN(tage)) return null;
|
||||
var farbe = tage <= 7 ? 'var(--rot)' : tage <= 21 ? 'var(--gelb)' : 'var(--gruen)';
|
||||
var punkt = tage <= 7 ? '🔴' : tage <= 21 ? '🟡' : '🟢';
|
||||
var text = tage < 0 ? 'Die Frist ist womöglich schon vorbei!' :
|
||||
tage === 0 ? 'HEUTE ist der wichtige Tag!' :
|
||||
'Noch ' + tage + ' Tage Zeit (' + daten[0].split('-').reverse().join('.') + ')';
|
||||
return { farbe: farbe, text: punkt + ' ' + text };
|
||||
var datum = deDatum(erstes.iso);
|
||||
var wann = erstes.art === 'Termin' ? t('ampelTerminAm', { datum: datum }) : t('ampelFristBis', { datum: datum });
|
||||
var text = tage < 0 ? (erstes.art === 'Termin' ? t('ampelTerminWar', { datum: datum }) : t('ampelFristVorbei', { datum: datum })) :
|
||||
tage === 0 ? t('ampelHeute') + ': ' + wann + '!' :
|
||||
tage === 1 ? t('ampelMorgen') + ': ' + wann :
|
||||
t('ampelNoch', { n: tage }) + ' · ' + wann;
|
||||
return { farbe: farbe, text: punkt + ' ' + text, istFrist: erstes.art === 'Frist' };
|
||||
}
|
||||
|
||||
// Eine Analyse kann in zwei Sprachen vorliegen (PC Deutsch, Handy Muttersprache).
|
||||
@@ -857,7 +1076,10 @@
|
||||
function bereiteVersionen(d, deutschZuerst) {
|
||||
letzteDaten = { analyse: d.analyse, analyse_de: d.analyse_de, sprache: d.sprache || 'de' };
|
||||
versionen = [{ code: letzteDaten.sprache, analyse: d.analyse }];
|
||||
if (d.analyse_de) versionen[deutschZuerst ? 'unshift' : 'push']({ code: 'de', analyse: d.analyse_de });
|
||||
// Zweite Fassung nur, wenn sie wirklich eine andere Sprache ist
|
||||
if (d.analyse_de && letzteDaten.sprache !== 'de') {
|
||||
versionen[deutschZuerst ? 'unshift' : 'push']({ code: 'de', analyse: d.analyse_de });
|
||||
}
|
||||
aktiveVersion = 0;
|
||||
return versionen[0].analyse;
|
||||
}
|
||||
@@ -891,9 +1113,14 @@
|
||||
if (a) {
|
||||
ampelEl.style.display = 'block';
|
||||
ampelEl.style.color = a.farbe;
|
||||
var teile = [a.text];
|
||||
if (analyse.frist && analyse.frist.aktion) teile.push(analyse.frist.aktion);
|
||||
ampelEl.textContent = teile.join(' · ');
|
||||
ampelEl.textContent = a.text;
|
||||
// Die Aufgabe gehört zur Frist — nur anhängen, wenn die Frist das früheste Datum ist.
|
||||
// KI-Text in eigenes <bdi>, damit Arabisch/Farsi richtig herum läuft.
|
||||
if (a.istFrist && analyse.frist && analyse.frist.aktion) {
|
||||
ampelEl.appendChild(document.createTextNode(' · '));
|
||||
var bdi = document.createElement('bdi'); bdi.textContent = analyse.frist.aktion;
|
||||
ampelEl.appendChild(bdi);
|
||||
}
|
||||
}
|
||||
|
||||
if (analyse.checkliste && analyse.checkliste.length) {
|
||||
@@ -910,6 +1137,7 @@
|
||||
var sum = document.createElement('summary');
|
||||
sum.textContent = b.begriff;
|
||||
var p = document.createElement('p');
|
||||
p.setAttribute('dir', 'auto');
|
||||
p.textContent = b.erklaerung;
|
||||
det.appendChild(sum); det.appendChild(p);
|
||||
return det.outerHTML;
|
||||
@@ -938,6 +1166,8 @@
|
||||
zeigeGuthabenBanner(guthabenRest);
|
||||
emailTeil.style.display = 'none';
|
||||
kaufBlock.style.display = 'none';
|
||||
} else if (einrichtung()) {
|
||||
zeigeStand(); // Leer-Hinweis mit Telefonnummer — kein Kaufangebot für Ratsuchende
|
||||
} else {
|
||||
eingabe.style.display = 'none';
|
||||
guthabenBanner.style.display = 'none';
|
||||
@@ -1055,7 +1285,11 @@
|
||||
var termin = a.termin && isoGueltig(a.termin.datum) ? a.termin : null;
|
||||
var box = document.getElementById('ergKalenderText');
|
||||
box.innerHTML = '';
|
||||
function zeile(text) { var p = document.createElement('p'); p.setAttribute('dir', 'auto'); p.textContent = text; box.appendChild(p); }
|
||||
function zeile(text, kiText) {
|
||||
var p = document.createElement('p'); p.setAttribute('dir', 'auto'); p.textContent = text;
|
||||
if (kiText) { p.appendChild(document.createTextNode(' — ')); var b = document.createElement('bdi'); b.textContent = kiText; p.appendChild(b); }
|
||||
box.appendChild(p);
|
||||
}
|
||||
|
||||
// Kein Datum im Brief: trotzdem sichtbar sagen, dass gesucht wurde.
|
||||
// Sonst weiss niemand, ob nichts da ist oder etwas kaputt ist — und
|
||||
@@ -1066,9 +1300,9 @@
|
||||
// oder bedingte Fristen ("bis zum 10. Tag nach jedem Vierteljahr"),
|
||||
// aus denen sich kein einzelnes Datum machen laesst. Ein Haekchen
|
||||
// wuerde dann "alles erledigt" signalisieren — gefaehrlich falsch.
|
||||
label.textContent = 'Kalender';
|
||||
zeile('ℹ️ Kein festes Datum zum Eintragen gefunden.');
|
||||
zeile('Wichtig: Manche Fristen haben kein festes Datum, zum Beispiel „jedes Vierteljahr" oder nur unter bestimmten Bedingungen. Lesen Sie dazu die Erklärung oben.');
|
||||
label.textContent = t('labelKalender');
|
||||
zeile(t('keinDatum1'));
|
||||
zeile(t('keinDatum2'));
|
||||
knopf.style.display = 'none';
|
||||
hinweis.style.display = 'none';
|
||||
karte.style.border = '';
|
||||
@@ -1076,12 +1310,12 @@
|
||||
return;
|
||||
}
|
||||
letzteAnalyse = a;
|
||||
label.textContent = 'Nicht vergessen';
|
||||
label.textContent = t('labelNichtVergessen');
|
||||
knopf.style.display = '';
|
||||
hinweis.style.display = '';
|
||||
karte.style.border = '2px solid var(--amtsblau)';
|
||||
if (frist) zeile('⚠️ Frist: ' + deDatum(frist.datum) + (frist.aktion ? ' — ' + frist.aktion : ''));
|
||||
if (termin) zeile('📅 Termin: ' + deDatum(termin.datum) + (termin.uhrzeit ? ', ' + termin.uhrzeit + ' Uhr' : '') + (termin.ort ? ' — ' + termin.ort : ''));
|
||||
if (frist) zeile(t('fristZeile', { datum: deDatum(frist.datum) }), frist.aktion);
|
||||
if (termin) zeile(t('terminZeile', { datum: deDatum(termin.datum) }) + (termin.uhrzeit ? ', ' + t('uhrzeit', { zeit: termin.uhrzeit }) : ''), termin.ort);
|
||||
karte.style.display = 'block';
|
||||
}
|
||||
|
||||
@@ -1119,21 +1353,23 @@
|
||||
if (hervorheben) w.className = 'az-wert';
|
||||
p.appendChild(b); p.appendChild(w); box.appendChild(p);
|
||||
}
|
||||
angabe('Ansprechpartner', k.ansprechpartner);
|
||||
angabe('Erreichbar', k.sprechzeiten);
|
||||
angabe('Danach werden Sie gefragt', k.aktenzeichen, true);
|
||||
angabe(t('ansprechpartner'), k.ansprechpartner);
|
||||
angabe(t('erreichbar'), k.sprechzeiten);
|
||||
angabe(t('gefragt'), k.aktenzeichen, true);
|
||||
|
||||
var liste = document.getElementById('ergAnrufSaetze');
|
||||
liste.innerHTML = '';
|
||||
if (saetze.length) {
|
||||
var kopf = document.createElement('p');
|
||||
kopf.style.marginTop = '12px';
|
||||
kopf.innerHTML = '<strong>Das können Sie am Telefon sagen:</strong>';
|
||||
var stark = document.createElement('strong'); stark.textContent = t('amTelefon'); kopf.appendChild(stark);
|
||||
liste.appendChild(kopf);
|
||||
var mitBedeutung = zielsprache() !== 'de';
|
||||
var angezeigt = versionen.length ? versionen[aktiveVersion].code : zielsprache();
|
||||
var mitBedeutung = angezeigt !== 'de';
|
||||
saetze.forEach(function (s) {
|
||||
var d = document.createElement('div'); d.className = 'anruf-satz';
|
||||
var de = document.createElement('p'); de.className = 'anruf-de';
|
||||
de.setAttribute('dir', 'ltr'); // wird auf Deutsch gesagt — auch auf arabischer Seite links-nach-rechts
|
||||
de.textContent = '„' + s.deutsch + '“';
|
||||
d.appendChild(de);
|
||||
if (mitBedeutung && s.bedeutung && s.bedeutung !== s.deutsch) {
|
||||
@@ -1231,8 +1467,13 @@
|
||||
}
|
||||
|
||||
// ---- Einrichtungs-Code einlösen ------------------------------------
|
||||
/** „mbe k7qx", „MBEK7QX", „MBE-K7QX" → „MBE-K7QX" (wie im Worker). */
|
||||
function normCode(c) {
|
||||
var roh = String(c || '').toUpperCase().replace(/[^A-Z0-9]/g, '');
|
||||
return roh.length > 4 ? roh.slice(0, -4) + '-' + roh.slice(-4) : roh;
|
||||
}
|
||||
function loeseCodeEin(code) {
|
||||
code = String(code || '').trim().toUpperCase();
|
||||
code = normCode(code);
|
||||
if (!code) { codeFeld.focus(); return; }
|
||||
if (walletToken() && guthaben() > 0 && !einrichtung() &&
|
||||
!window.confirm('Sie haben noch gekauftes Guthaben. Wenn Sie den Code einlösen, nutzt diese Seite den Code. Ihr gekauftes Guthaben bleibt über den Link in Ihrer Kauf-E-Mail erhalten. Weiter?')) {
|
||||
@@ -1257,12 +1498,12 @@
|
||||
setzeWallet(res.d.token);
|
||||
setzeGuthaben(res.d.guthaben);
|
||||
setzeEinrichtung(res.d.einrichtung);
|
||||
if (res.d.ablauf) speicher.set(ABLAUF_SCHLUESSEL, res.d.ablauf);
|
||||
speicher.set(CODE_SCHLUESSEL, code);
|
||||
zeichneHandyQr();
|
||||
zeigeStand();
|
||||
if (res.d.guthaben <= 0) {
|
||||
zeigeFehler('Die Analysen von ' + res.d.einrichtung + ' sind aufgebraucht. Bitte fragen Sie dort nach.');
|
||||
return;
|
||||
}
|
||||
kaufOk.textContent = '✅ Code eingelöst. BehördenKlar ist für Sie kostenlos, über ' + res.d.einrichtung + '.';
|
||||
if (res.d.guthaben <= 0) return; // zeigeStand zeigt den Leer-Hinweis mit Telefonnummer
|
||||
kaufOk.textContent = t('codeEingeloest', { name: res.d.einrichtung });
|
||||
kaufOk.style.display = 'block';
|
||||
})
|
||||
.catch(function () {
|
||||
@@ -1294,13 +1535,19 @@
|
||||
function zeichneHandyQr() {
|
||||
if (!pcWarten) return;
|
||||
var sprache = zielsprache();
|
||||
handyDeutschZeile.style.display = sprache === 'de' ? 'none' : 'flex';
|
||||
// d=1 auch bei „Deutsch" am PC: Stellt die Person am Handy ihre eigene
|
||||
// Sprache ein, bekommt die Beraterin trotzdem die deutsche Fassung.
|
||||
zeigeQr(handyQr, BKUebergabe.adresse({
|
||||
a: 'k', s: pcWarten.ue.id, k: pcWarten.ue.k, l: sprache,
|
||||
d: sprache !== 'de' && handyDeutsch.checked ? '1' : '',
|
||||
// „Deutsch" am PC heißt nur: nichts vorgeben — dann erkennt das Handy seine Sprache selbst
|
||||
a: 'k', s: pcWarten.ue.id, k: pcWarten.ue.k, l: sprache !== 'de' ? sprache : '',
|
||||
d: handyDeutsch.checked ? '1' : '',
|
||||
w: hatGuthaben() ? walletToken() : '',
|
||||
e: hatGuthaben() ? einrichtung() : '',
|
||||
}));
|
||||
}
|
||||
window.addEventListener('beforeunload', function (ev) {
|
||||
if (pcWarten) { ev.preventDefault(); ev.returnValue = ''; }
|
||||
});
|
||||
function stoppeWarten() {
|
||||
if (pcWarten && pcWarten.timer) clearInterval(pcWarten.timer);
|
||||
pcWarten = null;
|
||||
@@ -1345,19 +1592,54 @@
|
||||
var ue = pcWarten.ue;
|
||||
var f = await BKUebergabe.holen(ue);
|
||||
if (!pcWarten || pcWarten.ue !== ue) return; // inzwischen abgebrochen
|
||||
if ((pcWarten.fehlversuche || 0) >= 5 && !f.status) handyZustand.textContent = '⏳ Warte auf das Handy …';
|
||||
pcWarten.fehlversuche = 0;
|
||||
// Jede neue Meldung vom Handy verlängert das Warten (nicht ab QR-Anzeige rechnen)
|
||||
var schritt = f.status ? f.status.schritt + '|' + (f.status.meldung || '') : '';
|
||||
if (schritt && schritt !== pcWarten.letzterSchritt) {
|
||||
pcWarten.letzterSchritt = schritt;
|
||||
// Verbunden: großzügiger warten (Gespräch vor dem Foto kann dauern)
|
||||
pcWarten.bis = Date.now() + 3 * UEBERGABE_MS;
|
||||
if (f.status.schritt === 'analyse') pcWarten.analyseSeit = Date.now();
|
||||
}
|
||||
if (f.status && f.status.schritt === 'fehler' && /^kontingent_/.test(f.status.code || '')) {
|
||||
// Kontingent leer/abgelaufen: Warten ist sinnlos
|
||||
stoppeWarten();
|
||||
BKUebergabe.loeschen(ue);
|
||||
schliesseHandyBox();
|
||||
setzeGuthaben(0);
|
||||
zeigeStand();
|
||||
return;
|
||||
}
|
||||
if (f.status && f.status.schritt === 'fehler' && f.status.code === 'kein_zugang') {
|
||||
stoppeWarten();
|
||||
BKUebergabe.loeschen(ue);
|
||||
schliesseHandyBox();
|
||||
zeigeFehler('Am Handy sind die kostenlosen Analysen verbraucht. Bitte hier unten den Code der Beratungsstelle einlösen und dann noch einmal auf „Lieber mit dem Handy fotografieren" tippen.');
|
||||
codeTeil.style.display = 'block';
|
||||
codeTeil.open = true;
|
||||
return;
|
||||
}
|
||||
if (f.ergebnis) {
|
||||
stoppeWarten();
|
||||
BKUebergabe.loeschen(ue);
|
||||
schliesseHandyBox();
|
||||
zeigeVomHandy(f.ergebnis);
|
||||
} else if (f.status) {
|
||||
var langsam = f.status.schritt === 'analyse' && pcWarten.analyseSeit && Date.now() - pcWarten.analyseSeit > 3 * 60 * 1000;
|
||||
handyZustand.textContent =
|
||||
f.status.schritt === 'analyse' ? '⏳ Das Handy hat fotografiert. Der Brief wird erklärt …' :
|
||||
langsam ? '⚠️ Das dauert ungewöhnlich lange. Bitte am Handy nachsehen: Steht die Erklärung dort schon, auf „Noch einmal an den Computer senden" tippen. Sonst hier abbrechen und neu verbinden.' :
|
||||
f.status.schritt === 'analyse' ? '⏳ Das Handy hat fotografiert. Der Brief wird erklärt (ein bis zwei Minuten) …' :
|
||||
f.status.schritt === 'fehler' ? '⚠️ Am Handy hat es nicht geklappt: ' + (f.status.meldung || '') + ' Bitte dort noch einmal versuchen.' :
|
||||
'✅ Handy verbunden. Jetzt am Handy den Brief fotografieren.';
|
||||
}
|
||||
} catch (e) {
|
||||
// kurz keine Verbindung — beim nächsten Durchlauf erneut versuchen
|
||||
// kurz keine Verbindung — beim nächsten Durchlauf erneut versuchen,
|
||||
// aber nach mehreren Fehlschlägen sichtbar sagen, woran es liegt
|
||||
if (pcWarten) {
|
||||
pcWarten.fehlversuche = (pcWarten.fehlversuche || 0) + 1;
|
||||
if (pcWarten.fehlversuche >= 5) handyZustand.textContent = '⚠️ Keine Verbindung zum Server. Bitte das Internet dieses Computers prüfen.';
|
||||
}
|
||||
} finally {
|
||||
pruefeLaeuft = false;
|
||||
}
|
||||
@@ -1404,21 +1686,28 @@
|
||||
if (h.a === 'g') { uebernehmeGuthaben(h); return; }
|
||||
var ue = await BKUebergabe.oeffne(h.s, h.k).catch(function () { return null; });
|
||||
if (!ue) {
|
||||
zeigeFehler('Dieser QR-Code ist ungültig. Bitte am Computer einen neuen erzeugen.');
|
||||
zeigeFehler(t('qrUngueltig'));
|
||||
return;
|
||||
}
|
||||
|
||||
if (h.a === 'k') {
|
||||
handyModus = { ue: ue, w: h.w || '', d: h.d === '1' };
|
||||
handyModus = { ue: ue, w: h.w || '', d: h.d === '1', e: h.e || '' };
|
||||
if (h.l && SPRACH_NAMEN[h.l]) {
|
||||
try { localStorage.setItem(SPRACH_SCHLUESSEL, h.l); } catch (e) {}
|
||||
// nicht dauerhaft speichern: Es ist das Handy der Person, nicht der Beratung
|
||||
sitzungsSprache = h.l;
|
||||
document.getElementById('sprachWahl').value = h.l;
|
||||
}
|
||||
verbundenBanner.textContent = '🔗 Mit dem Computer verbunden. Fotografieren Sie jetzt Ihren Brief. Die Erklärung erscheint hier und auf dem Bildschirm.';
|
||||
wendeUiSpracheAn();
|
||||
verbundenBanner.textContent = t('verbunden');
|
||||
verbundenBanner.style.display = 'block';
|
||||
handyKnopf.style.display = 'none';
|
||||
if (handyModus.e) zeigeEinrichtungImKopf(handyModus.e);
|
||||
// „verbunden" zuerst melden — zeigeStand meldet danach ggf. „kein Zugang",
|
||||
// und das darf nicht von „verbunden" überschrieben werden
|
||||
await meldeAnPc({ schritt: 'verbunden' });
|
||||
zeigeStand();
|
||||
meldeAnPc({ schritt: 'verbunden' });
|
||||
if (handyModus.w) { kaufBlock.style.display = 'none'; codeTeil.style.display = 'none'; }
|
||||
verbundenBanner.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1426,7 +1715,7 @@
|
||||
leseModus = true;
|
||||
eingabe.style.display = 'none';
|
||||
kaufBlock.style.display = 'none';
|
||||
status.querySelector('.gross').textContent = 'Das Ergebnis wird geladen …';
|
||||
status.querySelector('.gross').textContent = t('statusLaden');
|
||||
status.style.display = 'block';
|
||||
var f = null;
|
||||
try { f = await BKUebergabe.holen(ue); } catch (e) {}
|
||||
@@ -1434,11 +1723,13 @@
|
||||
if (!f || !f.ergebnis) {
|
||||
leseModus = false;
|
||||
zeigeStand();
|
||||
zeigeFehler('Dieser QR-Code ist abgelaufen oder wurde schon benutzt (er gilt ' + BKUebergabe.LEBENSDAUER_MIN + ' Minuten und nur einmal). Bitte am Computer einen neuen erzeugen.');
|
||||
zeigeFehler(t('qrAbgelaufen', { min: BKUebergabe.LEBENSDAUER_MIN }));
|
||||
return;
|
||||
}
|
||||
BKUebergabe.loeschen(ue);
|
||||
verbundenBanner.textContent = '📱 Vom Computer übernommen. Tragen Sie die Frist gleich in Ihren Kalender ein, dann vergessen Sie nichts.';
|
||||
codeTeil.style.display = 'none';
|
||||
kaufBlock.style.display = 'none';
|
||||
verbundenBanner.textContent = t('mitgenommen');
|
||||
verbundenBanner.style.display = 'block';
|
||||
zeigeAnalyse(bereiteVersionen(f.ergebnis, false));
|
||||
document.getElementById('ergebnis').scrollIntoView({ behavior: 'smooth' });
|
||||
@@ -1454,11 +1745,13 @@
|
||||
setzeWallet(h.w);
|
||||
setzeGuthaben(parseInt(h.n, 10) || 1);
|
||||
setzeEinrichtung(h.e || null);
|
||||
kaufOk.textContent = h.e ? '✅ Übernommen. BehördenKlar ist für Sie kostenlos, über ' + h.e + '.' : '✅ Guthaben übernommen.';
|
||||
kaufOk.textContent = h.e ? t('uebernommen', { name: h.e }) : '✅ Guthaben übernommen.';
|
||||
kaufOk.style.display = 'block';
|
||||
zeigeStand();
|
||||
}
|
||||
|
||||
function vergissHandySitzung() { try { sessionStorage.removeItem('bk_handy'); } catch (e) {} }
|
||||
|
||||
function pruefeRueckkehr() {
|
||||
var p = new URLSearchParams(window.location.search);
|
||||
var w = p.get('wallet');
|
||||
@@ -1493,24 +1786,46 @@
|
||||
var aktiv = zielsprache();
|
||||
Object.keys(SPRACH_NAMEN).forEach(function (c) {
|
||||
var o = document.createElement('option');
|
||||
o.value = c; o.textContent = SPRACH_NAMEN[c];
|
||||
o.value = c; o.textContent = SPRACH_NAMEN[c] + (SPRACH_DEUTSCH[c] ? ' – ' + SPRACH_DEUTSCH[c] : '');
|
||||
if (c === aktiv) o.selected = true;
|
||||
feld.appendChild(o);
|
||||
});
|
||||
feld.addEventListener('change', function () {
|
||||
try { localStorage.setItem(SPRACH_SCHLUESSEL, feld.value); } catch (e) {}
|
||||
speicher.set(SPRACH_SCHLUESSEL, feld.value);
|
||||
sitzungsSprache = null;
|
||||
wendeUiSpracheAn();
|
||||
zeigeStand();
|
||||
if (/[?&]sprache=/.test(window.location.search) && window.history.replaceState) {
|
||||
var u = new URL(window.location.href);
|
||||
u.searchParams.delete('sprache');
|
||||
window.history.replaceState(null, document.title, u.pathname + u.search + u.hash);
|
||||
}
|
||||
zeichneHandyQr();
|
||||
});
|
||||
})();
|
||||
|
||||
rendrePakete();
|
||||
wendeUiSpracheAn();
|
||||
var startHash = BKUebergabe.ausAdresse();
|
||||
var startSuche = window.location.search; // vor pruefeRueckkehr, das die Adresse aufräumt
|
||||
// Handy-Verbindung übersteht ein Neuladen (z. B. wenn Android den Tab beim
|
||||
// Kamera-Wechsel neu lädt). sessionStorage gilt nur für diesen einen Tab.
|
||||
try {
|
||||
if (startHash && startHash.a === 'k') sessionStorage.setItem('bk_handy', JSON.stringify(startHash));
|
||||
else if (!startHash) { var gemerkt = sessionStorage.getItem('bk_handy'); if (gemerkt) startHash = JSON.parse(gemerkt); }
|
||||
} catch (e) {}
|
||||
if (startHash && window.history.replaceState) {
|
||||
// Schlüssel nicht im Browser-Verlauf stehen lassen
|
||||
window.history.replaceState(null, document.title, window.location.pathname + window.location.search);
|
||||
}
|
||||
pruefeRueckkehr();
|
||||
zeigeStand();
|
||||
// Einrichtungs-Zugang leer? Einmal still nachfragen — vielleicht wurde
|
||||
// inzwischen aufgeladen oder verlängert (genau ein Aufruf pro Seitenaufruf)
|
||||
if (!startHash && einrichtung() && walletToken() && guthaben() <= 0 && speicher.get(CODE_SCHLUESSEL)
|
||||
&& !/[?&](code|wallet|kauf)=/.test(startSuche)) {
|
||||
loeseCodeEin(speicher.get(CODE_SCHLUESSEL));
|
||||
}
|
||||
handyKnopf.style.display = istPc ? 'block' : 'none';
|
||||
document.getElementById('guthabenHandyKnopf').style.display = istPc ? '' : 'none';
|
||||
pruefeUebergabe(startHash);
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Τι γίνεται με τα δεδομένα μου;",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Τα γράμματά σας παραμένουν κρυπτογραφημένα στη συσκευή σας. Για την ανάλυση η φωτογραφία στέλνεται μία φορά με ασφάλεια στην ΤΝ και διαγράφεται εκεί το αργότερο μετά από 30 ημέρες. Δεν χρειάζεστε λογαριασμό."
|
||||
"text": "Τα γράμματά σας παραμένουν κρυπτογραφημένα στη συσκευή σας. Για την ανάλυση η φωτογραφία στέλνεται μία φορά με ασφάλεια στην ΤΝ και διαγράφεται εκεί συνήθως μετά από 30 ημέρες. Δεν χρειάζεστε λογαριασμό."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Τι γίνεται με τα δεδομένα μου;</summary>
|
||||
<p>Τα γράμματά σας παραμένουν κρυπτογραφημένα στη συσκευή σας. Για την ανάλυση η φωτογραφία στέλνεται μία φορά με ασφάλεια στην ΤΝ και διαγράφεται εκεί το αργότερο μετά από 30 ημέρες. Δεν χρειάζεστε λογαριασμό.</p>
|
||||
<p>Τα γράμματά σας παραμένουν κρυπτογραφημένα στη συσκευή σας. Για την ανάλυση η φωτογραφία στέλνεται μία φορά με ασφάλεια στην ΤΝ και διαγράφεται εκεί συνήθως μετά από 30 ημέρες. Δεν χρειάζεστε λογαριασμό.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "What happens to my data?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Your letters stay encrypted on your own device. For the analysis the photo is sent once, securely, to the AI and is deleted there after 30 days at the latest. You do not need an account."
|
||||
"text": "Your letters stay encrypted on your own device. For the analysis the photo is sent once, securely, to the AI and is usually deleted there after 30 days. You do not need an account."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>What happens to my data?</summary>
|
||||
<p>Your letters stay encrypted on your own device. For the analysis the photo is sent once, securely, to the AI and is deleted there after 30 days at the latest. You do not need an account.</p>
|
||||
<p>Your letters stay encrypted on your own device. For the analysis the photo is sent once, securely, to the AI and is usually deleted there after 30 days. You do not need an account.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "¿Qué pasa con mis datos?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Tus cartas permanecen cifradas en tu propio dispositivo. Para el análisis, la foto se envía una sola vez de forma segura a la IA y allí se borra como máximo a los 30 días. No necesitas cuenta."
|
||||
"text": "Tus cartas permanecen cifradas en tu propio dispositivo. Para el análisis, la foto se envía una sola vez de forma segura a la IA y allí se borra normalmente a los 30 días. No necesitas cuenta."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>¿Qué pasa con mis datos?</summary>
|
||||
<p>Tus cartas permanecen cifradas en tu propio dispositivo. Para el análisis, la foto se envía una sola vez de forma segura a la IA y allí se borra como máximo a los 30 días. No necesitas cuenta.</p>
|
||||
<p>Tus cartas permanecen cifradas en tu propio dispositivo. Para el análisis, la foto se envía una sola vez de forma segura a la IA y allí se borra normalmente a los 30 días. No necesitas cuenta.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "با اطلاعات من چه میشود؟",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "نامههای شما رمزگذاریشده روی دستگاه خودتان میمانند. برای تحلیل، عکس یک بار بهصورت امن به هوش مصنوعی فرستاده میشود و حداکثر پس از ۳۰ روز آنجا پاک میشود. به حساب کاربری نیاز ندارید."
|
||||
"text": "نامههای شما رمزگذاریشده روی دستگاه خودتان میمانند. برای تحلیل، عکس یک بار بهصورت امن به هوش مصنوعی فرستاده میشود و معمولاً پس از ۳۰ روز آنجا پاک میشود. به حساب کاربری نیاز ندارید."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>با اطلاعات من چه میشود؟</summary>
|
||||
<p>نامههای شما رمزگذاریشده روی دستگاه خودتان میمانند. برای تحلیل، عکس یک بار بهصورت امن به هوش مصنوعی فرستاده میشود و حداکثر پس از ۳۰ روز آنجا پاک میشود. به حساب کاربری نیاز ندارید.</p>
|
||||
<p>نامههای شما رمزگذاریشده روی دستگاه خودتان میمانند. برای تحلیل، عکس یک بار بهصورت امن به هوش مصنوعی فرستاده میشود و معمولاً پس از ۳۰ روز آنجا پاک میشود. به حساب کاربری نیاز ندارید.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Que deviennent mes données ?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Vos courriers restent chiffrés sur votre appareil. Pour l’analyse, la photo est envoyée une seule fois de façon sécurisée à l’IA et y est supprimée au plus tard au bout de 30 jours. Aucun compte nécessaire."
|
||||
"text": "Vos courriers restent chiffrés sur votre appareil. Pour l’analyse, la photo est envoyée une seule fois de façon sécurisée à l’IA et y est supprimée en général au bout de 30 jours. Aucun compte nécessaire."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Que deviennent mes données ?</summary>
|
||||
<p>Vos courriers restent chiffrés sur votre appareil. Pour l’analyse, la photo est envoyée une seule fois de façon sécurisée à l’IA et y est supprimée au plus tard au bout de 30 jours. Aucun compte nécessaire.</p>
|
||||
<p>Vos courriers restent chiffrés sur votre appareil. Pour l’analyse, la photo est envoyée une seule fois de façon sécurisée à l’IA et y est supprimée en général au bout de 30 jours. Aucun compte nécessaire.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "मेरे डेटा का क्या होता है?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "आपकी चिट्ठियाँ आपके अपने उपकरण पर एन्क्रिप्टेड रहती हैं। विश्लेषण के लिए फ़ोटो एक बार सुरक्षित रूप से एआई को भेजी जाती है और वहाँ अधिकतम 30 दिनों में मिटा दी जाती है। आपको खाते की ज़रूरत नहीं।"
|
||||
"text": "आपकी चिट्ठियाँ आपके अपने उपकरण पर एन्क्रिप्टेड रहती हैं। विश्लेषण के लिए फ़ोटो एक बार सुरक्षित रूप से एआई को भेजी जाती है और वहाँ आमतौर पर 30 दिन बाद मिटा दी जाती है। आपको खाते की ज़रूरत नहीं।"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>मेरे डेटा का क्या होता है?</summary>
|
||||
<p>आपकी चिट्ठियाँ आपके अपने उपकरण पर एन्क्रिप्टेड रहती हैं। विश्लेषण के लिए फ़ोटो एक बार सुरक्षित रूप से एआई को भेजी जाती है और वहाँ अधिकतम 30 दिनों में मिटा दी जाती है। आपको खाते की ज़रूरत नहीं।</p>
|
||||
<p>आपकी चिट्ठियाँ आपके अपने उपकरण पर एन्क्रिप्टेड रहती हैं। विश्लेषण के लिए फ़ोटो एक बार सुरक्षित रूप से एआई को भेजी जाती है और वहाँ आमतौर पर 30 दिन बाद मिटा दी जाती है। आपको खाते की ज़रूरत नहीं।</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Što se događa s mojim podacima?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje umjetnoj inteligenciji i ondje se briše najkasnije nakon 30 dana. Račun nije potreban."
|
||||
"text": "Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje umjetnoj inteligenciji i ondje se u pravilu briše nakon 30 dana. Račun nije potreban."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Što se događa s mojim podacima?</summary>
|
||||
<p>Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje umjetnoj inteligenciji i ondje se briše najkasnije nakon 30 dana. Račun nije potreban.</p>
|
||||
<p>Vaša pisma ostaju šifrirana na vašem uređaju. Za analizu se fotografija jednom sigurno šalje umjetnoj inteligenciji i ondje se u pravilu briše nakon 30 dana. Račun nije potreban.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Mi történik az adataimmal?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "A levelei titkosítva a saját készülékén maradnak. Az elemzéshez a fénykép egyszer, biztonságosan kerül el az MI-hez, és ott legkésőbb 30 nap múlva törlődik. Nincs szükség fiókra."
|
||||
"text": "A levelei titkosítva a saját készülékén maradnak. Az elemzéshez a fénykép egyszer, biztonságosan kerül el az MI-hez, és ott általában 30 nap múlva törlődik. Nincs szükség fiókra."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Mi történik az adataimmal?</summary>
|
||||
<p>A levelei titkosítva a saját készülékén maradnak. Az elemzéshez a fénykép egyszer, biztonságosan kerül el az MI-hez, és ott legkésőbb 30 nap múlva törlődik. Nincs szükség fiókra.</p>
|
||||
<p>A levelei titkosítva a saját készülékén maradnak. Az elemzéshez a fénykép egyszer, biztonságosan kerül el az MI-hez, és ott általában 30 nap múlva törlődik. Nincs szükség fiókra.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -336,7 +336,7 @@
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Was passiert mit meinen Briefen?",
|
||||
"acceptedAnswer": { "@type": "Answer", "text": "Ihre Briefe bleiben auf Ihrem Handy — sicher verschlüsselt. Für die Analyse wird das Foto einmal sicher an die KI geschickt. Nach spätestens 30 Tagen wird es dort gelöscht. Sie brauchen kein Konto." }
|
||||
"acceptedAnswer": { "@type": "Answer", "text": "Ihre Briefe bleiben auf Ihrem Handy — sicher verschlüsselt. Für die Analyse wird das Foto einmal sicher an die KI geschickt. In der Regel wird es dort nach 30 Tagen gelöscht. Sie brauchen kein Konto." }
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
@@ -607,7 +607,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Was passiert mit meinen Briefen?</summary>
|
||||
<p>Ihre Briefe bleiben auf Ihrem Handy — sicher verschlüsselt. Für die Analyse wird das Foto einmal sicher an die KI geschickt. Nach spätestens 30 Tagen wird es dort gelöscht. Sie brauchen kein Konto.</p>
|
||||
<p>Ihre Briefe bleiben auf Ihrem Handy — sicher verschlüsselt. Für die Analyse wird das Foto einmal sicher an die KI geschickt. In der Regel wird es dort nach 30 Tagen gelöscht. Sie brauchen kein Konto.</p>
|
||||
</details>
|
||||
<details>
|
||||
<summary>Ersetzt die App einen Anwalt?</summary>
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Che fine fanno i miei dati?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Le tue lettere restano cifrate sul tuo dispositivo. Per l’analisi la foto viene inviata una sola volta in modo sicuro all’IA e viene cancellata lì al più tardi dopo 30 giorni. Non serve un account."
|
||||
"text": "Le tue lettere restano cifrate sul tuo dispositivo. Per l’analisi la foto viene inviata una sola volta in modo sicuro all’IA e viene cancellata lì di norma dopo 30 giorni. Non serve un account."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Che fine fanno i miei dati?</summary>
|
||||
<p>Le tue lettere restano cifrate sul tuo dispositivo. Per l’analisi la foto viene inviata una sola volta in modo sicuro all’IA e viene cancellata lì al più tardi dopo 30 giorni. Non serve un account.</p>
|
||||
<p>Le tue lettere restano cifrate sul tuo dispositivo. Per l’analisi la foto viene inviata una sola volta in modo sicuro all’IA e viene cancellata lì di norma dopo 30 giorni. Non serve un account.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Bi daneyên min çi tê kirin?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Nameyên te bi şîfre li ser amûra te dimînin. Ji bo analîzê wêne carekê bi ewlehî ji AI re tê şandin û li wir herî dereng piştî 30 rojan tê jêbirin. Tu hewceyî hesabekî nînî."
|
||||
"text": "Nameyên te bi şîfre li ser amûra te dimînin. Ji bo analîzê wêne carekê bi ewlehî ji AI re tê şandin û li wir bi gelemperî piştî 30 rojan tê jêbirin. Tu hewceyî hesabekî nînî."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Bi daneyên min çi tê kirin?</summary>
|
||||
<p>Nameyên te bi şîfre li ser amûra te dimînin. Ji bo analîzê wêne carekê bi ewlehî ji AI re tê şandin û li wir herî dereng piştî 30 rojan tê jêbirin. Tu hewceyî hesabekî nînî.</p>
|
||||
<p>Nameyên te bi şîfre li ser amûra te dimînin. Ji bo analîzê wêne carekê bi ewlehî ji AI re tê şandin û li wir bi gelemperî piştî 30 rojan tê jêbirin. Tu hewceyî hesabekî nînî.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Co dzieje się z moimi danymi?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Twoje pisma pozostają zaszyfrowane na Twoim urządzeniu. Do analizy zdjęcie jest raz bezpiecznie wysyłane do SI i usuwane tam najpóźniej po 30 dniach. Konto nie jest potrzebne."
|
||||
"text": "Twoje pisma pozostają zaszyfrowane na Twoim urządzeniu. Do analizy zdjęcie jest raz bezpiecznie wysyłane do SI i usuwane tam zwykle po 30 dniach. Konto nie jest potrzebne."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Co dzieje się z moimi danymi?</summary>
|
||||
<p>Twoje pisma pozostają zaszyfrowane na Twoim urządzeniu. Do analizy zdjęcie jest raz bezpiecznie wysyłane do SI i usuwane tam najpóźniej po 30 dniach. Konto nie jest potrzebne.</p>
|
||||
<p>Twoje pisma pozostają zaszyfrowane na Twoim urządzeniu. Do analizy zdjęcie jest raz bezpiecznie wysyłane do SI i usuwane tam zwykle po 30 dniach. Konto nie jest potrzebne.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "زما معلوماتو ته څه کیږي؟",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "ستاسو لیکونه پټ شوي ستاسو په خپله وسیله پاتې کیږي. د شننې لپاره عکس یو ځل په خوندي ډول مصنوعي ځیرکتیا ته لیږل کیږي او هلته تر ۳۰ ورځو وروسته ړنګېږي. حساب ته اړتیا نشته."
|
||||
"text": "ستاسو لیکونه پټ شوي ستاسو په خپله وسیله پاتې کیږي. د شننې لپاره عکس یو ځل په خوندي ډول مصنوعي ځیرکتیا ته لیږل کیږي او هلته معمولاً تر ۳۰ ورځو وروسته ړنګېږي. حساب ته اړتیا نشته."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>زما معلوماتو ته څه کیږي؟</summary>
|
||||
<p>ستاسو لیکونه پټ شوي ستاسو په خپله وسیله پاتې کیږي. د شننې لپاره عکس یو ځل په خوندي ډول مصنوعي ځیرکتیا ته لیږل کیږي او هلته تر ۳۰ ورځو وروسته ړنګېږي. حساب ته اړتیا نشته.</p>
|
||||
<p>ستاسو لیکونه پټ شوي ستاسو په خپله وسیله پاتې کیږي. د شننې لپاره عکس یو ځل په خوندي ډول مصنوعي ځیرکتیا ته لیږل کیږي او هلته معمولاً تر ۳۰ ورځو وروسته ړنګېږي. حساب ته اړتیا نشته.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "O que acontece aos meus dados?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "As suas cartas ficam cifradas no seu próprio dispositivo. Para a análise, a foto é enviada uma única vez de forma segura para a IA e é apagada lá no máximo ao fim de 30 dias. Não precisa de conta."
|
||||
"text": "As suas cartas ficam cifradas no seu próprio dispositivo. Para a análise, a foto é enviada uma única vez de forma segura para a IA e é apagada lá normalmente ao fim de 30 dias. Não precisa de conta."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>O que acontece aos meus dados?</summary>
|
||||
<p>As suas cartas ficam cifradas no seu próprio dispositivo. Para a análise, a foto é enviada uma única vez de forma segura para a IA e é apagada lá no máximo ao fim de 30 dias. Não precisa de conta.</p>
|
||||
<p>As suas cartas ficam cifradas no seu próprio dispositivo. Para a análise, a foto é enviada uma única vez de forma segura para a IA e é apagada lá normalmente ao fim de 30 dias. Não precisa de conta.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Ce se întâmplă cu datele mele?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Scrisorile tale rămân criptate pe dispozitivul tău. Pentru analiză, fotografia este trimisă o singură dată în siguranță către IA și este ștearsă acolo în cel mult 30 de zile. Nu ai nevoie de cont."
|
||||
"text": "Scrisorile tale rămân criptate pe dispozitivul tău. Pentru analiză, fotografia este trimisă o singură dată în siguranță către IA și este ștearsă acolo de regulă după 30 de zile. Nu ai nevoie de cont."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Ce se întâmplă cu datele mele?</summary>
|
||||
<p>Scrisorile tale rămân criptate pe dispozitivul tău. Pentru analiză, fotografia este trimisă o singură dată în siguranță către IA și este ștearsă acolo în cel mult 30 de zile. Nu ai nevoie de cont.</p>
|
||||
<p>Scrisorile tale rămân criptate pe dispozitivul tău. Pentru analiză, fotografia este trimisă o singură dată în siguranță către IA și este ștearsă acolo de regulă după 30 de zile. Nu ai nevoie de cont.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Что происходит с моими данными?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Ваши письма остаются зашифрованными на вашем устройстве. Для разбора фото один раз безопасно отправляется ИИ и удаляется там не позднее чем через 30 дней. Учётная запись не нужна."
|
||||
"text": "Ваши письма остаются зашифрованными на вашем устройстве. Для разбора фото один раз безопасно отправляется ИИ и удаляется там обычно через 30 дней. Учётная запись не нужна."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Что происходит с моими данными?</summary>
|
||||
<p>Ваши письма остаются зашифрованными на вашем устройстве. Для разбора фото один раз безопасно отправляется ИИ и удаляется там не позднее чем через 30 дней. Учётная запись не нужна.</p>
|
||||
<p>Ваши письма остаются зашифрованными на вашем устройстве. Для разбора фото один раз безопасно отправляется ИИ и удаляется там обычно через 30 дней. Учётная запись не нужна.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+28
-28
@@ -3,7 +3,7 @@
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -36,7 +36,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/tr</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -69,7 +69,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/ar</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -102,7 +102,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/ru</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -135,7 +135,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/uk</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -168,7 +168,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/pl</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -201,7 +201,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/ro</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -234,7 +234,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/en</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -267,7 +267,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/fa</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -300,7 +300,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/ku</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -333,7 +333,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/bg</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -366,7 +366,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/hr</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -399,7 +399,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/sr</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -432,7 +432,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/bs</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -465,7 +465,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/sq</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -498,7 +498,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/it</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -531,7 +531,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/el</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -564,7 +564,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/es</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -597,7 +597,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/pt</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -630,7 +630,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/fr</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -663,7 +663,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/hu</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -696,7 +696,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/vi</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -729,7 +729,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/hi</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -762,7 +762,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/ur</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -795,7 +795,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/ps</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -828,7 +828,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/ti</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -861,7 +861,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/so</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
@@ -894,7 +894,7 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://behoerdenklar.de/zh</loc>
|
||||
<lastmod>2026-09-23</lastmod>
|
||||
<lastmod>2026-10-22</lastmod>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://behoerdenklar.de/"/>
|
||||
<xhtml:link rel="alternate" hreflang="tr" href="https://behoerdenklar.de/tr"/>
|
||||
<xhtml:link rel="alternate" hreflang="ar" href="https://behoerdenklar.de/ar"/>
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Maxaa ku dhacaya xogtayda?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Warqadahaagu waxay ku hadhayaan qalabkaaga iyagoo sir ah. Falanqaynta awgeed sawirka hal mar ayaa si ammaan ah loogu diraa AI-ga, halkaasna waxaa laga tirtiraa ugu badnaan 30 maalmood gudahood. Koonto uma baahnid."
|
||||
"text": "Warqadahaagu waxay ku hadhayaan qalabkaaga iyagoo sir ah. Falanqaynta awgeed sawirka hal mar ayaa si ammaan ah loogu diraa AI-ga, halkaasna waxaa laga tirtiraa inta badan 30 maalmood kadib. Koonto uma baahnid."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Maxaa ku dhacaya xogtayda?</summary>
|
||||
<p>Warqadahaagu waxay ku hadhayaan qalabkaaga iyagoo sir ah. Falanqaynta awgeed sawirka hal mar ayaa si ammaan ah loogu diraa AI-ga, halkaasna waxaa laga tirtiraa ugu badnaan 30 maalmood gudahood. Koonto uma baahnid.</p>
|
||||
<p>Warqadahaagu waxay ku hadhayaan qalabkaaga iyagoo sir ah. Falanqaynta awgeed sawirka hal mar ayaa si ammaan ah loogu diraa AI-ga, halkaasna waxaa laga tirtiraa inta badan 30 maalmood kadib. Koonto uma baahnid.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Çfarë ndodh me të dhënat e mia?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Letrat tuaja mbeten të koduara në pajisjen tuaj. Për analizën, fotoja dërgohet një herë në mënyrë të sigurt te inteligjenca artificiale dhe fshihet atje më së voni pas 30 ditësh. Nuk ju duhet llogari."
|
||||
"text": "Letrat tuaja mbeten të koduara në pajisjen tuaj. Për analizën, fotoja dërgohet një herë në mënyrë të sigurt te inteligjenca artificiale dhe fshihet atje zakonisht pas 30 ditësh. Nuk ju duhet llogari."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Çfarë ndodh me të dhënat e mia?</summary>
|
||||
<p>Letrat tuaja mbeten të koduara në pajisjen tuaj. Për analizën, fotoja dërgohet një herë në mënyrë të sigurt te inteligjenca artificiale dhe fshihet atje më së voni pas 30 ditësh. Nuk ju duhet llogari.</p>
|
||||
<p>Letrat tuaja mbeten të koduara në pajisjen tuaj. Për analizën, fotoja dërgohet një herë në mënyrë të sigurt te inteligjenca artificiale dhe fshihet atje zakonisht pas 30 ditësh. Nuk ju duhet llogari.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Шта се дешава са мојим подацима?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Ваша писма остају шифрована на вашем уређају. За анализу се фотографија једном безбедно шаље вештачкој интелигенцији и тамо се брише најкасније после 30 дана. Налог није потребан."
|
||||
"text": "Ваша писма остају шифрована на вашем уређају. За анализу се фотографија једном безбедно шаље вештачкој интелигенцији и тамо се по правилу брише после 30 дана. Налог није потребан."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Шта се дешава са мојим подацима?</summary>
|
||||
<p>Ваша писма остају шифрована на вашем уређају. За анализу се фотографија једном безбедно шаље вештачкој интелигенцији и тамо се брише најкасније после 30 дана. Налог није потребан.</p>
|
||||
<p>Ваша писма остају шифрована на вашем уређају. За анализу се фотографија једном безбедно шаље вештачкој интелигенцији и тамо се по правилу брише после 30 дана. Налог није потребан.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "ብዛዕባ ዳታይ እንታይ ይኸውን?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "ደብዳበታትካ ኣብ ናትካ መሳርሒ ተመስጢሮም ይጸንሑ። ንመጽናዕቲ እቲ ስእሊ ሓንሳብ ብውሑስ መንገዲ ናብ AI ይለኣኽ፣ ኣብኡ ድማ ዝበዝሐ ድሕሪ 30 መዓልቲ ይድምሰስ። ኣካውንት ኣየድልየካን።"
|
||||
"text": "ደብዳበታትካ ኣብ ናትካ መሳርሒ ተመስጢሮም ይጸንሑ። ንመጽናዕቲ እቲ ስእሊ ሓንሳብ ብውሑስ መንገዲ ናብ AI ይለኣኽ፣ ኣብኡ ድማ ብልሙድ ድሕሪ 30 መዓልቲ ይድምሰስ። ኣካውንት ኣየድልየካን።"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>ብዛዕባ ዳታይ እንታይ ይኸውን?</summary>
|
||||
<p>ደብዳበታትካ ኣብ ናትካ መሳርሒ ተመስጢሮም ይጸንሑ። ንመጽናዕቲ እቲ ስእሊ ሓንሳብ ብውሑስ መንገዲ ናብ AI ይለኣኽ፣ ኣብኡ ድማ ዝበዝሐ ድሕሪ 30 መዓልቲ ይድምሰስ። ኣካውንት ኣየድልየካን።</p>
|
||||
<p>ደብዳበታትካ ኣብ ናትካ መሳርሒ ተመስጢሮም ይጸንሑ። ንመጽናዕቲ እቲ ስእሊ ሓንሳብ ብውሑስ መንገዲ ናብ AI ይለኣኽ፣ ኣብኡ ድማ ብልሙድ ድሕሪ 30 መዓልቲ ይድምሰስ። ኣካውንት ኣየድልየካን።</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Verilerime ne oluyor?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Mektuplarınız şifreli olarak kendi cihazınızda kalır. Analiz için fotoğraf bir kez güvenli şekilde yapay zekâya gönderilir ve orada en geç 30 gün sonra silinir. Hesap açmanız gerekmez."
|
||||
"text": "Mektuplarınız şifreli olarak kendi cihazınızda kalır. Analiz için fotoğraf bir kez güvenli şekilde yapay zekâya gönderilir ve orada genellikle 30 gün sonra silinir. Hesap açmanız gerekmez."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Verilerime ne oluyor?</summary>
|
||||
<p>Mektuplarınız şifreli olarak kendi cihazınızda kalır. Analiz için fotoğraf bir kez güvenli şekilde yapay zekâya gönderilir ve orada en geç 30 gün sonra silinir. Hesap açmanız gerekmez.</p>
|
||||
<p>Mektuplarınız şifreli olarak kendi cihazınızda kalır. Analiz için fotoğraf bir kez güvenli şekilde yapay zekâya gönderilir ve orada genellikle 30 gün sonra silinir. Hesap açmanız gerekmez.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -69,7 +69,9 @@
|
||||
|
||||
/** Alle Fächer holen und entschlüsseln: { status: {...}, ergebnis: {...} }. */
|
||||
async function holen(ue) {
|
||||
var r = await fetch(BASIS + ue.id, { cache: 'no-store' });
|
||||
// Zeitlimit, damit eine hängende Anfrage die Abfrage am PC nicht blockiert
|
||||
var signal = (w.AbortSignal && w.AbortSignal.timeout) ? w.AbortSignal.timeout(10000) : undefined;
|
||||
var r = await fetch(BASIS + ue.id, { cache: 'no-store', signal: signal });
|
||||
if (!r.ok) throw new Error('Übergabe nicht erreichbar (' + r.status + ')');
|
||||
var faecher = (await r.json()).faecher || {};
|
||||
var aus = {};
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Що відбувається з моїми даними?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Ваші листи залишаються зашифрованими на вашому пристрої. Для аналізу фото один раз безпечно надсилається до ШІ і видаляється там щонайпізніше через 30 днів. Обліковий запис не потрібен."
|
||||
"text": "Ваші листи залишаються зашифрованими на вашому пристрої. Для аналізу фото один раз безпечно надсилається до ШІ і видаляється там зазвичай через 30 днів. Обліковий запис не потрібен."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Що відбувається з моїми даними?</summary>
|
||||
<p>Ваші листи залишаються зашифрованими на вашому пристрої. Для аналізу фото один раз безпечно надсилається до ШІ і видаляється там щонайпізніше через 30 днів. Обліковий запис не потрібен.</p>
|
||||
<p>Ваші листи залишаються зашифрованими на вашому пристрої. Для аналізу фото один раз безпечно надсилається до ШІ і видаляється там зазвичай через 30 днів. Обліковий запис не потрібен.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "میرے ڈیٹا کا کیا ہوتا ہے؟",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "آپ کے خطوط آپ کے اپنے آلے پر خفیہ شکل میں رہتے ہیں۔ تجزیے کے لیے تصویر ایک بار محفوظ طریقے سے اے آئی کو بھیجی جاتی ہے اور وہاں زیادہ سے زیادہ 30 دن میں مٹا دی جاتی ہے۔ آپ کو اکاؤنٹ کی ضرورت نہیں۔"
|
||||
"text": "آپ کے خطوط آپ کے اپنے آلے پر خفیہ شکل میں رہتے ہیں۔ تجزیے کے لیے تصویر ایک بار محفوظ طریقے سے اے آئی کو بھیجی جاتی ہے اور وہاں عام طور پر 30 دن بعد مٹا دی جاتی ہے۔ آپ کو اکاؤنٹ کی ضرورت نہیں۔"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>میرے ڈیٹا کا کیا ہوتا ہے؟</summary>
|
||||
<p>آپ کے خطوط آپ کے اپنے آلے پر خفیہ شکل میں رہتے ہیں۔ تجزیے کے لیے تصویر ایک بار محفوظ طریقے سے اے آئی کو بھیجی جاتی ہے اور وہاں زیادہ سے زیادہ 30 دن میں مٹا دی جاتی ہے۔ آپ کو اکاؤنٹ کی ضرورت نہیں۔</p>
|
||||
<p>آپ کے خطوط آپ کے اپنے آلے پر خفیہ شکل میں رہتے ہیں۔ تجزیے کے لیے تصویر ایک بار محفوظ طریقے سے اے آئی کو بھیجی جاتی ہے اور وہاں عام طور پر 30 دن بعد مٹا دی جاتی ہے۔ آپ کو اکاؤنٹ کی ضرورت نہیں۔</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "Dữ liệu của tôi thì sao?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Thư của bạn được mã hóa và nằm trên thiết bị của bạn. Để phân tích, ảnh được gửi một lần duy nhất và an toàn tới AI, rồi bị xóa ở đó chậm nhất sau 30 ngày. Bạn không cần tài khoản."
|
||||
"text": "Thư của bạn được mã hóa và nằm trên thiết bị của bạn. Để phân tích, ảnh được gửi một lần duy nhất và an toàn tới AI, rồi thường bị xóa ở đó sau 30 ngày. Bạn không cần tài khoản."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>Dữ liệu của tôi thì sao?</summary>
|
||||
<p>Thư của bạn được mã hóa và nằm trên thiết bị của bạn. Để phân tích, ảnh được gửi một lần duy nhất và an toàn tới AI, rồi bị xóa ở đó chậm nhất sau 30 ngày. Bạn không cần tài khoản.</p>
|
||||
<p>Thư của bạn được mã hóa và nằm trên thiết bị của bạn. Để phân tích, ảnh được gửi một lần duy nhất và an toàn tới AI, rồi thường bị xóa ở đó sau 30 ngày. Bạn không cần tài khoản.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@
|
||||
"name": "我的数据会怎样?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "您的信件以加密方式保存在您自己的设备上。分析时照片会安全地发送给人工智能一次,并最迟在 30 天后在那里删除。您不需要账号。"
|
||||
"text": "您的信件以加密方式保存在您自己的设备上。分析时照片会安全地发送给人工智能一次,并通常在 30 天后在那里删除。您不需要账号。"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -368,7 +368,7 @@
|
||||
</details>
|
||||
<details>
|
||||
<summary>我的数据会怎样?</summary>
|
||||
<p>您的信件以加密方式保存在您自己的设备上。分析时照片会安全地发送给人工智能一次,并最迟在 30 天后在那里删除。您不需要账号。</p>
|
||||
<p>您的信件以加密方式保存在您自己的设备上。分析时照片会安全地发送给人工智能一次,并通常在 30 天后在那里删除。您不需要账号。</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
|
||||
Reference in new issue
Block a user