Asystent księgowy AI — dashboard finansowy z Claude Code
Python, OpenAI i VS Code z Claude. Wrzuciłem maile z fakturami, a AI zbudował mi serwer z zakładkami, wykresami i chatbotem, który odpowiada na pytania o finanse firmy.
LiveSales
Maile z fakturami wrzucone do AI. Na wyjściu: dashboard finansowy z chatbotem.
“Miałem ~3000 maili z fakturami, wyciągi z Santandera i zero kontroli nad kosztami. Przepuściłem maile przez OpenAI ($80), dostałem czyste CSV-ki. Potem Claude Code w VS Code postawił mi z tego dashboard na localhost — 2 dni i mam zakładki, filtry, wykresy i AI chat.”
Etap 1: surowe maile
~3000 maili z fakturami ściągniętych ze skrzynki
Etap 2: OpenAI ekstrakcja
AI wyciąga dane z maili do CSV (~$80)
Etap 3: Claude Code
Dashboard z zakładkami, wykresami i AI chat
Problem: faktury w mailach, wydatki w banku, kontrola w głowie
Każdy, kto prowadzi firmę e-commerce, zna ten ból. Faktury przychodzą mailem — dziesiątki miesięcznie. Wyciągi bankowe osobno. Kategorie kosztów? Gdzieś w Excelu albo w głowie.
Faktury — rozproszone po mailach, bez jednego widoku
Wydatki bankowe — wyciąg CSV, zero kontekstu
Matchowanie — który przelew to która faktura?
Pytania — “ile wydałem na logistykę w styczniu?” Brak szybkiej odpowiedzi
Postanowiłem to rozwiązać jednym narzędziem. Nie SaaS-em za 200 zł/msc. Własnym skryptem, zbudowanym z AI w kilka godzin.
Rozwiązanie: jeden plik Python, localhost, AI chat
Całe narzędzie to jeden plik Python (~1100 linii), który uruchamiasz komendą:
python serwer_ksiegowosc.py
I otwierasz http://localhost:8080. To wszystko.
Jak to działa — od danych do dashboardu
Maile z fakturami → OpenAI → CSV
AI wyciąga z maili dane: numer faktury, NIP, kwoty, daty, pozycje. Zapisuje do ustrukturyzowanych CSV.
Serwer Python wczytuje wszystko
Faktury, wydatki bankowe (Santander CSV), przychody, kategorie kosztów — ładowane na żywo przy każdym odświeżeniu.
Automatyczne matchowanie kontrahentów
Łączy faktury z przelewami po NIP-ie i numerze konta bankowego. Wie, kto to jest nawet jeśli dane niespójne.
Embeddingi → indeks wektorowy → AI chat
Każda faktura, wydatek i kontrahent to dokument w indeksie. Pytasz — AI wyszukuje kontekst i odpowiada z danymi.
Co widać na dashboardzie
Serwer generuje pełny frontend HTML z zakładkami. Bez frameworków, bez npm install — czysty HTML + JavaScript + Chart.js.
Kontrahenci
- Lista dostawców z NIP-em i kontem
- Ile faktur, ile przelewów, sumy
- Rozwijane szczegóły po kliknięciu
Faktury
- Tabela z sortowaniem i filtrami
- Status: opłacona / nieopłacona
- Status: zaksięgowana / nie
- Kategoria kosztu przypisana
Wydatki bankowe
- Wszystkie przelewy wychodzące
- Automatycznie powiązane z fakturami
- Kategorie: logistyka, towar, reklama…
Przychody
- Historia wpływów z Santandera
- Nadawca i pochodzenie wpłaty
- Sortowanie po dacie i kwocie
Statystyki
- Wykresy kosztów miesięcznych
- Rozbicie na kategorie (pie chart)
- Saldo: przychody vs wydatki
AI Chat
- Chatbot GPT-4o z kontekstem danych
- RAG: wyszukuje pasujące dokumenty
- ”Ile wydałem na logistykę w Q4?”
AI Chat — najciekawsza część
To nie jest zwykły ChatGPT wklejony na stronę. To RAG (Retrieval-Augmented Generation) — system, który:
Buduje indeks z Twoich danych
Każda faktura, wydatek, kontrahent i podsumowanie miesięczne to osobny dokument. Serwer tworzy z nich embeddingi przez OpenAI.
Wyszukuje kontekst do pytania
Pytasz “ile wydałem na towar w styczniu?” — system szuka 25 najbardziej pasujących dokumentów przez cosine similarity.
GPT-4o odpowiada z danymi
Model dostaje system prompt z kontekstem firmy + znalezione dokumenty. Odpowiada konkretnymi kwotami, nie wymyśla.
Przykład rozmowy
Ile wydaliśmy na logistykę w ostatnim kwartale?
W Q4 2025 koszty logistyki wyniosły łącznie 12 847,32 PLN. Główni dostawcy: InPost (8 faktur, 7 234,50 PLN), DPD (5 faktur, 3 890,00 PLN), Poczta Polska (3 faktury, 1 722,82 PLN).
Które faktury nie są jeszcze opłacone?
Masz 4 nieopłacone faktury na łączną kwotę 3 215,80 PLN. Najstarsza: FV/2025/11/034 od Hurtownia ABC, termin płatności: 15.12.2025 (po terminie).
Matchowanie kontrahentów — inteligentne łączenie danych
Jeden z najtrudniejszych problemów: ta sama firma może pojawiać się pod inną nazwą na fakturze i na wyciągu bankowym.
Serwer rozwiązuje to wielopoziomowo:
Po NIP-ie — najlepsza jakość, jednoznaczna identyfikacja
Po koncie bankowym — łączy przelew z fakturą nawet gdy nazwa jest inna
Po nazwie — fallback, gdy NIP i konto nieznane
Efekt: klikasz na kontrahenta i widzisz wszystkie jego faktury i przelewy w jednym miejscu. Nie musisz niczego ręcznie łączyć.
Jak powiązanie faktura ↔ przelew działa w praktyce
To jest serce całego narzędzia. Wyobraź sobie sytuację:
Przykład: faktura od InPost
Faktura (z maila)
Nr: FV/2025/12/0847
Sprzedawca: InPost Sp. z o.o.
NIP: 6793087624
Konto: 12 3456 7890 …
Brutto: 1 234,56 PLN
Termin: 15.01.2026
Przelew (z banku)
Data: 12.01.2026
Kwota: -1 234,56 PLN
Odbiorca: INPOST SP Z O O
Konto: PL12 3456 7890 …
Tytuł: FV/2025/12/0847
Serwer automatycznie łączy te dwa dokumenty
Matchowanie po koncie bankowym (normalizacja: usunięcie spacji, “PL”, apostrofów). Nawet jeśli nazwa na fakturze to “InPost Sp. z o.o.” a na wyciągu “INPOST SP Z O O” — system wie, że to ten sam kontrahent.
Ale to nie koniec. System buduje pełny obraz każdego kontrahenta:
Ile faktur wystawił i na jaką łączną kwotę
Ile przelewów poszło na jego konto i na jaką sumę
Które faktury są opłacone (przelew powiązany), a które nie
Które faktury są zaksięgowane (z pliku od księgowej), a które czekają
Rozbieżności — jeśli suma faktur ≠ suma przelewów, od razu to widać
Klikasz na kontrahenta w tabeli — rozwija się panel z historią wszystkich faktur i przelewów posortowanych chronologicznie. Widzisz całą relację z dostawcą w jednym miejscu.
Dostęp dla księgowej — kolumna “zaksięgowane”
Jedno z najciekawszych rozwiązań: współpraca z księgową bez dawania jej dostępu do całego systemu.
Jak to działa
Eksportujesz listę faktur do CSV
Dashboard generuje plik z numerami faktur, datami, kwotami i kontrahentami.
Wysyłasz ksiegowej
Księgowa otwiera CSV, zaznacza które faktury zaksięgowała, zapisuje plik.
Wrzucasz plik z powrotem do folderu dane/
Serwer automatycznie wczytuje plik zaksiegowane.csv i aktualizuje statusy.
Dashboard pokazuje co jest zaksięgowane, a co nie
Przy każdej fakturze pojawia się badge: zaksięgowana lub niezaksięgowana
Dlaczego to ważne: Nie musisz logować się do systemu księgowej, żeby wiedzieć co jest zaksięgowane. Nie musisz jej dawać dostępu do Twojego narzędzia. Wymieniacie się jednym plikiem CSV — prosta, bezpieczna współpraca.
Dzięki temu na jednym ekranie widzisz trzy statusy każdej faktury:
Czy jest w systemie?
Faktura wczytana z maila / CSV
Czy jest opłacona?
Powiązanie z przelewem bankowym
Czy jest zaksięgowana?
Status z pliku księgowej
Filtr na górze pozwala wyświetlić np. tylko nieopłacone lub tylko niezaksięgowane — od razu wiesz, co wymaga uwagi.
Kategorie kosztów — dynamiczna klasyfikacja
Kategorie nie są wpisane na sztywno w kodzie. Tworzą się dynamicznie na podstawie danych z faktur — serwer analizuje wczytane dokumenty i automatycznie buduje listę kategorii. Jak dodasz fakturę z nową kategorią, pojawi się na dashboardzie bez zmiany kodu.
W praktyce wygląda to tak — oto przykładowe kategorie, które system wyciągnął z naszych dokumentów:
Dynamiczne kategorie = zero konfiguracji
Nie musisz definiować kategorii z góry. Serwer czyta plik kategorie.csv i buduje strukturę automatycznie. Dodajesz nową kategorię do CSV — dashboard ją podchwytuje przy następnym odświeżeniu.
Dashboard pokazuje wykres kołowy z rozkładem kosztów i wykresy miesięczne z trendem wydatków w każdej kategorii. Od razu widać, na co idą pieniądze.
Jak to zbudowałem — cały proces od zera
To nie była jedna rozmowa z AI. Proces trwał 2 dni i miał 3 wyraźne etapy.
Ściągnięcie ~3000 maili z fakturami
Pierwszy problem: wszystkie dokumenty finansowe siedziały w poczcie email. Faktury od dostawców, potwierdzenia przelewów, rozliczenia — setki maili miesięcznie, lata wstecz. Trzeba było uzyskać dostęp do skrzynki i ściągnąć wszystko w jednym miejscu.
Analiza przez OpenAI — $80 za 3000 dokumentów
Ręczna analiza 3000 maili to tygodnie pracy. Przepuściłem wszystko przez OpenAI — AI wyciągało z każdego maila dane strukturalne: numer faktury, NIP sprzedawcy, kwoty netto/brutto, daty, pozycje, numery kont bankowych. Na wyjściu: czyste pliki CSV gotowe do przetworzenia.
Koszt
~$80
Dokumentów
~3000
Claude Code buduje dashboard z CSV-ek
Dopiero z gotowymi danymi w CSV otworzyłem VS Code z Claude Code. Pokazałem mu pliki, opisałem czego potrzebuję, i zaczęliśmy iterować. Claude widział strukturę danych i pisał kod, który pasował do mojego formatu.
Rozmowa z Claude Code wyglądała tak:
Iterowałem kilka razy, doprecyzowywałem, dodawałem features. Claude widział moje pliki CSV, rozumiał strukturę danych i pisał kod, który od razu działał.
Nie obyło się bez błędów
3-4 faktury miały błędy po analizie OpenAI — źle wyciągnięty NIP, pomylona kwota netto z brutto, brakujący numer konta. To były proste bugi, ale wyłapanie ich i poprawienie zajęło czas. Ważne: AI nie jest bezbłędne. Przy 3000 dokumentów kilka pomyłek to norma — ale i tak zajmuje to godziny zamiast tygodni ręcznej pracy.
Stos technologiczny
Backend
- Python — http.server, zero frameworków
- OpenAI API — embeddingi + GPT-4o chat
- NumPy — cosine similarity na wektorach
- CSV — dane ładowane na żywo
Frontend
- HTML + JS — inline, zero build step
- Chart.js — wykresy z CDN
- Inter font — czysty, profesjonalny wygląd
- CSS variables — spójny design system
Zero zależności frontendowych
Nie ma node_modules, nie ma npm install, nie ma webpacka. Serwer serwuje jeden duży HTML z wbudowanym CSS i JS. Uruchamiasz Pythona i działa.
Sprytne detale
Kilka rzeczy, które Claude dodał, a których sam bym nie wymyślił od razu:
Cache embeddingów — indeks zapisywany do JSON z hashami plików CSV. Jeśli dane się nie zmieniły, nie generuje embeddingów od nowa (oszczędność API).
Deduplikacja faktur — normalizuje numery faktur, usuwa prefiksy typu (s), (k), żeby ta sama faktura nie pojawiła się dwa razy.
Sesje czatu — chat pamięta kontekst rozmowy (do 40 wiadomości). Możesz dopytywać o szczegóły.
Podsumowania miesięczne — serwer automatycznie generuje dokumenty z podsumowaniami per miesiąc (faktury, wydatki, przychody, saldo), żeby AI miał kontekst czasowy.
Normalizacja kont bankowych — usuwa spacje, prefiksy PL, apostrofy. Dzięki temu matchuje konto z faktury z kontem z wyciągu bankowego.
Dane są bezpieczne — wszystko lokalne
Localhost = Twoje dane zostają u Ciebie
Serwer działa na Twoim komputerze. Dane nie idą do żadnego chmurowego SaaS-a. Jedyne połączenie zewnętrzne to OpenAI API — i to tylko po to, żeby stworzyć embeddingi i odpowiedzieć na pytania w chacie.
Możesz wyłączyć chat AI (nie podając klucza API) — dashboard i tak działa w 100%.
Ile to kosztuje
0 zł
Serwer Python
~2 zł/msc
Embeddingi OpenAI
~5 zł/msc
Chat GPT-4o (zależnie od użycia)
Dla porównania: typowy SaaS do zarządzania fakturami to 100-300 zł miesięcznie. Tu masz pełną kontrolę, pełny dostęp do danych i AI chat w cenie kawy.
To dopiero 2. dzień projektu
Projekt żyje i będzie rozwijany
To co widzisz w tym artykule to efekt 2 dni pracy. Nie miesiąca, nie kwartału — dwóch dni z VS Code i Claude Code. I to dopiero początek.
Narzędzie będzie rozwijane wewnątrz firmy. Na liście jest m.in. automatyczny import nowych faktur z maila, alerty o zbliżających się terminach płatności, porównania miesiąc do miesiąca i integracja z systemem księgowym. Każdy nowy feature to kolejna rozmowa z AI — i kolejne kilka godzin zamiast tygodni.
Wnioski
Nie musisz czekać na idealny SaaS. Nie musisz płacić za coś, co nie pasuje do Twojego workflow. Możesz wziąć VS Code + Claude Code, opisać problem po polsku, i mieć działające narzędzie tego samego dnia.
1 plik Python
~1100 linii kodu
Kilka godzin pracy
Zamiast tygodni bez AI
AI chat z RAG
Pytaj o swoje finanse
Najlepsze narzędzia to te, które budujesz pod siebie. AI nie zastąpi księgowej — ale da Ci dashboard, którego żaden gotowy program nie oferuje.
Zainteresowany automatyzacją danych?
LiveSales pomoże Ci zaoszczędzić czas i podejmować lepsze decyzje biznesowe dzięki automatycznym raportom i dashboardom.
Skontaktuj się z namiPodobał Ci się ten artykuł?
Subskrybuj, aby dostawać powiadomienia o nowych artykułach.
Bez spamu. Możesz się wypisać w każdej chwili.