generated from knso/webklar-preview-template
Compare commits
3
Commits
91437d37b4
...
6dc0207716
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6dc0207716 | ||
|
|
220e54b815 | ||
|
|
2af4b7ed41 |
No files matched your search
@@ -0,0 +1,133 @@
|
||||
# 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, spätabends: **bereit für den Deploy**
|
||||
|
||||
---
|
||||
|
||||
## Wo wir stehen (in einem Satz)
|
||||
|
||||
Alles ist gebaut, zweimal geprüft und lokal getestet, aber **noch nicht live**.
|
||||
**Jetzt fehlt nur noch dein „deploy“**, danach kommen die echten Generalproben.
|
||||
|
||||
---
|
||||
|
||||
## 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.
|
||||
|
||||
## 3. Was du tun musst
|
||||
|
||||
- 👤 **„deploy“ schreiben.** Dann veröffentliche ich zuerst den Worker und danach die Webseite. Ohne das ist nichts davon auf behoerdenklar.de.
|
||||
- 👤 **Mo 26.10.: MBE anrufen.** Wer ist der Träger (Diakonie, Caritas …)? Gibt es eine eigene AVV-Vorlage? Und bestätigen: Do 29.10., wie viele Leute, gibt es einen Bildschirm?
|
||||
- 👤 **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. / Fr 23.** | **Deploy**, sobald du „deploy“ sagst. Danach Vorführ-Code anlegen und `npm run pruefung`. | Claude, nach deinem OK |
|
||||
| **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. Neues **Datenschutz-Blatt** für den Datenschutzbeauftragten des Trägers. **Kurzanleitung** für Beraterinnen (1 Seite). | Claude |
|
||||
| **Mo 26.** | MBE anrufen. **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** am Handy (Einwilligung, Knöpfe, Hinweise). Bisher ist nur die Erklärung arabisch. Ca. 2–3 Std.
|
||||
- ⏳ Den Hinweis „Kostenlos über …“ auch oben im Seitenkopf zeigen (dort steht noch „2 Analysen gratis“).
|
||||
|
||||
---
|
||||
|
||||
## 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,18 +68,18 @@
|
||||
<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>
|
||||
@@ -113,7 +113,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 +121,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 +131,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.
@@ -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 |
@@ -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 |
+55
-11
@@ -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) {
|
||||
// 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>
|
||||
|
||||
+323
-73
@@ -183,7 +183,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 +215,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; }
|
||||
@@ -306,11 +306,12 @@
|
||||
<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.
|
||||
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.
|
||||
<a href="datenschutz.html" target="_blank">Datenschutzerklärung</a>
|
||||
</span>
|
||||
</label>
|
||||
@@ -329,7 +330,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">📷 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 +342,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>
|
||||
@@ -369,12 +370,6 @@
|
||||
Kamera noch auf Mikrofon zu.
|
||||
</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">
|
||||
@@ -384,6 +379,13 @@
|
||||
</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>🤝 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>
|
||||
</section>
|
||||
|
||||
@@ -437,7 +439,7 @@
|
||||
<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>
|
||||
@@ -551,8 +553,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 +581,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,17 +623,21 @@
|
||||
// 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); }
|
||||
}
|
||||
// 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
|
||||
@@ -613,12 +649,25 @@
|
||||
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();
|
||||
guthabenText.textContent = einrichtung()
|
||||
? '🤝 Kostenlos über ' + einrichtung() + (bis ? ' (bis ' + deDatum(bis) + ')' : '') + ':'
|
||||
: '💳 Ihr Guthaben:';
|
||||
guthabenZahl.textContent = n;
|
||||
guthabenBanner.style.display = 'block';
|
||||
}
|
||||
@@ -626,10 +675,43 @@
|
||||
// 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)); }
|
||||
|
||||
var LEER_HINWEIS = 'Die kostenlosen Analysen sind aufgebraucht oder abgelaufen. Ratsuchende: Bitte fragen Sie bei Ihrer Beratungsstelle nach. Beratungsstelle: Ein Anruf genügt, Justin Klein, 0170 4969375. Nach dem Aufladen einfach diese Seite neu laden oder den Code unten noch einmal eingeben.';
|
||||
var KEIN_ZUGANG_HANDY = 'Auf diesem Handy sind die kostenlosen Analysen verbraucht. Bitte am Computer den Code der Beratungsstelle einlösen und dann einen neuen QR-Code erzeugen.';
|
||||
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 = KEIN_ZUGANG_HANDY;
|
||||
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 = LEER_HINWEIS;
|
||||
return;
|
||||
}
|
||||
if (einrichtung() && hatGuthaben()) {
|
||||
document.querySelector('#demo .formular-kopf').textContent = 'Antrag auf Klartext · kostenlos über ' + einrichtung();
|
||||
}
|
||||
if (handyModus && handyModus.w) {
|
||||
eingabe.style.display = 'block';
|
||||
guthabenBanner.style.display = 'none';
|
||||
@@ -657,16 +739,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('Bitte zuerst oben das Häkchen bei der Einwilligung setzen.');
|
||||
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 +767,39 @@
|
||||
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
|
||||
? '✅ Fertig. Die Erklärung steht hier und auf dem Computer. Für einen weiteren Brief tippt die Beratung am Computer noch einmal auf „Lieber mit dem Handy fotografieren".'
|
||||
: '⚠️ Die Erklärung steht hier, ist aber am Computer nicht angekommen.'));
|
||||
if (ohneUebersetzung) verbundenBanner.appendChild(document.createTextNode(' Die Übersetzung hat diesmal nicht geklappt, deshalb steht die Erklärung auf Deutsch.'));
|
||||
if (!angekommen) {
|
||||
var knopf = document.createElement('button');
|
||||
knopf.type = 'button'; knopf.className = 'cta cta-zwei';
|
||||
knopf.textContent = '🔁 Noch einmal an den Computer senden';
|
||||
knopf.addEventListener('click', async function () {
|
||||
knopf.disabled = true; knopf.textContent = 'Wird gesendet …';
|
||||
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;
|
||||
}
|
||||
@@ -761,12 +881,21 @@
|
||||
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.');
|
||||
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 = KEIN_ZUGANG_HANDY;
|
||||
meldeAnPc({ schritt: 'fehler', code: 'kein_zugang', meldung: 'Am Handy sind die kostenlosen Analysen verbraucht.' });
|
||||
return;
|
||||
}
|
||||
if (daten.code === 'email_noetig') {
|
||||
// Nur das E-Mail-Feld zeigen — NICHT als verbraucht markieren.
|
||||
// (Sonst würde ein serverseitiges "E-Mail nötig", z. B. bei
|
||||
@@ -781,11 +910,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') {
|
||||
@@ -801,17 +928,32 @@
|
||||
|
||||
// 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 +971,42 @@
|
||||
status.style.display = 'none';
|
||||
eingabe.style.display = 'block';
|
||||
if (window.turnstile) window.turnstile.reset();
|
||||
meldeAnPc({ schritt: 'fehler', code: 'verbindung', meldung: 'Verbindung fehlgeschlagen.' });
|
||||
zeigeFehler('Verbindung fehlgeschlagen. Bitte prüfen Sie Ihr Internet und versuchen Sie es erneut.');
|
||||
}
|
||||
}
|
||||
|
||||
/** 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' ? 'Termin am ' + datum : 'Frist bis ' + datum;
|
||||
var text = tage < 0 ? (erstes.art === 'Termin' ? 'Der Termin war am ' + datum + '!' : 'Die Frist ist womöglich schon vorbei (' + datum + ')!') :
|
||||
tage === 0 ? 'HEUTE: ' + wann + '!' :
|
||||
tage === 1 ? 'Morgen: ' + wann :
|
||||
'Noch ' + tage + ' 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 +1016,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 +1053,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 +1077,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 +1106,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 +1225,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
|
||||
@@ -1080,8 +1254,8 @@
|
||||
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('⚠️ Frist: ' + deDatum(frist.datum), frist.aktion);
|
||||
if (termin) zeile('📅 Termin: ' + deDatum(termin.datum) + (termin.uhrzeit ? ', ' + termin.uhrzeit + ' Uhr' : ''), termin.ort);
|
||||
karte.style.display = 'block';
|
||||
}
|
||||
|
||||
@@ -1130,7 +1304,8 @@
|
||||
kopf.style.marginTop = '12px';
|
||||
kopf.innerHTML = '<strong>Das können Sie am Telefon sagen:</strong>';
|
||||
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';
|
||||
@@ -1231,8 +1406,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,11 +1437,11 @@
|
||||
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;
|
||||
}
|
||||
if (res.d.guthaben <= 0) return; // zeigeStand zeigt den Leer-Hinweis mit Telefonnummer
|
||||
kaufOk.textContent = '✅ Code eingelöst. BehördenKlar ist für Sie kostenlos, über ' + res.d.einrichtung + '.';
|
||||
kaufOk.style.display = 'block';
|
||||
})
|
||||
@@ -1294,13 +1474,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 +1531,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;
|
||||
}
|
||||
@@ -1409,16 +1630,22 @@
|
||||
}
|
||||
|
||||
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.';
|
||||
verbundenBanner.textContent = '🔗 Mit dem Computer verbunden. Setzen Sie das Häkchen und fotografieren Sie Ihren Brief. Die Erklärung erscheint hier und auf dem Bildschirm.';
|
||||
verbundenBanner.style.display = 'block';
|
||||
handyKnopf.style.display = 'none';
|
||||
if (handyModus.e) document.querySelector('#demo .formular-kopf').textContent = 'Antrag auf Klartext · kostenlos über ' + 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;
|
||||
}
|
||||
|
||||
@@ -1438,6 +1665,8 @@
|
||||
return;
|
||||
}
|
||||
BKUebergabe.loeschen(ue);
|
||||
codeTeil.style.display = 'none';
|
||||
kaufBlock.style.display = 'none';
|
||||
verbundenBanner.textContent = '📱 Vom Computer übernommen. Tragen Sie die Frist gleich in Ihren Kalender ein, dann vergessen Sie nichts.';
|
||||
verbundenBanner.style.display = 'block';
|
||||
zeigeAnalyse(bereiteVersionen(f.ergebnis, false));
|
||||
@@ -1459,6 +1688,8 @@
|
||||
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 +1724,43 @@
|
||||
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;
|
||||
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();
|
||||
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 = {};
|
||||
|
||||
+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