Rechnungserkennung und Textextraktion – Systembeschreibung
Schritte des gemeinsamen Erkennungsprozesses, Sammel-Einreihung, die zwei Hintergrundaufgaben (Erkennung, PDF-Text) und die Rechte der Text-Endpunkte.
Die Rechnungserkennung läuft über einen gemeinsamen Einstiegspunkt (Erkennungsbibliothek run()), manuell für ein Dokument oder als Hintergrundaufgabe für viele. Eine neue Rechnung entsteht ausschließlich über die Methode addInvoice() des Finanzmoduls.
Datenmodell
Die Tabellennamen tragen in der Datenbank das eigene Präfix der Installation.
| Tabelle | Rolle |
|---|---|
doc | recog_status, recog_note, content_text, text_status |
doc_link | Verknüpfung Dokument ↔ Rechnung (Typ invoice_image) |
invoice | die erkannte Rechnung (mit Positionen, über das Finanzmodell) |
company | Ergänzung von Partnerdaten |
cron_queue | Aufgaben doc_recognise, doc_text |
Erkennungsschritte
- Bereichsprüfung; Zusammenführen früherer Kopien derselben Datei.
- Existiert eine verknüpfte Rechnung, entsteht keine neue (beim technischen Kunden nur Kundentausch, bei verknüpfter Rechnung Ergänzung).
- Text: Textebene → lokales OCR → bei Bedarf ein kostenpflichtiges Sprachmodell; Proforma-Erkennung (wird keine Rechnung); Rechnungs-Vorprüfung.
- Auslesen; wenn vollständig (
verified): Zuordnung zu einer bestehenden oder neue Rechnung überfinance/invoice::addInvoice(),doc_link+ Typinvoice_image, Partnerdatenergänzung, Abgleich von Spiegelrechnungen. - Ergebnis: strukturierte Antwort (Status, doc_id, invoice_id, Änderungen), Protokoll,
setRecogResultam Dokument.
Hintergrundaufgaben
bulkrecognise: max. 2000 Dokumente; fehlende, im Papierkorb liegende oder bereichsfremde werden übersprungen (protokolliert); je Unternehmen eine Erkennungszeile (queueRecognition) und eine Aufgabedoc_recognisemit der Listedoc_ids.doc_recognise(einmalig, je Unternehmen): Stapel zu 25 im Zeitbudget, das gemeinsamerun()im eingeschränkten Systemkontext (nur Dokumente des Unternehmens der Aufgabe, ohne Löschen, mitclassify-Vorfilter); Erfolg ins Systemprotokoll, Fehler ins Fehlerprotokoll; Benachrichtigung am Ende eines Sammellaufs.doc_text(einmalig, je Dokument; vom Upload eingereiht): lädt die PDF lokal oder aus Drive, extrahiert mit einem PDF-Parser, speichert incontent_text;text_status1 = extrahiert, 2 = kein extrahierbarer Text; die temporäre Datei wird gelöscht.
Text-Endpunkte
extracttext: ein oder mehrere Dokumente (der Client sendet in Stapeln);textOf()→saveExtractedText(); Zählwerte incounts.textcontent: der gespeicherte Text; aussagekräftige Meldung bei JSON-Kodierungsfehlern; ohne Recht ist das Abzeichen nur eine Beschriftung.
Berechtigungen
recogniseinvoice(UNMAPPED) + Coremodify; gesammeltcanBulkAction(recogniseinvoice).- Die Bibliothek erhält vom Aufrufer: Bereichsunternehmen,
documentdelete,finance/invoicerepointundstatusdelete(Neuaufbau),company/companyedit. textextract(nicht im Katalog), gesammeltcanBulkAction(textextract);textview(BASE); Bereich je Dokument.- Voraussetzung: OCR- und Sprachmodell-Einstellungen für das kostenpflichtige Auslesen.