25 September 2019

Table of Contents

1. Introduction to OFBiz

Welcome to Apache OFBiz! A powerful top level Apache software project. OFBiz is an Enterprise Resource Planning (ERP) System written in Java and houses a large set of libraries, entities, services and features to run all aspects of your business.

This manual will describe all aspects of this powerful ERP system. The manual starts with the basics of what OFBiz is and how it works, and describes high level concepts like the entity engine, service engine, widget system and so on. In addition the manual explains the core application of this framework like the Party Manager, Order Manager, Accounting system, and others.

If you wish to contribute to OFBiz and help make it better, you may wish to read the "Apache OFBiz Developer Manual" for a deeper understanding of the architectural concepts of the framework.

1.1. What is Apache OFBiz

It is hard to define OFBiz because it offers many different solutions targeted at different levels of interests (users, developers, business owners). At a low level it may considered a web framework, at another level, it may considered a full fledged ERP system, and yet it can also be considered a business automation suite.

1.2. The main parts of Apache OFBiz

Perhaps to better understand what OFBiz is, it may be necessary to understand its main parts and the purpose that each part plays. Thus the main parts or sub-systems are summarized below.

1.2.1. Web MVC Framework

The lowest or most foundational part of Apache OFBiz is a classical web MVC (Model View Controller) framework. This part of the system is designed for basic routing of web requests and may be considered as the infrastructure or plumbing where everything is wired together.

1.2.2. Entity Engine

The entity engine allows OFBiz users to define entities, data, and queries in a database-independent domain specific language (DSL) based on XML. Thus, without learning any SQL users can create and interact with databases in a platform-independent manner and Apache OFBiz would make the translations under the hood to each database system.

1.2.3. Service Engine

Apache OFBiz is designed specifically around a Service Oriented Architecture (SOA). Services are units of business logic that take a set of input values and produces a set of output values.

Services are programming-language-independent. It does not matter whether a service is implemented using Java, Groovy, Jython, or something else because services are an abstraction away from the underlying technology. This provides maximum flexibility for designing business logic without worrying about interoperability between different languages.

1.2.4. Widget System

Whether the output is HTML, CSV, PDF, or something else, Apache OFBiz provides a system for creating user interface that is independent of the actual implementation. This makes it possible to publish the same widget to HTML, PDF, CSV or some other output format.

However, the widget system allows users, if needed, to drop down to any platform-specific code and mix it with widget designs, thus providing a mix between ease of use, platform independence and customizability.

1.2.5. Data Model Library

Apache OFBiz is heavily inspired by a book called the "The Data Model Resource Book". This book provides a "A Library of Universal Data Models for All Enterprises". These models cover things like parties, orders, invoices, payments, general ledgers, quotes and much more.

By using OFBiz, adopters start with a full pre-designed data model that covers common and universal business requirements. Hundreds of entities are defined which save many hours of thinking, designing, and testing such models.

It is important to note that the data model library does not only cover entities, but also the data that comes with these entities. Data is further categorized by function (seed, demo, etc …​)

1.2.6. Service Library

Having a rich and powerful data model is not very useful on its own without services that apply business logic on this data model. That is where the services defined in Apache OFBiz come into play.

OFBiz provides, out-of-the-box, thousands of services to create, retrieve, update, delete, search, and do many other operations on the data model.

1.2.7. Core Applications

The core applications in Apache OFBiz are web applications that serve common business needs found in most enterprises such as accounting, order management, party management and so on.

These core applications are built on top of the data model and service library earlier described. The core applications are further described in the relevant section.

1.2.8. Plugins

OFBiz extends any basic functionality through plugins. Plugins are very similar to the core applications in design and structure, but are not shipped with OFBiz by default. Thus to install a plugin a user must add it to the framework first.

Unresolved directive in <stdin> - include::../../README.adoc[tags=quickstart]

Core Business Applications

Most businesses share universal needs. They require accounting functionality, managing customers, placing orders, book-keeping, invoicing and so on.

OFBiz is designed so that such basic universal business needs are available through a set of core business applications. These applications all share a unified data-model with a set of unified services to implement this functionality.

This section of the manual will describe each core business application starting with a high level overview of design and purpose down to the details of how to achieve common tasks.

1. Accounting

The OFBiz accounting system is a core application component and has most of the modern features you would expect in a general purpose double-entry accounting system. However, OFBiz goes beyond that by and seamlessly integrates with other OFBiz applications such as Inventory, Purchasing and Manufacturing to give your business a complete ERP solution. This makes the system as a whole robust and integrated to provide more value than a plain accounting system.

1.1. About Accounting

The Accounting system is organised according to generally accepted principles such as double-entry accounting, a General Ledger with hierarchical accounts, journals and posting of transactions and corresponding entries.

The structure is primary based on the OMG GL standard and the work that was done on an AR/AP extension of the OMG GL standard. This correlates well with other standards such as ebXML and OAGIS.

The Accounting entities are structured such that accounts for multiple organisations can be managed. The multiple organisations could be multiple companies, or departments or other organisations within a company. Each organisation can have various GL Accounts associated with it so that it can operate with its own subset of the Master Chart of Accounts.

Each organisation can also have its own set of Journals for flexibility, even though the use of Journals should be as minimal as possible in favour of allowing the system to automatically create and post transactions based on business events triggered by standard procedures and documents such as purchase and sales orders, invoices, inventory transfers, payments, receipts, and so on.

1.1.1. Accounting Features

  • General Ledger

  • Accounts Receivable

  • Accounts Payable

  • Agreements

  • Multi-currency Support

  • Billing Accounts

  • Fixed Asset Accounting

OFBiz accounting can be configured to handle multiple organisations including an unlimited number of companies, subsidiaries and departments.

1.2. Agreements

An “agreement” is a way of recording a business arrangement or contract that your business makes with other companies or individuals. Some common examples of agreements include Payment Terms (where you allow a customer up to 30 days to pay you) or Prompt Payment Discounts (where you offer a reduction on the amount owing if your customer pays you before a certain date)

At the time of writing, OFBiz allows you to create the following type of agreements

  • Product

  • Purchase

  • Sales

  • Employee

  • Commission

  • End User Licence

The most common agreements you will use will be Sales Agreements (for your Customers), Purchase Agreements (for your Suppliers) and Commission Agreements (for your Sales Representatives).

1.2.1. Sales Agreement

A “Sales Agreement” is an agreement between you and your customers. A customer can also be another business. You can create a range of conditions for your customer including giving them such as payment discounts or special payment terms and credit limits.

If you have installed OFBiz with the demo data then there are already examples of Sales Agreements created for you.

1.2.2. Purchase Agreement

A “Purchase Agreement” is an agreement between your business and a supplier. You may have negotiated special conditions such as delivery, volume pricing and invoice terms.

If you have installed OFBiz with the demo data then there are already examples of Purchase Agreements created for you.

1.2.3. Commission Agreement

A “Commission Agreement” is an agreement that is used to calculate how much money a Sales Representative will get when products they have promoted or marketed are sold to customers. The rate paid to the Sales Representative is can be based on a fixed or variable on a percentage of each sale they make. These amounts can be quite small amounts so it can be easier to consolidate multiple commission payments into one large payment that is paid monthly.

If you have installed OFBiz with the demo data then there are already two example Commission Agreements created for you.

1.3. Financial Accounts

A "Financial Account" is a tool (similar to bank account statement) that is used for monitoring monetary transactions. Normally it will be linked to a party and the various transactions details (e.g. payments or receipts) will be shown as entries.

At the time of writing, OFBiz allows you to create the following type of financial accounts

  • Bank Account

  • Credit Card Account

  • Deposit Account

  • Equity Line Account

  • Gift Certificate

  • Investment Account

  • Loan Account

  • Replenish Account

  • Service Credit Account

  • Store Credit Account

1.3.1. Bank Account

A "Bank Account" is a financial account between a bank and their customer. By default this type of financial account will post to 213500 CUSTOMER DEPOSIT ACCOUNTS.

If you have installed OFBiz with the demo data then there are already examples of Bank Accounts created for you.

1.3.2. Credit Card Account

1.3.3. Deposit Account

A "Deposit Account" is a financial account which allows money to be deposited and withdrawn by the account holder. By default this type of financial account will post to 213500 CUSTOMER DEPOSIT ACCOUNTS.

1.3.4. Equity Line Account

1.3.5. Gift Certificate

A "Gift Certificate" is something that entitles the recipient to select merchandise up to a specified value from a store. It is usually presented as a gift. By default this type of financial account will post to 213200 GIFT CERTIFICATES UNREDEEMED.

1.3.6. Investment Account

An "Investment Account" is a financial account that contains deposits of funds and/or securities that are held at a at a bank, stock exchange or other financial Institution. By default this type of financial account will post to 213500 CUSTOMER DEPOSIT ACCOUNTS.

1.3.7. Loan Account

1.3.8. Replenish Account

1.3.9. Service Credit Account

1.3.10. Store Credit Account

A "Store Credit Account" is a financial account that is used to to maintain the refund amount Specify the type (Billing Account or Financial Account) of Store Credit Account used for refund return. Default to Financial Account.

1.4. Global General Ledger Settings

The Global General Ledger Settings are master templates that we can use to setup up our chart of accounts, default transactions or other settings that can be applied across many OFBiz modules.

We need settings at a global level because OFBiz is an integrated system so certain areas like accounting are linked to many other modules. It also makes sense to have a central place to setup things that will be used globally.

At the time of writing, the following are available as part of the Global GL Settings:

  • Chart of Accounts - a comprehensive master template for a complete chart of accounts.

  • Custom Time Periods - a master list to display or setup financial periods

  • Costs - a master list of any cost calculations to be used for assets or tasks

  • Payment Method Type - a master list of the ways payments can be made (e.g. cash, credit card etc) and the default accounts to be used for each

  • Invoice Item Type - a master list of all the transaction line types that can occur on any invoice and the default account to be used for each

  • Rates - a list of rates (e.g. pay rates, overtime rates etc) that can be used for billing work,tasks or as part of salary calculations

  • Foreign Exchange Rates - a master list of exchange rates to be used and dates they are valid

  • GL Account Category - currently this is set to be a list of cost centres

  • Cost Centers - a way to specify how to process percentage allocations between cost centres for specific accounts

1.4.1. Master Template - Chart of Accounts

If you load the demo data, then by default over 450 accounts are included as part of the OFBiz global chart of accounts master template.

To setup a chart of accounts in OFBiz simply means that we need to select the accounts we want to use from the global chart of accounts master template.

All general ledger accounts must exist in the global template before they can be assigned to be used at the organisation level (e.g. Company)

1.4.2. Custom Time Periods

Time periods are a defined period of time (usually a month, quarter or year) that is used to group business transactions. It is a key part of any general accounting setup. Time periods can be used for the definition of :

  • Company Financial Year

  • Fiscal / Tax Periods (weeks, months, quarters)

  • VAT / GST Periods

  • Sales Periods

1.4.3. Costs

A business is designed to be profi table. This means that you need to be able to track all the costs involved in your business to ensure that you are not losing money.

Some example costs that you may want to setup and track are as follows:

  • Raw Materials Costs

  • Labour Costs

  • Rental Costs

  • Electricity Costs

  • Quality Assurance or Regulatory Costs

Direct and Indirect Costs

Costs can also be broken down into “Direct” and “Indirect” costs. Direct costs are costs that are easily identifiable as directly related to what you do to produce and sell to your customers.

Indirect costs are costs that cannot easily be directly linked to what you on sell to your customers. Included in this would be rent, electricity or general administration costs.

Fixed and variable Costs

Variable costs are those that rise and fall based on the amount product you produce or sell. If you sell or produce a lot of products it will cost more than if you produce a smaller amount.

Fixed costs are ones that remain the same no matter how much is being produced or sold.

Before you can calculate costs you need to define a formula of how to do it and in OFBiz this is called a “Cost Component Calculation”.

1.4.4. Payment Method Type

A “Payment Method” is simply a way to define the ways in which payments can be made. Examples include:

  • Cash

  • Cheque

  • Electronic Funds Transfer

  • Billing Account

  • Paypal

  • Financial Account

  • Gift Certificate

Each payment method can be linked to a different General Ledger account in the Chart of Accounts. By doing this OFBiz will be able to help us create an accounting transaction based on how the payment wasmade. This is very useful if we want to automate the creation of accounting transactions.

1.4.5. Invoice Item Types

An “Invoice Item Type” is another way to describe the different type of individual line items that appear on an invoice. For example an invoice is usually made up of:

  • A header - which contains details of the supplier, customer, invoice date etc

  • Line items - which are the products, taxes, discounts etc on the invoice

  • A footer - which summarises the totals, taxes and discounts

Invoice item types can refer to any of these three areas on an invoice. They can also be broken down into specific categories that allow us to classify or report on the total or frequency of that type.

Some examples of Invoice Item Types are:

  • Type of Product (Standard, Digital, Service)

  • Shipping or Handling Charges

  • Promotions (Discounted Products, Free Products)

  • Discounts (Product Discount, Invoice Discount, Early Payment)

  • Returned Items (Faulty, Replacement)

OFBiz allows us to setup a code for each of the different line item types that can appear on an invoice. We can then link each item type to a specific General Ledger account. By doing this OFBiz will be able to help us create an accounting transactions based on the item types that appear on the invoice.

This is very useful if we want to automate the creation of accounting transactions.

1.4.6. Rates

Rates are used to create a “pay rate” or “charge amount” that can be used in the calculation of a task, employee salary or a service that involves people.

Rates are closely linked to the OFBiz Human Resources Manager application but are also used across multiple OFBiz applications (Manufacturing, Asset Maintenance, Project Tasks, Timesheet Entry etc) where person related work tasks are required.

1.4.7. Foreign Exchange Rates

Foreign exchange rates are used to convert from one currency to another. A business will usually want to work in one main currency (e.g. GBP) but will allow transactions in other currencies (e.g. EUR, USD). These currencies will need to be converted to the main currency in order to generate financial reports (e.g. Balance Sheet or Income Statement) and most importantly to adhere to Tax Authority regulations.

1.4.8. GL Account Category

A “General Ledger Account Category” (or GL Account Category) is a generic term to describe the way you can segment or classify accounts. Categories can be setup and then linked to the required accounts.

Another way to think about it is that it is like adding an extra tag to an account so that you can easily retrieve that account to do any additional reporting or processing.

In OFBiz at the time of writing, the GL Account Category has been used to implement cost centre functionality for the Chart of Accounts.

1.4.9. Cost Centers

A cost centre is an area or part of an organisation where costs (direct or indirect) can be allocated .

By default OFBiz will allocate and post 100% of any accounting value to the specified General Ledger account. Setting up Cost Centres allows you to split the amount across different areas using a percentage calculation.

For example: You want to buy something that and three departments will contribute to buying it. If the product costs $90 then each department will pay $30 towards the cost.

OFBiz will allow you to setup the percentage that each cost centre will contribute so that you can view and track how much each department has contributed or spent.

2. Human Resources

The OFBiz Human Resources system is one of the core application components and has all of the functionality you need to manage your business employees process : organisational hierarchies, recruitment, training, evaluation, …​ It is well integrated with other components especially Accounting to manage Payroll and any specific employee agreements.

The HR Application data design, like most of the OFBiz back office administration applications, was inspired by the data models in The Data Model Resource Books by Len Silverston [1]. The sections below introduces some of the concepts in HR App that were derived from the models.

In OFBiz Party is one of the core object, a party is a person (employee, end customer, sub-contractor, contact, …​) or an organization (group, department, company, …​).
One of the strengths of OFBiz is the rich set of features it has build up to manage information and relationships for parties. This makes OFBiz a great platform for HR services because managing people and organizations is a core OFBiz technology.

Important terms in the documentation are defined in a Glossary. In order to promote a consistent usage and understanding of terms, links to the Glossary definitions are placed throughout the document.

2.1. About this documentation

This guide was written based on the OFBiz trunk in beginning 2019 using the Tomahawk theme. The information should be useful too, for users of earlier versions and other themes. The screen shots, included in the documentation, may look different from what you see in your version but not so much so that you can not understand the big part of the features.

With close to 100 screens, some which link to applications outside of the HR App, it is easy for a new user to get lost. Knowing the common UI pattern used in HR App, as described here, will help you stay oriented.

In OFBiz, screens are collection of graphical user interface (GUI) elements that provide an intuitive way to interact with applications.

2.1.1. Menu Hierarchy

In the back office applications, like Accounting, Marketing and Human Resource, menus are the primary method of navigation between GUI screens.
The Application menu is the top level menu and links to the back office administration applications.
Each application has an application sub menu that is the top level menu within the application.

Applications Menu
OFBiz App Main Menu (Tomahawk)

or

OFBiz App Main Menu (Rainbow_Stone)
HR Application Submenu
OFBiz HR App Sub-Menu (Tomahawk)

or

OFBiz HR App Sub-Menu (Rainbow Stone)
Note
On all this documentation, "HR menu" refer to the "HR Application sub menu".
HR Core Object Menu

Typically, but not always, HR Menu items take their name from an important Core Object or entity. For example you have Employees, Employments, Employee Positions etc. All important information subjects in human resource departments.

Many of these menu items open a screen, we will call a Main Search Screen.

OFBiz HR Employee Main Screen (Tomahawk)

It has three main elements

  1. A button : link to a screen for creating a new entity

  2. A Search Options screenlet for building a search filter

  3. A search results screenlet that has columns with navigation widgets to open other application areas.

One of these navigation columns (most of time the first) will open a screen we will call a Feature Menu Screen. It has menu items for displaying / editing the feature entity and it’s supporting entities.

OFBiz HR Employee Sub-Menu (Tomahawk)

or

OFBiz HR Employee Sub-Menu (Rainbow Stone)

On most of screens, you can see,

  1. which Application

  2. which Core Object

  3. which related entity

2.1.2. Process, Tutorial, Video

This documentation is oriented Business Process. Each process is described like a tutorial, and each time a new Core Object, or important notion is mentioned, a link is done to more detailed information.

Each process described is associated with a Scenario User Interface Automated Test, which is run on Apache OFBiz Trunk Demo environment daily, and on a ofbizextra platform to be able to have a video of all actions with some comments (Explaining, at each stage, what action will be taken).

Video can be download on the jenkins ofbizextra site, Running Selenium Test, look by job name and starting with hrscenariodoc, test name is the tutorial name.

To have time to read comments, you need to slow down the video speed or to pause it, if you read the documentation in conjunction.

2.2. About Human Resources

The people who work for your company are human capital and are its most important asset. Selecting a software platform that increases the value of your companies human capital and delivers benefits, services and opportunities to your workforce, is critical to your companies success. That platform must be able to accurately and reliability process worker transactions, collect decision support information, and communicate between management, workers and outside resources.

The OFBiz Human Resource application (HR App) can provide a stable foundation for building that platform.

2.3. HR Processes

Human Resources Management can be divided into several distinct processes.

2.3.1. Organization, Job Position and Definition

Many companies organize departments in a tree structure. There is no special meaning attached to the word department.
It is used to describe any sub-division of a business organization.

In each department there are some Employee positions (or Job position)
Generally Job positions are authorized by a budget and fulfilled by people. The person fulfilling the position may be a permanent employee, a temporary employee or a contractor.

  • Positions may be salary or hourly, full-time or part time.

  • Positions have responsibilities.

  • Positions are defined by a type of work.

Your Companies organizational tree is shown on the main page of the HR App, and you can manage each part of it (view, add, remove departments; assign job position to department or manage its employments)

If you need to define one or more department, you must create it in the Party component.
Create a Party-Group and associated to it the role type Internal Organization (INTERNAL_ORGANIZATIO). After that the department appear in the drop-down when you select "Add Internal Organization" in the contextual menu (click right) of the Companies organizational tree in HR component.

If you need to define one or more Job positions, you must create it in the Employee Position HR sub-component ( Main HR Menu, option Employee Position) and maybe previously create some Position Type in Global HR Settings HR sub-component.

Tutorial: Define my Company Organization

This tutorial will show you how to create this organization

Company Organization goal

base on existing OFBiz demo data.

The associated video (showing all the actions described in this tutorial) can be download on CompanyOrganization-implementation.avi

or directly visualize at CompanyOrganization-implementation

This tutorial have 6 step

  1. Cleaning demo data

  2. Create Agile Team

  3. Design Company internal organization

  4. Create all the Position Types

  5. Create all the Employee Positions

    • Job Position Creation

    • Job Position Reporting Structure

    • Job Position Responsibilities

    • Job Position Reporting and Responsibilities

  6. Create all the Employees

Step 1 : cleaning demo data

Demo data are for a lot of functionality, for this tutorial we want focus only on Company Organisation and Employee Position, so we should start by removing some data.

Goto to Web Tools Application, select <XML Data Import> option and copy-paste the following lines

  <delete>
    <PartyRelationship partyIdFrom="DevTeam1" partyIdTo="Developer1" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="_NA_" fromDate="2001-05-02 00:00:00.000"/>
    <PartyRelationship partyIdFrom="DevTeam1" partyIdTo="Developer2" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="_NA_" fromDate="2001-05-02 00:00:00.000"/>
    <PartyRelationship partyIdFrom="DevTeam1" partyIdTo="Developer3" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="_NA_" fromDate="2001-05-02 00:00:00.000"/>
    <PartyRelationship partyIdFrom="TestingTeam1" partyIdTo="TestingTeamMember1" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="_NA_" fromDate="2001-05-02 00:00:00.000"/>
    <PartyRelationship partyIdFrom="TestingTeam1" partyIdTo="TestingTeamMember2" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="_NA_" fromDate="2001-05-02 00:00:00.000"/>
    <PartyRelationship partyIdFrom="TestingTeam1" partyIdTo="TestingTeamMember3" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="_NA_" fromDate="2001-05-02 00:00:00.000"/>
    <PartyRelationship partyIdFrom="Company" partyIdTo="accountant_group" roleTypeIdFrom="_NA_" roleTypeIdTo="_NA_" fromDate="2001-01-01 12:00:00.000"/>
  </delete>

in the field <Complete XML document (root tag: entity-engine-xml)>
in the entity-engine-xml root tag.

Step 2 : Create Agile Team
  1. Goto Party application

  2. <create New Party Group>

  3. Group Name Agile Team

  4. Note the partyId (ex: 10003)

  5. goto <Role(s)>

  6. in Add To Role : view all

    • Internal Organization

  7. return to HR Application

Step 3 : Design Company internal organization
  1. add INFO_TECH as internal Organization for company

  2. remove Development Department for company

  3. add DEV as internal Organization for Information Technology

  4. add Agile Team as internal Organization for Information Technology, you should select with the partyId previously created in step 2

  5. remove Testing Department for company

  6. add TESTING as internal Organization for Information Technology

  7. add DemoLeadOwnersGroup as internal Organization for Sales department

  8. remove <A Group of Lead Owners> Department for company

  9. add RECEIVING as internal Organization for Accounting department

  10. add LEGAL as internal Organization for Accounting department

  11. Goto Employee Position

    1. Find

    2. select DEMO100

    3. Employee Position

    4. change Internal Organization to Development Team 1

    5. Update

  12. goto Main and deploy all to check you have the correct "internal organization"

you should see something like

Company Organization goal
Step 4 : Create all the Position Types

Check the existing list and create all missing.
For each Position Type you can give a description and optionally one or more rate (standard, average, overtime, …​).

Warning
TODO remove detail about Rate but add some detail about ValidResponsibilities and "Unions" link

To check, go to <Global HR Settings> and menu <Position Types> and <find>. _NA_ is mandatory for some screens, where Position Type is technically mandatory but not on a business point of view.

For Company it’s necessary to create

  • IT

    • Backend Developer

    • Frontend Developer

    • Senior Programmer

    • Senior Business Analyst

    • Scrum Master

    • Product Owner

  • Marketing

    • Web Designer

    • Designer

    • Community Manager

    • Product Manager

  • Accounting

    • Accountant

    • Auditor

    • Chatered Accountant

  • Sales

    • Sales man

    • Customer Manager

    • commercial Assistant

  • Miscellaneous

    • Secretary

    • Assistant

Important
To create one, you need to give the ID and a Description, to avoid technical problem it’s advisable to use only standard characters and whitout space for ID. ID lenght must be less than 20 characters.

After create one, you can go (but it’s not mandatory) on sub-menu <Position Type Rate> to enter one or more rate.

Create (For all, select N in HasTable and nothing in ParentTypeId) :

  1. BACK_DEV, Backend Developer, with standard rate 2000$/month

  2. FRONT_DEV, Frontend Developer, with standard rate 2300$/month

  3. SENIOR_PROGRAMMER, Senior Programmer

  4. SENIOR_BIZ_ANALYST, Senior Business Analyst

For all the others it also possible to import with a XML file in the "Web Tools" application.
Example for one PositionType with rate

  <EmplPositionType emplPositionTypeId="SCRUM_MASTER" description="Scrum Master" hasTable="N"/>
  <EmplPositionTypeRate emplPositionTypeId="SCRUM_MASTER" rateTypeId="STANDARD" fromDate="2019-01-02 00:00:00.000"/>
  <RateAmount       emplPositionTypeId="SCRUM_MASTER" rateTypeId="STANDARD" rateAmount="3500" rateCurrencyUomId="USD" periodTypeId="RATE_MONTH" workEffortId="_NA_" partyId="_NA_" fromDate="2019-01-02 00:00:00.000" />

for the complete import data see Data Import Position Type in Annex Data import.

Step 5 : Create all the Employee Positions

Employee Position is one of the core business object of HR application.

On the demo data, there is only one, already defined, Job Position.
Goto <Employee Position> and <find>, all existing position will be show.

On this step, we will create some Job Position and for each define

  • reporting structure

  • responsibilities

Job Position Creation
Important
On the standard user interface, it’s possible to enter the Job Position ID, it’s better for readability when using it, but it’s dangerous to create wrong ID, in ID only standard characters and without space are authorized. ID length must be less than 20 characters.
Best practice is to use only UpperCase.

When Creating Job Position, Position Id is not a mandatory field, if it’s leave empty a sequence number will be used.

For this tutorial step, BudgetId (and BudgetItemId) is leaving empty.

Important fields are :

  • status

  • Position Type

  • Internal Organization

Some flag are available to give more informations about this Position, currently no process is associated with these flags. It’s useful to search criteria.

We will created (with New Employee Position Button):

  • In IT for each Development department

    • 2 BackEnd developer (active/Open, BackEnd developer, Development team1, Salary, not exempt, full-time, not temporary)

      • BACK_DEV1_T1

      • BACK_DEV2_T1

      • BACK_DEV1_T2

      • BACK_DEV2_T2

      • …​

    • 1 Front end developer

      • FRONT_DEV1_T1

    • 1 Business Analyst

      • BIZ_ANALYST_T1

  • In IT on agile team

    • 1 scrum master

      • SCRUM_MASTER

    • 2 product owner

      • PRODUCT_OWNER_1

      • PRODUCT_OWNER_2

  • Directly for IT

    • CIO

    • 1 assistant

      • IT_ASSISTANT

    • 1 senior developer

      • IT_SENIOR_DEV

    • 1 senior Business Analyst

      • IT_SENIOR_BIZ_ANALYST

In this example, the day to day (or project) organization is not explicitly show. This organization is more an administration presentation.

After creating some Job Positions with screen, it also possible to import with a XML file in the "Web Tools" application.
Example for one EmplPosition

  <EmplPosition emplPositionId="CIO"                  statusId="EMPL_POS_ACTIVE" emplPositionTypeId="CIO"                partyId="INFO_TECH"    salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>

for the complete import data see Data Import Employee Position in Annex Data import.

Job Position Reporting Structure

On main HR Tree Company presentation, the Organization of the company is defined / shown from a department point of view.

It’s on the Job Position that the hierarchy in the company is defined.
it’s possible to define who report to who and in the same time who reported to who [smile o]

Warning
In the HR App it is possible to create circular reporting structures where a Position the reporting to and managed by positions are the same. It is the users responsibility to exercise common sense when creating the reporting structure.

To define that CIO report to CEO, Open tree to see CIO Job Position and click on it, go to tab <Reporting Structure> and add CEO with the first screen (CIO Report to)
After added, check the result

  • first, in the summary tab

  • secondly, in the summary tab for CEO

Job Position Responsibilities

Each Job Position could have some responsibilities to better defined boundary of the job.

First, Responsibility Types should be created in Global HR settings. For each you only need a ID (same remark than for Position Type, same constrain) and a description
For IT we can define some responsibilities types :

  • USER_AMBASSADOR User ambassador

  • USER_SUPPORT User support

  • CODE_QUALITY Code Quality

  • INTERNAL_DOC Internal Documentation

  • LIB_SECURITY_APPLY security patch applying

  • HR_MGMT Human resource management

  • PROJECT_MGMT Project Management

  • BUDGET_MGMT Budget Management

  • TASK_REAL Task realization

Go to <Global HR Settings> and menu <Responsability Types> and directly use the create form.

Secondly, return to Job Positions where it’s necessary to add some responsibility.

Return to CEO Job Position, by using Company Tree, and in the Responsibility Tab and add

  • General Management

  • Budget Management with comment Budget defined by the board

Job Position Reporting and Responsibilities

Now for all Job Positions, we are going to define the reporting Structure and the responsibilities :

  • CIO

    • manage Senior Developer, Senior Analyst, scrum master

    • has responsibilities Information Management (Good information in right place, privacy respect, security), Budget management (Defined by its Report-to), Human Resource Management (turn-over is a PKI, up to date skill for all IT people is important)

  • Senior Developer

    • manage all BackEnd developer (all team) and FrontEnd Developer from team1

    • has responsibilities Code Quality (define the rules and checking/reporting process), Internal Documentation (review all technical document, Technical Documentation Organization) Task realization

  • All dev has responsibilities Code Quality (producing), Internal Documentation (producing) and Task realization

  • Senior Analyst

    • manage all Business Analyst (all teams, Dev & test)

    • has responsibility User Ambassador (knowledge of all business process and guarantee a company overall view in each process)

  • All Business Analysts has responsibilities User Support and Task Realization

  • All Programmer has responsibility User Support

  • FrontEnd Developer (team1)

    • manage all other FrontEnd Developer

    • has responsibilities security patch applying (technical security design), Code Quality (coding rules for Front technology), Task realization

  • Scrun master

    • manage Programmer, all test teams

    • has responsibilities Project Management (animation and coordination to project succeed)

  • ProductOwner1

    • report to CFO

    • is a User Ambassador

  • ProductOwner2

    • report to CMO

    • is a User Ambassador

With user interface for CIO and Senior Developer
with import webtools for all others
Example for one EmplPosition Responsibility and one EmplPosition Reporting Structure

  <EmplPositionResponsibility emplPositionId="BACK_DEV1_T1"  responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionReportingStruct emplPositionIdReportingTo="IT_SENIOR_BIZ_ANALYS" emplPositionIdManagedBy="BIZ_ANALYST_T1"    fromDate="2019-01-02 09:00:00.0" comments="to manage unit/scenario request"  primaryFlag="Y"/>

for the complete import data see Data Import EmplPosition Responsibility in Annex Data import.

Step 6 : Create all the Employees

The last step of this tutorial, create all the employees and affect it to its Job positions.

Employee will be detailed in two other tutorials Employee Training and Development and Employee Training and Development.
Now we need only to create employee and in Job Position use Fulfillments tab to add employee the Job Position.

A Job positions can be fulfilled by one employee if Job Position is a full time and employee too, or fulfilled by multiple employee if each is partial time.

For this tutorial, all job positions area full-time and fulfill by only one employee, except dev team 2 where the Job Position are fulfill by two employees.

To create an employee, only a few informations are mandatory : first and last Name; one postal address and one phone number.
You need to choose by which internal organization the employee is employed, most of time the "establishment" is used, a legal entity used for legal social process. In our case we will use "company".

Employees to create :

  • CEO, Pierre Lavigne, 11 rue Croix-Rouge 7140 CHAPELLE, 479 287 434

  • CIO, Esmee Bacheler, 4 rue Ingrande 7190 SACHE, 630 383 392

  • IT Assistant, Marco Ceccoto, 51 rue principal 7360 Rouizere, 954 562 160

  • Senior Dev, Nuala Tulasme, 78 Bd morandial, 7140 CHAPELLE, 427 567 188

  • Senior Business Analyst, Karsten Ulman, 10 pl La Lande, 7700 ST PIERRE, 247 566 268

  • BackEnd dev1 team1, Rachel Teyrat, 38 av Lenine 7700 ST PIERRE, 614 392 510

  • BackEnd dev2 team1, Morning, Remco Ivanov, 20 Bd morandial, 7140 CHAPELLE, 427 445 831

  • BackEnd dev2 team1, Afternoon, Maria DaSilva, 134 Bd liberation, 7100 TOURS, 524 123 765

  • FrontEnd dev team1, Sieste Issongo, 3 r 11 april 1944 7700 ST PIERRE, 972 888 116

  • Business Analyst team1, Marion Huet, 221 imp Marat 7360 Rouizere, 476 461 036

Go to Employee Menu and New Employee.
After creation there is a tab <Employee Position> which show (only show) Employee Position for the employee.
To associate an employee to a Job Position, it’s needed to go to Job Position Menu, tab Fulfillment. You can also go to this screen by the Organization Tree and open the Job Position and contextual menu <add person>

Note
Employee Id (or partyId) is always a sequence Id given automatically.

If you want import data for employee there are multiple entities, Employee use Party’s entities :

  • Party

  • Person

  • PartyRelationship

  • ContactMech (POSTAL_ADDRESS, TELECOM_NUMBER)

  • PostalAdress

  • TelecomNumber

  • PartyContacMech

  • PartyContactMechPurpose (GENERAL_LOCATION, PRIMARY_LOCATION, PRIMARY_PHONE)

Example for one Employee with all related information

Senior Business Analyst, Karsten Ulman, 10 pl La Lande, 7700 ST PIERRE, 247 566 268

  <Party partyId="PEMPL001" partyTypeId="PERSON" statusId="PARTY_ENABLED" createdDate="2019-01-02 09:00:00.0" createdByUserLogin="admin"/>
  <Person partyId="PEMPL001" firstName="Karsten" lastName="Ulman" />
  <PartyRole partyId="PEMPL001" roleTypeId="_NA_" />
  <PartyRole partyId="PEMPL001" roleTypeId="EMPLOYEE" />
  <PartyRelationship partyIdFrom="Company" partyIdTo="PEMPL001" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" fromDate="2019-01-02 09:00:00.0" relationshipName="EMPLOYMENT" />
  <ContactMech   contactMechId="CMEMPL001" contactMechTypeId="POSTAL_ADDRESS" />
  <PostalAddress contactMechId="CMEMPL001" address1="10 pl La Lande" city="ST PIERRE" postalCode="7700" countryGeoId="FRA" stateProvinceGeoId="_NA_" />
  <PartyContactMech partyId="PEMPL001" contactMechId="CMEMPL001" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL001" contactMechId="CMEMPL001" contactMechPurposeTypeId="GENERAL_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL001" contactMechId="CMEMPL001" contactMechPurposeTypeId="PRIMARY_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <ContactMech   contactMechId="CMEMPL002" contactMechTypeId="TELECOM_NUMBER" />
  <TelecomNumber contactMechId="CMEMPL002" contactNumber="247 566 268" />
  <PartyContactMech partyId="PEMPL001" contactMechId="CMEMPL002" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL001" contactMechId="CMEMPL002" contactMechPurposeTypeId="PRIMARY_PHONE" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionFulfillment emplPositionId="IT_SENIOR_BIZ_ANALYS" partyId="PEMPL001" fromDate="2019-01-02 09:00:00.0"/>

for the complete import data see Data Import Employee in Annex Data import.

Annex Data import

For each import, Goto to Web Tools Application, select <XML Data Import> option and copy-paste the following lines, in the field <Complete XML document (root tag: entity-engine-xml)>
in the entity-engine-xml root tag.

Data Import Position Type
  <EmplPositionType emplPositionTypeId="SCRUM_MASTER" description="Scrum Master" hasTable="N"/>
  <EmplPositionTypeRate emplPositionTypeId="SCRUM_MASTER" rateTypeId="STANDARD" fromDate="2019-01-02 00:00:00.000"/>
  <RateAmount       emplPositionTypeId="SCRUM_MASTER" rateTypeId="STANDARD" rateAmount="3500" rateCurrencyUomId="USD" periodTypeId="RATE_MONTH" workEffortId="_NA_" partyId="_NA_" fromDate="2019-01-02 00:00:00.000" />
  <EmplPositionType emplPositionTypeId="PRODUCT_OWNER" description="Product Owner (IT)" hasTable="N"/>
  <EmplPositionTypeRate emplPositionTypeId="PRODUCT_OWNER" rateTypeId="STANDARD" fromDate="2019-01-02 00:00:00.000"/>
  <RateAmount       emplPositionTypeId="PRODUCT_OWNER" rateTypeId="STANDARD" rateAmount="30" rateCurrencyUomId="USD" periodTypeId="RATE_HOUR" workEffortId="_NA_" partyId="_NA_" fromDate="2019-01-02 00:00:00.000" />
  <EmplPositionType emplPositionTypeId="WEB_DESIGNER" description="Web Designer" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="DESIGNER" description="Designer" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="COMMUNITY_MANAGER" description="Community Manager" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="PRODUCT_MANAGER" description="Product Manager" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="ACCOUNTANT" description="Accountant" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="AUDITOR" description="Auditor" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="CHATERED_ACCOUNTANT" description="Chatered Accountant" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="SALES_MAN" description="Sales man/woman" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="CUSTOMER_MANAGER" description="Customer Manager" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="COMMERCIAL_ASSISTANT" description="Commercial Assistant" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="SECRETARY" description="Secretary" hasTable="N"/>
  <EmplPositionType emplPositionTypeId="ASSISTANT" description="Assistant" hasTable="N"/>
Data Import Employee Position
  <EmplPosition emplPositionId="CIO"                  statusId="EMPL_POS_ACTIVE" emplPositionTypeId="CIO"                partyId="INFO_TECH"    salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="IT_ASSISTANT"         statusId="EMPL_POS_ACTIVE" emplPositionTypeId="ASSISTANT"          partyId="INFO_TECH"    salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="IT_SENIOR_DEV"        statusId="EMPL_POS_ACTIVE" emplPositionTypeId="SENIOR_PROGRAMMER"  partyId="INFO_TECH"    salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="IT_SENIOR_BIZ_ANALYS" statusId="EMPL_POS_ACTIVE" emplPositionTypeId="SENIOR_BIZ_ANALYST" partyId="INFO_TECH"    salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="PROGRAMMER_T1"        statusId="EMPL_POS_ACTIVE" emplPositionTypeId="PROGRAMMER"         partyId="TestingTeam1" salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="BIZ_ANALYST_TEST1"    statusId="EMPL_POS_ACTIVE" emplPositionTypeId="BIZ_ANALYST"        partyId="TestingTeam1" salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="PROGRAMMER_T2"        statusId="EMPL_POS_ACTIVE" emplPositionTypeId="PROGRAMMER"         partyId="TestingTeam2" salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="BIZ_ANALYST_TEST2"    statusId="EMPL_POS_ACTIVE" emplPositionTypeId="BIZ_ANALYST"        partyId="TestingTeam2" salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="CEO"                  statusId="EMPL_POS_ACTIVE" emplPositionTypeId="CEO"                partyId="Company"      salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="CEO_ASSISTANT"        statusId="EMPL_POS_ACTIVE" emplPositionTypeId="ASSISTANT"          partyId="Company"      salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="CEO_SECRETARY"        statusId="EMPL_POS_ACTIVE" emplPositionTypeId="SECRETARY"          partyId="Company"      salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="CFO"                  statusId="EMPL_POS_ACTIVE" emplPositionTypeId="CFO"                partyId="ACCOUNTING"   salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="CFO_ASSISTANT"        statusId="EMPL_POS_ACTIVE" emplPositionTypeId="ASSISTANT"          partyId="ACCOUNTING"   salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="CFO_SECRETARY"        statusId="EMPL_POS_ACTIVE" emplPositionTypeId="SECRETARY"          partyId="ACCOUNTING"   salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="CMO"                  statusId="EMPL_POS_ACTIVE" emplPositionTypeId="CMO"                partyId="MARKETING"    salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
  <EmplPosition emplPositionId="CMO_ASSISTANT"        statusId="EMPL_POS_ACTIVE" emplPositionTypeId="ASSISTANT"          partyId="MARKETING"    salaryFlag="Y" exemptFlag="N" fulltimeFlag="Y" temporaryFlag="N"/>
Data Import EmplPosition Responsibility
  <EmplPositionResponsibility emplPositionId="BACK_DEV1_T1"  responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV2_T1"  responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV1_T2"  responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV2_T2"  responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10000"         responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10001"         responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10002"         responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10003"         responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="FRONT_DEV1_T2" responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10004"         responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10005"         responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="PROGRAMMER_T1" responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="PROGRAMMER_T2" responsibilityTypeId="CODE_QUALITY" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV1_T1"  responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV2_T1"  responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV1_T2"  responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV2_T2"  responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10000"         responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10001"         responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10002"         responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10003"         responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="FRONT_DEV1_T2" responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10004"         responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="10005"         responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="PROGRAMMER_T1" responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="PROGRAMMER_T2" responsibilityTypeId="INTERNAL_DOC" fromDate="2019-01-02 09:00:00.0" comments="producing" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV1_T1"  responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV2_T1"  responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV1_T2"  responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BACK_DEV2_T2"  responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10000"         responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10001"         responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10002"         responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10003"         responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="FRONT_DEV1_T2" responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10004"         responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10005"         responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="PROGRAMMER_T1" responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="PROGRAMMER_T2" responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionReportingStruct emplPositionIdReportingTo="IT_SENIOR_BIZ_ANALYS" emplPositionIdManagedBy="BIZ_ANALYST_T1"    fromDate="2019-01-02 09:00:00.0" comments="to manage unit/scenario request"  primaryFlag="Y"/>
  <EmplPositionReportingStruct emplPositionIdReportingTo="IT_SENIOR_BIZ_ANALYS" emplPositionIdManagedBy="BIZ_ANALYST_T2"    fromDate="2019-01-02 09:00:00.0" comments="to manage unit/scenario request"  primaryFlag="Y"/>
  <EmplPositionReportingStruct emplPositionIdReportingTo="IT_SENIOR_BIZ_ANALYS" emplPositionIdManagedBy="10006"             fromDate="2019-01-02 09:00:00.0" comments="to manage unit/scenario request"  primaryFlag="Y"/>
  <EmplPositionReportingStruct emplPositionIdReportingTo="IT_SENIOR_BIZ_ANALYS" emplPositionIdManagedBy="10007"             fromDate="2019-01-02 09:00:00.0" comments="to manage unit/scenario request"  primaryFlag="Y"/>
  <EmplPositionReportingStruct emplPositionIdReportingTo="IT_SENIOR_BIZ_ANALYS" emplPositionIdManagedBy="BIZ_ANALYST_TEST1" fromDate="2019-01-02 09:00:00.0" comments="to manage unit/scenario testing"  primaryFlag="Y"/>
  <EmplPositionReportingStruct emplPositionIdReportingTo="IT_SENIOR_BIZ_ANALYS" emplPositionIdManagedBy="BIZ_ANALYST_TEST2" fromDate="2019-01-02 09:00:00.0" comments="to manage unit/scenario testing"  primaryFlag="Y"/>
  <EmplPositionResponsibility emplPositionId="IT_SENIOR_BIZ_ANALYS" responsibilityTypeId="USER_AMBASSADOR" fromDate="2019-01-02 09:00:00.0" comments="knowledge of all business process and garanty a company overall view in each process" />
  <EmplPositionResponsibility emplPositionId="BIZ_ANALYST_T1"    responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BIZ_ANALYST_T1"    responsibilityTypeId="USER_SUPPORT" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BIZ_ANALYST_T2"    responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BIZ_ANALYST_T2"    responsibilityTypeId="USER_SUPPORT" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10006"             responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10006"             responsibilityTypeId="USER_SUPPORT" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10007"             responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="10007"             responsibilityTypeId="USER_SUPPORT" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BIZ_ANALYST_TEST1" responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BIZ_ANALYST_TEST1" responsibilityTypeId="USER_SUPPORT" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BIZ_ANALYST_TEST2" responsibilityTypeId="TASK_REAL" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="BIZ_ANALYST_TEST2" responsibilityTypeId="USER_SUPPORT" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="PROGRAMMER_T1"     responsibilityTypeId="USER_SUPPORT" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionResponsibility emplPositionId="PROGRAMMER_T2"     responsibilityTypeId="USER_SUPPORT" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionReportingStruct emplPositionIdReportingTo="FRONT_DEV1_T1" emplPositionIdManagedBy="FRONT_DEV_T2"     fromDate="2019-01-02 09:00:00.0" comments="technical management"  primaryFlag="Y"/>
  <EmplPositionReportingStruct emplPositionIdReportingTo="FRONT_DEV1_T1" emplPositionIdManagedBy="10004"            fromDate="2019-01-02 09:00:00.0" comments="technical management"  primaryFlag="Y"/>
  <EmplPositionReportingStruct emplPositionIdReportingTo="FRONT_DEV1_T1" emplPositionIdManagedBy="10005"            fromDate="2019-01-02 09:00:00.0" comments="technical management"  primaryFlag="Y"/>
  <EmplPositionResponsibility emplPositionId="FRONT_DEV1_T1" responsibilityTypeId="LIB_SECURITY_APPLY" fromDate="2019-01-02 09:00:00.0" comments="technical security design" />
  <EmplPositionResponsibility emplPositionId="FRONT_DEV1_T1" responsibilityTypeId="CODE_QUALITY"       fromDate="2019-01-02 09:00:00.0" comments="coding rules for Front technology" />
  <EmplPositionResponsibility emplPositionId="FRONT_DEV1_T1" responsibilityTypeId="TASK_REAL"          fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionReportingStruct emplPositionIdReportingTo="SCRUM_MASTER" emplPositionIdManagedBy="PROGRAMMER_T1"     fromDate="2019-01-02 09:00:00.0" comments="to manage unit/scenario testing"  primaryFlag="Y"/>
  <EmplPositionReportingStruct emplPositionIdReportingTo="SCRUM_MASTER" emplPositionIdManagedBy="PROGRAMMER_T2"     fromDate="2019-01-02 09:00:00.0" comments="to manage unit/scenario testing"  primaryFlag="Y"/>
  <EmplPositionResponsibility emplPositionId="SCRUM_MASTER" responsibilityTypeId="PROJECT_MGMT" fromDate="2019-01-02 09:00:00.0" comments="animation and coordination to project succeed" />
  <EmplPositionReportingStruct emplPositionIdReportingTo="CFO"          emplPositionIdManagedBy="PRODUCT_OWNER1"    fromDate="2019-01-02 09:00:00.0" comments="delegate acceptance decision for IT delivery"  primaryFlag="Y"/>
  <EmplPositionResponsibility emplPositionId="PRODUCT_OWNER1" responsibilityTypeId="USER_AMBASSADOR" fromDate="2019-01-02 09:00:00.0" comments="For Accounting people, and the others" />
  <EmplPositionReportingStruct emplPositionIdReportingTo="CMO"          emplPositionIdManagedBy="PRODUCT_OWNER2"    fromDate="2019-01-02 09:00:00.0" comments="delegate acceptance decision for IT delivery"  primaryFlag="Y"/>
  <EmplPositionResponsibility emplPositionId="PRODUCT_OWNER2" responsibilityTypeId="USER_AMBASSADOR" fromDate="2019-01-02 09:00:00.0" comments="For Marketing people, and the others" />
Data Import Employee

BackEnd dev1 team1, Rachel Teyrat, 38 av Lenine 7700 ST PIERRE, 614 392 510

  <Party partyId="PEMPL002" partyTypeId="PERSON" statusId="PARTY_ENABLED" createdDate="2019-01-02 09:00:00.0" createdByUserLogin="admin"/>
  <Person partyId="PEMPL002" firstName="Rachel" lastName="Teyrat" />
  <PartyRole partyId="PEMPL002" roleTypeId="_NA_" />
  <PartyRole partyId="PEMPL002" roleTypeId="EMPLOYEE" />
  <PartyRelationship partyIdFrom="Company" partyIdTo="PEMPL002" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" fromDate="2019-01-02 09:00:00.0" relationshipName="EMPLOYMENT" />
  <ContactMech   contactMechId="CMEMPL003" contactMechTypeId="POSTAL_ADDRESS" />
  <PostalAddress contactMechId="CMEMPL003" address1="38 av Lenine" city="ST PIERRE" postalCode="7700" countryGeoId="FRA" stateProvinceGeoId="_NA_" />
  <PartyContactMech partyId="PEMPL002" contactMechId="CMEMPL003" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL002" contactMechId="CMEMPL003" contactMechPurposeTypeId="GENERAL_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL002" contactMechId="CMEMPL003" contactMechPurposeTypeId="PRIMARY_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <ContactMech   contactMechId="CMEMPL004" contactMechTypeId="TELECOM_NUMBER" />
  <TelecomNumber contactMechId="CMEMPL004" contactNumber="614 392 510" />
  <PartyContactMech partyId="PEMPL002" contactMechId="CMEMPL004" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL002" contactMechId="CMEMPL004" contactMechPurposeTypeId="PRIMARY_PHONE" fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionFulfillment emplPositionId="BACK_DEV1_T1" partyId="PEMPL002" fromDate="2019-01-02 09:00:00.0"/>

The 4 last demo employee

  <Party partyId="PEMPL003" partyTypeId="PERSON" statusId="PARTY_ENABLED" createdDate="2019-01-02 09:00:00.0" createdByUserLogin="admin"/>
  <Party partyId="PEMPL004" partyTypeId="PERSON" statusId="PARTY_ENABLED" createdDate="2019-01-02 09:00:00.0" createdByUserLogin="admin"/>
  <Party partyId="PEMPL005" partyTypeId="PERSON" statusId="PARTY_ENABLED" createdDate="2019-01-02 09:00:00.0" createdByUserLogin="admin"/>
  <Party partyId="PEMPL006" partyTypeId="PERSON" statusId="PARTY_ENABLED" createdDate="2019-01-02 09:00:00.0" createdByUserLogin="admin"/>
  <Person partyId="PEMPL003" firstName="Remco" lastName="Ivanov" />
  <Person partyId="PEMPL004" firstName="Karsten" lastName="DaSilva" />
  <Person partyId="PEMPL005" firstName="Sieste" lastName="Issongo" />
  <Person partyId="PEMPL006" firstName="Marion" lastName="Huet" />
  <PartyRole partyId="PEMPL003" roleTypeId="_NA_" />
  <PartyRole partyId="PEMPL003" roleTypeId="EMPLOYEE" />
  <PartyRole partyId="PEMPL004" roleTypeId="_NA_" />
  <PartyRole partyId="PEMPL004" roleTypeId="EMPLOYEE" />
  <PartyRole partyId="PEMPL005" roleTypeId="_NA_" />
  <PartyRole partyId="PEMPL005" roleTypeId="EMPLOYEE" />
  <PartyRole partyId="PEMPL006" roleTypeId="_NA_" />
  <PartyRole partyId="PEMPL006" roleTypeId="EMPLOYEE" />
  <PartyRelationship partyIdFrom="Company" partyIdTo="PEMPL003" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" fromDate="2019-01-02 09:00:00.0" relationshipName="EMPLOYMENT" />
  <PartyRelationship partyIdFrom="Company" partyIdTo="PEMPL004" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" fromDate="2019-01-02 09:00:00.0" relationshipName="EMPLOYMENT" />
  <PartyRelationship partyIdFrom="Company" partyIdTo="PEMPL005" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" fromDate="2019-01-02 09:00:00.0" relationshipName="EMPLOYMENT" />
  <PartyRelationship partyIdFrom="Company" partyIdTo="PEMPL006" roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" fromDate="2019-01-02 09:00:00.0" relationshipName="EMPLOYMENT" />
  <ContactMech   contactMechId="CMEMPL005" contactMechTypeId="POSTAL_ADDRESS" />
  <ContactMech   contactMechId="CMEMPL006" contactMechTypeId="TELECOM_NUMBER" />
  <ContactMech   contactMechId="CMEMPL007" contactMechTypeId="POSTAL_ADDRESS" />
  <ContactMech   contactMechId="CMEMPL008" contactMechTypeId="TELECOM_NUMBER" />
  <ContactMech   contactMechId="CMEMPL009" contactMechTypeId="POSTAL_ADDRESS" />
  <ContactMech   contactMechId="CMEMPL010" contactMechTypeId="TELECOM_NUMBER" />
  <ContactMech   contactMechId="CMEMPL011" contactMechTypeId="POSTAL_ADDRESS" />
  <ContactMech   contactMechId="CMEMPL012" contactMechTypeId="TELECOM_NUMBER" />
  <PostalAddress contactMechId="CMEMPL005" address1="20 Bd morandial" city="CHAPELLE" postalCode="7140" countryGeoId="FRA" stateProvinceGeoId="_NA_" />
  <TelecomNumber contactMechId="CMEMPL006" contactNumber="427 445 831" />
  <PostalAddress contactMechId="CMEMPL007" address1="134 Bd liberation" city="TOURS" postalCode="7100" countryGeoId="FRA" stateProvinceGeoId="_NA_" />
  <TelecomNumber contactMechId="CMEMPL008" contactNumber="524 123 765" />
  <PostalAddress contactMechId="CMEMPL009" address1="3 r 11 april 1944" city="ST PIERRE" postalCode="7700" countryGeoId="FRA" stateProvinceGeoId="_NA_" />
  <TelecomNumber contactMechId="CMEMPL010" contactNumber="972 888 116" />
  <PostalAddress contactMechId="CMEMPL011" address1="221 imp Marat" city="Rouizere" postalCode="7360" countryGeoId="FRA" stateProvinceGeoId="_NA_" />
  <TelecomNumber contactMechId="CMEMPL012" contactNumber="476 461 036" />
  <PartyContactMech partyId="PEMPL003" contactMechId="CMEMPL005" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMech partyId="PEMPL003" contactMechId="CMEMPL006" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMech partyId="PEMPL004" contactMechId="CMEMPL007" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMech partyId="PEMPL004" contactMechId="CMEMPL008" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMech partyId="PEMPL005" contactMechId="CMEMPL009" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMech partyId="PEMPL005" contactMechId="CMEMPL010" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMech partyId="PEMPL006" contactMechId="CMEMPL011" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMech partyId="PEMPL006" contactMechId="CMEMPL012" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL003" contactMechId="CMEMPL005" contactMechPurposeTypeId="GENERAL_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL003" contactMechId="CMEMPL005" contactMechPurposeTypeId="PRIMARY_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL003" contactMechId="CMEMPL006" contactMechPurposeTypeId="PRIMARY_PHONE"    fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL004" contactMechId="CMEMPL007" contactMechPurposeTypeId="GENERAL_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL004" contactMechId="CMEMPL007" contactMechPurposeTypeId="PRIMARY_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL004" contactMechId="CMEMPL008" contactMechPurposeTypeId="PRIMARY_PHONE"    fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL005" contactMechId="CMEMPL009" contactMechPurposeTypeId="GENERAL_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL005" contactMechId="CMEMPL009" contactMechPurposeTypeId="PRIMARY_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL005" contactMechId="CMEMPL010" contactMechPurposeTypeId="PRIMARY_PHONE"    fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL006" contactMechId="CMEMPL011" contactMechPurposeTypeId="GENERAL_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL006" contactMechId="CMEMPL011" contactMechPurposeTypeId="PRIMARY_LOCATION" fromDate="2019-01-02 09:00:00.0" />
  <PartyContactMechPurpose partyId="PEMPL006" contactMechId="CMEMPL012" contactMechPurposeTypeId="PRIMARY_PHONE"    fromDate="2019-01-02 09:00:00.0" />
  <EmplPositionFulfillment emplPositionId="BACK_DEV2_T1" partyId="PEMPL003" fromDate="2019-01-02 09:00:00.0"/>
  <EmplPositionFulfillment emplPositionId="BACK_DEV2_T1" partyId="PEMPL004" fromDate="2019-01-02 09:00:00.0"/>
  <EmplPositionFulfillment emplPositionId="FRONT_DEV1_T1" partyId="PEMPL005" fromDate="2019-01-02 09:00:00.0"/>
  <EmplPositionFulfillment emplPositionId="BIZ_ANALYST_T1" partyId="PEMPL006" fromDate="2019-01-02 09:00:00.0"/>

2.3.2. Employee Salary and Benefits Administration

Being able to manage employee salaries and associated benefits is a key part of any Human Resources system.

Salary is not related to a Employee Positions (also named Job Position) because when a person which fulfill a Job Position change to an other, salary does’nt change in every time. Some organization are waiting person demonstrate his capabilities for the new Job Position to change salary.

Salary is not related only to a Person, because in some company there are multiple subsidiaries or affiliate company, so Salary (and associated benefits) is related to Employments (a subtype of Party Relationship).

In hightly structured company, Salary is organized with a pay schedule which have normally two level Grade and step.
In Apache OFBiz, you can manage salary (and other point) directly by amount or with Grade-Step or with a mix of them.

In the OFBiz Human Resources application you can:

  • Create Pay Grades and Salary Steps within each Pay Grade

  • Assign a Pay Grade and Salary Step to a Job Position Type

  • Manage Employment and

    • his Pay History

    • his Holidays (leave)

    • his associated Benefits

  • Calculate salaries and Generate Payslips

Tutorial: Employment and Salary

This tutorial will show you how to create and manage Employee Salaries and associated benefits.
It is base on existing OFBiz demo data and Company organization defined in the tutorial Tutorial: Define my Company Organization

The associated video (showing all the actions described in this tutorial) can be download on EmploymentAndSalary-implementation.avi

or directly visualize at EmploymentAndSalary

This tutorial have 6 step

Step 1 : Pay Grade and Salary Step

Pay Grades is managed in <Global HR Settings> and menu <Pay Grades>, and when you select one (from the list) you can see / manage the SalaryStep associated to it.

When creation PayGrade or SalaryStep, it’s possible to define the ID and most of time when the Grade-Step are used only Id are show, so it’s better to create clear ID.

In some country, legal social convention contain Grade-Step table for lowest salary by Job type, so it’s good to be able to have exactly same Id than in the convention.

Important
So clearly, it’s better for readability to enter the ID, but it’s dangerous to create wrong ID, in ID only standard characters and without space are authorized. ID length must be less than 20 characters.
Best practice is to use only UpperCase.

PayGradeName and comment can be used to explain.

For SalaryStep, there are fromDate and thruDate to be able to have history of change.

Table 1. Table Grades-Step (per month)
payGradeId payGradeName salaryStepSeqId amount

M1

Worker unqualified /month

1

1'500

2

1'600

3

1'700

4

1'800

M2

Worker qualified /month

1

1'650

2

1'760

3

1'870

4

1'990

M3

Manager /month

1

1'850

2

1'985

3

2'250

4

2'500

5

3'500

M4

Director /month

1

3'000

2

4'000

3

6'000

Table 2. Table Grades-Step (per Hours)
payGradeId payGradeName salaryStepSeqId amount

H1

Worker unqualified /hour

1

15

2

20

H2

Worker qualified /hour

1

17

2

25

DEV_H

Developpers /hour

WIHTOUT_EXP

30

EXP_2-3

50

EXP_4-10

100

BA_H

Business Analyst /hour

WIHTOUT_EXP

35

EXP_2-3

60

EXP_4-10

150

M1,M2 and their steps will be created with the User Screens and all other will create by import data

Example for M3 PayGrade and its 5 SalaryStep associated

  <PayGrade payGradeId="M3" payGradeName="Manager /month" comment="All job position with management"/>
  <SalaryStep payGradeId="M3" salaryStepSeqId="1"  fromDate="2019-01-02 00:00:00.000" amount="1850"/>
  <SalaryStep payGradeId="M3" salaryStepSeqId="2"  fromDate="2019-01-02 00:00:00.000" amount="1985"/>
  <SalaryStep payGradeId="M3" salaryStepSeqId="3"  fromDate="2019-01-02 00:00:00.000" amount="2250"/>
  <SalaryStep payGradeId="M3" salaryStepSeqId="4"  fromDate="2019-01-02 00:00:00.000" amount="2500"/>
  <SalaryStep payGradeId="M3" salaryStepSeqId="5"  fromDate="2019-01-02 00:00:00.000" amount="3500"/>

for the complete import data see Data Import PayGrade, SalaryStep in Annex Data import.

Step 2 : PositionType Rate and Grade

As saying in introduction of this chapter, salary is not related to job position, BUT, it’s possible to define some Job Position indicators about Salary, for budgeting for example or to help in recruitment process.

Salary amount or Grade-Step are’nt associated with Job Position but with Job Position Type, in Global HR Setting.
For each RateType (Standard, Average, Hightest, lowest, …​), it’s possible to choose to enter directly a amount or associated to it a Grade-Step.

In previous tutorial, multiple Position Type have been created, and for some of them ValidResponsibilities have been added. Now we are able to add some Salary amount informations.

Warning
TODO to put RateAmount added information coming from Tutorial 1

For Position Type Grade, as example, we will associate:

  • Senior Programmer with Grade-Step M3-4 as Standard Rate and M3-5 as Hightest Pay Rate

  • Senior Business Analyst with Grade-Step M3-3 as Standard Rate and M3-5 as Hightest Pay Rate

  • CEO with Grade-Step M4-3 as standard Rate

  • CIO with Grade-Step M4-2 as standard Rate, first enter M4-1 and modification to M4-2

Go to <Global HR Settings> and menu <Position Type>, click on find and select PositionType wanted, on PositionType subMenu there are option Rate and Grade. In each, the existing list is print and it’s possible to add one more. If a existing one is added twice, the first is expired.

Step 3 : Employment and Salary history

Currently, there is a functional bug in OFBiz (cf CreateEmployee ), so create Employee not create an employment, so for employee created in first tutorial Step 6 : Create all the Employees, no employment has been created.
In this step, all the employments will be created.

In Employment menu, you can check, no employment exist.
In the <New Employment> screen :

  • First field, internal Organization should be which legal entity hire the employee, not in which internal organization employee will fulfill an employee position

  • Amount is mandatory, even if you fulfill Grade-Step fields, it’s to have a complete (and clear) pay history and so see when the Grade-Step have change.

  • Period Type should not be forgot

Employment to create :

  • CEO, Pierre Lavigne, 7000/month

  • CIO, Esmee Bacheler, 5500/month

  • IT Assistant, Marco Ceccoto, 1870/month M2-3

  • Senior Dev, Nuala Tulasme, 4000/month

  • Senior Business Analyst, Karsten Ulman, 50/hour

  • BackEnd dev1 team1, Rachel Teyrat, 3000/month

  • BackEnd dev2 team1, Morning, Remco Ivanov, 30/hour

  • BackEnd dev2 team1, Afternoon, Maria DaSilva, 30/hour

  • FrontEnd dev team1, Sieste Issongo, 3000/month

  • Business Analyst team1, Marion Huet, 3000/month

The three first will be created with User Screen, and with import data for the others.

After Employment creation, the Employment submenu appear, with <Pay Histories> item.
In Pay Histories, it’s possible to change the last record, click on Edit and you can change what you want.
If amount or Grade-Step is changed, a new record in Pay History will be created and previous one will be expired.

For CIO, change amount to 5555, with coments "Good job"
and a second change, only add in the coments a smiley at the end ;-)

If we come back to the employee screens, on the summary page, employment summary is present and details are in Employment subMenu.

Example for Nuala Tulasme employment data import

  <Employment roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="10005" fromDate="2019-01-02 00:00:00.000"/>
  <PayHistory roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="10005" emplFromDate="2019-01-02 00:00:00.000" fromDate="2019-01-02 00:00:00.000" amount="4000" periodTypeId="RATE_MONTH"/>

for the complete import data see Data Import Employment in Annex Data import.

Step 4 : Employee holidays
Warning
TODO to be completed
Step 5 : Employee associated Benefits
Warning
TODO to be completed
Step 6 : Salaries calculation
Warning
TODO to be completed
Annex Data import

For each import, Goto to Web Tools Application, select <XML Data Import> option and copy-paste the following lines, in the field <Complete XML document (root tag: entity-engine-xml)>
in the entity-engine-xml root tag.

Data Import PayGrade, SalaryStep
  <PayGrade payGradeId="M4" payGradeName="Director /month" comment="All Direction job position"/>
  <SalaryStep payGradeId="M4" salaryStepSeqId="1"  fromDate="2019-01-02 00:00:00.000" amount="3000"/>
  <SalaryStep payGradeId="M4" salaryStepSeqId="2"  fromDate="2019-01-02 00:00:00.000" amount="4000"/>
  <SalaryStep payGradeId="M4" salaryStepSeqId="3"  fromDate="2019-01-02 00:00:00.000" amount="6000"/>
  <PayGrade payGradeId="H1" payGradeName="Worker unqualified /hour" comment="For subcontractor"/>
  <SalaryStep payGradeId="H1" salaryStepSeqId="1"  fromDate="2019-01-02 00:00:00.000" amount="15"/>
  <SalaryStep payGradeId="H1" salaryStepSeqId="2"  fromDate="2019-01-02 00:00:00.000" amount="20"/>
  <PayGrade payGradeId="H2" payGradeName="Worker qualified /hour" comment="For subcontractor"/>
  <SalaryStep payGradeId="H2" salaryStepSeqId="1"  fromDate="2019-01-02 00:00:00.000" amount="17"/>
  <SalaryStep payGradeId="H2" salaryStepSeqId="2"  fromDate="2019-01-02 00:00:00.000" amount="25"/>
  <PayGrade payGradeId="DEV_H" payGradeName="Developper /hour" comment="For subcontractor"/>
  <SalaryStep payGradeId="DEV_H" salaryStepSeqId="WITHOUT_EXP" fromDate="2019-01-02 00:00:00.000" amount="30"/>
  <SalaryStep payGradeId="DEV_H" salaryStepSeqId="EXP_2-3"     fromDate="2019-01-02 00:00:00.000" amount="50"/>
  <SalaryStep payGradeId="DEV_H" salaryStepSeqId="EXP_4-10"    fromDate="2019-01-02 00:00:00.000" amount="100"/>
  <PayGrade payGradeId="BA_H" payGradeName="Business Analyst /hour" comment="For subcontractor"/>
  <SalaryStep payGradeId="BA_H" salaryStepSeqId="WITHOUT_EXP" fromDate="2019-01-02 00:00:00.000" amount="35"/>
  <SalaryStep payGradeId="BA_H" salaryStepSeqId="EXP_2-3"     fromDate="2019-01-02 00:00:00.000" amount="60"/>
  <SalaryStep payGradeId="BA_H" salaryStepSeqId="EXP_4-10"    fromDate="2019-01-02 00:00:00.000" amount="150"/>
Data Import Employment
  <Employment roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="10005" fromDate="2019-01-02 00:00:00.000"/>
  <PayHistory roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="10005" emplFromDate="2019-01-02 00:00:00.000" fromDate="2019-01-02 00:00:00.000" amount="4000" periodTypeId="RATE_MONTH"/>
  <Employment roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL001" fromDate="2019-01-02 00:00:00.000"/>
  <PayHistory roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL001" emplFromDate="2019-01-02 00:00:00.000" fromDate="2019-01-02 00:00:00.000" amount="50" periodTypeId="RATE_HOUR"/>
  <Employment roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL002" fromDate="2019-01-02 00:00:00.000"/>
  <PayHistory roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL002" emplFromDate="2019-01-02 00:00:00.000" fromDate="2019-01-02 00:00:00.000" amount="3000" periodTypeId="RATE_MONTH"/>
  <Employment roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL003" fromDate="2019-01-02 00:00:00.000"/>
  <PayHistory roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL003" emplFromDate="2019-01-02 00:00:00.000" fromDate="2019-01-02 00:00:00.000" amount="30" periodTypeId="RATE_HOUR"/>
  <Employment roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL004" fromDate="2019-01-02 00:00:00.000"/>
  <PayHistory roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL004" emplFromDate="2019-01-02 00:00:00.000" fromDate="2019-01-02 00:00:00.000" amount="30" periodTypeId="RATE_HOUR"/>
  <Employment roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL005" fromDate="2019-01-02 00:00:00.000"/>
  <PayHistory roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL005" emplFromDate="2019-01-02 00:00:00.000" fromDate="2019-01-02 00:00:00.000" amount="3000" periodTypeId="RATE_MONTH"/>
  <Employment roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL006" fromDate="2019-01-02 00:00:00.000"/>
  <PayHistory roleTypeIdFrom="INTERNAL_ORGANIZATIO" roleTypeIdTo="EMPLOYEE" partyIdFrom="Company" partyIdTo="PEMPL006" emplFromDate="2019-01-02 00:00:00.000" fromDate="2019-01-02 00:00:00.000" amount="3000" periodTypeId="RATE_MONTH"/>

2.3.3. Employee Training and Development

Training and professional development is important for an organization because it ensures that your employees have the knowledge they need to perform their work. It can also help to fill any gaps in skills and improve their proficiency.

In the OFBiz Human Resources application you can:

  • Define and create training courses

  • Schedule courses on a global training calendar

  • Make course available (or unavailable) for enrollment

  • Review and approve requests from employees to attend

2.3.4. Performance Management and Employee Evaluation

Evaluating and managing the performance of employees is another main Human Resources function. Performance reviews can be created for an employee and used to evaluate the work that they have done in a particular job position. Comments and ratings can also be added.

In the OFBiz Human Resources application you can:

  • Create a new Performance Review for an employee

  • Add individual review items such as Attitude, Communication or Technical Skills

  • Add ratings or comments to each item

If an evaluation has gone well then the employee can be considered for promotion to another job position, or can be given other benefits such as a salary increase.

2.3.5. Recruitment, Candidate Selection and Hiring

Recruitment is about at attracting applicants that match the skills and experience you are looking for in a particular job position. Candidates can apply and after reviewing their details, those who are the best match in terms of qualifications and experience are short listed for interview. The final step is deciding upon the final candidate that you want to hire and the employment contract details that are related to that.

In the OFBiz Human Resources application you can:

  • Create a Requisition for new job positions

  • Create Internal Job Postings

  • Apply for job positions

  • Review Resumes / CVs

  • Arrange and Grade Interviews

(add a test to check if createEmployment works for not yet employee (ex: party which are before only candidat)

2.4. HR core object

2.4.1. Employee Positions

An employee position is also called a job position. It is a role that has been created to perform a specific task within the Company. This means that it has approved funding to pay it.
Generally positions are authorized by a budget and fulfilled by people. For the Company to engage one person to do a job. OFBiz handles positions in a flexible manner so you can think of a position as an authorization for a full-time equivalent (FTE)

Employee positions are defined by:

  • the work description and responsibilities

  • a pay structure (e.g. hourly wages, salary, contract etc)

  • full-time or part-time

  • the skills needed to fullfill the position

Note
An employee positions is not the same as a person fullfilling the role. A person fulfilling an employee position is called an employee

An employee position can be fullfilled (i.e. someone is currently working in the role) or it can be unfulfilled (i.e. a job vacancy).

Note
In some cases an employee position could also be considered a full-time equivalent (FTE) and can be assigned to more than one person (e.g. job sharing)

In the OFBiz Human Resources application

  • an employee position have

    • a type, defined in Global HR Settings, which describes the job and it’s pay rates.
      Some examples types could be secretary, production worker, sales manager, executive vice president or OFBiz programmer.
      If more then one person is needed for a type of job then a position must be created for each required person : i.e. If 10 secretaries are authorized for the Human Resource department then 10 positions are created with type secretary.

    • a reporting structure. Positions report to other positions and not the people who hold the position.
      You can identify / manage

      • the position to reports to

      • the positions(s), the current position manages.

      • in matrix orgnaization when there are multiple positions to report, most of time only one is the primary for the day to day approval (like holidays). It’s the purpose of the flag primary

    • a status, it can be one of: Planned For, Active/Open, or Inactive/Closed.

  • you can:

    • Create employee positions

    • Fulfill employee positions

    • Define the responsibilities of an employee position

    • Define a tree reporting structure between employee positions

    • Track employment position fulfillments over time

2.4.2. Employees

An employee is an individual that works for a company either full-time or part-time under a formal employment contract. The company pays the employee wages or salary.

Note
Wages tend to be related to an hourly rate and can vary based on the hours worked whereas salary is a flat rate generally paid monthly.

The Employees feature manages information about people who have an employment relationship with your Company or one of its departments. Details that can be setup include an employee profile, a display of all employee related information in a single screen and facilities for managing employee skills, qualifications, training, leave and payroll history.

In OFBiz Human Resources you can

  • Create a new employee

  • Search for an existing employee

  • View the full list of existing employees

2.4.3. Employments

An employment is a relationship between a person and your Company. The Human Resources application tracks employment benefits, pay history, unemployment claims and employment agreements for each employed person.

When you create new employee, an employee relationship is created automatically (/!\ see CreateEmployee functional Bug).

Note
If a person was entered into the application by some other means then you will have to create the employee relationship manually in the Party Manager application.

The employment record includes the start and end date of the employment. When the employment ends you include the type of termination and a reason. For example, an employee may have been let go because of poor performance. (In this case the 'type' could be 'fired and the reason could be 'poor performance')

The Employments screen can be used to create an employment or search for existing employments.

To other explanation, look at the process Employee Salary and Benefits Administration introduction.
A Database diagram for main link with other entities exist in HR Data model - Employment

2.4.4. Performance Review

Performance review allows employees to post reviews that can be used by management in evaluating the performance of the individual employee.

The employee’s position is also captured with the review which allows the creation of reports that look at ratings for a review item by position.

Performance Review Item

Each review has a list of items that can be rated and commented on.

Note
Performance review item can be created or deleted but can not be changed.

In the OFBiz Human Resources application you can:

  • Create performance review

  • Search performance review

  • Update performance review

  • Add performance review item

  • Delete performance review item

2.4.5. Qualifications

Qualifications are a feature of the recruitment process that allows you to record the details of any qualifications held by job applicants or your existing employees.

During the job application process, you may want to ensure that applicants have a minimum set of qualifications as a requirement for a position. The details of the qualifications for each applicant will need to be captured and if necessary, verified.

For existing employees, details of qualifications during their employment with your organisation can be added at any time.

In the case where qualifications expire if not renewed, you can also add an expiry or renewal date.

2.4.6. Recruitment

Recruitment is an important function in any organisation. It is a set of processes that allow you to specify, search for candidates to fulfill the roles that you have available.

When you have a job position that needs to be fulfilled, you can create a Job Requisition. The job requisition identifies the skills, qualifications, experience and also the number of resources needed for a position.

Note
Currently the default assumption is that the Job Requisition is for an Internal Job posting

Once the requisition is created, you can then create Job Posting based on the requisition. For example if the requisition was for three (3) roles then three job postings can be created (each with different application deadlines) one to fulfill each of the positions.

People can then apply for the positions and send in their CVs or Resumes. You can track the progress of the the application and also create details about various types of job interviews needed (e.g. HR, Panel, Case Study /Practical Test etc) and link it to the requisition.

You can also track the status of people who have applied for a position.

In the OFBiz Human Resource application you can

  • Approve or reject job applications

  • Manage and book job interviews

  • Record the result of job interviews

2.4.7. Skills

Skills are the basic foundation of any Human Resources function as it is a key factor in identifying the suitability of someone to perform a specific task or job. They can often be divided into two types; general and specific, and are characterised by things such as years of experience, rating or level of expertise.

In OFBiz basic skills can be defined in Global HR Settings and then linked to actual individuals via the Skills menu option.

In the recruitment process, skills are specified as part of the job requisition for an employee (or job) position. This helps ensure that the recruiter can focus on finding applicants with the relevant skillset.

Your employees can also gain new skills as part of their employment and so OFBiz allows you to record and track their newly acquired skills. It may be that rather than start a new recruitment process, you may be able to find someone with the right skills from your existing employees.

In the OFBiz Human Resources application you can

  • Assign or link skills to job applicants (i.e. non employees)

  • Assign or link skills to existing employees

  • Search for existing employees that have the required skills for a job

2.4.8. Resumes

Resumes or Curriculum Vitae (CVs) are documents that job applicants use to apply for job positions. These documents summarise the applicant’s experience, qualifications, contact information and details about why they are suitable for a particular job position.

In OFBiz you can enter a resume as a document and then link it to a person. Each resume entry has a unique identifier (that currently needs to be manually entered!). This identifier links a person to an instance of their resume.

Note
The OFBiz Content Manager application is used for the linking of resumes because it was designed for managing, storing and retrieving electronic data in varying formats - such as text, images, MS Word, PDF or even web URL’s.

2.4.9. Training

Introduction

Training and professional development is important for an organisation because it can help to fill any gaps in skills and improve the proficiency of the existing workforce. The training section of the HR module includes a Training Calendar where new training classes or events can be scheduled for an organisation. Users that have HR administration permissions can create, assign and approve training classes. All other users can view the list of classes available, their training status and any requests they have made to enroll for training.

General Process Flow
  • Training classes are created in the Global HR Training Class Type screen

  • Training classes are scheduled and added to the training calendar

  • Employees can create a request to attend a training

  • The employee supervisor needs to approve or reject the employee training request

  • Employees can check the status of the training requests

Training Calendar

The main screen in the Training feature is the Training Calendar. This is where you add classes and class participants. You can navigate the calendar by clicking the navigation text for day, week and month views located in the calendar title bar.

Add New Training Event

Training classes are created in the Training Calendar by clicking the Add New text command located in each calendar day cell. This action opens a small window above the calendar to enter the training class details.

Note
If you try to create a class and do not have correct User permissions, you will get an error. After a class is created a numeric class identifier and text identifier description appear in the calendar for the day of the class.
Request Training / Add a Training Participant

Participants can be added to a class by clicking on the class identifier. If you are the creator of the class the Participants window above and to the right of the calendar opens. You can add participants by entering their party id and clicking the Add button. The list of participants is displayed and updated. After a new participant is added to a training class or event, they are given the default status ‘Assigned’.

Approve Training

To approve a request for training, tor training administrator navigates to the Training Approvals screen and locates all requests with a status of "Assigned". They look up the person listed as the approver party. After checking with the approver they click update button to open the approval screen. In the approval screen the administrator sets the Approver Status and adds a reason for the decision. The user can see the status of their training schedule by clicking on the Training Status menu.

Warning
Something isn’t working correctly in 16.11. The there is no update button to click to approve a participant for training.

2.4.10. Leave

Generally each of your employees will be allowed to take a certain amount of time off work on an annual basis. This time-off work can be called leave, holiday or vacation. The amount and type of leave they can take may depend on their job position or how long they have worked for you.

You may also allow your employees special leave such as days off when they are ill (sick leave), time off during pregnacy or birth of a child (maternity or paternity leave) or time off to attend a funeral (bereavement leave).

OFBiz allows you to setup a range of different leave types and categories to cover many situations.

In all cases the employee will need to request the date (or dates) they would like to take as leave. Next the manager of the employee will need to approve the leave request. Once approved the employee can then take the leave.

In the OFBiz Human Resources application:

  • Employees can schedule or a leave request

  • Managers can create leave requests on behalf of an employee

  • Managers can approve, reject or delete employee leave requests

Note
Users with Human Resource Approver permission can only approve a leave request. To update or delete a leave request, you will need to have Human Resources Administration permission.

2.4.11. Security

OFBiz has a security model that controls access to all aspects of teh system at a very detailed level. This means that it is possible to manage what each user has access to and what actions they can perform.

Note
Security can be so fine grained to the lowest level such as a view, or the creation, update or deletion of a single item of information

This section covers the security permissions that inlcuded as part of the Human Resources application and how an administrator can assign permissions to users using the Party Manager application.

Note
A person may have one or more OFBiz login id’s. Each login id can be assigned to it’s own set of Security Groups. This means that the id a user logs in with determines what applications the person can work in and what work can be done in the application.
Human Resource Permissions

In OFBiz a Security Group is collection of permissions that allow a members of the group to use the application and any resources. The Human Resources application has three special security groups that can be assigned Human Resources users. There are also other general administrative security groups that let managers and administrators work in the application.

You can use the Party Manager application to add users to one or more Security Groups.

The three special HR App Security Groups are named by role:

  • Employee Role - This is mandatory to be able to logon into the Human Resources application. This is true even if user has the the other Human Resources Approver and Administration Roles. The employee role has the most restrictions on what a user may view and the actions they can take.

  • Approver Role - The Approver role gives members of the group the ability to approve, training and employee leave requests. The approver has all of the permissions included in the Employee Role and can also view and update some additional screens that are not available to the Employee role.

  • Administrator Role - The Human Resources Administrator Role has permission to do most things in the Human Resources application. They are allowed full access to view, create, update and delete throughout the Human Resources application. Please see the note below for the additional permissions required to be able to do everything in Human Resources.

Note
A person with the Human Administrator Role must also belong to the following Security Groups (Work Effort User, My Portal Employee, My Portal Customer or Scrum Team) to be able to add Training classes in the Training feature.
General OFBiz Permissions

Some OFBiz users (from the demo data) may not have any of the Human Resource permissions but can still access the Human Resouces application to be able to perform general operations. These include:

  • Business Admin has permission for all operations in the Human Resources application

  • Flexible Admin has permission to create, update, delete and view operations in Human Resources

  • Full Admin has permission for all operations in Human Resources

  • Super has permission for all operations in the Human Resources

  • Viewadmin has permission for viewing details in Human Resources

Security Administration In Party Manager

A user must be granted permission to use the Human Resources application. This section describes how to do this using OFBiz Party Manager. It assumes the user has a user login and Party administration privileges.

Please do the following to grant permissions

  1. Login to the Party application

  2. User the search functionality to locate the user that you want to give Human Resources permissions to

  3. When the search results are displayed, click on the Party ID column

  4. In the User Name(s) screenlet click the Security Groups button for the User Login that will receive Human Resources permissions

  5. In the Add User Login to Security Group screenlet select the HUMANRES_EMPLOYEE. from the Group drop-down-list.

  6. Click the Add button to use the current date for the From Date or enter dates for From Date and Thru Date as needed then click Add

  7. If the person is to be allowed to approve Training add the HUMANRES_APPROVER permission. As in the previous step enter dates as required

  8. If the person is to be allowed all access then add the HUMANRES_ADMIN permission…​ As in the previous steps enter dates as required.

2.5. Global HR Settings

Global HR Settings are used to setup the basic reference data that is used throughout the Human Resources application. Many of the screens contain fields that have drop-down lists for selection and these drop-down list can be setup here.

Tip
You need to have 'administrator' or 'create privileges' to update any of the Global HR Settings

2.5.1. Pay Grades

Useful to define a salary amount table for the company. With this table for each grade and a step you have a amount.

It’s used in structured entreprise to be more clear on salary definition or supplier cost.

Worksheet PayGrade - SalaryStep is not usable alone, when it’s used to define a Rates it’s associated with PeriodType (per year, per month, per week, per hour) and RateType (Standard, Average, Hightest, lowest, …​).
So sometine it’s needed to define multiple Grades if it will be use with a specifics periodType, ex: for developper, one Grade for using with «per month» and one Grade for using with «per hours»

Salary Steps

For each Grade, it possible to have multiple step. It’s possible to have overlap in step betwwen to grade.

For more detail, look at the Tutorial Employment and Salary Step 1 : Pay Grade and Salary Step

2.5.2. Position Types

Employee Positions is associated with a Position Type to "pre-define" some informations about the Job Position.

Position Type can be use for legal purpose, like social classification or Union constrain to be able "classify" Job position.

Position Type Rate

When defining a Employee Position, Salary is one of the important point. Depending of company salary rules, most of time there is not a salary associated with a Position but a range and some indicators.

So it’s possible to associated to a position type some amount associated to a Rate Type (Standard, Average, Hightest, lowest, …​) and a PeriodType (per year, per month, per week, per hour).

It’s also used by WorkEffort Component to manage cost for subcontractor, for example.

Position Type Grade

If company is very structured on the salary management and so mange Salary by Grade-Step, it’s possible to associate a Position Type and a RateType a Grade-Step.

As business rules, it’s not possible to have for the same RateType a amount and a Grade-Step.

Valid Responsibilities

It’s possible to define some responsibilities for a Position Type, to constrain the responsibilities it is authorized to associate to a Employee Position (which is associated to this Position Type).

2.5.3. Skills Types

A skill type is used to define a skill group. Your employees, contractors and partners may have hundreds of different of skills so skill types allows you to organise these skills so they are manageable.

This is helpful for reporting on your companies skill inventory or searching for resources with the skill types needed for a job. You can search for skills types and assign skills to people and organisations in the Skills feature.

Tip
You can manage the skills of an individual or an organisation in their profile in Party Manager uisng the Party Skills feature.

2.6. HR Data model

This chapter describe the main entities for the Human Resource Component.
The goal is to show :

  • overall view for each HR core object

  • link between entities

For each diagram, Main Entities (for this diagram) are in purple
Entities in Light Blue have not all fields (link, composition ) present.

2.6.1. Employee Position

Position and PositionType

This diagram explain Position and PositionType main informations. Employee Position

Position details

This diagram show all Positions main informations / link. Employee Position Detail

2.6.2. Employment

Employment

This diagram explain Position and PositionType main informations. Employment

Employment Appl

This diagram show all Positions main informations / link. Employment Appl

2.6.3. Qualification, Skill, Review

Training

This diagram show all link between Party & PartyRole AND all HR entites. Training

Performance Review

This diagram show all link between Party & PartyRole AND all HR entites. Performance Review

2.6.4. HR App intra-application integration

Party in Human Resources

This diagram show all link between Party & PartyRole AND all HR entites. Party in Human Resources

HR Glossary

Annual Revenue

Annual revenue is the amount of revenue for a group that is reported in the Party Group Information screenlet of the groups profile (visit Party Profile screen).

Budget

A budget is used to track spending in the company for a future period of time. The company may have one or more budgets depending on the requirements i.e. Operating Budget, Capital Budget. A budget has a status, type and is composed of budget line items.

Employee

An employee is a person who has an employment relationship with your Company.

Employee Position Type

Employee Position Type is a name that describes a position (Employee Positions). Business Analyst, Programmer and System Administrator are examples of position types in the OFBiz demo data. You can define your own position types in Global HR Settings > Position Types.

Employment

Employment defines the relationship between your Company and a person who is an employee. The employment relationship tracks employee benefits preferences, pay history, and unemployment claims and agreements.

Exempt Flag

The exempt flag can be used to indicate if an employee position is exempt or non-exempt under the fair labor Standards Act (FLSA).

Fulfillment

A fulfillment associates a person with a position. A person can fulfill more than one position and a position can have more then one person.

Fulltime Flag

The fulltime flag can be used to indicate if an employee position is for a full or part time position.

HR App Menu

The main menu that opens the high level features of the HR App i.e. Employees, Employments, Employee Position etc.

Internal Organization

Internal organization is the name of a relationship between a party group and your company. This relationship is used to filter party groups as being part of your company to distinguish them from other groups which are external. For example your marketing department is an internal organization while a suppliers sales department is not.

Number of Employees

Number of employees that are reported in the Party Group Information screenlet of the groups profile (Visit Party Profile screen).

Party

Party is a term used to simplify collecting information that used in a common manner by different people and things. The most common party types are people and groups. Both people and groups have contact information. A party is identified by a unique Party Id. Using this Id OFBiz can collect and find contact (and other information and processes) for both people and groups in the same way. This is why you will often see Party Id as a field in a form or a filter as you work in OFBiz.

Party Id

The unique identifier for a party. The Id is text so in some cases you will see an Id, created by a user, that carries some meaning i.e. Party Id DemoEmployee. In other cases the Id is created by OFBiz and is will be simply a number from a sequence. In either case the Id is unique.

Qualifications

Qualifications for an individual person or organization are in the Employees Qualifications menu item. To find and update the qualifications of people and organizations visit Qualifications menu.

Party Qualification Type

Party qualifications define a person or organizations accomplishments that indicate their suitability to perform a job. Qualifications are organized into qualification groups for the purpose of managing and reporting.

Person

Person is a human being as distinguished from a party group which is an organization. Human beings and organizations have different attributes i.e. People have first and last names while groups have group names. Both person and party group are types of parties and share information and processes common to parties.

Rating

Rating is a user defined numeric rating for a skill. (See Skills Menu)

Responsibility

Responsibilities define duties assigned to a position. They are defined in Responsibility Types and assigned in Employee Position Responsibilities.

Salary Flag

The salary flag can be used to indicate if an employee position is salaried or paid hourly.

Skill

Skill is some ability or knowledge possessed by a person or organization that is needed to perform a job for the company. See Skills

Skill Level

Skill level is a user defined numeric rating a skill. It is up to the user to assign some meaning to the level. For example 1=Entry, 2=Intermediate, 3=Expert (See Skills Menu).

Skill Group

Skill goup is a name that describes a collection of skills that have common attributes (See Skills Menu).

Temporary Flag

A temporary flag can be used to indicate if an employee position is permanent or temporary.

Termination Reason

The termination reason is a name describing the cause related to a termination type e.g. Type: resigned for reason: found new job.

Termination Type

The termination type is a name for the kind of termination e.g. Resigned, fired, retired, layoff.

Appendix A: HR Data Model Resource Book Difference

PayHistory

it’s not really a difference, more a not explicit detail about fromDate field.
PayHistory is a detail of Employment entity (Composition in UML language) and Employment entity has a fromDate field (as one of the keyField), and we need fromDate field for information about PayHistory, so it’s needed to have one named emplFromDate (coming from Employment) and one classical fromDate to be able to have multiple PayHistory for one Employment.

Resume

entity in Apache OFBiz is a simplification of the concept explain in the Book

Appendix B: HR Enhancement & Bug

2.B.1. Functional bug

This section explain current "Bug" which are waiting some developpment.

CreateEmployee

Currently create an employee should create a Party Relationship between Employer and Employee(cf documentation), it’s not working because a parameters if forgot in service but it’s not the major "Bug".

If the create Employee screen is used from HR, it’s to use HR functions and for HR component, an employee has an Employment (which is a subtype of PartyRelationship), so create an Employee should create an Employment (and so the first PayHistory).
Screen and Service should corrected to do these points.

2.B.2. Functional Enhancement

This section explain which developpment should be done to add some features which should be in Apache OFBiz

Valid Responsibility

Entity ValidResponsibility exist in Apache OFBiz, associated controler screens, forms and services exists too, but there is no menu to use them !

  1. Add a entry menu in Employee Position Type sub menu (in Global HR Setting)

  2. Correction on screen definition to included GlobalHR decorator and button highlight

Business Rule

It’s suggest in «the Data Model Resource Book» to have a check before adding some responsibilities to a job Position if Position Type has it (in ValidResposibility) with valid date.

Position Type Rate amount-and-grade

For a RateType, it should not be possible to have a amount AND a Grade-Step.

EmplPositionTypeClass

Entity exist but no screen management.

Same for EmplPositonClassType

General Glossary

Application
  1. for end users , an application is a top level menu entry, it’s for managing a business object: order, accounting GL, accounting AP, facility, project, …​.
    An application can be dedicated for a specifics business and can use part of other applications.
    With Apache OFBiz OOTB (Out Of The Box) you will find the main application (the Core Application) and with ofbiz plugins you can find application more business specifics.

  2. technicaly , an application is a part of Component beginning with the ~webapp directory.
    A single component may contain several applications each mounted on a unique URL. Within each component, the "ofbiz-component.xml" file defines the available applications and how those applications shall be mounted on URLs.

Component
  1. for end users , an OFBiz component, is an application or a group of applications.
    Knowing which component is used by a application can be useful for Key Users to be able to set application parameters or modify configuration files.

  2. technicaly , An OFBiz component is a directory used by the OFBiz framework to specify and load application server resources necessary to execute an OFBiz instance.
    Each OFBiz component must have a unique name (typically the name of the root directory for the component) and a configuration file called: "ofbiz-component.xml".
    Component resources may include, but are not limited to:

    • webapps,

    • Java source/classes,

    • classpath resources,

    • scripts, entity definitions,

    • entity data files,

    • service definitions,

    • service and entity ECA rules,

    • test suites,

    • encryption keystores.

A component contains applications and/or the lower level tools and definitions needed by applications.
A component can be used for self-contained extensions, including applications and logic/data modifications, to the suite of tools and applications that come with OFBiz.
For more detail look at developer-manual.

core application components

The core applications in Apache OFBiz are web applications that serve common business needs found in most enterprises.
They are included in the ofbiz-framework and each one has one (or more) menu entry.
Currently there are :

  • Accounting,
    menu entries: Accounting, Accounting-AP, Accounting-AR

  • Product management, to manage products, prices, promotion rules, categories, catalogs, stores and more.
    menu entry: Catalog

  • Content management,

  • Wharehouse management, to manage facilities, inventory, physical inventory, in and out shipment, and more.
    menu entry: Facility

  • Human Resources management,
    menu entry: HR

  • Manufacturing management: Materials Resource Planning, define production schemas and tasks, Bill of Materials, Equipment allocation, Workers assignment, Job Shop

  • Marketing management: Marketing Communications Management and Sales Force Automation
    menu entry: Marketing, SFA

  • Order management: Fully featured sales and purchase order management module, including

    • request

    • requirements

    • quote

    • order

    • statistics

  • Party management, enables organizations to maintain parties (human and other legal entities), their roles and user accounts, and lots more.

  • Work Effort Management, to manage work efforts, tasks, calendar, maintenance assignments and more.

With these core applications multiple others can be build. In ofbiz-plugin you can find some.

Demo Data

Demo data are loaded with the command gradlew loadAll or gradlew "ofbiz --load-data readers=dDemo"

Demo data are present to help understanding ofbiz application process, most of the time it’s only the minimum of data, For a correct understanding, it’s necessary to create more data to have a full functionnal OFBiz.

Entity

An entity represents an important business concept that is stored as a record in the database. It is used in the document and OFBiz to generalize about the behavior of persistent information. For example employees and employments are important business concepts for HR application, stored in the database. We could refer to an action directly on a particular entity by saying "Create a new employee" or "Create a new employment". We could alternately describe a general create action by saying "Create a new entity".