Files
Lageplan/src/app/datenschutz/page.tsx
Pepe Ziberi fa1e911ecd feat(legal): Zustimmungs-Nachweise mit IP, Gerät/Browser & Hash (v1.7.8)
Belastbarer Einwilligungsnachweis:
- Schema/Migration: legal_acceptances + ipAddress, userAgent (contentHash bestand bereits)
- Erfassung bei Registrierung und jeder Zustimmung (/api/legal/accept)
- Admin /admin/legal: neue Spalten IP + Gerät/Browser + Hash; CSV-Export um ipAddress,
  userAgent, contentHash erweitert
- Datenschutzerklärung + Dateninventar: IP/User-Agent als dokumentierter Beweiszweck ergänzt

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 17:55:57 +02:00

208 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use client'
import { LegalPage } from '@/components/legal/legal-page'
import { legal, isPlaceholder } from '@/config/legal'
function Val({ value }: { value: string }) {
if (isPlaceholder(value)) {
return <span className="text-amber-600 dark:text-amber-400 font-medium">{value}</span>
}
return <span className="text-foreground font-medium">{value}</span>
}
export default function DatenschutzPage() {
const d = legal.documents.privacy
return (
<LegalPage
title="Datenschutzerklärung"
version={d.version}
publishedAt={d.publishedAt}
intro={`Diese Erklärung informiert transparent darüber, welche Personendaten ${legal.projectName} bearbeitet, zu welchem Zweck und wer daran beteiligt ist. Sie orientiert sich am Schweizer Datenschutzgesetz (DSG).`}
>
<section>
<h2>1. Verantwortlicher</h2>
<p>
Verantwortlich für die Datenbearbeitung ist der Betreiber der Plattform{' '}
<Val value={legal.operatorName} /> (<Val value={legal.operatorLegalForm} />),{' '}
<Val value={legal.postalAddress} />.
</p>
<p><strong>Datenschutzkontakt:</strong> <Val value={legal.privacyContactEmail} /></p>
</section>
<section>
<h2>2. Welche Daten werden bearbeitet?</h2>
<ul>
<li><strong>Registrierungs-/Kontodaten:</strong> Name, E-Mail-Adresse, Organisationsname, Rolle. Das Passwort wird mit einem geeigneten Einwegverfahren (bcrypt) gehasht und nie im Klartext gespeichert.</li>
<li><strong>Einsatz-/Inhaltsdaten:</strong> Lagepläne, Journaleinträge, Zeichnungen, Koordinaten, Symbole, hochgeladene Dateien (Logos, Planbilder, Symbole) sowie zugehörige Projekt- und Organisationsdaten.</li>
<li><strong>Protokoll-/Sicherheitsdaten:</strong> technische Zugriffs- und Fehlerprotokolle (z.B. Zeitpunkt, ungefähre technische Angaben) zur Gewährleistung von Betrieb und Sicherheit.</li>
<li><strong>Zustimmungsnachweise:</strong> welche Version der Nutzungsbedingungen/Datenschutzerklärung/Organisationsbestätigung wann akzeptiert wurde zu Beweiszwecken zusammen mit IP-Adresse und Gerät/Browser (User-Agent) sowie dem Dokument-Prüfwert (Hash).</li>
<li><strong>Unterstützungsbeiträge (optional):</strong> bei freiwilligen Beiträgen der Betrag sowie freiwillig angegebener Name/Nachricht (Zahlungsabwicklung siehe Ziffer 9).</li>
</ul>
</section>
<section>
<h2>3. Zwecke</h2>
<ul>
<li>Bereitstellung und Betrieb der Applikation, Authentifizierung und Benutzer-/Organisationsverwaltung</li>
<li>Echtzeit-Synchronisierung von Einsatzdaten zwischen berechtigten Teammitgliedern</li>
<li>Erstellung von Rapporten und PDF-/PNG-Exporten</li>
<li>Gewährleistung von Sicherheit, Stabilität und Missbrauchsprävention</li>
<li>Technischer Support und Fehlerbehebung</li>
<li>Erfüllung rechtlicher Pflichten (soweit anwendbar)</li>
</ul>
</section>
<section>
<h2>4. Grundlagen der Bearbeitung</h2>
<p>
Die Bearbeitung erfolgt insbesondere zur Erfüllung des Nutzungsverhältnisses (Vertrag), aufgrund
berechtigter Interessen am sicheren und stabilen Betrieb sowie wo erforderlich gestützt auf Ihre
Einwilligung. Zwingende gesetzliche Bestimmungen bleiben vorbehalten.
</p>
</section>
<section id="dienstleister" className="scroll-mt-20">
<h2>5. Empfänger und Dienstleister (Subprozessoren)</h2>
<p>
Für den technischen Betrieb können sorgfältig ausgewählte Dienstleister eingesetzt werden. Nachfolgend
die tatsächlich eingesetzten bzw. optional konfigurierbaren Dienste. Einige Karten-, Geocoding- und
Wetterdienste werden direkt aus Ihrem Browser aufgerufen; dabei kann die aufgerufene Kachel-/Standort-
Anfrage (und damit Ihre IP-Adresse) an den jeweiligen Anbieter übermittelt werden.
</p>
<div className="overflow-x-auto">
<table className="w-full text-xs border-collapse mt-2">
<thead>
<tr className="text-left text-foreground border-b border-border">
<th className="py-1.5 pr-3">Dienst</th>
<th className="py-1.5 pr-3">Zweck</th>
<th className="py-1.5 pr-3">Daten</th>
<th className="py-1.5">Region</th>
</tr>
</thead>
<tbody>
{legal.processors.map(p => (
<tr key={p.name} className="border-b border-border/50 align-top">
<td className="py-1.5 pr-3 text-foreground font-medium">{p.name}{p.optional ? ' *' : ''}</td>
<td className="py-1.5 pr-3">{p.purpose}</td>
<td className="py-1.5 pr-3">{p.data}</td>
<td className="py-1.5">{isPlaceholder(p.region) ? <span className="text-amber-600 dark:text-amber-400">{p.region}</span> : p.region}</td>
</tr>
))}
</tbody>
</table>
</div>
<p className="text-xs">* nur aktiv, sofern konfiguriert/genutzt (z.B. Zahlungsabwicklung, E-Mail-Versand).</p>
<p>Personendaten werden nicht zu Werbezwecken an Dritte verkauft.</p>
</section>
<section>
<h2>6. Bekanntgabe ins Ausland</h2>
<p>
Je nach eingesetztem Dienstleister (z.B. Zahlungsanbieter, konfigurierter E-Mail-Anbieter, globale
Kartendienste) kann eine Bearbeitung ausserhalb der Schweiz erfolgen. Der Betreiber wählt Dienstleister
sorgfältig aus. Eine ausschliessliche Speicherung in der Schweiz wird nicht pauschal zugesichert; die
konkreten Verarbeitungsregionen sind soweit bekannt in der Tabelle unter Ziffer 5 bzw. in{' '}
<code>docs/legal/subprocessors.md</code> aufgeführt. Offene Punkte sind mit Platzhaltern gekennzeichnet.
</p>
</section>
<section>
<h2>7. Sicherheit</h2>
<p>
Es werden angemessene technische und organisatorische Massnahmen eingesetzt (u.a. Rollen- und
Mandantentrennung, Passwort-Hashing, verschlüsselte Übertragung via HTTPS/TLS, Zugriffskontrollen,
Rate-Limiting). Ein vollständiger Schutz vor allen Risiken kann jedoch nicht garantiert werden.
</p>
</section>
<section>
<h2>8. Aufbewahrung und Löschung</h2>
<p>
Personendaten werden so lange aufbewahrt, wie es für die genannten Zwecke oder gesetzliche Pflichten
erforderlich ist. Produktivdaten werden nach Abschluss des Löschvorgangs entfernt. Daten in
Sicherungskopien (Backups) können bis zum Ablauf des regulären Backup-Zyklus fortbestehen
(Aufbewahrungsfrist der Backups: <Val value={legal.backupRetention} />). Die detaillierten Fristen sind in{' '}
<code>docs/legal/retention-and-deletion.md</code> dokumentiert.
</p>
</section>
<section>
<h2>9. Zahlungsabwicklung (freiwillige Beiträge)</h2>
<p>
Freiwillige Unterstützungsbeiträge werden über <strong>Stripe</strong> abgewickelt. Zahlungsdaten
(z.B. Kreditkarte, Twint) werden direkt bei Stripe erfasst und nicht in der Applikation gespeichert.
An Stripe werden der Betrag sowie ein freiwillig angegebener Name/Nachricht übermittelt. Es werden keine
wiederkehrenden Zahlungen eingerichtet. Details siehe{' '}
<a href="/unterstuetzen">Unterstützungsseite</a>.
</p>
</section>
<section>
<h2>10. Karten- und Geodienste</h2>
<p>
Für Karten, Adresssuche und Wetter-/Höhendaten werden Dienste von OpenStreetMap (Tiles/Nominatim),
Esri (Satellitenbilder), swisstopo (Landeskarte) sowie Open-Meteo/Open-Elevation genutzt. Diese Aufrufe
erfolgen aus Ihrem Browser; dabei kann Ihre IP-Adresse an die jeweiligen Anbieter übermittelt werden.
Karten-, Adress- und Geodaten können unvollständig, ungenau oder veraltet sein.
</p>
</section>
<section>
<h2>11. Cookies und lokale Speichertechnologien</h2>
<p>
Es wird ein einziges, technisch notwendiges Cookie gesetzt: <code>auth-token</code> (Session/Anmeldung,
httpOnly). Es werden keine Tracking-, Analyse- oder Werbe-Cookies eingesetzt.
</p>
<p>
Im lokalen Speicher (localStorage) Ihres Geräts werden zur Funktion technisch notwendige Angaben
abgelegt, u.a.: zwischengespeicherte Zeichnungen/Offline-Warteschlange, Cache-Zeitstempel für
Offline-Karten, Theme-Einstellung, zuletzt geöffnetes Projekt, Onboarding-Status und der Zustand des
Cookie-Hinweises. Diese Daten verbleiben auf Ihrem Gerät.
</p>
</section>
<section>
<h2>12. Protokolldaten</h2>
<p>
Zum Betrieb und zur Sicherheit können technische Protokolle anfallen. Diese werden auf das notwendige
Mass beschränkt; sensible Inhalte werden nach Möglichkeit von Protokollen ferngehalten.
</p>
</section>
<section>
<h2>13. Ihre Rechte</h2>
<p>Im Rahmen des anwendbaren Rechts stehen Ihnen insbesondere folgende Rechte zu:</p>
<ul>
<li><strong>Auskunft</strong> über die bearbeiteten Daten</li>
<li><strong>Berichtigung</strong> unrichtiger Daten</li>
<li><strong>Löschung</strong> (im Rahmen gesetzlicher Pflichten)</li>
<li><strong>Datenherausgabe/-export</strong> in einem gängigen Format</li>
<li><strong>Widerspruch</strong> gegen bestimmte Bearbeitungen</li>
<li><strong>Beschwerde</strong> bei der zuständigen Datenschutzbehörde (in der Schweiz: EDÖB)</li>
</ul>
<p>
Angemeldete Nutzer können Zustimmungen, Datenexport und Kontolöschung unter{' '}
<a href="/konto/datenschutz">Konto &amp; Datenschutz</a> einsehen bzw. anfordern. Anfragen richten Sie an{' '}
<Val value={legal.privacyContactEmail} />; der Eingang wird bestätigt.
</p>
</section>
<section>
<h2>14. Sicherheitsvorfälle</h2>
<p>
Bei einem Sicherheitsvorfall mit Risiko für betroffene Personen prüft der Betreiber die erforderlichen
Massnahmen und Informationspflichten nach einem definierten internen Prozess.
</p>
</section>
<section>
<h2>15. Änderungen dieser Datenschutzerklärung</h2>
<p>
Diese Datenschutzerklärung kann angepasst werden. Massgebend ist die jeweils veröffentlichte Version
(siehe Kopf dieser Seite). Bei wesentlichen Änderungen wird angemessen informiert.
</p>
</section>
</LegalPage>
)
}