Přenos docházky z prima:Time do ABRA Flexi

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.