Kundenansicht neu P7: Einschalten zeigt Linkzeile, Häkchen und Unterlagen der Fassung 6 aus P8
Verdrahtet P5 Task 15 und P7 Task 0 (N33): consentAbo liest Linkzeile und Hinweis aus WORTLAUT_V6, unterlagenFuer die fünf Funktionen aus FUNKTIONEN_UNTERLAGEN_V6 (Analyse bleibt bei den Alt-Unterlagen bis zur Freigabe), config.aboFunktionen.texte.hinweis entfällt, pdfAnhaenge liest PDFs der Fassung 6, sichereAdresse lässt /neu/rechtliches/ zu. Der Analyse-Kundenweg setzt wie der Team-Weg den Abo-Marker (unlockedBy und einrichtungAbrechnung abo). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
447129d4e2
commit
bfe3895a50
11 files changed
+177
-41
No files matched your search
@@ -1,17 +1,23 @@
|
||||
import { readFile } from 'node:fs/promises'
|
||||
import path from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import { config } from '../config.js'
|
||||
import { legalPaths } from './analyseLegal.js'
|
||||
import { FUNKTIONEN_UNTERLAGEN_V6 } from './products.js'
|
||||
|
||||
/**
|
||||
* Einzige Quelle der verlinkten Unterlagen im Abo-Modell (Katalog, Einschalt-Nachweis, Analyse). Blattmodul: importiert
|
||||
* nur config und analyseLegal.js. Liest bei jedem Aufruf (Tests aendern config zur Laufzeit). Task 15 (Fassung 6) stellt
|
||||
* nur diese Quelle um; die Aufrufer bleiben unveraendert.
|
||||
* nur config, analyseLegal.js und products.js (das selbst nur config und den Schalter liest). Liest bei jedem Aufruf (Tests
|
||||
* aendern config zur Laufzeit). Verdrahtung der Fassung 6 (N33): die fuenf Funktionen des Registers lesen
|
||||
* FUNKTIONEN_UNTERLAGEN_V6; die Analyse bleibt bis zur Freigabe bei den versionierten Alt-Seiten (legalPaths).
|
||||
*/
|
||||
|
||||
const fassung = (unterlage) => (unterlage ? { version: unterlage.version, url: unterlage.url ?? '' } : null)
|
||||
|
||||
/**
|
||||
* Leistungsbeschreibung und AVV einer Funktion: { leistungsbeschreibung: { version, url } | null, avv: { version, url } | null }.
|
||||
* Funktionen aus dem Register: deren Eintraege; 'analyse': die versionierten Seiten aus legalPaths(config.analyse.avvVersion).
|
||||
* Funktionen aus dem Register: die Dokumente der Fassung 6 aus FUNKTIONEN_UNTERLAGEN_V6 (Vorschaupfad /neu/rechtliches/, ohne Preise);
|
||||
* 'analyse': die versionierten Seiten aus legalPaths(config.analyse.avvVersion) (N33: erst nach der Freigabe auf Fassung 6).
|
||||
* Ein unbekannter Schluessel ist ein Programmfehler (TypeError).
|
||||
*/
|
||||
export function unterlagenFuer(key) {
|
||||
@@ -21,8 +27,9 @@ export function unterlagenFuer(key) {
|
||||
return { leistungsbeschreibung: { version, url: pfade.lb }, avv: { version, url: pfade.avv } }
|
||||
}
|
||||
if (typeof key !== 'string' || !Object.hasOwn(config.features, key)) throw new TypeError(`Unbekannte Funktion: ${String(key)}`)
|
||||
const eintrag = config.features[key]
|
||||
return { leistungsbeschreibung: fassung(eintrag.leistungsbeschreibung), avv: fassung(eintrag.avv) }
|
||||
const unterlagen = FUNKTIONEN_UNTERLAGEN_V6[key]
|
||||
if (!unterlagen) throw new TypeError(`Keine Unterlagen der Fassung 6 fuer: ${key}`)
|
||||
return { leistungsbeschreibung: fassung(unterlagen.lb), avv: fassung(unterlagen.avv) }
|
||||
}
|
||||
|
||||
/** Unterlagen der Analyse fuer Nachweis und Mail: { avvVersion, legal: { lb, avv } } (Adressen der versionierten Seiten). */
|
||||
@@ -30,3 +37,20 @@ export function analyseUnterlagen() {
|
||||
const { leistungsbeschreibung, avv } = unterlagenFuer('analyse')
|
||||
return { avvVersion: avv.version, legal: { lb: leistungsbeschreibung.url, avv: avv.url } }
|
||||
}
|
||||
|
||||
const PUBLIC_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', '..', 'public')
|
||||
|
||||
/**
|
||||
* PDF-Anhaenge fuer Mails aus Dokumenten der Fassung 6: [{ pdfFile, anhangName }] -> [{ filename: anhangName, content, contentType }].
|
||||
* Wirft, wenn eine Datei fehlt, leer ist oder nicht mit %PDF- beginnt (nie ein leerer oder falscher Anhang). basis: Wurzel von
|
||||
* pdfFile (Vorgabe: public/).
|
||||
*/
|
||||
export async function pdfAnhaenge(dokumente, { basis = PUBLIC_DIR } = {}) {
|
||||
const anhaenge = []
|
||||
for (const dok of dokumente) {
|
||||
const content = await readFile(path.join(basis, dok.pdfFile))
|
||||
if (content.length === 0 || content.subarray(0, 5).toString('latin1') !== '%PDF-') throw new Error(`PDF fehlt oder ist ungueltig: ${dok.pdfFile}`)
|
||||
anhaenge.push({ filename: dok.anhangName, content, contentType: 'application/pdf' })
|
||||
}
|
||||
return anhaenge
|
||||
}
|
||||
Reference in new issue
Block a user