Nordlet

← Blog

Stripe Connect Marketplace Accounting Workflow

A practitioner's guide to posting charges, fees, transfers, refunds, disputes, and reserves into a marketplace ledger that reconciles cleanly.

Nordlet Team · · 12 min. čtení

Většina účetních problémů na tržištích má svůj původ v jediné chybě: vnímání výplaty ze Stripe (Stripe bank payout) jakožto tržby. Výplata je čistým zůstatkem desítek samostatných ekonomických událostí a její zaúčtování jako jediné položky výnosů vymaže provizi platformy, závazek vůči prodejci a všechny poplatky či spory, které jsou v ní skryté. Správný pracovní postup rozkládá výplatu na jednotlivé složky dříve, než cokoliv vstoupí do hlavní knihy.

Tato příručka sleduje každou kategorii zůstatkových transakcí ve službě Stripe Connect do jejího správného účetního umístění: pohledávky, výnosy z provizí, závazky vůči prodejcům, náklady na zpracování a dohadné položky. Jako mechanismus zaúčtování využívá zdokumentované koncové body (endpoints) pro import a vypořádání v aplikaci Nordlet, obsahuje vzorový příklad vypořádání a končí kontrolním seznamem pro odsouhlasení, který můžete spustit před každou uzávěrkou.

Před navrhováním cehokoliv urči model platby ve službě Connect

Účetní pravidla nelze sepsat, dokud neznáte model platby (charge model), který jednotlivé platební toky využívají. Tento model určuje, na čí straně zůstatku ve službě Stripe se platba projeví, kdo nese poplatky a kam se nejdříve promítnou refundace a spory.

Model Connect Platba vytvořena na Nese poplatky Stripe Refundace/spory snižují Účetní důsledek
Přímé platby (Direct charges) Propojený účet (Connected account) Konfigurovatelné pro každou stranu Zůstatek propojeného účtu Platforma účtuje svůj aplikační poplatek jako výnos; platební aktivita prodejce probíhá převážně na účetní knize propojeného účtu
Cílové platby (Destination charges) Platforma, s okamžitým převodem na jeden propojený účet Platforma Platforma Platforma účtuje pohledávku za zákazníkem a poplatek Stripe; podíl prodejce je závazkem, nikoliv výnosem
Samostatné platby a převody (Separate charges and transfers) Platba na platformě, poté jeden nebo více samostatných převodů Platforma Platforma Platba a převody prodejci jsou samostatné události; závazek vůči prodejci se sleduje nezávisle na platbě zákazníka

Oficiální dokumentace služby Stripe týkající se toho, jak platby fungují v integraci Connect, potvrzuje, že v případě cílových plateb a samostatných plateb s převody nese poplatky za zpracování, refundace a zpětné platby (chargebacks) zůstatek platformy. U přímých plateb přijímá platbu propojený účet a poplatky mohou být strženy kterékoliv straně.

Praktické pravidlo zní: neříkejte, že „výplata ze Stripe je tržbou prodejce“ nebo že „prodejce platí poplatky“, dokud nemáte pro každý tok písemně stanovený model plateb. Tento model ukládejte společně s každou transakcí. Míchání přímých a cílových plateb pod jediné účetní pravidlo je nejrychlejší cestou k nesprávnému vykazování výnosů i závazků.

Tato příručka předpokládá použití cílových plateb nebo samostatných plateb a převodů, protože právě v těchto případech nese účetní zátěž zůstatek platformy a zde se také buduje většina účetních knih tržišť.

Před importem jediného řádku namapujte tok peněz

Než vůbec zahájíte import, nakreslete si pro každý tok jednostránkovou mapu transakcí:

Zákaznická platba
  -> Stripe platba / zůstatková transakce platby
  -> Stripe poplatek
  -> aplikační poplatek platformy (provize)
  -> převod na propojený účet
  -> refundace nebo spor (pokud je relevantní)
  -> výplata ze Stripe (Stripe payout)
  -> příchozí platba na bankovní účet

Každá šipka představuje samostatnou zůstatkovou transakci s vlastním ID, kategorií, částkou a daty. Se zůstatkem ve službě Stripe zacházejte jako s clearingovým účtem bankovního typu: platby přitékají dovnitř, poplatky a převody odtékají ven a výplata přesouvá zbytek do skutečné banky. Dokumentace bankovních a platebních importů v aplikaci Nordlet doporučuje přesně tento postup pro běžnou činnost služby Stripe.

Zvolte správnou zdrojovou sestavu ze služby Stripe

Pro dávky vypořádání s automatickými výplatami použijte položkovou sestavu vypořádání výplat ze služby Stripe (Payout reconciliation, itemized). Poskytuje jeden řádek na zůstatkovou transakci, seskupuje řádky podle položky reporting_category, ke každé přiřazuje identifikátor automatic_payout_id a poskytuje celkové hrubé částky, poplatky a čisté součty. Průvodce výběrem sestav ve službě Stripe tuto sestavu dokumentuje a potvrzuje pole charge_id, connected_account_id a destination_payment_id jako dostupné pole pro službu Connect.

Pokud automatické výplaty nejsou povoleny (v některých případech ručních výplat), použijte raději sestavu zůstatku (Balance report). Souhrn výplat v uživatelském rozhraní (Dashboard) nepovažujte za dostatečný doklad pro zaúčtování. Souhrn prokazuje pouze celkovou výši dávky, avšak jednotlivé složky vysvětluje výhradně položková sestava.

Stripe doporučuje provádět klasifikaci spíše podle pole reporting_category než podle staršího pole type, přičemž každý řádek nese ID source, které se propojuje se základním objektem. Mějte na paměti časové omezení: Stripe uvádí, že data denních sestav jsou obvykle k dispozici následující den do poledne a okamžité výplaty nelze čistě přiřadit k jednotlivým transakcím, takže vyžadují oddělené odsouhlasení historie transakcí.

Klasifikujte každou zůstatkovou transakci podle kategorie

Jako primární klasifikátor použijte pole reporting_category a následně zkontrolujte hodnoty source_id, charge_id a popisy. Klíčové mapování vypadá následovně:

Činnost ve službě Stripe Kategorie výkaznictví (Reporting category) Účetní výklad
Zákaznická platba, platební karta nebo lokální platební metoda charge Zákazníkem hrazená pohledávka nebo vypořádání prodeje
Refundace refund Storno původní zákaznické platby
Poplatek za zpracování zadržený službou Stripe fee Náklady na zpracování plateb
Aplikační poplatek platformy platform_earning Výnosy z provizí
Refundovaný aplikační poplatek platform_earning_refund Snížení výnosů z provizí
Převod na propojený účet transfer Snížení závazku vůči prodejci
Stornovaný převod transfer_reversal Inkasu z propojeného účtu
Zpětná platba (Chargeback) dispute Ztráta ze zpětné platby; prověřte zdrojový objekt sporu
Vyhraný nebo stornovaný spor dispute_reversal Zpětné získání dříve zaúčtované ztráty ze zpětné platby
Výplata do banky payout Pohyb peněz v bance, nikoliv výnos
Stornovaná výplata payout_reversal Návrat peněz na zůstatek ve službě Stripe
Zadržená rezerva connect_reserved_funds / risk_reserved_funds Omezené prostředky, ve výchozím stavu se nejedná o náklad
Inkasování dlouhodobě záporného zůstatku connect_collection_transfer Událost financování nebo vymáhání vyžadující politiku řízení rizik

Jedno varování ohledně terminologie: starší pole type u zůstatkových transakcí používá pro stejné události jiné názvy, mezi nimi payment, application_fee a adjustment. Dokumentace typů zůstatkových transakcí ve službě Stripe uvádí oba slovníky. Nemíchejte hodnotu pole type do pravidla založeného na poli reporting_category a nevymýšlejte si kategorie jako dispute_loss, které Stripe neexportuje. Pokud export obsahuje označení, které neznáte, zachovejte exportovanou hodnotu a ověřte ji oproti zdrojovému objektu.

Účtujte běžnou činnost tržiště do hlavní knihy

Pro platformu využívající cílové platby nebo samostatné platby a převody vypadají koncepční zápisy následovně.

Zákaznická platba (peníze zákazníka vstupují do clearingového zůstatku ve službě Stripe):

Má dáti Clearing Stripe        Hrubá zákaznická platba
    Dal Obchodní pohledávky     Hrubá zákaznická platba

Poplatek za zpracování ve službě Stripe:

Má dáti Náklady na poplatky Stripe      Poplatek Stripe
    Dal Clearing Stripe                 Poplatek Stripe

Nekompenzujte poplatek Stripe proti výnosům, pokud vaše účetní pravidla výslovně nevyžadují a nepodporují čistou prezentaci (net presentation).

Provize platformy (vaše výnosy, vydělené z částky, která by jinak byla dlužná prodejci):

Má dáti Závazek vůči prodejci     Částka provize
    Dal Výnosy z provizí          Částka provize

Převod prodejci (vyrovnání dlužné částky, nejedná se o náklad):

Má dáti Závazek vůči prodejci     Částka převodu
    Dal Clearing Stripe           Částka převodu

Převod není nikdy automaticky nákladem. Podíl prodejce se stává závazkem v okamžiku, kdy platba dorazí, a převod tento závazek uhrazuje. Pravidla zaúčtování vypořádání v aplikaci Nordlet se tímto řídí: řádky platform_earning se účtují do výnosů z provizí, zatímco řádky transfer snižují závazek vůči prodejci. Zdokumentované výchozí účtovací klíče jsou settlements.commissionRevenue (výchozí 5001), settlements.sellerPayable (výchozí 4499), settlements.fees (výchozí 6800) a settlements.suspense (výchozí 4440), přičemž každý z nich lze přepsat pro jednotlivé společnosti prostřednictvím pravidel účtování v API aplikace Nordlet.

Zpracovávejte refundace proti původnímu prodeji, nikoliv jako volné bankovní položky

Refundace je propojena s původní platbou nebo fakturou. Koncepčně:

Má dáti Refundace / storna prodejů    Částka refundace
    Dal Obchodní pohledávky            Částka refundace

Skutečný zápis závisí na tom, zda byl prodej zaúčtován do výnosů, zda je nutné provést storno DPH a zda byl refundován aplikační poplatek platformy. Jediná refundace může vygenerovat storno pohledávky, storno daně, refundaci aplikačního poplatku, storno převodu nebo snížení závazku vůči prodejci a vliv na poplatek Stripe, který je nutné ověřit, nikoliv předpokládat.

Časová pěst na oko: refundace se často vypořádá v pozdější výplatě než původní platba. Upřednostněte položkovou sestavu pro odsouhlasení výplat před syntetizovanou refundací z exportu na úrovni plateb. Dokumentace aplikace Nordlet výslovně varuje, že refundace syntetizovaná z exportu plateb (Payments export) je pouze odhadem, pokud se refundace vypořádává později. Importér vypořádání může načíst řádek refundace, spárovat jej s původním prodejem a po zaúčtování dávky stornovat pohledávku.

Přistupujte ke sporům odděleně od refundací

Spor je nárokem držitele karty nebo vydávající banky a služba Stripe může před vyřešením strhnout jak spornou částku, tak poplatek za spor. U cílových plateb a samostatných plateb s převody strhává Stripe obojí ze zůstatku platformy v souladu se svými pokyny pro refundace a spory. Platforma se může pokusit o získání prostředků zpět stornováním převodu prodejci.

Prohraný spor z pohledu platformy:

Má dáti Ztráta ze zpětných plateb / znovu otevřená pohledávka    Sporná částka
Má dáti Náklady na poplatky za spory                            Poplatek za spor
    Dal Clearing Stripe                                         Kombinovaná částka

Pokud ztrátu nese prodejce a zpětné získání je potvrzeno:

Má dáti Závazek vůči prodejci / účet vymáhání   Vymahatelná částka
    Dal Inkasování zpětných plateb              Vymahatelná částka

Neúčtujte zpětné získání prostředků od prodejce jen proto, že bylo požádáno o storno převodu. Ověřte, zda bylo storno vytvořeno, zda proběhlo úspěšně a zda se objevuje v zůstatku ve službě Stripe. Pokud je spor vyhrán, Stripe vrátí spornou částku prostřednictvím řádku dispute_reversal; stornujte ztrátu ze zpětné platby a odděleně vyřešte případný poplatek za spor, který Stripe nevrací. Nordlet páruje řádky zpětných plateb pomocí identifikátoru charge_id dříve spárované platby, a to buď ze stejného souboru, nebo z dřívějšího importu.

Vzorový příklad vypořádání

Vezměme si jednu dávku automatických výplat. Položková sestava obsahuje:

  • Řádek charge: hrubá částka 100,00, poplatek Stripe 3,20, čistá částka 96,80
  • Řádek platform_earning: 15,00, provize platformy
  • Řádek transfer: 81,80 pro propojeného prodejce
  • Řádek refund z dřívějšího prodeje: hrubá částka 20,00, vypořádávaná v této dávce
  • Řádek payout: celková částka dávky směřující do banky

Složení výplaty v souladu s identitou vypořádání ve službě Stripe:

Hrubé platby                  100,00
- refundace                    20,00
- poplatky Stripe               3,20
- převody                      81,80
= čisté do zůstatku platformy  -5,00

Řádek platform_earning nepřesouvá peníze podruhé. Určuje částku 15,00, která zůstává v zůstatku platformy po odečtení poplatku a převodu prodejci, takže platforma může zaúčtovat výnosy z provizí namísto jejich odvozování.

Zde převod prodejci plus refundace převyšují čistou platební aktivitu, takže dávka má mírně záporný zůstatek, který snižuje příští výplatu nebo čerpá ze zůstatku. Zaúčtovaný deník stornuje refundovanou pohledávku, zaúčtuje výnosy z provizí ve výši 15,00, zaznamená náklady na poplatky ve výši 3,20, sníží závazek vůči prodejci o částku převodu a zaúčtuje storno refundace. Bankovní položka odpovídá čisté částce, která dorazí na účet. Žádná jednotlivá položka se nerovná „tržbě“, což je hlavním smyslem.

Import a zaúčtování prostřednictvím koncového bodu vypořádání v aplikaci Nordlet

Pro odsouhlasení na úrovni výplat použijte:

POST /v1/bank/settlements/import

s poskytovatelem Stripe a položkovým souborem CSV. Nordlet seskupuje řádky podle identifikátoru automatic_payout_id, mění každou výplatu v dávku vypořádání s celkovou hrubou částkou, poplatky a čistým součtem, přeskakuje opakované importy již zaúčtované výplaty, vynechává řádky payout ze složení vypořádání a automaticky páruje řádky plateb, refundací a sporů pomocí objednávek, faktur, objektů PaymentIntent, plateb, zdrojů nebo odkazů na metadata. Stripe dělí položkovou sestavu do jednoho souboru na sekci, takže importujte soubory plateb, refundací a poplatků společně: řádky patřící k výplatě, která již byla importována, ale ještě nebyla zaúčtována, se sloučí do stávající dávky. Jedná se o pracovní postup importu a zaúčtování řízený soubory a koncovými body vypořádání, nikoliv o živý konektor ke službě Stripe; stránka funkcí uvádí, co stránka bankovních a vypořádacích operací pokrývá.

Párujte v tomto pořadí: platby k fakturám, refundace k původním platbám, spory k původním platbám, řádky provizí k zacházení s provizí. Poplatky Stripe, úpravy, rezervy a řádky výplat ponechte mimo párování faktur. Slovník platebního odsouhlasení v aplikaci Nordlet uvádí, že řádky poplatků a úprav nelze z podstaty věci párovat s fakturami; nevyřešené peněžní položky směrujte do dohadných účtů. Ruční úpravy se provádějí pomocí bank/settlements/match { lineId, invoiceId }, přičemž hodnota invoiceId nastavena na null slouží ke zrušení párování.

Poté zaúčtujte jednu vyrovnanou dávku:

POST /v1/bank/settlements/post

Tím se vytvoří jeden vyrovnaný deník, vypořádají se spárované faktury, zaúčtuje se na má dáti účet hlavní knihy bankovního účtu čistá výplata, na má dáti poplatky, na dal se sníží pohledávky za platby, stornují se pohledávky za refundace a zpětné platby, nespárované platby tržiště se rozdělí mezi výnosy z provizí a závazky vůči prodejcům, pokud je zadán parameter commissionPercent, a neroyřešené částky se odešlou na dohadný účet. Na dohadný účet rovněž zamíří jakákoliv kategorie, kterou systém nepozná, přičemž odpověď tyto kategorie uvede ve varování namísto jejich tiché akceptace.

Kontrolní seznam pro odsouhlasení

Před každou uzávěrkou proveďte tyto kontroly:

  • Žádné duplicitní balance_transaction_id
  • Žádná duplicitní dávka vypořádání (provider, payout_id)
  • Součet čistých hodnot řádků (net) se rovná čisté hodnotě dávky
  • Čistá hodnota dávky se rovná bankovní výplatě, s výhradou časového nesouladu a měnové politiky
  • Každá refundace má původní platbu nebo zaznamenanou výjimku
  • Každý spor má odkaz na spor nebo platbu
  • Každý převod má ID propojeného účtu
  • Každý řádek platform_earning má definované zacházení s provizí
  • Dohadný účet má nulový zůstatek nebo je plně prověřen, včetně všech nerozpoznaných kategorií uvedených ve varování k zaúčtování
  • Závazek vůči prodejci není záporný bez schválené zálohy nebo politiky vymáhání
  • Zaúčtované dávky nelze tichým způsobem znovu importovat ani zaúčtovat
  • Výplata v jiné měně, než je základní měna společnosti, se přepočítá kurzem platným ke dni výplaty, přičemž rozdíl oproti vlastnímu kurzu každé faktury se zaúčtuje jako realizovaný kurzový zisk nebo ztráta; výplata míchající více měn je při importu odmítnuta

Odsouhlasení provádějte na třech úrovních: na úrovni řádků (každá transakce má zachováno ID, kategorii, částku, měnu a zdroj), na úrovni výplat (položkové čisté součty se rovnají výplatě ze služby Stripe a příchozí platbě v bance) a na úrovni hlavní knihy (zaúčtovaný deník je vyrovnaný a generuje zamýšlené pozice výnosů, poplatků, pohledávek, závazků vůči prodejcům a dohadných položek). Specificky u zůstatků prodejců ověřte, že počáteční závazek vůči prodejci plus nový podíl prodejce, mínus převody a platná storna, se rovná konečnému závazku vůči prodejci.

Opakující se problém v účetnictví každého tržiště je stejný jako na začátku: sloučení strukturované výplaty do jediného čísla. Udržujte jednotlivé složky oddělené, každou zakotvěte ke stabilnímu identifikátoru Stripe a nechte dohadné účty podržet cokoliv, co ještě nedokážete vysvětlit. Čistá uzávěrka je to, čemu auditor uvěří.

FAQ

Je výplata ze Stripe tržbou platformy?

Ne. Výplata je souhrnem plateb, refundací, poplatků za zpracování, převodů prodejcům, sporů a úprav, které se shodou okolností vypořádaly ve stejné dávce. Její zaúčtování jako jediné položky výnosů vymaže závazek vůči prodejci a v ní skryté náklady na zpracování. Pro zprostředkovatelské tržiště (agent marketplace) jsou tržbou provize, které identifikují řádky platform_earning.

Oproti které sestavě ze služby Stripe bych měl provádět odsouhlasení?

Oproti položkové sestavě odsouhlasení výplat (Payout reconciliation, itemized), protože poskytuje jeden řádek na zůstatkovou transakci s polem reporting_category, identifikátorem automatic_payout_id a hrubými, poplatkovými i čistými částkami. Souhrn výplat v uživatelském rozhraní (Dashboard) prokazuje pouze celkovou výši dávky. Pokud automatické výplaty nejsou povoleny, použijte místo toho sestavu zůstatku (Balance report).

Měl by být převod prodejci zaúčtován jako náklad?

Ne. Podíl prodejce se stává závazkem v okamžiku, kdy zákaznická platba dorazí, a převod tento závazek uhrazuje. Zaúčtování převodů jako nákladů by vedlo k dvojímu započtení nákladů a zanechalo by závazek vůči prodejci trvale nadhodnocený.

Co se stane s řádkem ze služby Stripe, jehož kategorii importér nepozná?

Zaúčtuje se na dohadný účet vypořádání, ve výchozím stavu 4440, a odpověď na zaúčtování vrátí varování uvádějící kategorie, které tam zamířily. Rezervy a neobvyklé úpravy obvykle končí tímto způsobem, což je záměrné: peníze zůstávají viditelné a deník zůstává vyrovnaný, dokud někdo nerozhodne, kam patřící.

Jak se postupuje s refundacemi, které se vypořádají v pozdější výplatě?

Dorazí jako řádek refund v položkové sestavě pozdější výplaty a jsou spárovány zpět s původní platbou pomocí identifikátoru charge_id dříve spárované platby. Refundace syntetizovaná z exportu plateb na úrovni plateb (Payments export) je v tomto případě pouze odhadem, takže položková sestava je bezpečnějším zdrojem.

Další čtení