Evidujete v ABRA Flexi velký počet zaměstnanců s nepravidelným pracovním poměrem a hodinovou mzdou? Rádi byste se při výpočtu mezd vyhnuli ručnímu zadávání odpracovaných hodin? Nechte zaměstnance evidovat svou pracovní dobu v docházkovém systému a data z něj automaticky načítejte do ABRA FlexiBee. K evidenci pracovní doby lze využít například šikovnou cloudovou aplikaci prima:Time.
Výhody evidence docházky v prima:Time Vám představí stránka modulu Attendance. Jak pomocí rozhraní REST API přenést výsledná čísla do ABRA Flexi si ukážeme na následujících řádcích.
Získání potřebných mzdových složek z ABRA Flexi
Nejprve je nutné z Flexi načíst mzdové složky, které budete měnit. Pro zpětný zápis totiž potřebujete ID, které k nim má Flexi přidělené. Celou práci lze zjednodušit tím, že do dat z Flexi doplníte potřebné číslo a pošlete data zpět.
Z evidence mzdova-slozka ve Flexi načtete potřebné mzdové složky. Data, která potřebujete, získáte použitím jednoduché filtrace. Budete potřebovat získat složky pro konkrétní rok a měsíc a také jen složky HODINOVÁ MZDA. Dotaz do API FlexiBee tedy bude vypadat například takto:
GET /mzdova-slozka/(cisMzdSloz = 'code:HODINOVÁ MZDA' and rok = 2017 and mesic = 1).json?detail=custom:id,osoba(osbCis,jmeno,prijmeni,titul),hodiny,zmenaCasu,zmenaCastMzd,castkaHod,castMzd&includes=/mzdova-slozka/osoba&limit=0
Tento dotaz vrátí všechny složky typu HODINOVÁ MZDA za leden 2017. Výsledek bude obsahovat všechna pole, která potřebujete pro to, abyste mohli tyto složky bez trestu změnit.
Výsledek vrácený z Flexi bude vypadat nějak takto:
{ "winstrom": { "@version": "1.0", "mzdova-slozka": [ { "id": "13", "osoba": [ { "id": "1", "osbCis": "A02200", "jmeno": "Kája", "prijmeni": "z Norska", "titul": "" } ], "hodiny": "0.0", "zmenaCasu": "false", "zmenaCastMzd": "false", "castkaHod": "800.0", "castMzd": "0.0" } ] } }
Načtení dat z prima:Time
Pokud máte všechna potřebná data z Flexi, načtete si data z docházkového systému. Ukážeme si načtení dat z prima:Time, který má rozhraní API, ale není to zcela nutné. V tomto kroku lze načíst například také excelovskou tabulku s docházkou. Důležité je jen to, abyste byli schopni identifikovat zaměstnance a věděli jste, kolik odpracoval hodin.
V API prima:Time je tedy potřeba udělat request na URL
GET https://kbel.api.primaerp.com/v1/time/timerecords/summary.json?summary=user/position;sum(duration)&$filter=start ge datetime'2017-05-01T00:00:00.000Z' and stop lt datetime'2017-06-01T00:00:00.000Z'&token=9c11cea8-c3b3-4232-bfbb-f8acefce2f5a
Získáte data například v tomto formátu:
[ { "key": "A02200", "summaries": [ { "name": "sum(duration)", "value": "232777000" } ] } ]
V dotazu je použita sumace na vlastnost duration (trvání úkolu). Jako identifikátor poslouží pozice zaměstnance, která je využita pro osobní číslo, díky němuž lze následně spárovat data z prima:Time k datům z Flexi. Dále v dotazu použijete filtraci na časové období. To vyfiltruje jen úkoly, které začaly a skončily ve sledovaném období.
V datech, která prima:Time vrátil, je tedy jako key osobní číslo z Flexi a sumace trvání jednotlivých úkolů. Tato sumace je celkový čas v milisekundách. Hodiny, které potřebujeme zapsat do složky HODINOVÁ MZDA, tedy získáme podle vzorce
hodiny = duration / 1000 / 60 / 60
V našem příkladu je to 64,66 hodiny. Samozřejmě můžete, a nejspíš i budete, zaokrouhlovat. Ale to už je na každém uživateli. Flexi dovolí do složky zadat číslo s přesností na dvě desetinná místa.
Zpracování dat a zápis zpět do ABRA Flexi
Takto načtená data nyní musíte zpracovat a zapsat zpět do Flexi. Projdeme tedy jednotlivé mzdové složky získané z Flexi a budeme do nich postupně doplňovat údaje z prima:Time.
Každá mzdová složka v sobě obsahuje jednoznačný identifikátor, kterým je osobní číslo zaměstnance. Podle tohoto čísla budete v datech z prima:Time vyhledávat správnou sumaci. Jakmile ji najdete, přepočtete milisekundy na hodiny a zapíšete do pole hodiny. Do pole castMzd zapíšete součin odpracovaných hodin a hodnoty pole castkaHod, které obsahuje hodinovou mzdu zaměstnance. Nakonec musíte zapsat do polí zmenaCasu a zmenaCastMzd hodnotu true místo false, aby FlexiBee zapsané hodnoty neměnilo podle fondu pracovní doby.
Data jsou připravena a můžete je poslat zpět do Flexi. To už je pro čtenáře našich příspěvků celkem známá věc. Jen pro jistotu URL, na které budeme data zapisovat, je
PUT /mzdova-slozka.json
Několik slov závěrem
Pokud má firma aspoň několik zaměstnanců s hodinovou mzdou, doporučujeme si nějaký podobný nástroj vytvořit. Je celkem jedno, jestli data budou načítána z prima:Time, nebo jiného docházkového systému. Samozřejmě je možné využít i jednoduchou tabulku v excelu. Pokud bude obsahovat sloupce osobní číslo a odpracovaná doba, mělo by to stačit.
Pokud takovýto můstek vytvoříte, mzdová účetní Vám bude zcela jistě po každých výplatách několik dní děkovat. Protože komu by se chtělo pořád dokola zadávat u každého zaměstnance odpracované hodiny.