Preskoči na glavno vsebino

Párovanie platieb

Ako v REST API párovať platby s dokladmi?

Avtor: Petr Pech

Pokladňu alebo banku je možné spárovať s jednou alebo viacerými faktúrami vydanými alebo prijatými nasledujúcim spôsobom:

<?xml version="1.0"?>
<winstrom version="1.0">
<banka>
<!-- uhrazující doklad; může být i "pokladni-pohyb" -->
<id>code:BANKA1</id>
<!-- lze normálně uvést další vlastnosti dokladu jako při běžném importu -->
<sparovani>
<!-- uhrazovaný doklad; pro uhrazení více faktur se element opakuje
type - ve spárování lze použít pouze faktury stejného typu (vydané nebo přijaté)
castka - (volitelný) určuje částku, která se má z faktury uhradit -->
<uhrazovanaFak type="faktura-vydana" castka="1000">code:FV1</uhrazovanaFak>
<!-- co dělat se zbytkem, pokud nastane -->
<zbytek>ignorovat</zbytek>
</sparovani>
</banka>
</winstrom>


Párovanie viacerých faktúr

V jednom spárovaní je možné uhrádzať viacero faktúr naraz. Pri spárovaní s viacerými faktúrami musia byť všetky uvedené faktúry rovnakého typu faktúry (vydané alebo prijaté). Pri každej uhrádzanej faktúre je možné uviesť atribút castka, ktorého hodnota obmedzuje celkovú sumu na úhradu, ktorá bude z faktúry uhradená.

<?xml version="1.0"?>
<winstrom version="1.0">
<banka>
<id>code:BANKA1</id>
<sparovani>
<!-- uhrazují se dvě faktury najednou -->
<uhrazovanaFak type="faktura-vydana" castka="500">code:FV1</uhrazovanaFak> <!-- z FV1 se uhrazuje 500 -->
<uhrazovanaFak type="faktura-vydana">code:FV2</uhrazovanaFak> <!-- z FV2 se uhrazuje celá zbývající částka -->
<zbytek>ignorovat</zbytek>
</sparovani>
</banka>
</winstrom>

Rovnaká požiadavka vo formáte JSON:

{
"winstrom": {
"banka": {
"id": "code:BANKA1",
"sparovani": {
"uhrazovanaFak": [
{ "@content": "code:FV1", "@type": "faktura-vydana", "@castka": "500" },
{ "@content": "code:FV2", "@type": "faktura-vydana" }
],
"zbytek": "ignorovat"
}
}
}
}

ℹ️ Identifikátor uhrádzanej faktúry je možné v JSON zapísať ako "@content" (kanonický zápis obsahu elementu) alebo priamo ako hodnotu kľúča "uhrazovanaFak" s typom v "uhrazovanaFak@type". Oba zápisy sú rovnocenné — pri neexistujúcom identifikátore vráti server v oboch prípadoch 400 nestedObjectNotFound.

Hodnota atribútu castka nesmie prekročiť zostávajúcu sumu na úhradu na uhrádzanej faktúre. Ak je hodnota atribútu castka menšia ako zostávajúca suma na úhradu, bude táto konkrétna faktúra vždy uhradená ako čiastočná úhrada. Ak je hodnota rovná zostávajúcej sume na úhradu, potom atribút stráca význam a spárovanie prebehne rovnako, ako keby nebol uvedený.


Zvyšok

Môže sa stať, že uhrádzajúca suma na uhrádzajúcom doklade a súčet súm na uhrádzaných faktúrach nesúhlasia (napr. pri kurzovom rozdiele alebo keď chýba doplatiť pár korún). V takom prípade sa import riadi hodnotou v tagu <zbytek>.

Hodnota

Výsledok importu

ne

Zvyšok nesmie nastať. Ak sumy súhlasia, faktúry budú úplne uhradené (alebo čiastočne, ak došlo k obmedzeniu úhrady atribútom castka) a uhrádzajúci doklad bude spárovaný. Ak zvyšok nastane, ide o chybu 400 – Částky na uhrazovaném a uhrazujícím dokladu se neshodují.

zauctovat

Faktúry budú úplne uhradené (alebo čiastočne, ak došlo k obmedzeniu úhrady atribútom castka) a uhrádzajúci doklad bude spárovaný. Pre zvyšok vznikne interný doklad.

ignorovat

Faktúry budú úplne uhradené (alebo čiastočne, ak došlo k obmedzeniu úhrady atribútom castka), ale uhrádzajúci doklad nebude spárovaný. Zvyšok sa ignoruje.

castecnaUhrada

Ak je suma na uhrádzajúcom doklade menšia ako na uhrádzanom, ide o čiastočnú úhradu. Suma uhrádzajúceho dokladu sa postupne „spotrebúva" na úhradu faktúr alebo súm, ktoré sa z nich majú uhradiť, v poradí ich uvedenia v elemente <sparovani>. Faktúra, na ktorú z úhrady už nezostáva dostatočná suma, sa uhradí čiastočne do výšky zostávajúcich prostriedkov; faktúry, na ktoré nezostávajú žiadne prostriedky, sú z párovania vyradené a zostanú neuhradené. Ak je suma na uhrádzajúcom doklade väčšia, ide o chybu 400 – Částečná úhrada nemá smysl, částka na uhrazujícím dokladu je větší než na uhrazovaném.

castecnaUhradaNeboZauctovat

Ak je suma na uhrádzajúcom doklade väčšia ako na uhrádzanom, zvyšok sa zaúčtuje (vznikne interný doklad) a uhrádzajúci doklad bude spárovaný. Ak je menšia, ide o čiastočnú úhradu.

castecnaUhradaNeboIgnorovat

Ak je suma na uhrádzajúcom doklade väčšia ako na uhrádzanom, zvyšok sa ignoruje a uhrádzajúci doklad nebude spárovaný. Ak je menšia, ide o čiastočnú úhradu.

⚠️ Iná ako uvedená hodnota vráti 400 elementInvalidValue: „Hodnota elementu 'zbytek' je neplatná."


Doplnkové parametre spárovania

V tagu <sparovani> je možné navyše uviesť ešte nasledujúce elementy. Nie sú povinné a štandardne sa preberajú z nastavenia firmy.

<!-- kurzový rozdíl, defaultně z nastavení firmy -->
<krTypDokl></krTypDokl> <!-- typ dokladu pro kurzový rozdíl -->
<krTypDoklZisk></krTypDoklZisk> <!-- typ dokladu pro zisk kurzového rozdílu -->
<krTypDoklZtrata></krTypDoklZtrata> <!-- typ dokladu pro ztrátu kurzového rozdílu -->
<krRada></krRada> <!-- řada pro kurzový rozdíl -->

<!-- zbytek, defaultně z nastavení firmy -->
<zbTypDokl></zbTypDokl> <!-- typ dokladu pro zbytek -->
<zbTypDoklZisk></zbTypDoklZisk> <!-- typ dokladu pro zisk zbytku -->
<zbTypDoklZtrata></zbTypDoklZtrata> <!-- typ dokladu pro ztrátu zbytku -->
<zbRada></zbRada> <!-- řada pro zbytek -->


Spárovanie úhrady v domácej mene s faktúrou v cudzej mene

Okrem párovania dokladov v rovnakých menách je možné tiež spárovať pokladňu alebo banku v domácej mene s faktúrami v cudzej mene. Cudzia mena musí byť pre všetky párované faktúry rovnaká. V tomto prípade sa uhrádzajúci doklad automaticky prevedie do cudzej meny v kurze rovnajúcom sa pomeru uhrádzajúcej sumy na banke v domácej mene k celkovej uhrádzanej sume na faktúrach v cudzej mene.


Spárovanie úhrady v cudzej mene s faktúrou v inej cudzej mene

Spárovať je možné aj pokladňu alebo banku v cudzej mene s faktúrou v inej cudzej mene. V tomto prípade program považuje úhradu za kompletnú úhradu 1 : 1 a nedochádza k zmene meny na uhrádzajúcom doklade. Kurzový rozdiel sa vypočítava z rozdielu súm v tuzemskej mene.


Odpárovanie

Analogicky je možné vykonávať aj odpárovanie:

<?xml version="1.0"?>
<winstrom version="1.0">
<banka>
<id>code:BANKA1</id>
<odparovani>
<uhrazovanaFak type="faktura-vydana">code:FV1</uhrazovanaFak> <!-- nepovinné, lze vícekrát -->
</odparovani>
</banka>
</winstrom>

To isté v JSON:

{
"winstrom": {
"banka": {
"id": "code:BANKA1",
"odparovani": {
"uhrazovanaFak": { "@content": "code:FV1", "@type": "faktura-vydana" }
}
}
}
}

Ak nie je uvedený žiadny uhrádzaný doklad, odpária sa všetky, ktoré sú s daným uhrádzajúcim dokladom spárované. Párovanie je idempotentné, t. j. je možné jeho volanie opakovať.


Automatické párovanie

Cez API je možné vyvolať aj automatické párovanie platieb. Službu zavoláte metódou PUT nad evidenciou banky alebo pokladne:

PUT /c/{firma}/banka/automaticke-parovani

Filtrovaním je možné obmedziť úhrady vstupujúce do párovania:

PUT /c/{firma}/banka/{filtr}/automaticke-parovani

Príklad nižšie bude párovať len úhrady zadané od 1. 3. 2020:

PUT /c/{firma}/banka/(datVyst>='2020-03-01')/automaticke-parovani

Pomocou parametrov je možné nastaviť mód párovania, obmedziť, v akých účtovných obdobiach sa budú hľadať doklady na úhradu, a určiť, ako nakladať s rozdielom medzi úhradou a uhrádzaným dokladom:

PUT /c/{firma}/banka/automaticke-parovani
?mod=jenVar
&obdobi=aktualni
&ignorovat-rozdil-castka=1.5
&zauctovat-rozdil=true

Parameter

Hodnoty a význam

mod

Mód automatického párovania: varCasUcet — podľa variabilného symbolu, sumy a účtu; varCas — podľa variabilného symbolu a sumy (predvolená hodnota); jenVar — podľa variabilného symbolu; jenCastka — pripojiť, t. j. párovať, keď súhlasí suma a nesúhlasí VS.

obdobi

V ktorých obdobiach sa budú hľadať doklady na úhradu: aktualni — aktuálne účtovné obdobie; aktualni-predchozi — aktuálne a predchádzajúce účtovné obdobie; vsechna — všetky účtovné obdobia (predvolená hodnota).

ignorovat-rozdil-castka

Aký veľký rozdiel medzi úhradou a uhrádzaným dokladom ignorovať. Predvolená hodnota 0.0 — sumy sa musia zhodovať; v móde jenVar sa nastavenie rozdielu ignoruje. Ide o rozdiel v sume v mene bankového dokladu, teda pri bankovom doklade v EUR a ignorovat-rozdil-castka=1 bude ignorovaný rozdiel 1 EUR.

zauctovat-rozdil

Či sa zaúčtujú doklady, ak dôjde k spojeniu úhrad, keď sumy dokladov nie sú zhodné. Predvolená hodnota true — vznikne interný doklad na rozdiel medzi dokladmi a doklady budú plne spárované.

⚠️ Neplatná hodnota parametra mod alebo obdobi skončí chybou 400. Filter patrí do cesty URL (/banka/(datVyst>='2020-03-01')/…) — ako query parameter ?filter= sa ignoruje.

Ďalej je možné automatické párovanie ovplyvniť pokročilou parametrizáciou. V prípade pokročilého variantu automatického párovania je možné obdobie nastaviť parametrom paramParovaniUhradOmezeniObdobiDrgn s hodnotami aktualni, aktualni-predchozi (predvolené pre aplikáciu) a vsechna (predvolené pre API). Cez API sa parameter zapisuje do evidencie parametr:

<winstrom version="1.0">
<parametr>
<paramK>paramParovaniUhradOmezeniObdobiDrgn</paramK>
<hodnota>vsechna</hodnota>
</parametr>
</winstrom>


Pôvodný spôsob párovania iba cez REST API

Je podporovaný aj zastaraný spôsob, ktorým bolo možné párovať iba cez REST API (nie XML importom), na URL /c/{firma}/parovani-uhrad:

<?xml version="1.0"?>
<winstrom version="1.0">
<sparovani>
<uhrazovanaFak type="faktura-prijata">code:FP1</uhrazovanaFak> <!-- faktura -->
<uhrazujiciDokl type="banka">code:BANKA1</uhrazujiciDokl> <!-- bankovní doklad -->
<zbytek>ignorovat</zbytek> <!-- zbytek ignorovat -->
</sparovani>
</winstrom>

Odpárovanie rovnakým spôsobom:

<?xml version="1.0"?>
<winstrom version="1.0">
<odparovani>
<uhrazujiciDokl>code:foo</uhrazujiciDokl> <!-- povinné -->
<uhrazovanaFak>code:bar</uhrazovanaFak> <!-- nepovinné, lze vícekrát -->
</odparovani>
</winstrom>

📝 Pre nové integrácie použite párovanie cez XML import nad evidenciou banka alebo pokladni-pohyb (príklady vyššie). Zastarané URL /parovani-uhrad zostáva funkčné iba z dôvodu spätnej kompatibility.


Súvisiace

Ste s tem dobili odgovor na svoje vprašanje?