Files
betreuungs-cockpit/src/lib/pdf/react-pdf-pdfkit.d.ts
T
Florian Wilde 56d4cca8c9 feat: Dokumentenablage, OCR, Volltextsuche und Belegmappe
Etappe 3. Dazu die geteilte Infrastruktur, auf der die Berichte der
folgenden Etappen aufsetzen: Speichertreiber und PDF-Grundgeruest.

Dateiablage hinter einer Schnittstelle, zwei Treiber - lokales
Verzeichnis fuer die Entwicklung, S3-kompatibel fuer den Betrieb. Der
Schluessel wird erzeugt, nie aus dem Dateinamen abgeleitet; ein
Pfadausbruch ueber den Namen ist damit ausgeschlossen.

Der Dateityp wird ausschliesslich an den Magic Bytes geprueft, und ein
PDF muss bei Offset 0 stehen - damit fallen auch Polyglot-Dateien durch,
die gleichzeitig gueltiges PDF und gueltiges HTML sind. Ausgeliefert
wird nur ueber kurzlebige signierte URLs, immer als Anhang und mit
nosniff. Die Route prueft Signatur, Anmeldung UND Zugriff auf die
betreuteId aus dem Schluessel; jeder Abruf steht im Audit-Log.

Beim Dateitreiber liegt die Datei zusaetzlich AES-256-GCM-verschluesselt.
Beim S3-Treiber geht das nicht, weil signierte URLs am Server vorbei
ausgeliefert werden - das ist in der Datei dokumentiert, nicht
stillschweigend anders gemacht.

@react-pdf/renderer konnte in diesem Abhaengigkeitsbaum keinen einzigen
Buchstaben setzen: die Unterabhaengigkeiten sind weitergewandert und
liefern fuer Standardschriften kein Schriftobjekt mehr.
src/lib/pdf/standardschrift.ts baut es aus den Metriken, die pdfkit
ohnehin mitbringt - kein neues Paket, kein Netz - und haengt sich nur
ein, wenn die Aufloesung tatsaechlich kaputt ist.

Fristerkennung im OCR-Text ("innerhalb von vier Wochen", "binnen eines
Monats") wird immer nur VORGESCHLAGEN, nie automatisch angelegt. Die
Textstelle steht daneben, damit man nachprueft, bevor man uebernimmt.
Gerechnet wird auf lokaler Mittagszeit: in UTC verschoebe die Sommerzeit
"vier Wochen ab 12.03." um einen Tag.

57 Tests.

Etappe: 3
Phase: Papier
2026-08-22 06:21:27 +02:00

26 lines
1.0 KiB
TypeScript

/**
* Typen fuer `@react-pdf/pdfkit`.
*
* Das Paket bringt keine eigenen Typdeklarationen mit. Benutzt wird es nur
* an einer Stelle - `src/lib/pdf/standardschrift.ts` holt sich daraus die
* Metriken der eingebauten PDF-Standardschriften. Deshalb hier nur die
* schmale Oberflaeche, die dort wirklich gebraucht wird, statt einer
* Nachbildung des ganzen Pakets.
*/
declare module '@react-pdf/pdfkit' {
/** Die von pdfkit angelegte Standardschrift (AFM-Metriken, ohne Einbettung). */
export type PdfkitStandardschrift = {
/** Liefert die Glyphennamen als Hex und die Vorschubbreiten. */
encode: (text: string) => [string[], { advanceWidth: number }[]]
font: { characterToGlyph: (codePoint: number) => string }
}
export default class PDFDocument {
constructor(optionen?: { autoFirstPage?: boolean; [weitere: string]: unknown })
/** Waehlt eine Schrift aus - bei den 14 Standardnamen ohne Datei. */
font(name: string): this
/** Die zuletzt gewaehlte Schrift. */
_font: PdfkitStandardschrift
}
}