Vzájemný zápočet je fiktivní bankovní výpis, kterým jsou prováděny zejména úhrady pohledávek a závazků na principu vzájemných zápočtů. V API k němu slouží evidence vzajemny-zapocet.
ℹ️ Obě strany zápočtu se zakládají jako samostatné doklady a spojuje je shodné číslo zápočtu v elementu <cisSouhrnne>. Strana pohledávek má typPohybu.prijem, strana závazků typPohybu.vydej; částky se uvádějí vždy kladné.
Příprava faktur
Pro ukázku si nejprve založíme vydanou a přijatou fakturu, mezi kterými se bude zápočet provádět:
<?xml version="1.0"?>
<winstrom version="1.0">
<faktura-vydana>
<id>code:FAV1</id>
<typDokl>code:FAKTURA</typDokl>
<bezPolozek>true</bezPolozek>
<sumOsv>100.0</sumOsv>
</faktura-vydana>
<faktura-prijata>
<id>code:FAP1</id>
<typDokl>code:FAKTURA</typDokl>
<cisDosle>F123</cisDosle>
<datSplat>2017-12-31+01:00</datSplat>
<bezPolozek>true</bezPolozek>
<sumOsv>100.0</sumOsv>
</faktura-prijata>
</winstrom>
Provedení zápočtu
Pro připravené faktury lze provést zápočet následujícím způsobem:
<?xml version="1.0"?>
<winstrom version="1.0">
<vzajemny-zapocet>
<id>code:ZAP+0016/2017</id>
<typDokl>code:ZAPOCET</typDokl>
<typPohybuK>typPohybu.prijem</typPohybuK>
<!-- částka úhrady -->
<sumOsv>1.0</sumOsv>
<bezPolozek>true</bezPolozek>
<sparovani>
<uhrazovanaFak type="faktura-vydana">code:FAV1</uhrazovanaFak>
<zbytek>castecnaUhrada</zbytek>
</sparovani>
<!-- číslo zápočtu -->
<cisSouhrnne>ZAP-123</cisSouhrnne>
</vzajemny-zapocet>
<vzajemny-zapocet>
<id>code:ZAP+0017/2017</id>
<typDokl>code:ZAPOCET</typDokl>
<typPohybuK>typPohybu.vydej</typPohybuK>
<sumOsv>1.0</sumOsv>
<bezPolozek>true</bezPolozek>
<sparovani>
<uhrazovanaFak type="faktura-prijata">code:FAP1</uhrazovanaFak>
<zbytek>castecnaUhrada</zbytek>
</sparovani>
<cisSouhrnne>ZAP-123</cisSouhrnne>
</vzajemny-zapocet>
</winstrom>
Může se stát, že částky na uhrazujícím a uhrazovaném dokladu nesouhlasí (zbývá část doplatit). V takovém případě se import řídí hodnotou v tagu <zbytek>. V zápočtech se nejčastěji používají tyto dvě hodnoty:
ne— zbytek nesmí nastat; pokud k němu dojde, jedná se o chybu.castecnaUhrada— pokud je částka na uhrazujícím dokladu menší než na uhrazovaném, jedná se o částečnou úhradu.
ℹ️ Element <zbytek> přijímá stejné hodnoty jako při párování plateb — kromě dvou výše i zauctovat, ignorovat, castecnaUhradaNeboZauctovat a castecnaUhradaNeboIgnorovat. Neplatná hodnota vrátí 400 elementInvalidValue.
Úhrada faktury dobropisem
Pomocí zápočtů lze uhradit i vydanou fakturu s vydaným dobropisem. Částky jsou opět uvedeny obě kladné, dobropis je odlišen typem pohybu — výdej:
<?xml version="1.0"?>
<winstrom version="1.0">
<vzajemny-zapocet>
<typDokl>code:ZAPOCET</typDokl>
<typPohybuK>typPohybu.vydej</typPohybuK>
<bezPolozek>true</bezPolozek>
<sumOsv>1000</sumOsv>
<sparovani>
<uhrazovanaFak type="faktura-vydana">code:DOBROPIS1</uhrazovanaFak>
<zbytek>ne</zbytek>
</sparovani>
<primUcet>code:395000</primUcet>
<protiUcet>code:311001</protiUcet>
<cisSouhrnne>ZAP1</cisSouhrnne>
</vzajemny-zapocet>
<vzajemny-zapocet>
<typDokl>code:ZAPOCET</typDokl>
<typPohybuK>typPohybu.prijem</typPohybuK>
<bezPolozek>true</bezPolozek>
<sumOsv>1000</sumOsv>
<sparovani>
<uhrazovanaFak type="faktura-vydana">code:FAV1</uhrazovanaFak>
<zbytek>ne</zbytek>
</sparovani>
<primUcet>code:395000</primUcet>
<protiUcet>code:311001</protiUcet>
<cisSouhrnne>ZAP1</cisSouhrnne>
</vzajemny-zapocet>
</winstrom>
Odpárování
Analogicky lze provádět i odpárování — místo elementu <sparovani> se použije <odparovani>:
<?xml version="1.0"?>
<winstrom version="1.0">
<vzajemny-zapocet>
<id>code:ZAP+0016/2017</id>
<odparovani>
<uhrazovanaFak type="faktura-vydana">code:FAV1</uhrazovanaFak>
</odparovani>
</vzajemny-zapocet>
</winstrom>
Zápočet více faktur v JSON
Požadavek lze samozřejmě zasílat i ve formátu JSON. Následující příklad řeší tuto situaci:
Na straně pohledávek jsou dvě vydané faktury (VF1-0033/2023 a VF1-0031/2023) o celkové částce 1 210 Kč.
Na straně závazků je jedna přijatá faktura rovněž o celkové částce 1 210 Kč.
Výsledkem je vytvoření obou stran zápočtů, mezi sebou spárovaných pomocí shodujícího se čísla zápočtu (cisSouhrnne):
{
"winstrom": {
"vzajemny-zapocet": [
{
"datVyst": "2023-09-07",
"sumOsv": 1000,
"bezPolozek": true,
"typDokl": "code:ZAPOCET",
"typPohybuK": "typPohybu.prijem",
"sparovani": {
"uhrazovanaFak@type": "faktura-vydana",
"uhrazovanaFak": "code:VF1-0033/2023",
"zbytek": "ne"
},
"cisSouhrnne": "5"
},
{
"datVyst": "2023-09-07",
"sumOsv": 210,
"bezPolozek": true,
"typDokl": "code:ZAPOCET",
"typPohybuK": "typPohybu.prijem",
"sparovani": {
"uhrazovanaFak@type": "faktura-vydana",
"uhrazovanaFak": "code:VF1-0031/2023",
"zbytek": "ne"
},
"cisSouhrnne": "5"
},
{
"datVyst": "2023-09-07",
"sumOsv": 1210,
"bezPolozek": true,
"typDokl": "code:ZAPOCET",
"typPohybuK": "typPohybu.vydej",
"sparovani": {
"uhrazovanaFak@type": "faktura-prijata",
"uhrazovanaFak": "code:PF0016/2023",
"zbytek": "ne"
},
"cisSouhrnne": "5"
}
]
}
}
Zápočet v cizí měně
Vzájemný zápočet lze zakládat i v měně. Spárování následně funguje na stejném principu jako u zápočtů v tuzemské měně — místo sumOsv se uvede sumOsvMen a doplní se kurz a mena:
{
"winstrom": {
"vzajemny-zapocet": [
{
"typDokl": "code:ZAPOCET",
"typPohybuK": "typPohybu.vydej",
"sumOsvMen": 200,
"bezPolozek": true,
"kurz": 23.527,
"mena": "code:EUR"
}
]
}
}
