Version 1.2
Veränderbare Indexfelder
In den erweiterten Einstellungen eines Datenfeldes gibt es nun die Option Änderbar. Wenn diese aktiv ist, kann der Wert des Datenfeld auch nach dem Archivierungsvorgang noch verändert werden.
Falls in einem Vorgang veränderbare Felder vorhanden sind, erscheint im Vorgangsdialog im Bereich Daten eine Toolbar mit einem Bearbeiten-Button. Wenn dieser Button angeklickt wird, werden alle veränderbaren Felder zum Bearbeiten aktiviert. Ein Klick auf Speichern in der Toolbar schließt diese Aktion ab.
Beim Benutzen von veränderbaren Indexfeldern sind folgende Einschränkungen zu beachten:
Der Zustand Änderbar eines Datenfelders in den erweiterten Einstellungen kann nach dem Speichern nachträglich nicht mehr verändert werden.
Die Werte von änderbaren Datenfeldern werden nicht in den Speichern gesichtert, sondern ausschließlich in der Datenbank verwaltet.
Es sollten daher alle Felder, für die Revisionssicherheit garantiert werden muss, als nicht änderbar markiert werden. Dies ist auch weiterhin die Standardeinstellung für neue Felder.
Hinzufügen von Dokumenten zu bestehenden Vorgängen
Ein Archiv kann nun so konfiguriert werden, dass an einen bereits bestehenden Vorgang noch nachträglich weitere Dokumente angehängt werden können. Dazu muss in dem Archiv die Option Vorgang erweiterbar aktiviert werden.
Wenn diese Option aktiviert ist, gibt es im Vorgangsdialog im Bereich Dokumente eine Toolbar mit dem Button Hinzufügen, über den die Dokumente angehängt werden können.
Auch nachträglich angehängte Dokumente werden revisionssicher im Speicher abgelegt.
Löschen von Vorgängen
Unter bestimmten Umständen ist es nun möglich, Vorgänge wieder aus Archiven zu löschen:
In Testarchiven können grundsätzlich alle Vorgänge wieder gelöscht werden.
In Produktivarchiven können alle Vorgänge gelöscht werden, deren Aufbewahrungsfrist abgelaufen ist.
Das Löschen ist nur Benutzern möglich, die Administratorrechte haben.
Die Aufbewahrungsfrist kann pro Archiv konfiguriert werden und wird als Wert in Jahren eingestellt (Dezimalzahlen wie z.B. 0,5 Jahre sind ebenfalls möglich). Aus dieser Aufbewahrungsfrist wird bei jedem Archivierungsvorgang ein Ablaufdatum für diesen Vorgang berechnet. Bei einer Aufbewahrungsfrist von 0 können Vorgänge sofort wieder gelöscht werden, da ihr Ablaufdatum dann der aktuelle Zeitpunkt ist. Wenn das Feld Aufbewahrungsfrist leer gelassen wird, kann der jeweilige Vorgang nie gelöscht werden.
PDF-Viewer in Vorgangsdialog
Der PDF-Viewer zeigt ausgewählte Vorgänge mit dem im Browser installierten PDF-Plugin an. Da der Internet Explorer standardmäßig kein PDF-Plugin enthält, muss in diesem Fall der Acrobat Reader im System installiert werden.
OCR mit Tesseract
In Archiven gibt es nun die Konfigurationsoption OCR. Wenn diese aktiviert ist, wird in archivierten Bildern (z.B. TIFF-Dateien) und PDF-Dateien eine OCR-Erkennung mit der Open-Source-Software Tesseract durchgeführt. Neben der Originaldatei wird dann noch eine automatisch generierte PDF-Datei mit archiviert, die den erkannten Text als unsichtbaren Text-Layer enthält. Diese PDF-Datei ist auch diejenige, die standardmäßig im Archiv-Viewer angezeigt wird.
Bei PDF-Dateien, die bereits Text enthalten, wird die OCR-Erkennung übersprungen.
Es ist auch nachträglich möglich, bei bereits archivierten Vorgängen eine OCR-Erkennung
durchzuführen. Dazu muss zuerst die Konfigurationsoption OCR aktiviert und anschließend die
pa_ctl.exe mit folgenden Parametern aufgerufen werden (<identifier> ist der Kurzname des
Archivs):
pa_ctl.exe process_archive <identifier>
Die OCR-Erkennung wird anschließend im Hintergrund von Archiv-Server durchgeführt und kann einige Zeit dauern.
SmartIndexing
Die in Version 1.2 enthaltene SmartIndexing-Funktion ist erst einmal hauptsächlich für Präsentationszwecke gedacht. In Version 1.3 wird es eine Weiterentwicklung für Endbenutzer geben, die anders konfiguriert wird.
Wenn SmartIndexing aktiviert ist, werden im Archivierungsdialog nach dem Hochladen einer PDF-Datei
(die extrahierbaren Text enthalten muss) die Datenfelder mit Werten vorbelegt. Wenn man ein Feld
auswählt und Ctrl+i eingibt, wird eine Liste von weiteren erkannten Werten angezeigt.
Aktuell muss für das SmartIndexing im config-Verzeichnis eine Datei smartindexing.ini
angelegt werden. Für jedes Archiv gibt es eine Sektion, deren Name der Kurzname der Archivs ist
(hier test). In der jeweiligen Sektion ist der Schlüssel der Kurzname des Datenfeldes und der
Wert die SmartIndexing-Funktion, die für dieses Feld aufgerufen werden soll:
[test]
rechdat = dates: near=("blau")
text = words: ("Rechnung", "Gutschrift", "Mahnung")
float = decimals: near="Betrag"
test1 = dates
test2 = dates:
test3 = dates: past=true
test4 = slice: start=5, end=8
test5 = regex: "Dokumenten-Nr\.: +(ABC\.\d{5})"
test6 = regex: "Dokumenten-Nr\.: +(ABC\.\d{5})", group=1, subrex="\.", replacement="", ignorecase=True
Das Format der SmartIndexing-Funktionen sieht folgendermaßen aus:
Der Name der Funktion (z.B.
wordsoderdates), gefolgt von einem Doppelpunkt.Durch Komma getrennte Parameter der Funktion. Die meisten Parameter müssen mit Namen angegeben werden:
name=valueString-Werte benötigten doppelte Anführungszeichen.
Listen sind durch Komma getrennte Werte in einfachen Klammern.
Folgene Funktionen werden aktuell unterstützt:
def now(day=None, month=None, year=None, adddays=0):
"""
Berechnet ein Datum aus dem aktuellen Datum. Kein NBezug zum Text.
day: Ersetzt im aktuellen Datum den Tag durch day
month: Ersetzt im aktuellen Datum den Monat durch month
year: Ersetzt im aktuellen Datum das Jahr durch year
adddays: Addiert zu aktuellen Datum addays Tage
"""
def dates(near=None, near2d=False, past=False, nth=None, fuzzyness=0, ignorecase=True, max_char=None, first_page=None, last_page=None, analyse_filename=False):
"""
Ermittelt die im Text vorkommenden Datumswerte
near: Liste von Worten, in deren Nähe sich ein Datum befinden soll
near2d: Falls True, wird der Abstand zu einm near-Wort als euklidischer ABstand berechnet.
past: Nehme nur Datums auf, die in der Vergangenheit liegen
nth: Liefere nur das nte Datum zurück
fuzzyness: Größe der fuzzyness
ignorecase: Ignoriere Groß/Kleinschreibung
max_char: Maximale Anzahl der durchsuchten Zeichen
first_page: Erste Seite (Nummerierung beginnt mit Seite 1) des zu durchsuchenden Textes (Seitentrennner ist Form feed)
last_page: Letzte Seite des zu durchsuchenden Textes (Seitentrennner ist Form feed)
analyse_filename: Falls True, wird als Text der filename verwendet, ansonsten der content
"""
def decimals(near=None, near2d=False, nth=None, fuzzyness=0, ignorecase=True, max_char=None, first_page=None, last_page=None, analyse_filename=False):
"""
Ermittelt die im Text vorkommenden Dezimalzahlen mit zwei NK-Stellen
near: Liste von Worten, in deren Nähe sich ein Datum befinden soll
near2d: Falls True, wird der Abstand zu einm near-Wort als euklidischer ABstand berechnet.
nth: Liefere nur die nte Dezimalzahl zurück
fuzzyness: Größe der fuzzyness
ignorecase: Ignoriere Groß/Kleinschreibung
max_char: Maximale Anzahl der durchsuchten Zeichen
first_page: Erste Seite (Nummerierung beginnt mit Seite 1) des zu durchsuchenden Textes (Seitentrennner ist Form feed)
last_page: Letzte Seite des zu durchsuchenden Textes (Seitentrennner ist Form feed)
analyse_filename: Falls True, wird als Text der filename verwendet, ansonsten der content
"""
def words(lookups, near=None, near2d=False, nth=None, fuzzyness=0, ignorecase=True, max_char=None, first_page=None, last_page=None, analyse_filename=False):
"""
Ermittelt die im Text vorkommenden Worte aus der Lookupliste
lookups: Liste von Worten, nach deren Auftreten im Text gesucht wird
near: Liste von Worten, in deren Nähe sich ein Datum befinden soll
near2d: Falls True, wird der Abstand zu einm near-Wort als euklidischer ABstand berechnet.
nth: Liefere nur das nte Wort zurück
fuzzyness: Größe der fuzzyness
ignorecase: Ignoriere Groß/Kleinschreibung
max_char: Maximale Anzahl der durchsuchten Zeichen
first_page: Erste Seite (Nummerierung beginnt mit Seite 1) des zu durchsuchenden Textes (Seitentrennner ist Form feed)
last_page: Letzte Seite des zu durchsuchenden Textes (Seitentrennner ist Form feed)
analyse_filename: Falls True, wird als Text der filename verwendet, ansonsten der content
"""
def regex(rex, group=0, subrex=None, replacement=None, nth=None, near=None, near2d=False, fuzzyness=0, ignorecase=True, max_char=None, first_page=None, last_page=None, analyse_filename=False):
"""
Ermittelt die im Text vorkommenden Worte aus der Lookupliste
rex: Regulärer Ausdruck, nach dem im Text gesucht wird
group: Welche Gruppe des Treffers verwendet wird. Falls = 0, wird der gesamte Treffer verwendet
subrex: Falls ein Treffer noch bearbeitet werden soll, enthält subrex den dafür notwendigen reg. Ausdruck
replacement: Ersetzung für den gefunden Teil (subrex) des Treffers
near: Liste von Worten, in deren Nähe sich ein Datum befinden soll
near2d: Falls True, wird der Abstand zu einm near-Wort als euklidischer ABstand berechnet.
nth: Liefere nur den nten Treffer zurück
fuzzyness: Größe der fuzzyness
ignorecase: Ignoriere Groß/Kleinschreibung
max_char: Maximale Anzahl der durchsuchten Zeichen
first_page: Erste Seite (Nummerierung beginnt mit Seite 1) des zu durchsuchenden Textes (Seitentrennner ist Form feed)
last_page: Letzte Seite des zu durchsuchenden Textes (Seitentrennner ist Form feed)
analyse_filename: Falls True, wird als Text der filename verwendet, ansonsten der content
"""
def slice(start=None, end=None, first_page=None, last_page=None, analyse_filename=False):
"""
Ermittelt text[start:end] als python-slice. Gut verwendbar für Dateinamen.
start: Startwert des slice
end: Endwert des slice
first_page: Erste Seite (Nummerierung beginnt mit Seite 1) des zu durchsuchenden Textes (Seitentrennner ist Form feed)
last_page: Letzte Seite des zu durchsuchenden Textes (Seitentrennner ist Form feed)
analyse_filename: Falls True, wird als Text der filename verwendet, ansonsten der content
"""
def part(n, delemiter=None, max_char=None, first_page=None, last_page=None, analyse_filename=False):
"""
Ermittelt den nten Teil der Split-Liste. Gut verwendbar für Dateinamen.
n: n
delemiter: Trenner für die Split-Liste
max_char: Maximale Anzahl der durchsuchten Zeichen
first_page: Erste Seite (Nummerierung beginnt mit Seite 1) des zu durchsuchenden Textes (Seitentrennner ist Form feed)
last_page: Letzte Seite des zu durchsuchenden Textes (Seitentrennner ist Form feed)
analyse_filename: Falls True, wird als Text der filename verwendet, ansonsten der content
"""