Depublikations-Preis festgelegt: 35 Euro netto (O6, User 06.07.)
Default 3500 Cent in config/billing.php (per Env ueberschreibbar, 0 deaktiviert) — Checkout und /melden-Preisanzeige (Doppelausweis 35,00 netto / 41,65 brutto) sind damit ohne weiteren Env-Handgriff aktiv. O6 aus der Entscheidungsliste geschlossen. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
361560f258
commit
9a9e31360e
4 changed files with 23 additions and 10 deletions
|
|
@ -190,8 +190,8 @@ CONTACT_EMAIL_BUSINESSPORTAL=
|
|||
|
||||
# Depublikation (T12): Netto-Preis in Cent fuer die freiwillige Entfernung
|
||||
# einer veroeffentlichten PM aus der oeffentlichen Ansicht (Tombstone bleibt).
|
||||
# Ohne Wert ist der Depublikations-Checkout deaktiviert. [EXTERN: Preis O6]
|
||||
BILLING_DEPUBLICATION_PRICE_CENTS=
|
||||
# Default 3500 (35 EUR netto, Entscheidung O6 vom 06.07.2026); 0 deaktiviert.
|
||||
BILLING_DEPUBLICATION_PRICE_CENTS=3500
|
||||
|
||||
# Selbst gehostete Umami-Webanalyse (sys.adametz.media; IDs je Brand in
|
||||
# config/domains.php). Erst beim Go-Live der Webseiten auf true setzen —
|
||||
|
|
|
|||
|
|
@ -61,14 +61,14 @@ return [
|
|||
|
|
||||
| Netto-Preis der freiwilligen Entfernung einer rechtmäßigen, bereits
|
||||
| veröffentlichten PM aus der öffentlichen Ansicht (Tombstone bleibt).
|
||||
| Ohne Wert ist der Depublikations-Checkout deaktiviert und /melden
|
||||
| zeigt weiterhin die neutrale Preisformulierung.
|
||||
| [EXTERN: Preis festlegen (O6); Anzeige als Doppelausweis netto/brutto]
|
||||
| 35 € netto laut User-Entscheidung 06.07.2026 (O6); Anzeige überall
|
||||
| als Doppelausweis netto/brutto. Auf 0/leer setzen deaktiviert den
|
||||
| Checkout und /melden zeigt die neutrale Preisformulierung.
|
||||
| Ad-hoc-Charge wie Credit-Topups — keine Stripe-Price-ID nötig.
|
||||
|
|
||||
*/
|
||||
|
||||
'depublication_price_cents' => env('BILLING_DEPUBLICATION_PRICE_CENTS'),
|
||||
'depublication_price_cents' => env('BILLING_DEPUBLICATION_PRICE_CENTS', 3500),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -18,10 +18,10 @@ R2.2+R2.3 erledigt: Hub-Landing komplett ueberarbeitet (datengetriebenes Tarif-G
|
|||
**03.07. spaet — Rechtstexte komplett + T1neu + Mail-CI (TAGESABSCHLUSS, Suite: 935 gruen):** Datenschutzerklaerung v0.3 host-aware eingebaut (Hub-/Spoke-Bausteine, Magic-Link 15 Min., Stripe Payments Europe); Cookie-Seite zurueckgebaut (301 -> /datenschutz, Cookies stehen in Abschnitt 4, kein Banner). T1neu umgesetzt: Unternehmer-Pflicht-Checkbox im Buchungs-Modal, protokolliert in `booking_confirmations` (Timestamp/IP/AGB-Version aus `config/legal.php`), CheckoutController erzwingt zeitnahe Bestaetigung serverseitig. System-Mails auf zentrales pressekonto-CI-Layout umgestellt (components/emails/layout, inkl. Framework-Auth-Mails via toMailUsing, EmailBrandingTest).
|
||||
**06.07. — Zentrale Rechts-E-Mail (User-Entscheidung):** `info@pressekonto.com` ist die Haupt-E-Mail fuer alle rechtlichen Anliegen; zentral in `config/legal.php` (`LEGAL_CONTACT_EMAIL`), alle fuenf Rechtsseiten (Impressum, AGB, Datenschutz, /melden, /richtlinien) nutzen sie domainuebergreifend. Support-/Redaktionskontakt bleibt je Brand (CONTACT_EMAIL_*), REPORT_EMAIL_* ist nur noch optionales separates DSA-Postfach. Live-Domain bestaetigt .com (Deployment-Checkliste), nicht .de.
|
||||
**06.07. — Umami eingebaut + Klaerungsliste KOMPLETT beantwortet:** Umami-Snippets (dev/release/umami.md, sys.adametz.media) je Brand in `config/domains.php` (`brand.umami_website_id`), gerendert via `x-web.umami` im web-master-Layout — per `UMAMI_ENABLED=false` deaktiviert bis zum Go-Live (User-Vorgabe; Checklisten-Punkt in WS-7 ergaenzt). User bestaetigt: Server-Fristen (Logs 14 Tage, Backups 4 Wochen) stimmen, Stripe-Entitaet (Stripe Payments Europe, Dublin) passt. **Inhaltliche Freigaben erteilt:** AGB par. 1 (3) Portalliste via Hub-#familie ok · AGB par. 11 (3) Kuendigungsseiten-Ergaenzung ok · Depublikations-Preis neutral ohne Betrag ok (bis T12) · Medienprivileg-Zitierung bleibt vorsichtig (par. 57 Abs. 1 MStV) bis anwaltliche Praezisierung · /melden-Aenderungsweg ueber Magic-Links fuer Launch ok. Damit sind die Rechtstexte inhaltlich final; offen nur noch [EXTERN] (anwaltliche Freigabe, Postfach info@pressekonto.com).
|
||||
**06.07. — R3.1-Restbacklog KOMPLETT umgesetzt (Suite: 956 gruen):** (a) E3-Versionierung: `legal_documents`-Tabelle (type/version/effective_from, Fassungen unloeschbar, zukuenftige erst ab Stichtag; `LegalDocument::current()`, Seeder mit den 5 aktuellen Fassungen) + `legal_document_id` an `booking_confirmations` (T1neu referenziert jetzt die konkrete AGB-Fassung; config/legal.php nur noch Fallback). (b) `rejection_categories`-DB: /richtlinien rendert aktive Kategorien live (Seeder K1–K6; deaktivieren statt loeschen). (c) T13: Melde-Zeile sichtbar unter jedem Artikel. (d) T10: Formulare /melden/rechtswidrig (DSA Art. 16 inkl. Wahrheitsversicherung) + /melden/kontaktdaten (DSGVO) mit URL-Feld und automatischem PM-Match; Vorgangsnummer M-{id}; unverzuegliche Eingangsbestaetigung + internes Postfach-Mail (auch im Per-PM-Flow); Admin-Queue zeigt Vorgangsnummer/URL/Name. (e) T12: Depublikations-Checkout (Panel auf der Kunden-PM-Seite mit T1neu-Checkbox + Doppelausweis, Stripe-Ad-hoc-Charge, Webhook depubliziert → Status archived + `depublished_at`, oeffentliche URL zeigt Tombstone mit 410) — **config-gated: ohne `BILLING_DEPUBLICATION_PRICE_CENTS` deaktiviert [EXTERN: Preis festlegen, O6]**. Go-Live: beide Seeder in WS-7-Checkliste.
|
||||
**06.07. — R3.1-Restbacklog KOMPLETT umgesetzt (Suite: 956 gruen):** (a) E3-Versionierung: `legal_documents`-Tabelle (type/version/effective_from, Fassungen unloeschbar, zukuenftige erst ab Stichtag; `LegalDocument::current()`, Seeder mit den 5 aktuellen Fassungen) + `legal_document_id` an `booking_confirmations` (T1neu referenziert jetzt die konkrete AGB-Fassung; config/legal.php nur noch Fallback). (b) `rejection_categories`-DB: /richtlinien rendert aktive Kategorien live (Seeder K1–K6; deaktivieren statt loeschen). (c) T13: Melde-Zeile sichtbar unter jedem Artikel. (d) T10: Formulare /melden/rechtswidrig (DSA Art. 16 inkl. Wahrheitsversicherung) + /melden/kontaktdaten (DSGVO) mit URL-Feld und automatischem PM-Match; Vorgangsnummer M-{id}; unverzuegliche Eingangsbestaetigung + internes Postfach-Mail (auch im Per-PM-Flow); Admin-Queue zeigt Vorgangsnummer/URL/Name. (e) T12: Depublikations-Checkout (Panel auf der Kunden-PM-Seite mit T1neu-Checkbox + Doppelausweis, Stripe-Ad-hoc-Charge, Webhook depubliziert → Status archived + `depublished_at`, oeffentliche URL zeigt Tombstone mit 410). **Preis entschieden (O6, User 06.07.): 35 EUR netto** — Default 3500 in config/billing.php, per BILLING_DEPUBLICATION_PRICE_CENTS ueberschreibbar (0 deaktiviert). Go-Live: beide Seeder in WS-7-Checkliste.
|
||||
**Wiedereinstieg / naechste Schritte:**
|
||||
1. ~~Klaerungsliste Rechtstexte~~ **erledigt 06.07.**; ~~R3.1-Restbacklog~~ **erledigt 06.07.** (siehe oben).
|
||||
2. **[EXTERN]:** Postfach `info@pressekonto.com` anlegen (Haupt-Rechts-Mail, 06.07.); Depublikations-Preis festlegen (BILLING_DEPUBLICATION_PRICE_CENTS, O6); CONTACT_EMAIL_*-Support-Postfaecher je Brand; REPORT_EMAIL_* optional · R1.2 Stripe-Live · R1.4 Preisfreigabe · R5.4 Favicons · anwaltliche Freigabe AGB v0.6/Datenschutz v0.3.
|
||||
2. **[EXTERN]:** Postfach `info@pressekonto.com` anlegen (Haupt-Rechts-Mail, 06.07.); CONTACT_EMAIL_*-Support-Postfaecher je Brand; REPORT_EMAIL_* optional · R1.2 Stripe-Live · R1.4 Preisfreigabe · R5.4 Favicons · anwaltliche Freigabe AGB v0.6/Datenschutz v0.3. (~~Depublikations-Preis~~ entschieden: 35 EUR netto.)
|
||||
3. **Phase-2-Rest (bewusst nach Launch):** T11-Ausbau DSA-Queue (Basis existiert) · englische Rechtstexte (O-C, nach Sprachvarianten-Entscheidung) · oeffentliche Versionshistorie der Rechtstexte (O-D) · Ablehnungs-Mails mit Kategorie-Link (rejection_categories im Reject-Flow verdrahten).
|
||||
4. **Dann:** R6.1 manuelle QA-Checkliste, R6.3 Staging-Rehearsal, R6.4 Go-Live-Kette, R6.5 Git-Hygiene (Branch fix/zeitzone-europe-berlin liegt ~130 Commits vor main — mergen, sobald freigegeben). Offen bleibt ausserdem die User-Entscheidung zu den Legacy-SQL-Dumps in `dev/migration 2026/sql/` (enttracken vor Repo-Sharing).
|
||||
|
||||
|
|
@ -91,7 +91,7 @@ R2.2+R2.3 erledigt: Hub-Landing komplett ueberarbeitet (datengetriebenes Tarif-G
|
|||
- [x] **R3.0 Online-Widerruf (gesetzlicher Widerrufsbutton)** — Umgesetzt 03.07., **danach per Entscheidung E2 (B2B-only, `docs/legal/Entscheidung.md` v2.0) zurückgebaut:** Das Angebot richtet sich ausschließlich an Unternehmer (§ 14 BGB), ein Widerrufsrecht besteht nicht — Button + Modal aus Hub-Footer/Static-Shell entfernt, Widerrufsbelehrung archiviert. Backend (`POST /widerruf`, `withdrawal_requests`, Mails, Admin-Queue) bleibt schlafend erhalten und ist bei B2C-Öffnung reaktivierbar.
|
||||
- [x] **R3.0b Kündigungsbutton** — Erledigt 03.07.: „Verträge hier kündigen"-Button (Hub-Footer + jetzt auch Spoke-Footer) → öffentliche Bestätigungsseite `/de/kuendigung` ohne Login → persistiert `termination_requests` + sofortige Zugangsbestätigung per Mail + Betreiber-Mail; Admin-Queue mit K-Vorgängen. **Einordnung nach E2:** § 312k ist im B2B keine Pflicht — der Selfservice bleibt bewusst als Anti-Zombie-Standard (T3neu).
|
||||
- [x] **R3.0c Erlöschens-Checkbox → Archiv-Hinweis (T2neu)** — Die § 356-Erlöschens-Bestätigung entfiel mit E2 (B2B-only); an ihrer Stelle verlangt das Einreichungs-Modal jetzt die von AGB § 13 Abs. 1 geforderte Bestätigung der dauerhaften Archivierung (Depublikation nur als kostenpflichtiger Service, gesetzliche Ansprüche unberührt). Zeitpunkt wird weiter als `withdrawal_waiver_consented_at` protokolliert (Spaltenname historisch — Umbenennung optional). Index-Schnell-Submit (wire:confirm) bleibt durch das gemeinsame Modal ersetzt.
|
||||
- [x] **R3.1 Rechtstexte final** (Code komplett; Rest nur [EXTERN]) — **Inhalte eingebaut 03.07. (Quelle: `docs/legal/*`, untracked):** Impressum (echte Anbieterdaten adametz.media/Bielefeld, DDG, MStV, DSA-Kontaktpunkt via neuer `REPORT_EMAIL_*`-Keys), AGB v0.6 (B2B-Fassung, §§ 1–16, interne Anwalts-Anmerkungen entfernt, Version zentral in `config/legal.php`), **Datenschutzerklärung v0.3** (host-aware Bausteine: Hub Kundenkonto/Login/Stripe, Spokes Medienprivileg/Newsroom/Änderungslinks; Magic-Link-TTL 15 Min. aus dem Code, Logs 14 Tage, Stripe Payments Europe), neue Seiten `/richtlinien` (Rahmentext + K1–K6 statisch) und `/melden` (DSA/DSGVO/Änderung/Depublikation, verdrahtet mit den bestehenden Melde-Links je PM); **Cookie-Seite zurückgebaut** (User-Entscheidung: Cookies in Datenschutz Abschnitt 4, kein Banner; 301 auf /datenschutz). **T1neu erledigt:** Unternehmer-Pflicht-Checkbox im Buchungs-Modal, protokolliert in `booking_confirmations` (Timestamp, IP, AGB-Version); CheckoutController verlangt serverseitig eine zeitnahe Bestätigung (30 Min.) für Abo/Einzel-PM/Topup. Footer + Sitemap ergänzt; Preise-Seite nach Leistungsbeschreibung v0.2 (B2B-Satz, T9-Credit-Anker, Slots/Credits/Boost/Partner-Blöcke, T16-Wording inkl. PlanSeeder). **Restbacklog erledigt 06.07.** (Details im Stand-Block oben): legal_documents-Versionierung + legal_document_id an Buchungen (E3), rejection_categories-DB live auf /richtlinien, T10-Meldeformulare mit Vorgangsnummer + Eingangsbestätigung, T12-Depublikations-Checkout mit Tombstone (config-gated), T13-Melde-Zeile an jeder PM; Umami eingebaut (aus bis Go-Live), zentrale Rechts-Mail info@pressekonto.com. **Noch offen [EXTERN]:** anwaltliche Freigabe AGB v0.6/Datenschutz v0.3 · Depublikations-Preis (O6) · Postfach info@pressekonto.com.
|
||||
- [x] **R3.1 Rechtstexte final** (Code komplett; Rest nur [EXTERN]) — **Inhalte eingebaut 03.07. (Quelle: `docs/legal/*`, untracked):** Impressum (echte Anbieterdaten adametz.media/Bielefeld, DDG, MStV, DSA-Kontaktpunkt via neuer `REPORT_EMAIL_*`-Keys), AGB v0.6 (B2B-Fassung, §§ 1–16, interne Anwalts-Anmerkungen entfernt, Version zentral in `config/legal.php`), **Datenschutzerklärung v0.3** (host-aware Bausteine: Hub Kundenkonto/Login/Stripe, Spokes Medienprivileg/Newsroom/Änderungslinks; Magic-Link-TTL 15 Min. aus dem Code, Logs 14 Tage, Stripe Payments Europe), neue Seiten `/richtlinien` (Rahmentext + K1–K6 statisch) und `/melden` (DSA/DSGVO/Änderung/Depublikation, verdrahtet mit den bestehenden Melde-Links je PM); **Cookie-Seite zurückgebaut** (User-Entscheidung: Cookies in Datenschutz Abschnitt 4, kein Banner; 301 auf /datenschutz). **T1neu erledigt:** Unternehmer-Pflicht-Checkbox im Buchungs-Modal, protokolliert in `booking_confirmations` (Timestamp, IP, AGB-Version); CheckoutController verlangt serverseitig eine zeitnahe Bestätigung (30 Min.) für Abo/Einzel-PM/Topup. Footer + Sitemap ergänzt; Preise-Seite nach Leistungsbeschreibung v0.2 (B2B-Satz, T9-Credit-Anker, Slots/Credits/Boost/Partner-Blöcke, T16-Wording inkl. PlanSeeder). **Restbacklog erledigt 06.07.** (Details im Stand-Block oben): legal_documents-Versionierung + legal_document_id an Buchungen (E3), rejection_categories-DB live auf /richtlinien, T10-Meldeformulare mit Vorgangsnummer + Eingangsbestätigung, T12-Depublikations-Checkout mit Tombstone (config-gated), T13-Melde-Zeile an jeder PM; Umami eingebaut (aus bis Go-Live), zentrale Rechts-Mail info@pressekonto.com. **Noch offen [EXTERN]:** anwaltliche Freigabe AGB v0.6/Datenschutz v0.3 · Postfach info@pressekonto.com. (Depublikations-Preis entschieden: 35 EUR netto, O6.)
|
||||
- [x] **R3.2 Marketing-Seiten: Inhalt oder Rückbau** — Entschieden + umgesetzt 03.07. (User: Rückbau): `presse`, `team`, `karriere`, `partner` und (2. Runde) `kontakt`, `ueber-uns` samt Routen entfernt (erfundene Adresse/Telefon/Anfahrt bzw. Team/Kennzahlen/Timeline); GET-Alt-Pfade → 301 Startseite, `kontakt.store`-POST bleibt fürs Hub-Modal, Spoke-Footer-Kontakt als mailto (Fallback Betreiber-Postfach bis R2.1). `hilfe` und `faq` inhaltlich auf den echten Funktionsstand gebracht (tote #-Links raus, echte Limits/Features), `veroeffentlichen` vom Fantasie-Preismodell („ab 89 €", Credits je PM, Cross-Publishing separat) auf echte Konditionen umgestellt (datengetrieben via `VeroeffentlichenPageData`). `api`-Seite komplett neu als echte Referenz + OpenAPI `docs/api/v1.yml` (Route lief vorher auf nie existierende Datei → 500 aus Hub-Footer/FAQ).
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -105,7 +105,20 @@ test('the reporting page separates free legal paths from the paid takedown servi
|
|||
->assertSeeText('Rechtswidrige Inhalte oder Rechteverletzungen melden')
|
||||
->assertSeeText('Eigene personenbezogene Daten entfernen lassen')
|
||||
->assertSeeText('Freiwillige Entfernung rechtmäßiger Inhalte')
|
||||
->assertSeeText('Ausübung gesetzlicher Rechte');
|
||||
->assertSeeText('Ausübung gesetzlicher Rechte')
|
||||
// Depublikations-Preis (O6, 06.07.: 35 € netto) im Doppelausweis.
|
||||
->assertSeeText('35,00 € zzgl. USt.')
|
||||
->assertSeeText('41,65 € inkl. 19');
|
||||
});
|
||||
|
||||
test('the reporting page falls back to the neutral price wording when depublication is disabled', function () {
|
||||
/** @var TestCase $this */
|
||||
config()->set('billing.depublication_price_cents', null);
|
||||
|
||||
$this->get('https://businessportal24.test/de/melden')
|
||||
->assertSuccessful()
|
||||
->assertSeeText('Der Preis wird Ihnen vor Beauftragung angezeigt.')
|
||||
->assertDontSeeText('zzgl. USt.');
|
||||
});
|
||||
|
||||
test('the privacy policy renders the real v03 content with host-specific blocks', function () {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue