fix: Zieldokument prüfen, Versions-Verarbeitung abwarten, Abschnittsseiten vom Backend
- Neue Version nur, wenn die Belegnummer in Paperless eindeutig zu genau diesem Dokument gehört (serverseitig geprüft) - Auf die Paperless-Task der Version warten; Ablehnung → Fehler, Tag 21 weg - Entscheidung im Posteingang nur zusammen mit processOnlyOne - Vergleichsdialog im Posteingang zeigt die Seiten, die tatsächlich hochgeladen werden Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
98021fdcbf
commit
32b5228f68
10 files changed
+283
-19
No files matched your search
@@ -1,4 +1,9 @@
|
||||
import { Injectable, Logger, NotFoundException } from '@nestjs/common';
|
||||
import {
|
||||
BadRequestException,
|
||||
Injectable,
|
||||
Logger,
|
||||
NotFoundException,
|
||||
} from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Repository } from 'typeorm';
|
||||
import * as fs from 'fs/promises';
|
||||
@@ -21,6 +26,7 @@ import { applyTemplate, buildVariables } from './variable-resolver';
|
||||
import { DokumentVersionService } from '../paperless/dokument-version.service';
|
||||
import {
|
||||
aktionenAbEntscheidung,
|
||||
originalSeitenDesAbschnitts,
|
||||
type PaperlessEntscheidung,
|
||||
} from './paperless-entscheidung.util';
|
||||
|
||||
@@ -58,6 +64,8 @@ export interface ActionResult {
|
||||
verworfen?: boolean;
|
||||
/** Aufgelöste interne Belegnummer (bei Duplikaten) */
|
||||
belegnummer?: string;
|
||||
/** Original-Seiten des Abschnitts (bei Duplikaten, für den Vergleich) */
|
||||
seiten?: number[];
|
||||
}
|
||||
|
||||
export interface RunForDocumentResult {
|
||||
@@ -101,6 +109,12 @@ export class InboxPostprocessorService {
|
||||
processOnlyOne: boolean = false,
|
||||
entscheidung?: PaperlessEntscheidung,
|
||||
): Promise<RunForDocumentResult> {
|
||||
// Eine Duplikat-Entscheidung gilt immer nur für den einen Abschnitt
|
||||
if (entscheidung && !processOnlyOne) {
|
||||
throw new BadRequestException(
|
||||
'Eine Duplikat-Entscheidung ist nur zusammen mit processOnlyOne erlaubt',
|
||||
);
|
||||
}
|
||||
const doc = await this.docRepo.findOne({ where: { Id: documentId } });
|
||||
if (!doc) throw new NotFoundException('Dokument nicht gefunden');
|
||||
if (doc.Source === 'user' && doc.OwnerUsername !== preferredUsername) {
|
||||
@@ -306,6 +320,12 @@ export class InboxPostprocessorService {
|
||||
versionMoeglich: res.versionMoeglich,
|
||||
duplikatKandidaten: res.duplikatKandidaten,
|
||||
belegnummer: res.belegnummer,
|
||||
seiten: res.skipped
|
||||
? originalSeitenDesAbschnitts(
|
||||
survivingOriginalPages,
|
||||
pageIndices,
|
||||
)
|
||||
: undefined,
|
||||
});
|
||||
if (res.skipped) {
|
||||
abortProcessing = true;
|
||||
@@ -456,6 +476,7 @@ export class InboxPostprocessorService {
|
||||
await this.dokumentVersion.haengeVersionAn(
|
||||
entscheidung.documentId,
|
||||
pdfPath,
|
||||
interneBelegnummer,
|
||||
);
|
||||
this.logger.log(
|
||||
`Belegnummer ${interneBelegnummer} als neue Version zu Dokument ${entscheidung.documentId} hinzugefügt`,
|
||||
|
||||
Reference in new issue
Block a user