fix: Duplikatprüfung immer gegen die ASN, die das Dokument beim Upload bekäme
Build and Push Multi-Platform Images / build-and-push (push) Successful in 39s

Im Posteingang kann das ASN-Feld der Aktion von der Belegnummer abweichen.
Prüfung, Versions-Upload und normaler Upload nutzen jetzt dieselbe ASN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bjoernpoettkerandClaude Opus 5.5 committed 2026-11-02 14:27:21 +01:00
1 parent 79dadb9c93
commit c1afa02ee2
8 files changed
+89 -24

No files matched your search

@@ -26,6 +26,7 @@ import { applyTemplate, buildVariables } from './variable-resolver';
import { DokumentVersionService } from '../paperless/dokument-version.service';
import {
aktionenAbEntscheidung,
ermittleUploadAsn,
originalSeitenDesAbschnitts,
type PaperlessEntscheidung,
} from './paperless-entscheidung.util';
@@ -471,12 +472,18 @@ export class InboxPostprocessorService {
if (!interneBelegnummer)
throw new Error('Interne Belegnummer konnte nicht aufgelöst werden');
// 2. Vom Benutzer bestätigt: als neue Version an das Stammdokument hängen
// 2. ASN, die das Dokument beim Upload bekäme – gegen genau diese wird geprüft
const asnTpl = String(content.asn ?? '').trim();
const asn = asnTpl ? applyTemplate(asnTpl, variables).trim() : null;
const archiveSerialNumber = ermittleUploadAsn(asn, interneBelegnummer);
// 3. Vom Benutzer bestätigt: als neue Version an das Stammdokument hängen
if (entscheidung?.aktion === 'version') {
await this.dokumentVersion.haengeVersionAn(
entscheidung.documentId,
pdfPath,
interneBelegnummer,
archiveSerialNumber ?? null,
);
this.logger.log(
`Belegnummer ${interneBelegnummer} als neue Version zu Dokument ${entscheidung.documentId} hinzugefügt`,
@@ -486,22 +493,11 @@ export class InboxPostprocessorService {
};
}
// 3. ASN bestimmen (für den Upload)
const asnTpl = String(content.asn ?? '').trim();
const asn = asnTpl ? applyTemplate(asnTpl, variables).trim() : null;
let archiveSerialNumber: number | undefined;
if (asn) {
const n = parseInt(asn.replace(/[^0-9]/g, ''), 10);
if (!Number.isNaN(n)) archiveSerialNumber = n;
}
if (archiveSerialNumber === undefined) {
const n = parseInt(interneBelegnummer.replace(/[^0-9]/g, ''), 10);
if (!Number.isNaN(n)) archiveSerialNumber = n;
}
// 4. Duplikat-Check Paperless: CF7 + aus der Belegnummer abgeleitete ASN
const pruefung =
await this.paperlessService.pruefeBelegnummer(interneBelegnummer);
// 4. Duplikat-Check Paperless: CF7 + Upload-ASN
const pruefung = await this.paperlessService.pruefeBelegnummer(
interneBelegnummer,
archiveSerialNumber ?? null,
);
if (pruefung.status !== 'frei') {
this.logger.warn(
`Duplikat (Paperless): Belegnummer ${interneBelegnummer} bereits vorhanden (Dokument(e) ${pruefung.kandidaten.join(', ')})`,