Zadanie techniczne: narzędzie do porównywania rachunków z bankiem, kartami i księgowym
Ogólny cel
Potrzebne jest lokalne narzędzie (skrypt/mała aplikacja w Pythonie), które uruchamiane ręcznie co 1-2 miesiące na moim komputerze i dokonuje porównania między:
- Rachunkami, które wystawiłem klientom i otrzymałem od dostawców (pliki PDF i zdjęcia paragonów, znajdujące się w poczcie Gmail)
- Wyciągiem bankowym (Excel)
- Wydatkami na kartach kredytowych (Excel, może być kilka plików — kilka kart)
- Plikiem Excel od księgowego, w którym wprowadza rachunki do raportowania w urzędzie skarbowym i VAT
Co powinno robić narzędzie
1. Zbieranie rachunków z poczty (Gmail)
- Połączenie przez Gmail API (OAuth)
- Wyszukiwanie wiadomości za zadany okres (np. ostatnie 2 miesiące) z załącznikami
- Pobieranie załączników: pliki PDF i obrazy (zdjęcia paragonów/rachunków)
- Rozpoznawanie danych z każdego rachunku: data, kwota, nazwa dostawcy/klienta, numer rachunku (jeśli jest)
- Dla PDF — bezpośrednie wydobycie tekstu
- Dla obrazów — rozpoznawanie tekstu (OCR), w tym tekstu w języku hebrajskim
2. Odczyt plików Excel
- Wyciąg bankowy (przychody i wydatki)
- Jeden lub kilka plików wydatków na kartach kredytowych
- Excel od księgowego z listą wprowadzonych rachunków (zawiera tylko kwotę + datę + nazwę kontrahenta, brak jednego numeru rachunku do porównania)
3. Logika porównania
Porównanie rekordów między źródłami według kombinacji: kwota + data (z dopuszczalnym odchyleniem) + nazwa kontrahenta (przybliżone porównanie tekstu, ponieważ nazwy mogą się nieco różnić).
4. Kontrole, które należy wykonać
A. Czy wystawiono rachunki na wszystkie przychody Dla każdego wpływu pieniędzy w banku — sprawdzić, czy istnieje odpowiedni rachunek, który wystawiłem. Jeśli nie — oznaczyć jako "przychód bez wystawionego rachunku".
B. Czy zachowano rachunki na wszystkie uznane wydatki Dla każdego wydatku w banku/na kartach, który należy do kategorii uznanych wydatków — sprawdzić, czy istnieje zachowany rachunek. Jeśli nie — oznaczyć jako "wydatek bez zachowanego rachunku".
C. Porównanie z listą księgowego Porównać listę rachunków, które zebrałem (z poczty), z listą, którą księgowy wprowadził i wysłał do urzędu skarbowego/VAT. Oznaczyć:
- Rachunki, które zebrałem, ale których nie ma w pliku księgowego (możliwe, że nie zostały przekazane lub wprowadzone)
- Rekordy w pliku księgowego, dla których nie znalazł się odpowiedni rachunek w mojej kolekcji
D. Sprawdzenie listy płac Sprawdzić, czy kwota podana w liście płac odpowiada kwocie, która faktycznie została pobrana/otrzymana w banku.
5. Raport końcowy
Wynik — jeden plik Excel z kilkoma arkuszami:
- Przychody bez wystawionego rachunku
- Wydatki bez zachowanego rachunku
- Rachunki, które nie znajdują się u księgowego
- Rekordy księgowego bez odpowiedniego rachunku
- Porównanie listy płac z bankiem
Nieprawidłowości/problematyczne wiersze powinny być wizualnie wyróżnione (kolorem).
Szczegóły techniczne
- Język: Python
- Excel: pandas + openpyxl
- PDF: wydobycie tekstu (pdfplumber/PyMuPDF)
- OCR obrazów: z obsługą hebrajskiego (zaleca się użycie API Claude z obsługą obrazów zamiast klasycznego Tesseract, dla lepszej dokładności z hebrajskim)
- Gmail API: google-api-python-client, OAuth (będzie potrzebne stworzenie projektu w Google Cloud Console — to zostanie zrobione przez zamawiającego/wykonawcę wspólnie)
- Wynik zapisywany jako plik Excel lokalnie na komputerze
- Interfejs: wystarczający interfejs wiersza poleceń (CLI), bez potrzeby w interfejsie webowym
Format dostarczenia
- Źródłowy kod projektu
- Krótka instrukcja uruchomienia (w tym, jak podłączyć swoje Gmail i gdzie umieścić wejściowe pliki Excel)
- Instrukcja tworzenia poświadczeń w Google Cloud Console, jeśli nie zostało to zrobione wcześniej
Dodatkowo
Gotów jestem dostarczyć przykłady struktury plików Excel (bank, karty, plik księgowego) oraz przykłady rachunków (PDF i zdjęcia) do testowania.