Files
paperlessmanager/paperless-frontend/src/api/paperless.ts
T
bjoernpoettkerandClaude Opus 5.5 e0a6598b35 refactor: Paperless-Dokumentrouten unter /api/paperless/documents/:id
„inbox“ war doppelt belegt (/api/inbox = Scanner, /api/paperless/inbox =
Paperless-Posteingang) und passte nicht zur Manuell-Seite, die dieselben
Routen nutzt. Umbenannt (ohne Alias, nur das eigene Frontend nutzt sie):

  PUT  paperless/inbox/:id            → PUT  paperless/documents/:id
  GET  paperless/inbox/pdf/:id        → GET  paperless/documents/:id/pdf
  GET  paperless/inbox/preview/:id    → GET  paperless/documents/:id/preview
  GET  paperless/inbox/:id/erechnung  → GET  paperless/documents/:id/erechnung

Dabei:
- Dokumentsuche (GET documents) wieder für den Posteingang (VIEW_INBOX)
  statt nur Admin – die Verknüpfungssuche im Bearbeiten-Dialog nutzt sie;
  die Einschränkung aus dem vorigen Commit hatte sie gebrochen.
- Suche und GET documents/:id liefern nur noch id, Titel, ASN, Datum
  (kein OCR-Volltext, keine Statusfelder).
- documents/:id/pdf auch für VIEW_SCANNER (Duplikatvergleich im Scanner).
- E-Rechnungs-Vorschlag prüft wie das Speichern pro Dokument (Tag 1 bzw.
  Manuell-Tag); Vorschau/PDF bewusst nicht (Suchergebnisse, Duplikate).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 10:46:57 +01:00

88 lines
2.8 KiB
TypeScript

import api from './client';
export type BelegnummerStatus = 'frei' | 'eindeutig' | 'mehrdeutig';
export interface BelegnummerPruefung {
status: BelegnummerStatus;
/** Stammdokument für eine neue Version (nur bei „eindeutig“) */
documentId: number | null;
kandidaten: number[];
}
/** Kennzahlen eines Belegs; `null` = nicht ermittelbar. */
export interface Kennzahlen {
seiten: number | null;
woerter: number | null;
}
export interface VergleichKennzahlen {
vorhanden: Kennzahlen;
neu: Kennzahlen;
}
export interface PaperlessTag {
id: number;
slug: string;
name: string;
color: string;
text_color: string;
match: string;
matching_algorithm: number;
is_insensitive: boolean;
is_inbox_tag: boolean;
document_count: number;
}
export interface PaperlessDocType {
id: number;
slug: string;
name: string;
match: string;
matching_algorithm: number;
is_insensitive: boolean;
document_count: number;
}
export interface PaperlessCustomField {
id: number;
name: string;
data_type: string;
extra_data?: any;
}
export interface PaperlessCorrespondent {
id: number;
slug: string;
name: string;
match: string;
matching_algorithm: number;
is_insensitive: boolean;
document_count: number;
}
export interface PaperlessUser {
id: number;
username: string;
first_name?: string;
last_name?: string;
}
export const paperlessApi = {
getTags: () => api.get<PaperlessTag[]>('/api/paperless/tags').then(r => r.data),
getSteuertagIds: () => api.get<{ ids: number[] }>('/api/paperless/steuertags').then(r => r.data.ids),
getDocumentTypes: () => api.get<PaperlessDocType[]>('/api/paperless/document-types').then(r => r.data),
getCustomFields: () => api.get<PaperlessCustomField[]>('/api/paperless/custom-fields').then(r => r.data),
getCorrespondents: (search?: string) => api.get<PaperlessCorrespondent[]>('/api/paperless/correspondents', { params: { search } }).then(r => r.data),
getCorrespondent: (id: number) => api.get<PaperlessCorrespondent>(`/api/paperless/correspondents/${id}`).then(r => r.data),
getUsers: () => api.get<PaperlessUser[]>('/api/paperless/users').then(r => r.data),
searchDocuments: (params: { search?: string, page?: number, pageSize?: number }) =>
api.get<{ results: any[], count: number }>('/api/paperless/documents', { params }).then(r => r.data),
getDocument: (id: number) => api.get<any>(`/api/paperless/documents/${id}`).then(r => r.data),
checksumExists: (checksum: string) =>
api.post<{ exists: boolean }>('/api/paperless/checksum', { checksum }).then(r => r.data.exists),
getDocumentPdfBlob: (id: number) =>
api.get<Blob>(`/api/paperless/documents/${id}/pdf`, { responseType: 'blob' }).then(r => r.data),
pruefeBelegnummer: (belegnummer: string) =>
api.get<BelegnummerPruefung>('/api/paperless/belegnummer-pruefung', { params: { belegnummer } }).then(r => r.data),
};