Other Financial Integration
You can now not only set up the Journal Entries Structure of your financial integrations, but you can also integrate your ZenHR account with Other Financial Systems through the “Other Financial Integrations” page. Integrate your ZenHR account with other financial systems using whatever authentication you want (Auth1, Auth2, etc). You will also be able to export payroll, off-cycle payments, and off-cycle vacation in-advance salaries journal entries with the Journal Entries Exporter, which can be activated in the Journal Entries Structure.
TABLE OF CONTENTS
- Financial Integration Enhancements
Integrate Your ZenHR Account With Other Financial Systems
Marketplace integration → Financial Integration Setup
The Other Financial Integrations Feature enables seamless integration of your ZenHR account with various financial systems using OAuth 1, OAuth 2, and credentials authentication. This feature-rich tool empowers you to effortlessly transmit and update employee data, as well as dispatch journal entries to your financial system.
Key Requirements for Integration:
- Providing an Endpoint:
- Your technical team is required to provide an endpoint (a URL) that ZenHR will use to transmit journal entries and Employee info if needed.
- This endpoint acts as the receiving point for all financial data sent from ZenHR to your system.
- Developing Middleware for Attribute Mapping:
- ZenHR sends financial data in JSON format, which includes specific attributes tied to the journal entries.
- Your team must develop middleware to map these ZenHR attributes to the corresponding fields in your financial system.
- Accurate mapping ensures that data is correctly interpreted and consistently integrated into your system.
- Inputting Specific Values into ZenHR:
- Your team needs to enter specific values into ZenHR, such as GL Accounts, Employee IDs, and Organizational Level IDs (if applicable).
- These values are embedded in the JSON data sent by ZenHR, ensuring proper representation within your financial system.
Practical Example:
- Imagine your financial system assigns the GL Account ID "110011" to Basic Salary.
- Your team inputs this ID into ZenHR.
- When ZenHR generates payroll journal entries, the JSON data includes "110011" for Basic Salary, ensuring it is accurately reflected in the JSON used to send to your financial system.
Employee Data Structure
Attribute | Attribute Description |
employment_number | Employment number |
subsidiary_id | Branch ID |
subsidiary | Branch name |
entity_id | ZenHR Unique ID for the employee concatenated with the name |
inactive | Employee status (Active/Inactive) |
first_name | Employee first name |
middle_name | Employee middle name |
last_name | Employee last name |
Employee email | |
custentity_hr_id | ZenHR Unique ID |
mobile_phone | Mobile Number |
department | Department |
location | Work location |
social_security_number | Social security number |
hire_date | Hiring date |
marital_status | Marital Status |
gender | Gender |
birth_date | Birth Date |
title | Job Title |
release_date | Termination date |
supervisor | Direct Manager |
supervisor_id | Direct Manager’s Employee ID |
class | Main project |
Sample Employee Data JSON:
{ "employment_number": "01", "subsidiary_id": "1", "subsidiary": "Jordan Branch", "entity_id": "40091ZeyadZein", "inactive": false, "first_name": "Zeyad", "middle_name": " ", "last_name": "Zein", "email": "titiana+251020204@zenhr.com", "custentity_hr_id": 40091, "mobile_phone": "797397987", "department": "Accounting", "location": null, "social_security_number": "", "hire_date": "23/08/2020", "marital_status": "Married", "gender": "Female", "birth_date": "11/08/1997", "title": "Driver", "release_date": null, "supervisor": "", "supervisor_id": "", "class": null }
Journal Entries Branch Details Structure
Attribute | Attribute Description |
key | Journal entry name and type |
name | Branch name |
date | Journal creation date |
currency | Journal entry currency |
id | Branch ID on ZenHR |
company_id | Company ID on ZenHR |
Sample Branch Details JSON:
"Payroll Journal Entries - KSA Branch": { "name": null, "date": "25/01/2022", "currency": "SAR", "branch": { "id": 5670, "company_id": 3850, "name": "KSA Branch", "logo_file_name": "Screenshot_2022-11-13_105131.png", "logo_content_type": "image/png", "logo_file_size": 19640, "logo_updated_at": "2022-11-13T11:18:06.029+03:00", "created_at": "2022-10-27T11:27:16.727+03:00", "updated_at": "2024-09-28T11:48:30.237+03:00", "probation_period": { "type": "Month", "period": "3" }, "working_hours": 8, "cut_off_date": 25, "working_days": 30, "days_off": [ "5", "6" ], "location": null, "timezone": "Riyadh", "auto_increment": true, "round": 3, "currency_currency": "SAR", "country_id": 192, "dashboard_logo_file_name": "Screenshot_2022-11-13_105131.png", "dashboard_logo_content_type": "image/png", "dashboard_logo_file_size": 19640, "dashboard_logo_updated_at": "2022-11-13T11:18:06.287+03:00", "reminder_email": "", "dashboard_active_widgets": { "timeoffs": "true", "who_is_off": "true", "announcements": "true", "upcoming_birthdays": "true" }, "date_format": "%b %d, %Y", "time_format": "%I:%M %P", "show_who_is_off_type": true, "week_start_day": 0, "allowed_emp_directory": true, "withdraw_approved_transactions": false, "fiscal_day": 1, "fiscal_month": 1, "whos_off_type": 1, "whos_off_interval": 30, "subsidiary_id": null, "active_slack": false, "view_financial_hr_letters": false, "is_localization_default": true, "enable_timeoff_default_type": false, "gosi_integration_enabled": true, "editable_employee_profile_picture": true, "enable_altibbi": false, "employee_day_rate": null }, "offcycle_journal": false, "in_advanced_journal": false, "setup": { "id": 543, "branch_id": 5670, "clearance_type": "accrued_clearance", "request_size": null, "journal_type": "detailed", "group_by": null, "separate_journal_by_group": false, "auto_generate_offcycle_transactions": true, "auto_generate_in_advance": true, "separate_company_expenses": true, "separate_company_contributions": true, "calculate_provisions": false, "provision_journal_type": "separate_provisions", "activate_exporter": true, "created_at": "2022-12-07T11:26:17.616+03:00", "updated_at": "2022-12-19T15:05:23.471+03:00", "prevent_deleting_transactions": null, "send_provisions_manually": null, "calculate_provisions_for_out_sourced_employees": null, "calc_vacation_yearly": false, "prevent_editing_transactions": null, "accrued_employee": null, "prevent_resending_transactions": false, "deduct_absence": true, "calc_provision_with_settlement": false, "calculate_provisions_based_on_cut_off_date": true, "seperate_journal_per_request_by_group": null }, "subsidiary": { "id": 5670, "company_id": 3850, "name": "KSA Branch", "logo_file_name": "Screenshot_2022-11-13_105131.png", "logo_content_type": "image/png", "logo_file_size": 19640, "logo_updated_at": "2022-11-13T11:18:06.029+03:00", "created_at": "2022-10-27T11:27:16.727+03:00", "updated_at": "2024-09-28T11:48:30.237+03:00", "probation_period": { "type": "Month", "period": "3" }, "working_hours": 8, "cut_off_date": 25, "working_days": 30, "days_off": [ "5", "6" ], "location": null, "timezone": "Riyadh", "auto_increment": true, "round": 3, "currency_currency": "SAR", "country_id": 192, "dashboard_logo_file_name": "Screenshot_2022-11-13_105131.png", "dashboard_logo_content_type": "image/png", "dashboard_logo_file_size": 19640, "dashboard_logo_updated_at": "2022-11-13T11:18:06.287+03:00", "reminder_email": "", "dashboard_active_widgets": { "timeoffs": "true", "who_is_off": "true", "announcements": "true", "upcoming_birthdays": "true" }, "date_format": "%b %d, %Y", "time_format": "%I:%M %P", "show_who_is_off_type": true, "week_start_day": 0, "allowed_emp_directory": true, "withdraw_approved_transactions": false, "fiscal_day": 1, "fiscal_month": 1, "whos_off_type": 1, "whos_off_interval": 30, "subsidiary_id": null, "active_slack": false, "view_financial_hr_letters": false, "is_localization_default": true, "enable_timeoff_default_type": false, "gosi_integration_enabled": true, "editable_employee_profile_picture": true, "enable_altibbi": false, "employee_day_rate": null },
Journal Entries Lines Structure
Attribute | Attribute Description |
account | Salary transaction GL account |
payment_method | Salary payment method |
memo | Salary transaction name |
employee_id | ZenHR unique ID for this employee |
employment_number | Employee employment number |
name | Employee name if the generated journal entry is detailed. |
hiring_date | Employee hiring date |
cost_center_name | The cost center name by which the journal entry amounts are grouped by. |
cost_center_account | The GL account of the cost center which the journal entry amounts are grouped by. |
type | Debit or credit |
debit | Debit amount |
credit | Credit amount |
location | Employee work location |
department | Employee department |
class | Employee main project |
organization_levels: {department: {"id\":,\"name\":,"account\": "section\":{\"id\":,\"name\":,"account\": "project\":{\"id\":,\"name\":,"account\": "hierarchy_group\":{\"id\":,\"name\":,"account\": "work_location\":{\"id\":,\"name\":,"account\":}
| It will include a list of employee organizational levels IDs, names and GL accounts |
Sample Journal Entries JSON lines:
"lines": [ { "account": "324-GL3453", "gl_account_name": "", "payment_method": "Bank Transfer", "memo": "Basic Salary", "employee_id": 138679, "integration_id": "", "employment_number": "01", "name": "Salim Al Harbi", "hiring_date": "2020-01-01", "cost_center_id": null, "cost_center_integration_id": null, "cost_center": "", "cost_center_name": null, "cost_center_account": null, "type": "debit", "debit": 80000, "salary_id": 2672214, "location": "Head Office", "department": "Management : Management Section", "class": "ZenHR \u0026 Testello", "organization_levels": { "department": { "id": 40707, "name": "Management", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "section": { "id": 40712, "name": "Management Section", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "project": { "id": 40713, "name": "ZenHR \u0026 Testello", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "hierarchy_group": { "id": 40715, "name": "Management Group", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "work_location": { "id": 40666, "name": "Head Office", "account": null, "dimension_code": null, "tracking_category": null, "integration_id": null } } }, { "account": "", "gl_account_name": "", "payment_method": "Bank Transfer", "memo": "Saned Saudi GOSI", "employee_id": 138679, "integration_id": "", "employment_number": "01", "name": "Salim Al Harbi", "hiring_date": "2020-01-01", "cost_center_id": null, "cost_center_integration_id": null, "cost_center": "", "cost_center_name": null, "cost_center_account": null, "type": "credit", "credit": 4387.5, "location": "Head Office", "department": "Management : Management Section", "class": "ZenHR \u0026 Testello", "organization_levels": { "department": { "id": 40707, "name": "Management", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "section": { "id": 40712, "name": "Management Section", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "project": { "id": 40713, "name": "ZenHR \u0026 Testello", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "hierarchy_group": { "id": 40715, "name": "Management Group", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "work_location": { "id": 40666, "name": "Head Office", "account": null, "dimension_code": null, "tracking_category": null, "integration_id": null } } }, { "account": "", "gl_account_name": "", "payment_method": "Bank Transfer", "memo": "Housing Allowance", "employee_id": 138679, "integration_id": "", "employment_number": "01", "name": "Salim Al Harbi", "hiring_date": "2020-01-01", "cost_center_id": null, "cost_center_integration_id": null, "cost_center": "", "cost_center_name": null, "cost_center_account": null, "type": "debit", "debit": 20000, "location": "Head Office", "department": "Management : Management Section", "class": "ZenHR \u0026 Testello", "organization_levels": { "department": { "id": 40707, "name": "Management", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "section": { "id": 40712, "name": "Management Section", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "project": { "id": 40713, "name": "ZenHR \u0026 Testello", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "hierarchy_group": { "id": 40715, "name": "Management Group", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "work_location": { "id": 40666, "name": "Head Office", "account": null, "dimension_code": null, "tracking_category": null, "integration_id": null } } }, { "account": "", "gl_account_name": "", "payment_method": "Bank Transfer", "memo": "Transportation Allowance", "employee_id": 138679, "integration_id": "", "employment_number": "01", "name": "Salim Al Harbi", "hiring_date": "2020-01-01", "cost_center_id": null, "cost_center_integration_id": null, "cost_center": "", "cost_center_name": null, "cost_center_account": null, "type": "debit", "debit": 8000, "location": "Head Office", "department": "Management : Management Section", "class": "ZenHR \u0026 Testello", "organization_levels": { "department": { "id": 40707, "name": "Management", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "section": { "id": 40712, "name": "Management Section", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "project": { "id": 40713, "name": "ZenHR \u0026 Testello", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "hierarchy_group": { "id": 40715, "name": "Management Group", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "work_location": { "id": 40666, "name": "Head Office", "account": null, "dimension_code": null, "tracking_category": null, "integration_id": null } } }, { "account": "", "gl_account_name": "", "payment_method": "Bank Transfer", "memo": "Other Allowances", "employee_id": 138679, "integration_id": "", "employment_number": "01", "name": "Salim Al Harbi", "hiring_date": "2020-01-01", "cost_center_id": null, "cost_center_integration_id": null, "cost_center": "", "cost_center_name": null, "cost_center_account": null, "type": "debit", "debit": 2000, "location": "Head Office", "department": "Management : Management Section", "class": "ZenHR \u0026 Testello", "organization_levels": { "department": { "id": 40707, "name": "Management", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "section": { "id": 40712, "name": "Management Section", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "project": { "id": 40713, "name": "ZenHR \u0026 Testello", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "hierarchy_group": { "id": 40715, "name": "Management Group", "account": "", "dimension_code": null, "tracking_category": null, "integration_id": null }, "work_location": { "id": 40666, "name": "Head Office", "account": null, "dimension_code": null, "tracking_category": null, "integration_id": null } } }, { "memo": "Accrued Salaries - Clearance", "account": "", "gl_account_name": "", "payment_method": "Bank Transfer", "type": "credit", "credit": 105612.5 } ] } }
How To Activate The Other Financial Integration Tool?
To activate Other Financial Integrations on ZenHR, first set up your Journal Entries Structure and generate the needed API keys to proceed with the integration process.
Step 1: Set Up Journal Entry Structure
User Menu → System Preferences → Journal Entries Structure
Refer to this page for more details "Journal Entries Structure" page in ZenHR offers a powerful set of tools to customize and automate journal entry processes for payroll and accounting. Here’s a concise overview of what can be achieved:
- General Configuration:
- Match journal entries using clearing accounts, accrued salary differences, or employee-level data.
- Set the number of employees per journal (e.g., all employees or a specific limit).
- Choose detailed or summary journal types.
- Group entries by branch, department, or other criteria.
- Prevent deletion, editing, or resending of sent transactions.
- Deduct absences from the basic salary automatically.
- Off-Cycle Payments:
- Auto-generate separate journals for off-cycle payments and vacation in-advance salaries.
- Company Contributions and Expenses:
- Create separate journals for company contributions and expenses.
- Provisions Management:
- Automatically calculate employee provisions with payroll.
- Generate provision entries within payroll journals or as separate journals (by provision type or employee).
- Base calculations on cut-off dates or termination settlements.
- Cost Centers:
- Activate and auto-generate cost center journals with payroll.
- Create separate journals per cost center and exclude off-cycle payments.
- Select detailed or summary journal types.
- Bank Transfers:
- Activate bank transfer journals with customizable journal types (detailed or summary).
- Group entries by specific levels (e.g., branch or department).
- Exporting Journal Entries:
- Enable the journal entries exporter for easy data export.
This page provides a flexible, automated solution for managing journal entries, ensuring precision and alignment with organizational needs.
Step 2: Generate API Keys
- Go to Marketplace Integrations → Other Financial Integration Setup → Add API Keys.
Fill in the API key name, select the Authentication type, and make sure to fill in all of the required related fields.
Step 3: Set up Other Financial Integrations
- On ZenHR, click your user icon in the upper right corner and go to Marketplace Integrations → Other Financial Integration Setup.
- Enter the Name of the financial system.
- Activate the toggles in the Employee Data and Journal Entry sections.
- Add the Employee URL and the Journal entries URL retrieved from your financial system’s account.
- Then click “Save”.
That’s it, your financial integration will now be complete! You can now post journal entries directly from ZenHR.
Posting Salaries From ZenHR to Other Financial Integrations:
To post salaries from ZenHR to Other Financial Integrations, follow these steps:
- On the left side of the page, go to Main Menu → Payroll → Manage Salaries.
- Filter the desired salary "Year" and "Month" for all employees, and click “Filter”.
- Then click “Send to (Other Financial Integration Name)”, and your salaries will be transferred as journals.
Post Off-Cycle Payments From ZenHR to Other Financial Integrations:
To auto-generate separate journals for off-cycle payments and post them with your payroll journal entries, follow these steps:
- Click your user icon in the upper right corner and go to System Preferences → Journal Entries Structure.
- Activate the Auto-generate separate journals for off-cycle payments checkbox and click “Save”.
- You can then post salaries from ZenHR to Other Financial Integrations, and the transferred journals will include separate journal entries for your off-cycle payments.
To manually generate your off-cycle payments journal entries, follow these steps:
Click your user icon in the upper right corner and go to System Preferences → Integration Setup → Financial Integrations → Journal Entries Structure.
Clear the Auto-generate separate journals for off-cycle payments checkbox and click “Save”.
- Go to Main Menu → Payroll → Manage Financial Transactions → Off-Cycle Payments
- Use the “Date from” and “to” filters to filter out the duration of the transactions you wish to include in your journal entries, and click “Filter”.
- In the Employee ID column, select the transactions you wish to include in your journal entries.
- Then click “Send to (Other Financial Integration Name)”, and your off-cycle payments will be transferred as journals.
Post Off-Cycle Vacation In-Advance Salaries From ZenHR to Other Financial Integrations
To auto-generate separate journals for off-cycle vacation in-advance salaries and post them with your payroll journal entries, follow these steps:
- Click your user icon in the upper right corner and go to System Preferences → Integration Setup → Financial Integrations → Journal Entries Structure
- Activate the Auto-generate separate journals for off-cycle vacation in-advance salaries checkbox and click “Save”.
- You can then post salaries from ZenHR to Other Financial Integrations, and the transferred journals will include separate journal entries for your off-cycle vacation in-advance salaries.
To manually generate your off-cycle vacation in-advance journal entries, follow these steps:
- Click your user icon in the upper right corner and go to System Preferences→ Journal Entries Structure.
- Clear the Auto-generate separate journals for off-cycle vacation in-advance checkbox.
- Then click “Save”.
- Go to Main Menu → Payroll → Manage Vacation In-Advance Salary.
- Filter out the vacation in-advance salaries that fall within a specific time period by using the “In-advance from date” and “In-advance to date” filters.
- Select “Off-cycle” in the Payroll status filter.
- In the Employee No olumn, select the in-advance salaries you wish to include in your exported journal entries. Or you can select all the filtered salaries by clicking the “Select all” checkbox.
- Then click “Send to (Other Financial Integration Name)”, and your off-cycle vacation in-advance salaries will be transferred as journals.
Other Financial Integrations Event Viewer
- To retry sending failed posts, go to User Menu → System Preferences → Marketplace Integration Setup → Financial Integrations →Other Financial Integrations.
- On the Event Viewer page, click “Retry” to send journal entries again.
Exporting Journal Entries
To activate the Journal Entries Exporter, follow these steps:
- Click your user icon in the upper right corner and go to User Menu → System Preferences → Integration Setup → Financial Integrations → Journal Entries Structure.
- On the Journal Entries Structure page, check the “Activate journal entries exporter” box, and click “Save”to activate the Journal Entries Exporter.
- Once it’s activated, the option to export your journal entries will appear on all related pages.
To export your payroll journal entries, follow these steps:
- Go to Main Menu → Payroll → Manage Financials → Manage Salaries.
- On the Manage Salaries page, filter out the year and month of the salaries you wish to export.
- Then click the “Export Journal Entries” button.
- A pop-up will then appear, click “Export” to export your payroll journal entries for the selected month according to your defined Journal Entries Structure.
To export your off-cycle payments journal entries, follow these steps:
- Go to Main Menu → Payroll → Manage Financials → Manage Financial Transactions → Off-Cycle Payments.
- Use the “Date from” and “to” filters to filter out the duration of the transactions you wish to include in your journal entries.
- In the Employee ID column, select the transactions you wish to include in your journal entries. Or select all the filtered transactions by clicking the “Select all” checkbox.
- Click on the “Export Journal Entries” button.
- A pop-up will then appear; click “Export” to export your selected off-cycle payments journal entries according to your defined Journal Entries Structure.
Note: Multiple off-cycle payment journal entries might be created based on the effective dates of the selected exported transactions.
To export your off-cycle vacation in-advance salaries journal entries, follow these steps:
- Go to Main Menu → Payroll → Manage Financials → Manage Vacation In-Advance Salary.
- Filter out the vacation in-advance salaries that fall within a specific time period by using the “In-advance from date” and “In-advance to date” filters.
- On the Payroll status filter, select “Off-cycle” and click “Apply Filters”.
- In the Employee No. column, select the in-advance salaries you wish to include in your exported journal entries. Or you can select all the filtered salaries by clicking the “Select all” checkbox.
- Click on the “Export Journal Entries” button.
- A pop-up will then appear, click “Export” to export your selected off-cycle vacation in-advance journal entries according to your defined Journal Entries Structure.
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article