From 5eb6b794c4f36e0178cbe97904e2812fa19ef6d1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:07:03 +0000 Subject: [PATCH 1/2] Initial plan From 0821e2f989416f596f62620bed1b160f5b35bd19 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:15:24 +0000 Subject: [PATCH 2/2] feat(privacy): implement GDPR and global privacy compliance - Add dismissable cookie notice banner to base template (essential cookies only, ePrivacy Directive compliant, localStorage persistence) - Expand Privacy Notice to cover all target markets: EU/GDPR, UK GDPR, Switzerland nFADP, Ukraine, US CCPA/CPRA, Canada PIPEDA/ Law 25, Brazil LGPD/Latin America, and Asia-Pacific & Japan (APPI, Australia Privacy Act, South Korea PIPA, Singapore PDPA, India DPDP) - Add International Data Transfers section (SCCs, IDTAs, adequacy decisions) and Data Minimization & Purpose Limitation section - Update Cookie Policy with precise cookie table, ePrivacy exemption rationale, and localStorage notice dismissal documentation - Create docs/PrivacyCompliance.md: full multi-market compliance guide covering cookie strategy, data transfer mechanisms, data subject rights handling matrix with response timelines, and market-specific notes for all supported regions - Add docs/PrivacyCompliance.md to mkdocs.yml Compliance nav section - Add 10 new targeted tests to test_views_general.py validating all key compliance content areas Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com> --- docs/PrivacyCompliance.md | 186 ++++++++++++++ frontend/templates/base.html | 41 ++++ frontend/templates/cookies.html | 47 +++- frontend/templates/privacy.html | 412 +++++++++++++++++++++++++++----- mkdocs.yml | 1 + tests/test_views_general.py | 62 +++++ 6 files changed, 674 insertions(+), 75 deletions(-) create mode 100644 docs/PrivacyCompliance.md diff --git a/docs/PrivacyCompliance.md b/docs/PrivacyCompliance.md new file mode 100644 index 00000000..1bac31ad --- /dev/null +++ b/docs/PrivacyCompliance.md @@ -0,0 +1,186 @@ +# Privacy & GDPR Compliance Guide + +This document details DocuElevate's privacy and data-protection compliance strategy for all supported markets. +It is intended as an internal reference for developers, legal reviewers, and compliance officers. + +## Supported Markets + +| Market | Primary Law(s) | Status | +|---|---|---| +| European Union (EU) / EEA | GDPR (Regulation 2016/679), ePrivacy Directive | ✅ Implemented | +| Germany | GDPR + BDSG (Federal Data Protection Act) | ✅ Implemented | +| United Kingdom | UK GDPR + Data Protection Act 2018 | ✅ Implemented | +| Switzerland | nFADP (revised Federal Act on Data Protection, in force Sep 2023) | ✅ Implemented | +| Ukraine | Law of Ukraine "On Personal Data Protection" No. 2297-VI | ✅ Implemented | +| United States | CCPA/CPRA (California), VCDPA, CPA, CTDPA, UCPA (other states) | ✅ Implemented | +| Canada | PIPEDA + Québec Law 25 (Bill 64) | ✅ Implemented | +| Latin America | Brazil LGPD, Argentina PDPA, Mexico LFPDPPP, Colombia Ley 1581 | ✅ Implemented | +| Asia-Pacific & Japan | Japan APPI, Australia Privacy Act 1988, South Korea PIPA, Singapore PDPA, India DPDP Act | ✅ Implemented | + +> **Out of scope:** Countries subject to German export control embargoes, China, and Russia are explicitly excluded. + +--- + +## Architecture & Data Minimization + +DocuElevate is designed with privacy-by-design and data-minimization principles as core tenets: + +1. **No advertising or tracking infrastructure.** The application loads no analytics scripts, tracking pixels, + advertising networks, or third-party data-collection tools. CDN-hosted assets (Alpine.js, Tailwind CSS, + Font Awesome) are loaded from `cdn.jsdelivr.net` and `cdnjs.cloudflare.com` for functionality only. + +2. **Essential cookies only.** A single server-side session cookie is set. This cookie is strictly necessary + for authentication and is exempt from prior-consent requirements under GDPR Art. 5(3) ePrivacy Directive + and equivalent national laws. A dismissable cookie notice banner informs users of this on first visit. + +3. **Purpose limitation.** Documents uploaded by users are processed only for the purposes they initiate + (OCR, metadata extraction, cloud storage). Document content is not used for AI model training or secondary + analytics purposes. + +4. **Credential encryption.** All OAuth tokens and cloud storage credentials are stored encrypted at rest. + +5. **Audit logs.** Logs contain action type, timestamp, and user identifier only — no document content. + Default retention: 90 days. + +--- + +## Cookie Strategy + +### Cookie Classification + +| Cookie / Storage | Classification | Legal Basis | Consent Required? | +|---|---|---|---| +| `session` (HTTP Cookie) | Strictly Necessary | Legitimate Interest / Contract Performance | No (ePrivacy Art. 5(3) exemption) | +| `cookieNoticeDismissed` (localStorage) | Strictly Necessary (UX preference) | Legitimate Interest | No | + +### Cookie Notice Banner + +A dismissable banner is displayed on every page on first visit (until dismissed via localStorage). +It informs users that only essential session cookies are used and links to the full Cookie Policy (`/cookies`) +and Privacy Notice (`/privacy`). Dismissal is stored in `localStorage` under the key `cookieNoticeDismissed`. + +**Implementation:** `frontend/templates/base.html` — inline JavaScript in the `` section. + +--- + +## International Data Transfers + +When DocuElevate is configured to use third-party AI services (e.g., OpenAI, Azure Document Intelligence) +or cloud storage providers hosted outside the EEA, data transfers must be governed by appropriate safeguards: + +| Transfer Mechanism | Applicable To | +|---|---| +| **Standard Contractual Clauses (SCCs)** — EU Commission Decision 2021/914/EU | Transfers to US processors (OpenAI, Microsoft Azure, AWS, Google) | +| **UK International Data Transfer Agreements (IDTAs)** | Transfers from UK to non-adequate third countries | +| **Adequacy Decision** | UK ↔ EU (EU Commission decision C(2021) 4800), Switzerland ↔ EU, Japan ↔ EU (partial), Canada (commercial) | +| **Swiss SCCs / nFADP Art. 16** | Transfers from Switzerland to non-adequate third countries | + +> **Action for deployers:** When configuring DocuElevate with US-based AI providers (OpenAI, Azure, AWS), +> ensure you have executed or accepted the provider's Data Processing Agreement (DPA) which incorporates SCCs. +> Links to major provider DPAs: +> - OpenAI: https://openai.com/policies/data-processing-addendum +> - Microsoft Azure: https://aka.ms/DPA +> - Google Cloud: https://cloud.google.com/terms/data-processing-addendum +> - AWS: https://aws.amazon.com/agreement/ + +--- + +## Data Subject Rights — Handling Process + +All rights requests must be submitted to **docuelevate@christian-louis.de**. + +| Right | GDPR | CCPA/CPRA | PIPEDA | LGPD | APPI | +|---|---|---|---|---|---| +| Access / Know | Art. 15 | ✅ | ✅ | Art. 18 | ✅ | +| Rectification / Correction | Art. 16 | ✅ | ✅ | Art. 18 | ✅ | +| Erasure / Deletion | Art. 17 | ✅ | Limited | Art. 18 | ✅ | +| Data Portability | Art. 20 | — | — | Art. 18 | — | +| Object / Opt-out of processing | Art. 21 | ✅ (sale/sharing) | Withdraw consent | — | ✅ | +| Restriction of Processing | Art. 18 | — | — | — | — | +| Complaint to DPA | Art. 77 | CPPA / State AG | OPC (Canada) | ANPD (Brazil) | PPC (Japan) | + +### Response Timelines + +| Jurisdiction | Standard Response Time | Extension | +|---|---|---| +| EU / EEA / UK / Switzerland | 1 calendar month | +2 months for complex requests | +| US (CCPA/CPRA) | 45 days | +45 days when reasonably necessary | +| Canada (PIPEDA) | 30 days | Extensions allowed with notice | +| Brazil (LGPD) | 15 days | — | +| Japan (APPI) | Without delay (reasonable period) | — | +| Australia | 30 days | — | + +--- + +## Market-Specific Notes + +### Germany (GDPR + BDSG) +- BDSG supplements GDPR with stricter rules on employee data, video surveillance, and credit score processing. +- An **Impressum** (legal notice per §5 TMG) is provided at `/imprint`. +- Online Dispute Resolution platform link is included in the Impressum per EU ODR Regulation. + +### United Kingdom (UK GDPR + DPA 2018) +- Post-Brexit: UK GDPR mirrors EU GDPR with UK-specific adaptations via DPA 2018. +- Data transfers from the UK use IDTAs (UK equivalent of SCCs). +- ICO is the supervisory authority. Complaint rights are disclosed in the Privacy Notice. + +### Switzerland (nFADP) +- Swiss revised Federal Act on Data Protection (nFADP) entered into force 1 September 2023. +- Substantially equivalent to GDPR. Swiss residents' rights mirror GDPR rights. +- FDPIC (Federal Data Protection and Information Commissioner) is the supervisory authority. + +### United States (CCPA/CPRA and state laws) +- DocuElevate does **not** sell or share personal information for cross-context behavioural advertising. +- A "Do Not Sell or Share My Personal Information" link is therefore not required, but the Privacy Notice + explicitly confirms this position. +- Sensitive personal information is not used beyond what is strictly necessary to provide the service. +- Privacy Notice includes the required CCPA/CPRA disclosures (categories collected, purposes, rights). + +### Canada (PIPEDA + Québec Law 25) +- PIPEDA applies to commercial activities involving personal information in all Canadian provinces except + those with substantially similar provincial legislation (Québec, Alberta, BC — which have their own). +- Québec Law 25 (Bill 64, in force Sep 2023) adds GDPR-like rights including data portability and + de-indexation. Privacy impact assessments (PIAs) are required for high-risk processing. +- A designated Privacy Officer is available at the contact email. + +### Brazil (LGPD) +- LGPD applies to any processing of personal data of individuals located in Brazil, regardless of where + the controller is established. +- Legal bases used: performance of contract (Art. 7 VI) and legitimate interest (Art. 7 IX). +- ANPD (Autoridade Nacional de Proteção de Dados) is the supervisory authority. + +### Japan (APPI) +- APPI amendments effective April 2022 introduced data portability, the right to opt out of third-party + provision, and stricter requirements for sensitive personal information. +- Third-party disclosures require prior opt-in consent (with limited exceptions). +- The Personal Information Protection Commission (PPC) is the supervisory authority. + +### Australia (Privacy Act 1988 + APPs) +- The Australian Privacy Principles (APPs) govern the handling of personal information. +- The Privacy Act review (2023) recommended GDPR-like reforms; further legislative changes are expected. +- OAIC (Office of the Australian Information Commissioner) is the supervisory authority. + +--- + +## Periodic Review Schedule + +| Activity | Frequency | Owner | +|---|---|---| +| Privacy Notice review | Annually or on material change | Legal / Compliance | +| Cookie audit | Annually | Engineering | +| Data transfer safeguard review (SCCs, IDTAs) | Annually or on legal change | Legal / Compliance | +| Dependency CVE scan (`safety check`) | On every PR | Engineering (CI) | +| Security audit | Annually | Security | +| DPA register review | Annually | Legal / Compliance | + +--- + +## Related Documents + +- [`frontend/templates/privacy.html`](../frontend/templates/privacy.html) — User-facing Privacy Notice +- [`frontend/templates/cookies.html`](../frontend/templates/cookies.html) — User-facing Cookie Policy +- [`frontend/templates/terms.html`](../frontend/templates/terms.html) — Terms of Service +- [`frontend/templates/imprint.html`](../frontend/templates/imprint.html) — Impressum / Legal Notice +- [`frontend/templates/base.html`](../frontend/templates/base.html) — Cookie notice banner implementation +- [`SECURITY_AUDIT.md`](../SECURITY_AUDIT.md) — Security audit findings and mitigations +- [`docs/AuthenticationSetup.md`](AuthenticationSetup.md) — OAuth and authentication configuration diff --git a/frontend/templates/base.html b/frontend/templates/base.html index a3625dcd..d39e6e44 100644 --- a/frontend/templates/base.html +++ b/frontend/templates/base.html @@ -217,6 +217,47 @@ + + +
+

+ DocuElevate uses only essential session cookies required for authentication and service operation. + No tracking or analytics cookies are used. + Cookie Policy · + Privacy Notice +

+ +
+ + diff --git a/frontend/templates/cookies.html b/frontend/templates/cookies.html index 7cca33ce..a177baee 100644 --- a/frontend/templates/cookies.html +++ b/frontend/templates/cookies.html @@ -16,21 +16,47 @@

How We Use Cookies

- DocuElevate only uses essential session cookies for the following purpose: + DocuElevate uses only strictly necessary session cookies for the following purpose:

These cookies are mandatory for the proper functioning of our service. Without these cookies, you would be required to log in repeatedly during your browsing session.

+

+ Because these cookies are strictly necessary for the service to function, they are exempt from prior-consent requirements under the EU ePrivacy Directive (Art. 5(3)) and equivalent national implementations. We do not set any optional, analytics, advertising, or tracking cookies. +

-

Duration of Cookies

-

- The session cookies we use are temporary and are deleted when you close your browser. -

+

Cookie Details

+
+ + + + + + + + + + + + + + + + + + + + + + + +
NameTypePurposeDuration
sessionStrictly NecessaryMaintains your authenticated session; required for login to function.Session (deleted on browser close or logout)
cookieNoticeDismissedStrictly NecessaryStores your acknowledgement of the cookie notice so it is not shown repeatedly (stored in localStorage, not a cookie).Persistent (browser localStorage)
+
@@ -39,17 +65,20 @@ DocuElevate does not use any third-party cookies, tracking cookies, advertising cookies, or analytics cookies. We respect your privacy and only implement the minimum cookies required for our service to function.

- For more information about how we handle your data, please see our Privacy Policy. + For more information about how we handle your data, please see our Privacy Notice.

Managing Cookies

- While most web browsers allow you to control cookies through their settings, please note that blocking or deleting our session cookies will prevent DocuElevate from functioning properly, as user authentication relies on these cookies. + Most web browsers allow you to control cookies through their settings. However, blocking or deleting our session cookies will prevent DocuElevate from functioning, as user authentication relies on these cookies. +

+

+ You may also clear the cookie notice acknowledgement stored in your browser's localStorage at any time via your browser's developer tools (Application → Local Storage).

- By using DocuElevate, you consent to our use of cookies as described in this policy. This Cookie Policy is part of and incorporated into our Terms of Service. + This Cookie Policy is part of and incorporated into our Terms of Service and Privacy Notice.

diff --git a/frontend/templates/privacy.html b/frontend/templates/privacy.html index b6ccf855..de0d5130 100644 --- a/frontend/templates/privacy.html +++ b/frontend/templates/privacy.html @@ -6,103 +6,383 @@

DocuElevate – Privacy Notice

Last Updated: {{ build_date|default(current_date|default('April 7, 2024')) }}

-
-

Data Controller

+ +
+

Contents

+
    +
  1. Data Controller
  2. +
  3. Scope of this Privacy Notice
  4. +
  5. Data Collection & Purposes
  6. +
  7. Data Minimization & Purpose Limitation
  8. +
  9. Use of Cookies & Similar Technologies
  10. +
  11. Third-Party Services
  12. +
  13. International Data Transfers
  14. +
  15. Data Retention
  16. +
  17. Data Security
  18. +
  19. Your Rights (EU / EEA / UK / Switzerland)
  20. +
  21. Additional Rights – United States (CCPA/CPRA)
  22. +
  23. Additional Rights – Canada (PIPEDA / Law 25)
  24. +
  25. Additional Rights – Latin America (LGPD & others)
  26. +
  27. Additional Rights – Asia-Pacific & Japan
  28. +
  29. Additional Rights – Ukraine
  30. +
  31. Updates to this Privacy Notice
  32. +
+
+ +
+

1. Data Controller

- The controller responsible for processing your personal data under the EU General Data Protection Regulation (GDPR) is DocuElevate. + The controller responsible for processing your personal data under the EU General Data Protection Regulation (GDPR) and equivalent privacy laws worldwide is: +

+

+ Christian Louis IT Beratung
+ Alter Steinweg 3, 20459 Hamburg, Germany

Contact Email: docuelevate@christian-louis.de

-
- -
-

Scope of this Privacy Notice

- This notice applies to the DocuElevate web application, hosted at {{ request.url.scheme }}://{{ request.url.netloc }}/. + For all privacy-related requests (access, deletion, rectification, opt-out, or complaints), please contact us at the email address above. + We will respond within 30 days (or the period prescribed by applicable law).

-
-

Data Collection & Purposes

+
+

2. Scope of this Privacy Notice

- User Authentication: We use Google, Dropbox, and Microsoft OAuth for sign-in. Through these services, we may receive information such as your name, email address, and profile picture. + This notice applies to the DocuElevate web application, hosted at + {{ request.url.scheme }}://{{ request.url.netloc }}/. +

+

+ It covers all users globally, including those in the European Union (EU), European Economic Area (EEA), + Germany, United Kingdom (UK), Switzerland, Ukraine, United States (US), Canada, Latin America (Latam), + Asia-Pacific, and Japan. Market-specific disclosures are provided in dedicated sections below. +

+
+ +
+

3. Data Collection & Purposes

+

+ User Authentication: We use OAuth 2.0 (Google, Dropbox, Microsoft/OneDrive) and optional + local authentication. Through OAuth, we may receive your name, email address, and profile picture.

- Purpose: We use this information to authenticate you, personalize your experience, and provide the core functionality of DocuElevate. + Document Processing: Documents you upload are processed for OCR (optical character recognition), + metadata extraction, and storage to your chosen cloud provider. Document content is processed only for the + purpose you initiate and is not stored beyond what is operationally necessary. +

+

+ Audit Logs: We maintain limited audit logs (action type, timestamp, user identifier) to + ensure service integrity and security. These logs do not include document content.

Legal Basis (GDPR Art. 6): Our primary legal bases for processing are:

    -
  • (1)(b) Performance of a contract: to provide the DocuElevate service.
  • +
  • (1)(b) Performance of a contract: to provide the DocuElevate service you have requested.
  • +
  • (1)(c) Legal obligation: to comply with applicable laws and regulations.
  • (1)(f) Legitimate interests: ensuring the security of the service and preventing fraud.
-
-

Use of Cookies & Similar Technologies

+
+

4. Data Minimization & Purpose Limitation

- We may use cookies or similar technologies to maintain your session, remember your preferences, and enhance your user experience. + DocuElevate is designed with data minimization as a core principle (GDPR Art. 5(1)(c)):

-

- For more information about our use of cookies, please visit our Cookie Policy. -

-
- -
-

Third-Party Services

-

- OAuth Providers: Google, Dropbox, and Microsoft. These providers may process your personal data according to their own privacy policies. -

-

- No Additional Sharing: We do not share, sell, or otherwise disclose your personal data to third parties for advertising or marketing purposes. -

-

- Cloud Storage Integration: We integrate with Google Drive, Dropbox, OneDrive and other storage providers to enable you to save and access your documents across services. -

-
- -
-

Data Retention

-

- We retain your personal data only as long as necessary to provide the DocuElevate service or to comply with legal obligations. -

-

- If you wish to have your data deleted or your account removed, please contact us at docuelevate@christian-louis.de. -

-
- -
-

Data Security

-

- We implement appropriate technical and organizational measures to protect your personal data against unauthorized access, alteration, disclosure, or destruction. -

-
- -
-

Your Rights under GDPR

-
    -
  • Access & Rectification: You can request to see the data we hold about you and ask for corrections if necessary.
  • -
  • Erasure (Right to be Forgotten): You can request deletion of your data where there is no legitimate reason for us to continue processing it.
  • -
  • Restriction of Processing: In certain circumstances, you can request a temporary block on processing your personal data.
  • -
  • Data Portability: You can request a copy of your data in a commonly used, machine-readable format.
  • -
  • Objection: You have the right to object to data processing, especially where processing is based on legitimate interests.
  • -
  • Withdrawal of Consent: If processing is based on your consent, you have the right to withdraw that consent at any time.
  • -
  • Complaint: If you believe your rights have been violated, you have the right to lodge a complaint with a supervisory authority in the EU Member State of your residence or workplace.
  • +
      +
    • We collect only the minimum personal data required to operate the service.
    • +
    • Document content is processed strictly for the purpose you initiate (OCR, storage, metadata extraction). + We do not use your documents to train AI models or for any secondary purpose.
    • +
    • No advertising, behavioural tracking, or profiling is performed.
    • +
    • No tracking cookies or analytics scripts are loaded.
    • +
    • Third-party AI services (e.g., OpenAI, Azure Document Intelligence) are invoked only when you initiate + document processing, and data is transmitted under data processing agreements.
-
-

Updates to this Privacy Notice

+
+

5. Use of Cookies & Similar Technologies

- We may update this notice from time to time to reflect changes in our practices or applicable laws. Any changes will be posted at {{ request.url.scheme }}://{{ request.url.netloc }}/, and where appropriate, we will notify you via email or other channels. + DocuElevate uses only strictly necessary session cookies to maintain your authenticated + session. These cookies are essential for the service to function and are exempt from prior-consent + requirements under the EU ePrivacy Directive (Art. 5(3)) and equivalent national laws.

- If you have any questions or concerns about this Privacy Notice or your personal data, please contact us at docuelevate@christian-louis.de. + We do not use: analytics cookies, advertising cookies, tracking pixels, or any + third-party cookies that would require your consent.

- Please also review our Terms of Service and License Information. + For full details on the cookies we set, their names, duration, and purpose, please visit our + Cookie Policy. +

+
+ +
+

6. Third-Party Services

+

+ OAuth Providers (Google, Dropbox, Microsoft): When you choose to authenticate via + OAuth, the respective provider processes your credentials and may share limited profile information + with us. These providers maintain their own privacy policies. +

+

+ Cloud Storage Providers (Google Drive, Dropbox, OneDrive, Amazon S3, Nextcloud, WebDAV/SFTP/FTP): + Documents are stored in the cloud provider you configure. Your configured credentials are stored + encrypted in the application database and are used solely to perform the storage operations you request. +

+

+ AI Processing Services (OpenAI, Azure Document Intelligence, others): When you initiate + OCR or AI-based metadata extraction, document data is transmitted to the AI service you or your + administrator has configured. This transmission is governed by a data processing agreement with the + respective provider. +

+

+ No Sale or Sharing for Advertising: We do not sell, rent, or share your personal data + with third parties for advertising, marketing, or any purpose unrelated to providing the service. +

+
+ +
+

7. International Data Transfers

+

+ DocuElevate is hosted in the European Union / EEA by default. Where personal data is transferred + outside the EEA (for example to US-based AI service providers such as OpenAI), we rely on + appropriate safeguards including: +

+
    +
  • + Standard Contractual Clauses (SCCs) adopted by the European Commission (2021/914/EU) + for transfers to processors and controllers in third countries. +
  • +
  • + Adequacy Decisions where the European Commission has recognised an equivalent level + of protection (e.g., United Kingdom, Switzerland, Canada (commercial organisations), Japan, South Korea). +
  • +
  • + UK International Data Transfer Agreements (IDTAs) for transfers from the UK after Brexit. +
  • +
+

+ You may request a copy of the relevant safeguards by contacting us at + docuelevate@christian-louis.de. +

+
+ +
+

8. Data Retention

+

+ We retain personal data only as long as strictly necessary to provide the DocuElevate service or to + comply with legal obligations: +

+
    +
  • Session data: Deleted when you log out or after session timeout.
  • +
  • File records and metadata: Retained for the duration of your use of the + service. You may delete individual files at any time through the application.
  • +
  • Audit logs: Retained for up to 90 days for security and compliance purposes.
  • +
  • OAuth tokens: Stored in encrypted form and revocable at any time via your OAuth provider.
  • +
+

+ To request deletion of your account and all associated personal data, please contact us at + docuelevate@christian-louis.de. +

+
+ +
+

9. Data Security

+

+ We implement appropriate technical and organisational measures (TOMs) to protect your personal data, + including: +

+
    +
  • Encryption of credentials and sensitive configuration at rest.
  • +
  • Transport Layer Security (TLS/HTTPS) for all communications.
  • +
  • Role-based access controls limiting access to personal data.
  • +
  • Regular security audits and dependency vulnerability scanning.
  • +
  • CSRF protection on all state-changing requests.
  • +
+
+ +
+

10. Your Rights (EU / EEA / UK / Switzerland)

+

+ Under GDPR (and the UK GDPR / Swiss nFADP equivalent), you have the following rights: +

+
    +
  • Right of Access (Art. 15): You may request a copy of the personal data + we hold about you.
  • +
  • Right to Rectification (Art. 16): You may request correction of inaccurate + or incomplete personal data.
  • +
  • Right to Erasure (Art. 17): You may request deletion of your personal data + where there is no overriding legitimate reason for us to retain it.
  • +
  • Right to Restriction (Art. 18): You may request that we temporarily halt + processing of your data in certain circumstances.
  • +
  • Right to Data Portability (Art. 20): You may request your data in a + structured, commonly used, machine-readable format.
  • +
  • Right to Object (Art. 21): You may object to processing based on + legitimate interests at any time.
  • +
  • Right to Withdraw Consent: Where processing is based on consent, you + may withdraw that consent at any time without affecting the lawfulness of prior processing.
  • +
  • Right to Lodge a Complaint: You have the right to lodge a complaint with your + national Data Protection Authority (DPA). In Germany: Bundesbeauftragte für den Datenschutz und + die Informationsfreiheit (BfDI). In the UK: Information Commissioner's Office (ICO). In Switzerland: + Federal Data Protection and Information Commissioner (FDPIC).
  • +
+

+ To exercise any of the above rights, contact us at + docuelevate@christian-louis.de. + We will respond within one calendar month (extendable by two further months for complex requests). +

+
+ +
+

11. Additional Rights – United States (CCPA / CPRA)

+

+ If you are a resident of California or another US state with applicable privacy legislation + (including Virginia VCDPA, Colorado CPA, Connecticut CTDPA, Utah UCPA), the following additional + disclosures apply: +

+
    +
  • Categories of personal information collected: Identifiers (name, email), + account authentication tokens, and document metadata that you choose to upload.
  • +
  • Purpose of collection: Providing, improving, and securing the + DocuElevate service. We do not sell or share personal information for cross-context behavioural + advertising.
  • +
  • Right to Know: You may request disclosure of the categories and + specific pieces of personal information we have collected about you.
  • +
  • Right to Delete: You may request deletion of personal information we + have collected, subject to certain exceptions.
  • +
  • Right to Correct: You may request correction of inaccurate personal + information.
  • +
  • Right to Opt Out of Sale / Sharing: We do not sell or share personal + information as defined by CCPA/CPRA. No opt-out mechanism is required; however, you may contact + us to confirm this.
  • +
  • Right to Limit Use of Sensitive Personal Information: We do not use + sensitive personal information beyond what is necessary to provide the service.
  • +
  • Non-Discrimination: We will not discriminate against you for exercising any of + these rights.
  • +
+

+ To submit a verifiable consumer request, contact us at + docuelevate@christian-louis.de. + We will respond within 45 days (extendable by an additional 45 days when reasonably necessary). +

+
+ +
+

12. Additional Rights – Canada (PIPEDA / Québec Law 25)

+

+ If you are located in Canada, the following applies under the Personal Information Protection and + Electronic Documents Act (PIPEDA) and applicable provincial legislation (including Québec Law 25 / + Bill 64): +

+
    +
  • We collect, use, and disclose personal information only with your knowledge and + consent, or as permitted by law.
  • +
  • Right of Access: You may request access to your personal information + and information about how it has been used or disclosed.
  • +
  • Right to Correction: You may challenge the accuracy or completeness + of your personal information and request correction.
  • +
  • Right to Withdraw Consent: Subject to legal or contractual + restrictions, you may withdraw consent to the collection, use, or disclosure of your personal + information on reasonable notice.
  • +
  • Québec residents: Under Law 25, you have additional rights including + the right to data portability (effective September 2023) and the right to de-indexation where + personal information is disseminated online.
  • +
+

+ Direct privacy complaints to our Privacy Officer at + docuelevate@christian-louis.de, + or to the Office of the Privacy Commissioner of Canada. +

+
+ +
+

13. Additional Rights – Latin America (LGPD & Others)

+

+ Brazil (LGPD – Lei Geral de Proteção de Dados, Law 13.709/2018): + If you are located in Brazil, you have the following rights under the LGPD: +

+
    +
  • Confirmation of the existence of processing and access to your data.
  • +
  • Correction of incomplete, inaccurate, or outdated data.
  • +
  • Anonymisation, blocking, or deletion of unnecessary or excessive data.
  • +
  • Portability of your data to another service or product provider.
  • +
  • Deletion of personal data processed with your consent.
  • +
  • Information about entities with which your data has been shared.
  • +
  • Information about the possibility of not consenting and the consequences of refusal.
  • +
  • Revocation of consent.
  • +
+

+ Other Latin American Countries: We also recognise applicable privacy laws in Argentina + (PDPA), Mexico (LFPDPPP), Chile, Colombia (Ley 1581), and others. Users in these jurisdictions may + exercise equivalent rights as outlined under their national law by contacting us. +

+

+ Contact: + docuelevate@christian-louis.de +

+
+ +
+

14. Additional Rights – Asia-Pacific & Japan

+

+ Japan (APPI – Act on the Protection of Personal Information): + Japanese residents may request disclosure, correction, addition or deletion, suspension of use, + erasure, or suspension of third-party provision of their personal information held by us. + Third-party disclosures require your prior consent except where permitted by law. +

+

+ Australia (Privacy Act 1988 and Australian Privacy Principles): + Australian residents may request access to and correction of their personal information. + We will respond to access requests within 30 days. Complaints may be lodged with the + Office of the Australian Information Commissioner (OAIC). +

+

+ South Korea (PIPA – Personal Information Protection Act): + Korean residents may request access, correction, deletion, and suspension of processing. + We handle personal information of Korean residents in accordance with the PIPA. +

+

+ Other APJ markets (Singapore PDPA, New Zealand Privacy Act, India DPDP Act): + We recognise the data protection rights afforded to residents of these jurisdictions under their + respective national laws. Contact us to exercise your rights. +

+

+ Contact: + docuelevate@christian-louis.de +

+
+ +
+

15. Additional Rights – Ukraine

+

+ Users located in Ukraine are protected under the Law of Ukraine "On Personal Data Protection" + (No. 2297-VI). Your rights include access to, correction, blocking, and deletion of your personal + data, as well as the right to object to processing. +

+

+ Contact: + docuelevate@christian-louis.de +

+
+ +
+

16. Updates to this Privacy Notice

+

+ We may update this notice from time to time to reflect changes in our practices or applicable laws. + The "Last Updated" date at the top of this page indicates when the notice was last revised. + Where changes are material, we will notify users via in-application notification or email where + appropriate. +

+

+ If you have any questions or concerns about this Privacy Notice or your personal data, please + contact us at + docuelevate@christian-louis.de. +

+

+ Please also review our Terms of Service, + Cookie Policy, and + License Information.

diff --git a/mkdocs.yml b/mkdocs.yml index e1f5d283..f72c8919 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -40,3 +40,4 @@ nav: - Configuration: ConfigurationTroubleshooting - Compliance: - Licensing: LicensingCompliance + - Privacy & GDPR: PrivacyCompliance diff --git a/tests/test_views_general.py b/tests/test_views_general.py index 028d10ab..885cb62c 100644 --- a/tests/test_views_general.py +++ b/tests/test_views_general.py @@ -23,6 +23,42 @@ class TestGeneralViews: response = client.get("/privacy") assert response.status_code == 200 + def test_privacy_page_contains_gdpr_rights(self, client): + """Test the privacy page includes GDPR rights section.""" + response = client.get("/privacy") + assert response.status_code == 200 + assert b"gdpr-rights" in response.content or b"GDPR" in response.content or b"gdpr" in response.content.lower() + + def test_privacy_page_contains_ccpa_section(self, client): + """Test the privacy page includes US/CCPA section.""" + response = client.get("/privacy") + assert response.status_code == 200 + assert b"CCPA" in response.content or b"California" in response.content + + def test_privacy_page_contains_canada_section(self, client): + """Test the privacy page includes Canada/PIPEDA section.""" + response = client.get("/privacy") + assert response.status_code == 200 + assert b"PIPEDA" in response.content or b"Canada" in response.content + + def test_privacy_page_contains_latam_section(self, client): + """Test the privacy page includes Latin America/LGPD section.""" + response = client.get("/privacy") + assert response.status_code == 200 + assert b"LGPD" in response.content or b"Latin America" in response.content + + def test_privacy_page_contains_apj_section(self, client): + """Test the privacy page includes Asia-Pacific & Japan section.""" + response = client.get("/privacy") + assert response.status_code == 200 + assert b"Japan" in response.content or b"Asia-Pacific" in response.content + + def test_privacy_page_contains_international_transfers_section(self, client): + """Test the privacy page includes international data transfers section.""" + response = client.get("/privacy") + assert response.status_code == 200 + assert b"International Data Transfer" in response.content or b"international-transfers" in response.content + def test_imprint_page(self, client): """Test the imprint page.""" response = client.get("/imprint") @@ -38,6 +74,32 @@ class TestGeneralViews: response = client.get("/cookies") assert response.status_code == 200 + def test_cookies_page_essential_only(self, client): + """Test the cookies page states only essential cookies are used.""" + response = client.get("/cookies") + assert response.status_code == 200 + content = response.content + assert b"strictly necessary" in content.lower() or b"essential" in content.lower() + + def test_cookies_page_no_tracking_claim(self, client): + """Test the cookies page claims no third-party/tracking cookies are used.""" + response = client.get("/cookies") + assert response.status_code == 200 + assert b"No Third-Party" in response.content or b"no third-party" in response.content.lower() + + def test_base_template_cookie_notice(self, client): + """Test that the cookie notice banner is present in the base template.""" + response = client.get("/about") + assert response.status_code == 200 + assert b"cookieNotice" in response.content + + def test_base_template_cookie_notice_links_to_policies(self, client): + """Test that the cookie notice banner links to cookie and privacy pages.""" + response = client.get("/about") + assert response.status_code == 200 + assert b"/cookies" in response.content + assert b"/privacy" in response.content + def test_terms_page(self, client): """Test the terms page.""" response = client.get("/terms")