Paperless-ng: Datum validieren
- 2 minutes read - 410 wordsDas Problem
Die automatische Erkennung von Tags, Korrespondenten und auch dem Erstellungsdatum eines Dokumentes, funktioniert bei Paperless-ng wahnsinnig gut. Hin und wieder kommt es jedoch vor, dass ein Datum nicht richtig erkannt wird. Häufig liegt dies einfach an fehlerhaften Meta-Daten im PDF-Dokument.
Jedoch schaut man in der Inbox gerade beim Datum häufig nicht so genau hin und man hat schnell ein Dokument von 1969 in Paperless-ng.
Hier können die post consume scripte von Paperless-ng helfen.
Also jene Scripte, welche nach der eigentlichen Arbeit von Paperless-ng für jedes einzelne Dokument ausgeführt werden. Diese post consume Skripte verwenden wir auch schon für Office Dokumente in diesem Artikel: Link
Wie man das post consume Skript also grundsätzlich einrichtet erkläre ich hier also nicht mehr.
Die Idee
Ich gehe davon aus, dass ich meine Dokumente in einem sinnvollen Zeitraum digitalisiere und in Paperless-ng importiere. Somit kann ich davon ausgehen, dass jedes Dokument, bei dem das Datum mehr als 60 Tage in der Vergangenheit liegt, irgendwie falsch von Paperless-ng erkannt wurde. Damit dies möglichst auffällig ist, sollen alle diese Dokumente dem Dokumententyp “_CHECK_DATE” zugeordnet werden. Dies ist dann in der Inbox doch ziemlich auffällig.
Die Lösung
Der Workflow ist also der folgende:
- Ein Dokument wird in Paperless-ng hochgeladen und verarbeitet. Dabei wird jedoch das Datum falsch erkannt.
- Das post consume Skript wird aufgerufen.
- Wir erfragen über die REST-Api das
created
Datum. Dies ist das Dokumentendatum. - Wir errechnen die Differenz zwischen heute und dem Dokumentendatum.
- Ist die Differenz größer als 60 Tage, wird der Dokumententyp
_CHECK_DATE
, welcher bei mir der ID 37 entspricht, gesetzt.
Im Docker Container ist leider kein jq
installiert. Somit muss man mit etwas rudimentären Bordmitteln auskommen.
Der folgende Schnipsel zeigt den notwendigen Code. Dabei handelt es sich um eine Erweiterung des hier gezeigten Scripts:
...
# Dokumentendatum ermitteln und passend formatieren
datum=$(curl -H "Authorization: Token 3a98c9f72f0e9337fdc2f56e0d574685cfef93ab" -X GET http://localhost:8000/api/documents/${DOCUMENT_ID}/)
datum=$(echo $datum | tr ',' '\n' | grep created | cut -d \" -f 4)
datum=$(date -d $datum +%s)
# Heutiges Datum im passenden Format ermitteln
heute=$(date +%s)
# Differenz ermitteln
diff=$(( (heute - datum) / 86400 ))
# Differenz prüfen
if [ $diff -gt 60 ]
then
# Dokument ist zu alt. Dokumententyp 37 setzen
curl -H "Authorization: Token 3a98c9f72f0e9337fdc2f56e0d574685cfef93ab" -X PATCH -d 'document_type=37' http://localhost:8000/api/documents/${DOCUMENT_ID}/
fi
Erweitert man das bereits aktive post consume Skript mit dem gezeigten Code-Schnipsel, schon werden alle Dokumente, die zur Verarbeitunszeit älter als 60 Tage sind mit dem Dokumententyp “_CHECK_DATE” versehen.
Title Photo by Eric Rothermel on Unsplash