SUPERSCAN - Extragere date din facturi și import în programe de contabilitate sau gestiune

Behold, my latest and greatest: https://www.superscan.ro/

Problema pe care o rezolvă este eliminarea semnificativă a muncii cu introdusul manual a facturilor de la furnizori cu cheltuieli, mărfuri, etc. într-o aplicație. Le faci poze sau le scanezi (sau poate furnizorul îți dă deja PDF-uri), SUPERSCAN îți citește datele din ele, apoi tu le imporți pe toate “la grămadă” în aplicația de contabilitate sau gestiune. Deci reduce de câteva zeci de ori timpul necesar introducerii datelor.

Provocarea a fost ca serviciul să fie universal, adică să nu existe nimic hardcoded pentru vreun furnizor anume. Restricțiile sunt ca factura să conțină CIF-ul furnizorului și un tabel cu coloane pentru denumire articol, cantitate, preț fără TVA, valoarea fără TVA, valoare TVA.

L-am testat cu tot felul de facturi pe care le-am avut la îndemână și merge destul de bine. Am o “suită” de teste automate cu vreo 20 de facturi de la furnizori diverși care trebuie să fie parsate corect, dar aș aprecia dacă ați putea să testați și să vedeți dacă extrage datele cum trebuie. Evident ca e loc de îmbunătățire, sunt o grămadă de edge cases, fiindcă mulți fac facturi după cum îi taie capul și nu respectă niște reguli banale.

Tech stack:

  • backend: golang
  • frontend: typescript + svelte
  • dbms: postgresql
  • deployment: containere + kubernetes
6 Likes

Presupun că pentru asta aveai nevoie de asta: Parsare factura TXT in obiect JSON

Poţi da ceva insights despre cumai făcut asta?

1 Like

Tot ce pot să spun este că nu folosesc machine learning sau chestii, și am făcut și refăcut algoritmul de vreo 10 ori până să înceapă să dea rezultate mulțumitoare :grinning:

1 Like

Daca scoti date din imagini, atunci undeva in stack se foloseste machine learning, chiar daca nu direct de tine, ci doar folosesti ceva tool (probabil Tesseract) care se bazeaza pe ML.

1 Like

Ai dreptate. Se folosește ML pentru partea de OCR, dar mai departe, pentru partea de analiză și extragere date, nu.

2 Likes

Daca te saturi sa tot adaptezi algoritmul la tipuri noi de facturi, vrei sa incerci si abordari cu ML si ai nevoie de ajutor, DM me :smiley:

Mersi pentru ofertă, știu că sună foarte ciudat dar scopul a fost să evit cât mai mult partea de ML, nu să o folosesc :yum:

Pe partea de recunoaștere documente folosind ML sunt o grămadă de soluții, dar mie nu mi s-a părut nici una prea precisă, fiindcă toți încearcă să recunoască o grămadă de documente, deci modelul e foarte generic. Testează de exemplu Try it!  |  Cloud Document AI Documentation  |  Google Cloud și să vezi ca rezultatele variază rău de tot.

Nu e ciudat deloc si sunt de acord ca la inceput, pana nu ai date, nici nu are rost deloc sa iti bati capul cu ML.

1 Like

Salutare,

Am o nelamurire. Ce fac in cazul in care furnizorul are denumirile lui de articole pe care le pune pe factura si in programul de gestiune am alte denumiri (pentru ca asa vreau sa le vand mai departe, avand zeci de mii sau sute, trebuie sa le si organizez intr-o alta maniera)? Importul se va face dintr-un fisier xls generat? Nu am reusit sa incarc nicio factura valida ca sa vad ce returneaza site-ul.

1 Like

Ai un tabel cu articolele tale și înca un tabel cu articolele de la furnizori. Articolele tale au niște denumiri, articolele furnizorilor au alte denumiri, dar între ele există niște asocieri. Exemplu din aplicația ROBOCONT:


Vezi articolul servicii transport: la emag are o denumire, la mine are o altă denumire. Pot avea multipli furnizori cu același articol dar care au o denumire diferită, iar toate aceste articole sunt asociate cu un singur articol de-al meu. În momentul în care scanezi o factură, ROBOCONT detectează furnizorul și articolele din factură și știe care sunt asocierile (sau e suficient să le asociezi tu prima dată).

SUPERSCAN funcționează cel mai bine cu facturi PDF text sau scanate folosind un scanner, sunt mulți oameni care au încărcat poze la facturi făcute cu telefonul dar în tot felul de unghiuri și luminozitate ciudate, rezultatele nu sunt prea bune pentru acestea.

Nu e o provocare foarte mare sa convingi oamenii (macar) sa testeze cu facturile lor reale (care contin clienti, cifre, etc.)?

La orice serviciu de acest tip, mie mi se pare cea mai mare provocare sa convingi oamenii ca nu te “uiti” si retii datele lor, intr-un fel sau altul. Stiu ca ai agreement, GDPR, etc. dar nu cred ca e cineva care nu se indoieste.

Te rog sa iei intrebarea mea ca una legitima, sunt interesat in mod real de problema asta (am si eu cateva idei de acest gen), si nu insinuez ca tu ai face ceva necurat.

Din cate stiu e o singura rezolvare: popularitatea produsului. Ceea ce e nu e deloc usor de capatat, decat daca ai contactele potrivite.

Depinde de cât de mult îi pasă fiecăruia de chestiile ăstea. La demo mi s-au încărcat o grămadă de facturi de telefonie mobilă, energie electrică, etc. cu date personale și chestii sensibile. Ceea ce e foarte tare fiindcă facturile ălea sunt foarte specifice pentru serviciile respective, conțin o grămadă de alte detalii pe care o factură obișnuită nu le conține, deci aplicația e complet neoptimizată să citească așa ceva și va da fail aproape mereu.

Am incarcat si eu o factura si a mers OK.

Costurile, insa, mi se par foarte mari. ML-ul de la AWS e de vreo 10 de ori mai ieftin :slight_smile:

Dacă la amazon sau google sau alții găsești mai ieftin și mai bun atunci ar trebui să folosești de acolo.

Din cât am testat eu, ei folosesc o metodă mai generalistă de a extrage datele, care să acopere cât mai multe templateuri și feluri de documente.

Eu targetez o nișă mult mai redusă: facturi emise de firme din România către alte firme din România cu un template cât mai apropiat de standard, cum sunt ăstea: https://www.google.com/search?q=factura&tbm=isch

Ei bine, din cauza asta diferențele de precizie pot varia enorm. Precizia sistemului meu este mult mai înaltă față de precizia altor sisteme atunci când folosești un template similar cu cel standard, fiindcă eu am optimizat algoritmul special pentru asta.

Deci până la urmă depinde de documentele pe care vrei să le scanezi, dacă sunt variate atunci ai nevoie de o soluție mai generalistă, dacă sunt mai specifice atunci ai nevoie de o soluție mai nișată.

Salut,

Arata bine aplicatia, o sa vorbesc cu sotia sa o testeze - e contabil si are tot felul de formate de facturi - si poate testa fara probleme. Revin cu info !

O saptamana buna,
Mihai

1 Like

Foarte bună problema, mi-au mai zis câteva persoane de chestia asta. Am rezolvat asta adaugând un modul cu articole în care se pot crea asocieri între denumirile articolelor de la furnizori și denumirile articolelor clientului (adică ale tale). În momentul în care descarci datele extrase din facturi, aplicația îți înlocuiește automat denumirile articolelor din factura de furnizor cu denumirile articolelor tale.

Sunt curios, ceva interes concret de la clienti? Any closed deals?

1 Like

Îmi pare rău, dar din păcate nu pot oferi statistici.

..

zi nu fara sa zici nu :slight_smile:. nu e nu pot, e nu vreau. ceea ce e ok, dar ai cerut o parere, poti sa dai ceva la schimb.

Sunt unul dintre cei care au incarcat facturi ciudate:

  • ENEL - nu a mers
  • Uber - nu a mers
  • bon fiscal - nu a mers [chiar m-ar fi interesat asta]

Inteleg ca merge cu facturi care respecta un standard. Ca nu exista un standard e partea a doua, cele de la Uber sunt la fel de valabile, dar inteleg la ce te referi - date companii stanga / dreapta, tabel cu produse.

Ce nu inteleg e cui se adreseaza. Publicul tinta e destul de nisat. Majoritatea firmelor iti dau factura (si) in format digital - PDF (si nu PDF cu imagine, ci tabel).

Oricum ar trebui verificate manual informatiile extrase. Si cloud vision si textract mai dau fail si nu cred ca e OK sa te bazezi pe un soft, mai ales pe informatii financiare.

M-as bucura ca “nu pot oferi statistici” sa ascunda un da. Ai muncit ceva acolo, daca rezolva problema cuiva e foarte bine. M-as mira, dar m-as bucura.

M-as mira pentru ca:

  • cine isi face un workflow legat de un serviciu extern nu o face pentru cateva documente
  • pentru mai mult de cateva documente e cam scump [in comparatie cu o solutie generala, dar daca se potriveste la fix pe nevoia cuiva - you have a winner!]
  • nu ai [nu am gasit] API

Il vad mai degraba ca un serviciu pe care il dezvolti pentru nevoia unui client, mi se pare riscant sa-l dezvolti in speranta ca gasesti clienti.


Ca tot ziceam ca am incarcat un bon, cei mai OK pe care i-am gasit sunt tabscanner.com si au pretul ~ cam ca al tau. Am ales cloud vision din cauza costului [pentru 2 proiecte / 2 clienti] - e OK, daca da un fail mai baga bonul o data sau nu primeste premiul sau / si trage o injuratura in gand. Chiar e OK. :slight_smile:

Aplicația funcționează doar cu facturi care au un tabel cu articole cu anumite coloane (scrie mai pe larg în pagina principală), dacă ai încărcat facturi care nu sunt conforme cu această regulă atunci nu va funcționa 100%. Momentan nu se scanează bonuri fiscale sau alte documente în afară de facturi.

Au fost multe persoane care au încărcat facturi de utilități sau similare care au tot felul de informații specifice pentru activitatea respectivă. Dar aplicația nu se adresează persoanelor fizice, ci se adresează firmelor (sau contabililor acelor firme). Sunt multe firme care emit facturi folosind șablonul “clasic”.

Ideea e să fac ceva nișat, specific, și încet-încet să lărgesc spectrul: să mai accept și o factură mai diferită într-un fel sau altul, să accept și un bon fiscal, o chitanță, un extras de cont și așa mai departe.

Deocamdată, pentru facturile care folosesc șablonul respectiv, algoritmul funcționează destul de ok.

Serviciile de extragere date din documente oferite de google sau amazon sau alții sunt destul de bune pentru documente generice, pentru chestii specifice însă vei avea succes mai mare cu un algoritm specific.