Abo-Fassung 6: Fassungstabelle, aktuelleAboFassung, termsVersionNeu
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c2b7073d99
commit
65b1389b55
3 files changed
+114
-22
No files matched your search
@@ -854,6 +854,9 @@ export const config = {
|
||||
abo: {
|
||||
// Bei jeder Textaenderung an Bedingungen oder Bestellseite hochziehen (wird mit der Zustimmung gespeichert)
|
||||
termsVersion: '2026-09-30-v5',
|
||||
// Fassung 6 der Abo-Bedingungen: gilt nur fuer Sitzungen mit neuer Ansicht (aktuelleAboFassung in products.js).
|
||||
// Entwurfstag; bei der Freigabe durch den Inhaber das Datum auf den Freigabetag setzen (P8 Task 11, Ablauf)
|
||||
termsVersionNeu: '2026-10-16-v6',
|
||||
// Mindestlaufzeit ab Leistungsbeginn; Kuendigung zum Ende bis 1 Monat vorher, danach monatlich
|
||||
minTermMonths: products.wartung.minTermMonths,
|
||||
minutesPerMonth: products.wartung.minutesPerMonth,
|
||||
|
||||
+66
-22
@@ -1,6 +1,7 @@
|
||||
import path from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import { config } from '../config.js'
|
||||
import { neueAnsicht } from './kundenansicht/schalter.js'
|
||||
|
||||
/**
|
||||
* Abo-Produkte (Hosting-Abo, Wartungs-Abo) und E-Mail-Zusatzspeicher.
|
||||
@@ -28,43 +29,86 @@ export function getProduct(key) {
|
||||
/** Die archivierte Fassung 3 (public/vertragsunterlagen/v3): gilt fuer jede Zustimmung ohne Fassung "-v4"/"-v5". */
|
||||
export const TERMS_VERSION_V3 = '2026-09-25-v3'
|
||||
|
||||
/**
|
||||
* Fassungstabelle der Abo-Bedingungen (V12). Reihenfolge = Suche: der erste Eintrag, dessen muster auf die
|
||||
* gespeicherte Fassung passt (nur als Endung, nie "-v60" oder "v6-..."), sonst der Eintrag sonst (Fassung 3).
|
||||
* Fassung 6 liegt bis zum Umschalten (P10) im Vorschaupfad /neu/rechtliches/; Fassung 5 bleibt an den heutigen
|
||||
* Adressen, archiv nennt die Adressen der Kopie unter public/vertragsunterlagen/v5/ (erst P10 schaltet sie ein).
|
||||
* endParagraph: der Paragraph zum Vertragsende (Daten, AuthCode, Loeschung) fuer die Mails K02/K03/T05/T07 (F08).
|
||||
*/
|
||||
export const FASSUNGEN = Object.freeze([
|
||||
Object.freeze({
|
||||
muster: /-v6$/,
|
||||
nummer: 6,
|
||||
url: '/neu/rechtliches/abo-bedingungen.html',
|
||||
pdfFile: 'neu/rechtliches/WEBklar-Abo-Vertragsunterlagen.pdf',
|
||||
endParagraph: '§ 11',
|
||||
}),
|
||||
Object.freeze({
|
||||
muster: /-v5$/,
|
||||
nummer: 5,
|
||||
url: '/abo-bedingungen.html',
|
||||
pdfFile: 'WEBklar-Abo-Vertragsunterlagen.pdf',
|
||||
endParagraph: '§ 11',
|
||||
archiv: Object.freeze({
|
||||
url: '/vertragsunterlagen/v5/abo-bedingungen.html',
|
||||
pdfFile: 'vertragsunterlagen/v5/WEBklar-Abo-Vertragsunterlagen.pdf',
|
||||
}),
|
||||
}),
|
||||
Object.freeze({
|
||||
muster: /-v4$/,
|
||||
nummer: 4,
|
||||
url: '/vertragsunterlagen/v4/abo-bedingungen.html',
|
||||
pdfFile: 'vertragsunterlagen/v4/WEBklar-Abo-Vertragsunterlagen.pdf',
|
||||
endParagraph: '§ 11',
|
||||
}),
|
||||
Object.freeze({
|
||||
sonst: true,
|
||||
nummer: 3,
|
||||
url: '/vertragsunterlagen/v3/abo-bedingungen.html',
|
||||
pdfFile: 'WEBklar-Wartungs-Abo-Vertragsunterlagen.pdf',
|
||||
endParagraph: '§ 9',
|
||||
}),
|
||||
])
|
||||
|
||||
/** Erster Tabelleneintrag mit passendem muster; ohne Treffer (auch bei Nicht-Text) der Eintrag sonst. */
|
||||
function fassungFuer(termsVersion) {
|
||||
const treffer = typeof termsVersion === 'string' ? FASSUNGEN.find((f) => f.muster && f.muster.test(termsVersion)) : null
|
||||
return treffer || FASSUNGEN.find((f) => f.sonst)
|
||||
}
|
||||
|
||||
/**
|
||||
* Abo-Fassung der Sitzung: Fassung 6 nur bei neuer Ansicht (Pilot-Schalter), sonst die bisherige Fassung 5.
|
||||
* req wie bei neueAnsicht(req) (req.session oder signiertes Cookie).
|
||||
*/
|
||||
export function aktuelleAboFassung(req) {
|
||||
return neueAnsicht(req) ? config.abo.termsVersionNeu : config.abo.termsVersion
|
||||
}
|
||||
|
||||
/** Aktuelle Fassung 5 (Unterstuetzung in § 4 Abs. 4)? */
|
||||
export function isCurrentTerms(termsVersion) {
|
||||
return typeof termsVersion === 'string' && termsVersion.endsWith('-v5')
|
||||
}
|
||||
|
||||
/** Fassung 4 oder neuer (Hosting- und Wartungs-Abo, Zusatzspeicher, Wechsel)? Aeltere und fehlende Fassungen: nein. */
|
||||
/** Fassung 4 oder neuer (Hosting- und Wartungs-Abo, Zusatzspeicher, Wechsel; v4, v5, v6)? Aeltere und fehlende Fassungen: nein. */
|
||||
export function isTermsV4OrNewer(termsVersion) {
|
||||
return typeof termsVersion === 'string' && /-v[45]$/.test(termsVersion)
|
||||
return typeof termsVersion === 'string' && FASSUNGEN.some((f) => f.muster && f.muster.test(termsVersion))
|
||||
}
|
||||
|
||||
/**
|
||||
* Vertragsunterlagen zur zugestimmten Fassung: Fassung 5 (Suffix "-v5") zeigt die aktuellen Bedingungen samt PDF,
|
||||
* Fassung 4 das Archiv unter public/vertragsunterlagen/v4, jede aeltere Version (auch unbekannt/keine) das Archiv
|
||||
* der Version 3.
|
||||
* Vertragsunterlagen zur zugestimmten Fassung (Tabelle FASSUNGEN): Fassung 6 (Suffix "-v6") zeigt die neuen Bedingungen
|
||||
* im Vorschaupfad, Fassung 5 die bisherigen Bedingungen samt PDF, Fassung 4 das Archiv unter public/vertragsunterlagen/v4,
|
||||
* jede aeltere Version (auch unbekannt/keine) das Archiv der Version 3.
|
||||
* version: die Fassung, die eine Mail nennt - die gespeicherte, ohne gespeicherte die archivierte Fassung 3,
|
||||
* damit Versionsangabe und PDF-Anhang immer zusammenpassen (Task 12 Fix 1).
|
||||
* endParagraph: der Paragraph zum Vertragsende (Daten, AuthCode, Loeschung) in dieser Fassung, fuer die
|
||||
* Mails K02/K03/T05/T07 (F08) - ab Fassung 4 ist § 9 der Wechsel zwischen den Abos, § 11 das Vertragsende.
|
||||
* Die Rueckgabe hat immer nur diese vier Felder (kein archiv, muster, nummer).
|
||||
*/
|
||||
export function termsDocFor(termsVersion) {
|
||||
if (isCurrentTerms(termsVersion)) {
|
||||
return { version: termsVersion, url: '/abo-bedingungen.html', pdfFile: 'WEBklar-Abo-Vertragsunterlagen.pdf', endParagraph: '§ 11' }
|
||||
}
|
||||
if (isTermsV4OrNewer(termsVersion)) {
|
||||
return {
|
||||
version: termsVersion,
|
||||
url: '/vertragsunterlagen/v4/abo-bedingungen.html',
|
||||
pdfFile: 'vertragsunterlagen/v4/WEBklar-Abo-Vertragsunterlagen.pdf',
|
||||
endParagraph: '§ 11',
|
||||
}
|
||||
}
|
||||
return {
|
||||
version: typeof termsVersion === 'string' && termsVersion ? termsVersion : TERMS_VERSION_V3,
|
||||
url: '/vertragsunterlagen/v3/abo-bedingungen.html',
|
||||
pdfFile: 'WEBklar-Wartungs-Abo-Vertragsunterlagen.pdf',
|
||||
endParagraph: '§ 9',
|
||||
}
|
||||
const f = fassungFuer(termsVersion)
|
||||
const version = typeof termsVersion === 'string' && termsVersion ? termsVersion : TERMS_VERSION_V3
|
||||
return { version, url: f.url, pdfFile: f.pdfFile, endParagraph: f.endParagraph }
|
||||
}
|
||||
|
||||
/** Katalogname ohne "WEBklar " (z. B. "Hosting-Abo") fuer {{produkt}} in den Mails (F33); ohne Schluessel "Abo". */
|
||||
|
||||
Reference in new issue
Block a user