Rechnung schwärzen: Fake-Rechnung melden, ohne die Daten des Mandanten herzugeben ================================================================================ Baue mir in einem Durchgang eine einzige Webseite, die Rechnungen schwärzt. Frag nur nach, wo ich selbst etwas tun muss (Hosting, Adresse für Meldungen). Rahmen ------ * eine HTML-Datei, alles läuft im Browser, kein Server sieht je das ungeschwärzte Dokument * Bibliotheken nur von einem CDN mit fester Version: pdf.js (lesen, rastern), pdf-lib (PDF bauen), zxing-wasm (QR, DataMatrix, Strichcodes), tesseract.js mit deutschem Modell (Texterkennung) * Deutsch, zuerst fürs Handy, ruhige Gestaltung: Papierweiß, dunkle Tinte, ein Blau, Pillenknöpfe * eine Beispielrechnung zum Ausprobieren liegt daneben und lässt sich mit einem Knopf laden User Stories ------------ * Betrügerische Rechnungen landen bei Menschen, die sie prüfen lassen * Notar oder Anwalt, der für seinen Mandanten prüft * Verbraucher, der selbst eine bekommen hat * wir, die die Konten der Betrüger sammeln und an Banken melden * Als Notar will ich * eine Fake-Rechnung weitergeben, ohne meine Verschwiegenheitspflicht zu brechen * dass das Dokument meinen Rechner dafür nie verlässt * nicht selbst pixeln müssen * dass weg ist * die Anschrift des Empfängers * der Name des Empfängers * das ganze Geschäfts- oder Kassenzeichen, nicht nur ein HRB-Teil darin * jeder lesbare Code (QR, DataMatrix, Strichcode), denn er trägt fast immer eine Kennung des Mandanten * sehen, was geschwärzt wird, bevor irgendetwas rausgeht, und einzelne Stellen an- und abschalten * eine eigene Fläche mit der Maus ziehen können, wenn etwas übersehen wurde * die geschwärzte Datei für meine Unterlagen herunterladen * Als Verbraucher will ich * die Rechnung ablegen und ohne weitere Klicks ein Ergebnis sehen * einen Scan oder ein Handyfoto genauso nehmen können wie ein PDF * Als Sammler der Betrügerkonten will ich * dass die IBAN immer stehen bleibt, sie ist der Beleg * dass auch Absender mit Anschrift, HRB und USt-IdNr, BIC, Kontoinhaber, Betrag, Rechnungsnummer und Datum bleiben * die IBAN aus einem Girocode gelesen bekommen, bevor der Code geschwärzt wird * dass eine Meldung nur nach Art des Betrugs, Name und Mail fragt; IBAN und Empfänger kommen aus dem Dokument Akzeptanzkriterien ------------------ Echte Schwärzung * nicht pixeln: verpixelter Text lässt sich rekonstruieren, und im PDF bliebe die Textschicht darunter liegen * jede Seite wird gerastert, schwarze Flächen kommen auf das Bild, das Ergebnis hat keine Textschicht und keine Kopfdaten des Originals * die Seite beweist das selbst: sie liest die fertige Datei neu ein und zeigt die Zahl der Zeichen in der Textschicht Null Treffer ist ein Verdacht, kein Erfolg * hat das Dokument keine Textschicht (JPG, eingescanntes PDF), startet die Texterkennung von selbst, etwa 300 dpi, Wörter unter 30 % Sicherheit fallen weg * wurde nichts gefunden, sagt die Seite das laut, fragt vor dem Erzeugen nach, sperrt das Senden und schreibt "diese Datei ist das unveränderte Dokument"; grüne Haken nur, wenn wirklich geschwärzt wurde * steht ein Name im Namensfeld, der im Dokument nicht vorkommt, warnt sie; das Feld wird bei jeder neuen Datei geleert Den Empfänger finden, ohne dass jemand etwas eintippt * im Anschriftenfeld stehen Straße und Ort auf zwei aufeinanderfolgenden Zeilen, im Briefkopf und in der kleinen Absenderzeile über dem Fenster in einer; daran erkennt man das Anschriftenfeld * von der Straße nach oben laufen ergibt Name und Ansprechpartner; diesen Namen im ganzen Dokument suchen (Anrede, Fließtext) * Blöcke wachsen nach unten, nie nach oben: oben steht der Absender, der bleibt * Kennungen unterhalb der Anschrift gehören im Zweifel dem Empfänger, oberhalb dem Absender * Zeilen an breiten waagerechten Lücken in Spalten schneiden, sonst reißt der Kasten für die Anschrift die Rechnungsnummer daneben mit * gibt es weder Anschriftenfeld noch Namen: deutlich sagen und alles vorschlagen, was nach Anschrift oder Kennung aussieht; zu viel kann man wegklicken, eine übersehene Anschrift sieht man nicht Kennungen * Etikett und Wert in einer Zeile ("Kassenzeichen: 7K2L9P - 884210") und Etikett allein mit dem Wert in der Zeile darunter; der zweite Weg ist der wichtigere * die Etikettzeile muss mit dem Etikett enden, damit ein Satz wie "unter Angabe des Kassenzeichens" nichts auslöst IBANs bleiben immer * als harte Sperre, nicht als Nebenwirkung: eine Zeile mit einer IBAN mit gültiger Prüfsumme (mod 97-10) wird nie geschwärzt; trägt dieselbe Zeile eine Kennung, wird sie geteilt * IBANs auch aus dem Fließtext ziehen, nicht nur aus dem QR-Code * aus der Texterkennung mit falscher Prüfsumme: sagen, dass das fast immer ein Lesefehler ist * bei erkanntem Text vergleicht die Namenssuche mit einem falschen Zeichen Toleranz ab sechs Zeichen ("Hol1erbach" findet Hollerbach), bei echter Textschicht streng Fallen, die schon Stunden gekostet haben * ein Code, den zxing nicht entziffern kann, wird nicht automatisch gefunden; die Seite muss dazu auffordern, Reste von Hand zu markieren * Airtable-Formulare nehmen Vorbefüllung für Text- und Auswahlfelder an, für Anhangsfelder nie; wer den Beleg automatisch mitschicken will, braucht einen eigenen Endpunkt * beim Entwickeln liefert der Browser nach Änderungen gern die alte Fassung aus dem Cache Fertig ist es, wenn die Beispielrechnung (zwei Anschriften, zwei HRB-Nummern, ein Girocode) nach einem Klick ohne Empfängeranschrift, ohne Kassenzeichen und ohne QR-Code herauskommt, die IBAN des Absenders lesbar bleibt, und die neu eingelesene Datei 0 Zeichen Textschicht hat. Und wenn ein Handyfoto ohne Textschicht nicht mehr mit grünem Haken unverändert durchrutscht.