Synchronise your data between Biings and your HR systems.
Welcome to our Flat-file documentation. If you are looking to synchronise your HR data with Biings you've come to the right place. Flat-File Integration (FFI) is based around completing an integration through the exchange of CSV text files. This documentation will help you format your data so that Biings can sychronize with your system. Depending on the products enabled for your account (Pilot and/or Notify), a set of up to 6 files can be synchronised with Biings. Files are linked together either through Persons ID or Org Units ID.
Let's start with past data. The initial import, or first synchronisation, is used to setup your Biings account and populate it with the history of your HR data. This allows users to immediately recognise their team when they first log into Biings, and remove the need of having to duplicate things from your current HR system. We recommand the first set of CSV files to include the last 3 years of Absences, Persons, Assignments and Salaries data. A different history range is possible depending on your needs and data availability.
Once the initial set of data is imported, Biings uses daily synchronisation to keep data (absences, persons, salaries, etc) in sync with your HR system. Biings checks daily for new CSV files uploaded to your dedicated SFTP folder. If the file contains new or updated information, Biings will synchronise its database with it. Daily synchronisation uses the same CSV files, however the history should be limited in time (e.g. the last 3 months), depending on how far in the past you allow Absences (or other data) to be modified on your HR system.
An example is worth a thousand words. Download our example files to quickly understand how files should be formated and how to relate them to one another.
We also support a single-file format limited to Persons and their job assignements.
Example pack
Download an example pack of 6 CSV files correctly related to one another.
Example pack | 6 filesSingle-file example
Download a single-file example. To be used when absence data synchronisation is not necessary.
Single CSV exampleEmployees' absences including planned absences such as holidays and maternity leaves. An absence is defined as a period of time someone is away from work or unable to work.
Column Name | Description | Type | Format |
---|---|---|---|
id * | Unique absence identifier
• can be omitted for a single data import | Int/String | |
person_id * | Person identifier
• must match with an Id in the Person file | Int/String | |
case_id | Case identifier, grouping multiple absence together. | Int | |
from * | Date at which the work incapacity starts (e.g. 2021-10-27 07:30:00).
• date must be earlier or same date as end_date • the "hh:mm" value is optional | String | yyyy-mm-dd hh:mm |
until * | Date at which the work incapacity ends.
• date must be later or same date as start_date • an Empty value means the absence is still ongoing • the "hh:mm" value is optional | String | yyyy-mm-dd hh:mm |
time_due | Minutes of work due, or missed, during the absence (e.g. 120).
• any kind of rates or time rules should already calculated (Biings will not apply any treatment to it and use the value as is) • when provided, acts as a replacement to the standard calendar duration of the absence • recommended for a more accurate absence rate computation | Int | |
rate * | Incapacity rate (rate at which the person is not at work).
• 1 means completly absent, 0.5 means 50% absent, etc. • defaults to 1 if not provided | Float | Between 0 and 1 |
reason_id | Unique identifier of the absence cause / reason of absence | String / Int | |
reason * | Absence reason/cause label (e.g. Sickness or Accident) | String | |
planned | Whether the absence is planned or not.
• NB: Sick-leaves are generally unplanned. Holidays are usually planned. | Int | 0 : unplanned1 : planned |
comment | Any notes available about that particular absence (e.g. "Prefers to be contacted on his mobile phone.") | String |
All persons/employees in your organisation with their personal details.
Column Name | Description | Type | Format |
---|---|---|---|
id * | Unique person identifier | Int/String | |
lastname * | Person's last name | String | |
firstname * | Person's first name | String | |
gender * | Gender of the person | String | F : FemaleM : MaleN : Neutral |
email * | Professional email address | String | Email format |
sso_account | SSO account username | String | |
avs_number * | Swiss AVS number | String | 756.XXXX.XXXX.XY |
phone_pro | Professional phone number | String | Max 100 characters |
phone_private * | Private phone number | String | Max 100 characters |
mobile_pro | Professional mobile number | String | Max 100 characters |
mobile_private | Private mobile number | String | Max 100 characters |
address_type | Type of address (aka "address label") | Int | 2 : Home4 : Office |
address_note | Note or complement to the address | String | |
address_line1 * | Address line 1 | String | |
address_line2 | Address line 2, if any | String | |
address_line3 | Address line 3, if any | String | |
address_zip * | Postal code | String | |
address_city * | City of residence | String | |
address_country * | Country code | String | ISO 3166-1 (alpha-2 or alpha-3) |
birthdate * | Date of birth | Date | yyyy-mm-dd |
start_working_date | Date the person first joined the company, or the hiring date | Date | yyyy-mm-dd |
marital_status | Current marital status | Int | 1 : Single2 : Married3 : Divorced4 : Widow5 : Separated6 : Registered partnership7 : Dissolved partnership9 : Unknown |
nb_children | Number of dependent children | Int | |
language * | Communication language | String | ISO 639-1 |
nationality * | Country code | String | ISO 3166-1 (alpha-2 or alpha-3) |
zemis | ZEMIS/SIMIC number (for non-Swiss citizens) | String | |
special_cases | Special case of insurance | Int | 0 : No particular case1 : Family member, partner3 : Optional insurance |
with_holding_tax | Whether subjected to holding-tax from the income source. | Int | 0 : No1 : Yes, is subjected to holding-tax |
Employees' job assignments, sometimes refered as "Work contracts". An assignment defines a moment in time (start and end) where the person has worked in your organisation, where (in which Org Unit) and at what percentage (rate).
Column Name | Description | Type | Format |
---|---|---|---|
id * | Unique Assignment identifier (recommended if available).
• if unavailable, Biings can generate the Id based on the combination of person_id + start_date + ou_id | Int/String | |
person_id * | Person identifier
• must match with an Id in the Person file | Int/String | |
ou_id * | Organisational Unit identifier
• must match with an Id in the Org Units file | Int/String | |
start_date * | Assignment start date
• date must be earlier or same date as end_date | String | yyyy-mm-dd |
end_date * | Assignment end date
• date must be later or same date as start_date • an Empty value means the contract length is indeterminate | String | yyyy-mm-dd |
rate * | Work rate for this particular assignment | Float | Greater than 0 ,Max 1 |
contract_rate | Overall/Total work rate
In most situations a person is hired to fill only one position. In that case contract_rate and rate have the same value. When an employee fills more than one position (aka assignments), the contract_rate is the sum total of each of his/her assignment rates . | Float | Greater than 0 ,Max 1 |
contract_status * | Employment contract status. | Int | 0 : Permanent1 : Fixed-term |
job_id * | Unique job/position identifier | Int | |
job_function | Job function or profession (e.g. project manager, nurse) | String | |
job_custom_filter1 | Additional job category (e.g. job family, career ladder). | String | |
job_custom_filter2 | Additional job category, if any. | String | |
job_custom_filter3 | Additional job category, if any. | String | |
position * | Person's professional position for this assignment. | Int | 1 : Senior2 : Middle3 : Employee6 : Apprentice7 : Trainee9 : Unknown |
regular_workplace | Person's usual place of work for this assignment (e.g. office, shop). | String | |
weekly_hours | Expected working hours per week.
• if not provided, Biings will use the global weekly hours setting | Float | |
frequency * | Working frequency for this assignment. | Int | 0 : Regular1 : Irregular2 : Short time9 : Unknown |
vacation_days | Number of days of vacation allowance per year.
• should be in relation to a 100% work rate (not pro-rated) • if not provided, Biings will use the global vacation allowance setting | Float |
Employees' salaries. One line defines the salary (or salary component) of a person for a given period of time.
Column Name | Description | Type | Format |
---|---|---|---|
id * | Unique Salary record identifier
• if unavailable, Biings can generate the Id based on the combination of person_id + amount + start_date | Int/String | |
person_id * | Person identifier
• must match with an Id in the Person file | Int/String | |
code * | Type of salary or benefit | Int | 100 : basic/gross salary101 : LAA salary102 : LAAC salary103 : PGM salary200 : childs and family benefits300 : bonus or 13th salary400 : vacation and public holiday compensation500 : other supplements |
amount * | Salary amount | Float | |
period * | Frequency period at which the salary is paid. | Int | 1 : hourly2 : daily3 : monthly4 : yearly5 : percentage6 : one time |
start_date * | Date at which the salary starts being effective.
• date must be earlier or same date as end_date | String | |
end_date * | Date at which the salary stops being effective.
• date must be later or same date as start_date • an Empty value means the salary is always in effect. An end_date is required as soon as a new salary is in effect for that person. | String | |
currency | Currency used for the salary. | String | ISO 4217 e.g. CHF , EUR |
All current Organisational Units (departments, services, teams, etc). This file is used to represent the organisational structure of your company. An Org Unit can be of any size or importance, either an entire department or a small team, it depends on the level of granularity you need.
Column Name | Description | Type | Format |
---|---|---|---|
id * | Unique unit identifier | Int/String | |
parent_id * | Parent Unit identifier
• must match with the Id of another Org Unit in that same file | Int/String | |
name * | Org Unit name (e.g. Marketing, Human Resources, Production) | String |
All persons having a specific occupation or management role towards another person or group of persons. This file is used to describe the type of relations existing between every person (i.e. managers, HRBP, chiefs, substitute managers, etc).
Column Name | Description | Type | Format |
---|---|---|---|
person_id * | Person Id of the person the occupation is targeted to.
• must match with an Id in the Person file | Int/String | |
to_person_id * | Person Id of the person towards who the relation is (e.g. ID of the person's Manager).
• must match with an Id in the Person file | Int/String | |
kind * | Kind of relation | Int | 1 : Substitute manager2 : Manager4 : RH |
Column Name | Description | Type | Format |
---|---|---|---|
person_id * | Person Id of the person the occupation is targeted to.
• must match with an Id in the Person file | Int/String | |
ou_id * | The Org Unit ID with all the person towards who the relation is.
• must match with an Id in the Org Units file • the person's occupation will be the same for all the persons inside that Org Unit | Int/String | |
kind * | Kind of relation | Int | 1 : Substitute manager2 : Manager4 : RH |