Płatność kartą trafia do Twoich ksiąg dzięki raportowi acquirera, który już wskazuje zamówienie. Przelew USDC dociera do Ciebie z adresem, kwotą i hashem transakcji i na tym koniec. Uzgadnianie płatności kryptowalutowych działa wtedy, gdy faktura zawiera referencję biznesową, ponieważ sam przelew jej nie przeniesie.
Ten przewodnik jest przeznaczony dla zespołów finansowych i operacyjnych sprzedawców, dostawców usług płatniczych (PSP) i instytucji pieniądza elektronicznego (EMI), które przyjmują stablecoiny i rozliczają się w euro. Wymienia pola, jakie powinien zawierać każdy rekord faktury, opisuje sposób obsługi płatności częściowych i w niewłaściwej walucie, wyjaśnia, jak webhooki i API zasilają księgę, oraz wskazuje unijne przepisy decydujące o tym, jak długo wszystko to przechowywać.
Najważniejsze momenty
W skrócie
- Transfer ERC-20 zawiera wyłącznie nadawcę, odbiorcę i kwotę. Numer zamówienia musi znajdować się na fakturze, a nie w płatności.
- Wyceń fakturę w EUR i zaksięguj tę kwotę w euro. Kwota w kryptowalucie to wartość pochodna, którą zachowujesz w ścieżce audytu.
- Większość pracy przypada na wyjątki: płatności częściowe, wygasłe faktury, błędną walutę. Przeglądaj je codziennie, nie na koniec miesiąca.
- Użyj webhooka jako wyzwalacza, ponownie odczytuj fakturę po ID jako źródło prawdy i pobieraj listę faktur co noc jako zabezpieczenie oraz źródło eksportu CSV.
Dlaczego uzgadnianie płatności kryptowalutowych jest trudniejsze niż w przypadku kart?#
Uzgadnianie płatności kryptowalutowych jest trudniejsze, ponieważ transakcja blockchain nie ma pola na numer zamówienia. W Ethereum standard tokenów ERC-20 (EIP-20) definiuje zdarzenie transferu jako `Transfer(address _from, address _to, uint256 _value)`: kto wysłał, kto otrzymał i jaka kwota. Nie ma tam pola na notatkę, numer faktury ani nazwisko klienta.
Płatności bankowe i kartowe są zbudowane odwrotnie. Przelew SEPA ma pole tytułu, które płatnik wypełnia, a raport rozliczeniowy acquirera wymienia każdą transakcję kartową wraz z Twoim numerem sprzedawcy. Twój system księgowy dopasowuje dane właśnie po tym numerze.
Przy stablecoinach dochodzą jeszcze trzy przeszkody:
- Kwota rzadko jest okrągła. Faktura na 250 EUR wyceniona w USDC staje się kwotą w rodzaju 279,2846 USDC, więc dwie faktury o zbliżonej wartości mogą wyglądać podobnie.
- Płatność nie jest od razu ostateczna. Ethereum tworzy blok co 12 sekund, ale według ethereum.org (strona zaktualizowana w październiku 2026) „do sfinalizowania bloku Ethereum potrzeba około 15 minut”. Przelew może być widoczny i mimo to nie liczyć się.
- Płatnicy popełniają błędy. Wysyłają za mało, wysyłają dwa razy, wysyłają inną walutę albo płacą po wygaśnięciu faktury.
Dlatego powiązanie musi istnieć, zanim płatnik zapłaci: jedna faktura na jedno zamówienie, zawierająca Twój identyfikator zamówienia i własny adres płatności, tak aby każdy przychodzący przelew trafiał na rekord, który już wie, czego dotyczy.
Jakie pola musi zawierać rekord każdej faktury kryptowalutowej?#
Każda faktura potrzebuje stałego zestawu pól, które łączą cztery elementy: Twoje zamówienie, cenę w euro, transakcję on-chain i ostateczny status. Jeśli brakuje któregokolwiek, ktoś musi dopasowywać dane ręcznie. Poniższa tabela używa nazw pól API faktur ItisPay; inni dostawcy używają innych nazw dla tych samych pojęć.
| Pole | Co zawiera | Dlaczego księgowość tego potrzebuje |
|---|---|---|
| invoice_id | Unikalny identyfikator nadany przez dostawcę | Klucz główny dla każdego wyszukiwania i każdego wiersza w księdze |
| order_id | Numer zamówienia lub umowy, unikalny dla każdego zamówienia | Łącznik z Twoim ERP, sklepem lub CRM; referencja, którą karty dają za darmo |
| order_name | Krótki opis zamówienia | Pozwala osobie sprawdzić wyjątek bez otwierania sklepu |
| fiat_amount, fiat_currency | Cena w EUR | Przychód, który księgujesz |
| currency, crypto_amount | Zafakturowana waluta i należna kwota | Pokazuje, o co poproszono płatnika |
| actual_crypto_amount_paid | Kwota, która faktycznie dotarła | Wykrywa niedopłatę i nadpłatę |
| currency_paid | Użyta waluta, jeśli inna niż zafakturowana | Oznacza płatności w błędnej walucie do przeglądu |
| network, address | Sieć blockchain i adres płatności | Dowodzi, dokąd wysłano pieniądze; potrzebne do każdego śledzenia lub zwrotu |
| transactions (tx_hash, amount, status) | Jedna linia na każdy przychodzący przelew | Jedna faktura może otrzymać kilka przelewów; każdy hash to Twój dowód on-chain |
| status | new, pending, completed, expired, cancelled, paid_partial | Decyduje, czy zaksięgować, wysłać, dochodzić należności czy zamknąć |
| created_at, updated_at, expires_at | Znaczniki czasu | Granica odcięcia na koniec miesiąca i dowód, kiedy zamówienie zostało opłacone |
Dwa z tych pól wykonują większość pracy. `order_id` to referencja, której transakcja blockchain nie może przenieść, więc ustawiaj ją w swoim własnym systemie i dbaj, by była unikalna dla każdego zamówienia, a nigdy dla klienta. Lista `transactions` ma znaczenie, ponieważ faktura nie zawsze jest opłacana jednorazowo: każdy przelew dostaje własny wiersz z hashem i statusem, dzięki czemu widzisz, z których przelewów składa się zapłacona kwota.
Przechowuj kwotę w kryptowalucie z wszystkimi miejscami po przecinku w osobnej kolumnie. Twoja księga główna działa w eurocentach; kolumny kryptowalutowe są dowodem, a nie wartościami księgowymi.

Którą kwotę w euro księgować?#
Księguj cenę w euro z faktury. Gdy faktura jest wystawiona w EUR, dostawca przelicza ją na kwotę w kryptowalucie po bieżącym kursie, a płatnik wysyła tę kwotę. Jeśli płatność zostanie rozliczona na konto w euro, kwota w euro z faktury jest twoim przychodem, a kwota w kryptowalucie to szczegół techniczny tego, jak pieniądze dotarły.
Dlatego zespoły, które przyjmują płatności kryptowalutowe automatycznie z przeliczeniem na EUR, rzadko w ogóle potrzebują księgowości kryptowalut: nie ma monety w bilansie do wyceny na koniec miesiąca.
Sytuacja zmienia się, jeśli zatrzymujesz stablecoiny. Komitet ds. Interpretacji MSSF orzekł w czerwcu 2019 roku, że posiadane kryptowaluty podlegają MSR 2 (zapasy), gdy są przeznaczone do sprzedaży w ramach zwykłej działalności, a w pozostałych przypadkach MSR 38 (wartości niematerialne i prawne). Jego definicja kryptowaluty wyklucza aktywa, które tworzą umowę między posiadaczem a inną stroną. USDC jest inny: Circle podaje, że jest „wymienialny w stosunku 1:1 na dolary amerykańskie”, a od lipca 2024 roku Circle wydaje USDC i EURC w UE jako tokeny pieniądza elektronicznego na podstawie licencji na pieniądz elektroniczny wydanej przez francuskiego regulatora ACPR. Sposób klasyfikacji zatrzymanego stablecoina to pytanie do twojego audytora. Rozliczenie w EUR od razu po wpływie płatności sprawia, że problem nie występuje.
Jak obsługiwać płatności częściowe i błędne monety?#
Traktuj każdą fakturę, która nie ma statusu `completed`, jako wyjątek z przypisanym właścicielem i terminem. Większość wysiłku związanego z uzgadnianiem płatności kryptowalutowych dotyczy właśnie tego; w pełni opłacona faktura uzgadnia się sama.
Oto, co każdy status oznacza dla finansów, przy użyciu statusów ItisPay:
| Status | Co się stało | Co robią finanse | Wysłać czy zwolnić? |
|---|---|---|---|
| new | Faktura otwarta, nic nie wpłynęło | Nie ma nic do zaksięgowania | Nie |
| pending | Przelew widoczny, jeszcze nieostateczny | Poczekaj na zmianę statusu | Nie |
| completed | Opłacona w całości | Zaksięguj przychód po cenie w EUR, zwolnij zamówienie | Tak |
| paid_partial | Wpłynęła część kwoty | Zażądaj reszty, zwróć wpłatę lub zamknij za porozumieniem | Zależy |
| expired | Czas minął bez pełnej płatności | Zamknij zamówienie; sprawdź późne przelewy | Nie |
| cancelled | Faktura unieważniona przez ciebie | Brak wpisu; wystaw ponownie, jeśli klient nadal chce zapłacić | Nie |
Płatności częściowe#
Płatność częściowa zwykle oznacza, że portfel lub giełda płatnika pobrała opłatę od kwoty, albo płatnik wpisał ją błędnie. ItisPay rejestruje każdy przelew osobno, więc drugi przelew może domknąć fakturę. Faktura ma też ustawienie `allowed_error_percent`: niewielką tolerancję, ustawianą dla każdej faktury, dzięki której płatność brakująca o ułamek nadal liczy się jako opłacona. Ustaw ją raz jako zasadę, na przykład na poziomie, który firma odpisałaby także przy przelewie bankowym, i nie zmieniaj jej indywidualnie dla każdego przypadku.
Jeśli reszta nigdy nie dotrze, rozstrzygnij w ustalonym terminie w dniach: zaakceptuj brakującą kwotę i ją odpisz, zwróć wpłaconą kwotę albo anuluj zamówienie. Zapisz decyzję w rekordzie faktury, aby audytor widział, dlaczego za opłaconym zamówieniem stoi mniejsza kwota.
Zła moneta lub późna płatność#
Gdy płatnik wysyła inny stablecoin niż ten, na który wystawiono fakturę, pokazuje to pole `currency_paid`. Nie księguj tego automatycznie: sprawdź kwotę i wartość w euro, a potem zaakceptuj wpłatę albo ją zwróć. Podobnie jest z przelewem na wygasłą fakturę. Pieniądze są on-chain, ale zamówienie jest zamknięte, więc ktoś musi zdecydować, czy otworzyć zamówienie ponownie, czy zwrócić środki. Jeśli po twojej stronie zamówienie zostało unieważnione, anuluj fakturę przez API (aktualizacja statusu), aby twoje rejestry pokazywały ją jako zamkniętą, zanim dotrze późna płatność.
Jak webhooki i API zasilają uzgadnianie płatności kryptowalutowych?#
Stosuj trzy warstwy: webhook informuje cię, że coś się zmieniło, świeży odczyt faktury mówi, co jest prawdą, a nocne pobranie wszystkich faktur wychwytuje wszystko, co pierwsze dwa mechanizmy przeoczyły.
- Każda faktura może zawierać `callback_url`; dostawca wysyła tam aktualizacje statusu. Traktuj wiadomość jako sygnał, a nie jako dowód.
- Przy każdym webhooku wywołaj `GET /invoices/{invoice_id}` i działaj na podstawie statusu oraz kwot z tej odpowiedzi. Chroni to przed sfałszowanymi lub powtórzonymi wywołaniami twojego endpointu, ponieważ wywołanie API wymaga twojego klucza API.
- Uczyń obsługę idempotentną: ten sam status może przyjść dwa razy. Kluczuj wpis w księdze po `invoice_id` plus status, aby powtórzenie niczego nie zmieniało.
- Każdej nocy wypisuj faktury posortowane według `updated_at`, od najnowszych, i cofaj się aż do ostatniego uruchomienia; sprawdzaj też ponownie każdą fakturę wciąż mającą status `new`, `pending` lub `paid_partial`. Porównaj je ze swoją księgą. Wszystko, co jest opłacone w rejestrach dostawcy, a otwarte w twoich, jest wyjątkiem.
Do testów ItisPay ma endpoint, który symuluje zmianę statusu faktury, oraz endpoint, który ponownie wysyła ostatni webhook według `invoice_id` lub `order_id`. Użyj ponownego wysłania, gdy twój serwer był niedostępny. Zespoły, które kierują kilka metod płatności przez jedną warstwę orkiestracji płatności, stosują ten sam schemat dla każdej ścieżki.

Jak zbudować eksport CSV do księgowości?#
Zbuduj eksport z API listy faktur, jeden wiersz na fakturę plus jeden wiersz na transfer. W ItisPay `GET /invoices` filtruje według statusu, waluty i daty utworzenia, sortuje według daty lub kwoty i zwraca do 100 faktur na stronę wraz z liczbą stron. Prosty skrypt może przejść przez strony za dany dzień lub miesiąc i zapisać kolumny z tabeli pól powyżej.
Dwa pliki działają lepiej niż jeden:
- `invoices.csv`: invoice_id, order_id, fiat_amount, fiat_currency, currency, crypto_amount, actual_crypto_amount_paid, status, created_at, updated_at. To jest plik, który księgowy importuje i dopasowuje do sprzedaży.
- `transfers.csv`: invoice_id, tx_hash, amount, currency, transfer status, time. To jest plik dowodowy dla audytora.
Zaimportuj plik faktur do narzędzia księgowego tak, jak raport rozliczeń płatności kartą: jedna linia na zamówienie, w euro, z identyfikatorem zamówienia jako kluczem dopasowania.
Jakie przepisy UE kształtują ewidencję płatności kryptowalutowych?#
Trzy przepisy UE wyznaczają ramy. Żaden z nich nie czyni ze sprzedawcy dostawcy usług w zakresie kryptoaktywów (CASP), ale determinują, jakie dane istnieją i jak długo są przechowywane.
- Rozporządzenie o transferze środków (UE) 2023/1113. Od 30 grudnia 2024 r. dostawca usług w zakresie kryptoaktywów płatnika musi zapewnić, że każdemu transferowi towarzyszą informacje o płatniku i beneficjencie, takie jak imiona i nazwiska oraz adresy w rejestrze (ledger) (art. 14). Dane podróżują razem z transferem, a nie wewnątrz niego. W przypadku transferów powyżej 1 000 EUR do portfela self-hosted lub z niego dostawca po odpowiedniej stronie musi ocenić, czy portfel należy do jego własnego klienta (art. 14 i 16). To zadanie licencjonowanego dostawcy i jeden z powodów, dla których płatność może zostać wstrzymana do weryfikacji.
- Przechowywanie dokumentacji. Zgodnie z obowiązującą dyrektywą AML (UE) 2015/849, art. 40, podmioty zobowiązane przechowują dokumentację transakcji przez pięć lat od zakończenia stosunku gospodarczego lub dokonania transakcji. Nowe rozporządzenie AML (UE) 2024/1624 utrzymuje pięcioletni okres (art. 77) i stosuje się od 10 lipca 2027 r.
- DAC8, dyrektywa (UE) 2023/2226. Od 1 stycznia 2026 r. dostawcy usług w zakresie kryptoaktywów raportują transakcje kryptowalutowe swoich użytkowników organom podatkowym. Twoja własna ewidencja powinna być zgodna z tym, co zgłasza dostawca.
Jeśli działasz przez licencjonowanego partnera, to partner ponosi obowiązki CASP wynikające z MiCA i tych przepisów, jak wyjaśniamy w naszym przewodniku po licencji MiCA CASP. Nadal prowadzisz własną ewidencję zamówień i swoją część ścieżki transakcji.
Gdzie w uzgadnianiu płatności kryptowalutowych nadal potrzebny jest człowiek?#
Automatyzacja obsługuje przypadek w pełni opłaconych faktur. Reszta wymaga wyznaczonej osoby odpowiedzialnej i krótkiej polityki na piśmie.
Gdzie to nie pomaga
- Zwroty to nowe transfery wychodzące, a nie cofnięcia. Wymagają wypłaty na adres lub IBAN oraz własnej ewidencji.
- Płatnika wysyłającego z konta na giełdzie nie zawsze da się zidentyfikować po adresie nadawcy. Dopasowuj po fakturze, nigdy po nadawcy.
- Płatności na wygasłą fakturę, duplikaty płatności i błędne waluty wymagają decyzji człowieka.
- Opłaty sieciowe i zaokrąglenia powodują drobne różnice. Ustal tolerancję raz i trzymaj się jej.
Codzienna rutyna uzgadniania płatności kryptowalutowych w pięciu krokach#
Krótka codzienna rutyna sprawia, że zamknięcie miesiąca staje się formalnością:
- Pobierz z API faktury utworzone lub zaktualizowane od ostatniego uruchomienia i zaktualizuj pliki faktur i transferów.
- Sprawdź, czy każda faktura o statusie `completed` ma pasujące opłacone zamówienie w sklepie lub ERP, i odwrotnie.
- Obsłuż listę wyjątków: `paid_partial`, płatności na wygasłe faktury, błędne waluty. Zamknij każdy przypadek pisemną decyzją.
- Dopasuj rozliczenie w euro na swoim koncie bankowym do sumy zrealizowanych faktur za okres. Rozliczenie na IBAN to miejsce, w którym wirtualne IBAN-y pomagają rozdzielać przepływy według linii biznesowych.
- Archiwizuj oba pliki przez co najmniej pięć lat.
Jeśli chcesz przyjmować stablecoiny i otrzymywać euro bez budowania tego zaplecza samodzielnie, ItisPay dostarcza API, fakturowanie i dane do uzgadniania: identyfikatory faktur i zamówień, hashe transferów, statusy oraz webhooki. Licencjonowanie, KYC i rozliczenie na Twój IBAN realizowane są przez naszego licencjonowanego w UE partnera CASP i instytucję płatniczą, a większość zespołów przechodzi od KYB do pierwszej transakcji w mniej niż tydzień.
Niniejszy artykuł ma wyłącznie charakter informacyjny i nie stanowi porady prawnej ani regulacyjnej.


