tsunami
Goto Top

Belegerfassung per App

Hallo zusammen,
kennt jemand die Möglichkeitz einer Belegerfassung per App in Verbindung mit einer definierbaren Datenbankverbindung?

Was will ich?
Ich bekomme eine Quittung, egal ob digital oder per Post. Smartfon raus, Foto machen, Foto analysieren und intelligent den Betrag, den Absender, Umsatzsteuer, Datum und den Gegenstand rausziehen und in eine vordefinierte Datenbank schreiben.

Eine Idee ist, wie bei den Banken: Dort kann ich meines Wissens die Auszüge/Umsätze in eine Art Postkorb liefern lassen und diesen dann per CronJob abrufe lassen.
Billomat zB macht sowas, keine Ahnung wie gut die sind, schreiben dass aber direkt in Ihre DB, die ich dann übers Web öffnen kann.

Es müsste dann zB ein automatischer Export als csv erfolgen, die kann ich dann wiederum einlesen, also per ftps oä Oder die csv wird per Email ersendet und ich extrahiere den Anhang dann. den Filter müsste man einmal festlegen, also Feldname beim Export = lastname, bei mir name, firstname=vorname usw.

Any idea?
mfG
tsunami

Content-Key: 603873

Url: https://administrator.de/contentid/603873

Printed on: April 16, 2024 at 05:04 o'clock

Mitglied: 145916
145916 Sep 11, 2020 updated at 10:50:30 (UTC)
Goto Top
Ich mach das mit einer normalen Dokumenten-Scanner APP (ScanPro) die den SCAN per OCR verarbeitet und automatisch als PDF in meinen Cloud-Speicher hochlädt. Dort wartet ein inotify Folder-Watcher und liest den Text des PDF aus, extrahiert die gewünschten Stellen per Regex und packt das in eine Datenbank der Wahl. Trotzdem ist OCR nicht immer zu 100% zuverlässig, deswegen ist nachträgliche menschliche Kontrolle nötig, das mach ich dann über ein eigenes Webinterface das mir die noch nicht überprüften Belege vorlegt.
Member: tsunami
tsunami Sep 14, 2020 updated at 07:30:13 (UTC)
Goto Top
Das ist schon mal ein Ansatz. Danke. inotify Folder-Watcher habe ich noch nie gehört.
Aber das hört sich nach dem an, was ich möchte!
Weil manuell erfassen macht keiner. dazu einige Fragen:
Und das erkennt zB Betrag , brutto, netto, Absender usw.?
Einen inotify, ist wenn ich es richtig verstanden habe, zB ein Script welches Anzahl, 'Änderungsdatum und Größe von vorhandenen Dateinen im Folder was weiß ich "Belege" liest und mit vorhandenen Werten in der Datenbank vergleicht.

Also sowas wie stand am 12.09.20 = 5 Dateien, Amazon.pdf, Ebay.pdf, Karstadt.pdf, Aldi.pdf und Lidl.pdf. Größe 20kb, 30,kb, 40 kb, 50 kb, 60 kb und alle vom 1.09.20
Stand vom 13.09.20 = Dann wird was hochgeladen und das Script sieht, OK, Nun ist Datei Hornbach.pdf und Amazon.pdf hinzugekommen, vom 10.09.20 und 11.09.20
Soweit verstanden und das kriege ich hin.
Aber
und liest den Text des PDF aus, extrahiert die gewünschten Stellen per Regex

ist der Knackpunkt. Ich mus doch dem Block Absender (amazon) ein DB Feld zuordnen, zb kreditor.Betreff (Festplatte), Betrag. Die Erkenung , denke ich läuft über KI und Lernen. Wenn der keine Ahnung grundsätzlich 10 Mio Amazon Rechnungen gescannt hat, weiß der wie eine Amazon Rechung aufgebaut ist und wo der Betrag steht, das Logo usw.

Ich habe etliche OCR-Versuche hinter mir und habe als Ausgabe Excel / csv gewählt. Ergebnis waren zwar die Zahlen und Werte
A1: Amazon
B1 Markus Meier
C1 99 €
D1 118 €
E1 Festplatte 2 TB
Aber da kann doch ich so nichts mit anfangen... An irgend einem Punkt muss doch die Zuordnung erfolgen.

mfG
tsunami
Member: tsunami
tsunami Sep 14, 2020 at 10:36:03 (UTC)
Goto Top
Also,
ich bin seit Stunden am Googln.
Mein Ansatz:
Test Amazon
Suchen nach Straße/Weg/Platz/Str + Zahl zwischen "> und </p => suche nach Absender  
Suche nach Zahl,Zahl und € zwischen "> und </p => 3 Zahlen 1. Brutto, 2. Netto, 3. UST, größte Endbetrag, 2. größte Nettobetrag..  
Suche nach Zahl% => Prozentwert UST
Suche nach >Januar, Februar,… < oder .>1. oder .01.01-31.12.ZahlZahl< => Datum

Nun brauche ich eigendlich noch einen pdf2html Konverter. Und die Suche macht mich gerade wahsinnig. Das erste Ergebnis: Irgendwelche exe-Files zum Ausführen unter Linux, die ich dann via php aufrufen soll.
Das zweite Ergebnis: Irgenwelche Libarys, die alle anfangen mit include/vendor/autoload.php Nur sämtliceh Pakete die ich runtergeladen hatte zu der Lösung enthalten keine autoload.php
Diese beiden Lösungen waren immer verlinkt.
Manchmal über Umwege. Aber letztendlich bin ich immer auf github gelandet, bei demselben Artikel.

Zusammenmüsste sowas sein wie lese Ordner, Dateien ins Array, Ist schon da-> löschen, ansonsten inb html-konvertieren und nach obrigem Muster die Infos rausziehen und wegschreiben.
Wo bekomme ich eine komplette Libary her?
mfG
tsunami
Mitglied: 145916
145916 Sep 14, 2020 updated at 13:25:53 (UTC)
Goto Top
ich bin seit Stunden am Googln.
Alles was du brauchst ist :
Regular Expressions Tutorial

Regex kannst du in jeder gängigen Script oder Programmiersprache nutzen...
Member: tsunami
tsunami Sep 14, 2020 at 13:32:41 (UTC)
Goto Top
Hi,
vielen Dank für den Hinweis. Im zweiten Schritt genau richtig. Zuerst muss ich aber doch das pdf umwandeln, oder nicht?
mfG
tsunami
Mitglied: 145916
145916 Sep 14, 2020 updated at 13:39:57 (UTC)
Goto Top
Zitat von @tsunami:
vielen Dank für den Hinweis. Im zweiten Schritt genau richtig. Zuerst muss ich aber doch das pdf umwandeln, oder nicht?
Ja logisch, aber das ist ja der einfachste Schritt, entweder OCR drüber lüppen lassen oder mit pdftotext den output parsen und gut is.
Member: tsunami
tsunami Sep 14, 2020 at 13:58:39 (UTC)
Goto Top
Waow, das ist schnell! face-smile
Ich hatte oben einen ersten Ansatz gezeigt. Da war die Idee zB den Part zwischen ">Rudolf Meier Bergstraße 12 48291 München</p> anhand von "straße" als Absender zu indendifizieren. Dazu brauche ich natürlich die html-Tags um das ganze einzugrenzen.
WIe geschrieben habe ich dutzende Lösungen ausprobiert und alle wollte mittels Composer andere Apps erweitern (Contao, Typo3 usw.) oder aber die Scripte verwiesen auf autoload.php , nur die gabs nicht im heweiligen zip...
Ich kann natürlich via Scanner oder App ein Ocr machen,nur dann hatte ich (als csv) Zeile 1 Amazon
Zeile 11 13.09.20
Zeile 19 USB-Stick
Zeile 42 13,99 €
Zeile xxx...

Also keine Begrenzungszeichen um den String eingrenzen zu können. ansonsten wird es schwierig. da zb Anette Droste Hülsoff Straße sind 4 Wörter, Karlstraße ist nur 1.
Daher die Idee das Ganze als pdf hoch zu laden, via php einzulesen, in html, zu wandeln, die Infos via regex zu extrahieren und dann dann die html zu löschen
mfG
tsunami
Mitglied: 145916
145916 Sep 14, 2020 updated at 14:05:02 (UTC)
Goto Top
Dazu brauche ich natürlich die html-Tags um das ganze einzugrenzen.
Nö, wozu?? Du brauchst nur mal das Regex Tutorial durcharbeiten dann erledigen sich deine Fragen ganz von alleine.
in html, zu wandeln
Zu umständlich gedacht.
Also keine Begrenzungszeichen um den String eingrenzen zu können. ansonsten wird es schwierig. da zb Anette Droste Hülsoff Straße sind 4 Wörter, Karlstraße ist nur 1.
Wenn du Regex erst mal eingehend kennen gelernt hast ist das auch kein Problem mehr das in einen variablen Pattern zu pressen.
Member: tsunami
tsunami Sep 14, 2020 at 14:10:39 (UTC)
Goto Top
Ok, ich schaus mir an.
mfG
tsunami
Member: tsunami
tsunami Sep 16, 2020 at 13:27:48 (UTC)
Goto Top
Guten Tag,
ich habe das Ganze nun durchgearbeitet. Sehr gute Seite! Nimmt einem so ein bisschen die Angst vor RegEx.
Trotzdem bleibt meine Frage:
Wenn ich Text habe, irgendwo habe ich dann zB
Kundennummer 1234
Datum
Firmenname
Diese Infos können vor oder nach der Absenderzeile stehen
Holzwurm Augustin Wibbelt Straße 25 12345 Berlin, (Ich weiß, dass das der Absender ist)
Danach komme ich als EMpfänger.
Thomas Mustermann
Wingelgassse 12
32344 London

Wenn ich nun das Ganze in einen RegEx packe, muss ich das Ganze doch eingrenzen. Grundsätzlich würd eich suchen nach "...weg oder straße oder platz + Leerzeichen + Hausnummer + Plz +x Zeichen"
Plz ist fix, klar 5 Zeichen, Hausnummern kann ich auch eingrezen. Aber zb Bauernschaften enthalten kein "weg" oder "straße".
Selbst wenn ich dann davon ausgehe, dass der Absender immer als eine Zeile steht mit "|", "-" oder " " zwichen den Wörtern, kannic doch nicht als Trenner den Zeilenumbruch am Anfang und Ende nehmen, oder?
Vor der Hausnummer steht Text von fast belieber Länge. Also Absendername, Straßennahme. Selbst die ANzahl der Wört ist nicht eingrenzbar.
Holzwurf Wingelgasse 12, sind min 2 Wörter, aber zB Firma Holzwurm Wingelgasse 12 oder Holzwurm die Nummer 1, Wingelgasse 12 oder
Kommen Sie zu Holzwurm Wingelgasse 12, kann der doch nicht entscheiden.
Das nächste ist doch, wie soll im Text unterschieden werden zwischen Telefonnummer und Plz?
Muss ich dann wieder unterscheiden zwischen PLz (fix 5 Zahlen) und Telefon? Da kann ja jemand auch die Durchwahl 02345 32344 wie soll ich dass mit Regex abfangen? Muss dass auch hier über Zeilenumbruch laufen, dan fixes Muster der PLZ + irgendwas bis zum nächsten Zeilenumbruch ist der Ort?
Daher ja die Überlegung das Ganze via html zu lösen, da ich in meinen Beispielen immer vor jeder Zeile ein "<p>" und nach jeder Zeile ein "</p>" hatte, so dass ich suchen konnte nach Pflicht <p>+ PLZ + irgendwelcher Text bis zum </p> = plz Ort.
In der Regel ist vor dem Ort ja die Straße. a müsste ich dann als "Teiler" die Plz nehmen und davor ein Zeilenumbruch bis zum vorherigen Zeilenumbruch = Straße Hausnummer?
Ist das der Weg?
mfG
tsunami
Member: tsunami
tsunami Oct 07, 2020 at 09:09:01 (UTC)
Goto Top
Guten Morgen,
also ich bin nach vielen Suchen und probieren nicht weitergekommen. Der Dreh fehlt mir.
Wie soll denn die Suche unterscheiden zwischen
Winkelgasse 12 (Straße)
und Golf 5 (Artikel) oder Schrauben M12 123 Stck
Ich suche nach beliebigen Worten + Suchmuster Hausnummer. Hausnummer kann ich eingrenzen: Max 3 Nummern + max 2 Buchstaben.
Danach Zeilenumbruch festes Suchmuster nach Postleitzahlen (genau 5 Ziffern) dann Ort.
Das heißt doch die einzigen festen Muster ist Plz.
Müsste also heißen suche irgendwelche Zeichen (Absendername) Leerzeichen Straße / Bauernschaft Hausnummer Leerzeichen oder Zeilenumbruch plz Ort.
Peter Maier Winkelgasse 12 12345 Berlin ist relativ einfach.
Microsoft GmbH & Co Kg Westerode 23-28 12343 Berlin fast unmöglich...
Dann müsste ich ja schon eine Datenbank mit allen Orten Deutschlands hinterlegen und dann ie gesamte Zeile ls Absender nehmen, falls ich annehme das dieser immer ein einer Zeile steht.
mfG
tsunami