Uzgadnianie płatności kryptowalutowych: dopasowanie faktur w stablecoinach do zamówień

Uzgadnianie płatności kryptowalutowych: dopasowanie faktur w stablecoinach do zamówień

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ć.

Podsumowanie wideo, 119 sekund, po angielsku.

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ęć.

PoleCo zawieraDlaczego księgowość tego potrzebuje
invoice_idUnikalny identyfikator nadany przez dostawcęKlucz główny dla każdego wyszukiwania i każdego wiersza w księdze
order_idNumer 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_nameKrótki opis zamówieniaPozwala osobie sprawdzić wyjątek bez otwierania sklepu
fiat_amount, fiat_currencyCena w EURPrzychód, który księgujesz
currency, crypto_amountZafakturowana waluta i należna kwotaPokazuje, o co poproszono płatnika
actual_crypto_amount_paidKwota, która faktycznie dotarłaWykrywa niedopłatę i nadpłatę
currency_paidUżyta waluta, jeśli inna niż zafakturowanaOznacza płatności w błędnej walucie do przeglądu
network, addressSieć blockchain i adres płatnościDowodzi, 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 przelewJedna faktura może otrzymać kilka przelewów; każdy hash to Twój dowód on-chain
statusnew, pending, completed, expired, cancelled, paid_partialDecyduje, czy zaksięgować, wysłać, dochodzić należności czy zamknąć
created_at, updated_at, expires_atZnaczniki czasuGranica 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.

Lista faktur ItisPay pokazująca numer zamówienia, status, kwotę w USDC, sumę w EUR, otrzymaną część, sieć i adres dla każdego zamówienia (dane demonstracyjne)

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:

StatusCo się stałoCo robią finanseWysłać czy zwolnić?
newFaktura otwarta, nic nie wpłynęłoNie ma nic do zaksięgowaniaNie
pendingPrzelew widoczny, jeszcze nieostatecznyPoczekaj na zmianę statusuNie
completedOpłacona w całościZaksięguj przychód po cenie w EUR, zwolnij zamówienieTak
paid_partialWpłynęła część kwotyZażądaj reszty, zwróć wpłatę lub zamknij za porozumieniemZależy
expiredCzas minął bez pełnej płatnościZamknij zamówienie; sprawdź późne przelewyNie
cancelledFaktura unieważniona przez ciebieBrak 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.

  1. Każda faktura może zawierać `callback_url`; dostawca wysyła tam aktualizacje statusu. Traktuj wiadomość jako sygnał, a nie jako dowód.
  2. 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.
  3. 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.
  4. 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.

Pięć kroków, które dopasowują płatność stablecoinem do zamówienia: faktura z numerem zamówienia, przelew on-chain, webhook, ponowny odczyt według identyfikatora faktury, wiersz w księdze w EUR

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ą:

  1. Pobierz z API faktury utworzone lub zaktualizowane od ostatniego uruchomienia i zaktualizuj pliki faktur i transferów.
  2. Sprawdź, czy każda faktura o statusie `completed` ma pasujące opłacone zamówienie w sklepie lub ERP, i odwrotnie.
  3. Obsłuż listę wyjątków: `paid_partial`, płatności na wygasłe faktury, błędne waluty. Zamknij każdy przypadek pisemną decyzją.
  4. 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.
  5. 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.

Często zadawane pytania

Czy klient może wpisać numer zamówienia w transferze USDC?

Nie w standardowym transferze ERC-20: zawiera on tylko nadawcę, odbiorcę i kwotę. Umieść numer zamówienia na fakturze i przydziel każdej fakturze własny adres płatniczy.

Co się dzieje, gdy klient zapłaci dwukrotnie tę samą fakturę?

Drugi transfer pojawia się jako dodatkowa transakcja na fakturze, więc zapłacona kwota jest wyższa niż cena. Traktuj to jako wyjątek nadpłaty: potwierdź z klientem, a następnie zwróć nadwyżkę jako nowy transfer wychodzący i zapisz go przy tej samej fakturze.

Czy powinniśmy ewidencjonować kwotę w kryptowalucie, czy kwotę w euro?

Księguj cenę w euro z faktury, gdy płatność jest rozliczana w euro. Zachowaj kwotę kryptowaluty, walutę, sieć i hash transakcji w osobnych kolumnach jako dowód. Jeśli zamiast tego trzymasz stablecoiny, najpierw uzgodnij z audytorem sposób ich ujęcia w księgach.

Jak długo trzeba przechowywać dokumentację płatności kryptowalutowych?

Zaplanuj co najmniej pięć lat. Tyle wynosi okres, jaki unijne przepisy AML ustalają dla dokumentacji transakcji prowadzonej przez podmioty zobowiązane, a krajowe prawo podatkowe może wymagać dłuższego okresu. Przechowuj razem plik faktur, plik transferów i decyzje dotyczące wyjątków.

Czy płatności stablecoinami mogą trafić do Xero, NetSuite lub QuickBooks?

Tak, jako zaimportowany plik. Eksportuj jedną linię na opłaconą fakturę w euro z identyfikatorem zamówienia i importuj ją tak samo, jak raport rozliczeń płatności kartą. Hashe transakcji trafiają do osobnego pliku dowodowego.

Nik Perkov

Nik Perkov

Founder, ItisPay

Share this article:

The newsletter for crypto entrepreneurs

Join founders and innovators exploring crypto payments. Get insights, product updates, and stories from businesses building the future of digital commerce.

Unsubscribe anytime. By entering your email, you agree to receive marketing emails from ItisPay. By proceeding, you agree to the Terms and Conditions and Privacy Policy.

Ready to launch stablecoin-first payments under your brand?

Stablecoin-first infrastructure with 1:1 EUR/USD backing. Deploy in 1 week. Built for high-volume PSPs and neobanks with zero volatility risk.