Difference between revisions of "Libero Human Resource & Payroll Official Extension"

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.
(Introduction)
(Functional team)
 
(17 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
[[Image:Logo_e-Evolution.png|right]]
 +
 +
{{sponsorbox}}
 +
{{Sponsor_designer|Victor Perez}}
 +
{{User_Email|victor.perez@e-evolution.com}}
 +
{{Sponsor_developer|Oscar Gomez}}
 +
{{Sponsor_sponsorname|e-Evolution,SC, located in Mexico, Equador and Venezuela}}
 +
{{sponsorboxbottom}}
 
This is to introduce [[Libero]]'s HR Payroll and HR Management modules for integrating into ADempiere ERP Business Suite. The code is preliminarily in version 354 and has its own branch in SVN. The modules reuses the Application Dictionary and Data Models.
 
This is to introduce [[Libero]]'s HR Payroll and HR Management modules for integrating into ADempiere ERP Business Suite. The code is preliminarily in version 354 and has its own branch in SVN. The modules reuses the Application Dictionary and Data Models.
For commercial support and consultancy please email its creator: victor.perez@e-evolution.com
+
 
 +
[[Image:HR%26PayrollUserGuide.png|300px|thumb|[http://es.calameo.com/read/0002293766e9680c53ae4 ADempiere Human Resource & Payroll User Guide] illustrated by [http://www.e-evolution.com e-Evolution] ]]
  
 
==Introduction==
 
==Introduction==
The Libero Human Resource & Payroll is  developed and maintained for [[http://www.e-evolution.com/web/e-evolution/human-capital-management e-Evolution]].  
+
The Libero Human Resource & Payroll is  developed and maintained for [[http://www.e-evolution.com/web/e-evolution/human-capital-management e-Evolution]]. Configuring HR module in ADempiere is an easy task. First you have to setup basic data such as [[HR Contract]], [[HR Employee Job]] type, and [[HR Employee]]. Based on these data, you can start entering the [[HR Employee]] information one by one. The screen shots in the following section will explain more about how to configure the [[ADempiere HR]] module.
Configuring HR module in ADempiere is an easy task. First you have to setup basic data such as [[HR Contract]], [[HR Employee Job]] type, and [[HR Employee]]. Based on these data, you can start entering the [[HR Employee]] information one by one. The screen shots in the following section will explain more about how to configure the [[ADempiere HR]] module.
+
  
 
== SourceCode ==
 
== SourceCode ==
You may access the code from [http://adempiere.svn.sourceforge.net/viewvc/adempiere/branches/liberoHR/ LiberoHR Branch]. It is licensed under GPLv2.0 copyright of e-Evolution, Mexico.
+
 
 +
You may access the Mercurial Repository [http://adempiere.hg.sourceforge.net/hgweb/adempiere/extension_libero_hr_and_payroll/file/ Mercurial Repository]
 +
 
 +
It is licensed under GPLv2.0 copyright of e-Evolution, Mexico.
  
 
=== Procedure to test using Eclipse ===
 
=== Procedure to test using Eclipse ===
Line 17: Line 28:
 
=== Install the extension into ADempiere Setup ===  
 
=== Install the extension into ADempiere Setup ===  
  
*1.- Copy the build.properties.template to build.properties
+
1.- unzip and apply the migration script for Libero HR & Payroll in a new ADempiere Instance based on 360TLS
*2.- Setting the adempiere.trunk variable
+
 
*3.- Execute build.xml ant script
+
http://sourceforge.net/projects/adempiere/files/Adempiere%20Packages/Libero%20Human%20Resource%20and%20Payroll/migration_script.zip/download
*4.- Copy the dist/lib/liberoHR.jar file to $ADEMPIERE_HOME/packages
+
 
*5.- redeploy Adempiere using RUN_silentsetup.sh or RUN_silentsetup.bat
+
2.- Download the binary liberoHR.jar, liberozkHR.jar and patches.jar files
*6.- Ready
+
 
 +
http://sourceforge.net/projects/adempiere/files/Adempiere%20Packages/Libero%20Human%20Resource%20and%20Payroll/liberozkHR.jar/download
 +
http://sourceforge.net/projects/adempiere/files/Adempiere%20Packages/Libero%20Human%20Resource%20and%20Payroll/liberoHR.jar/download
 +
http://sourceforge.net/projects/adempiere/files/Adempiere%20Packages/Libero%20Human%20Resource%20and%20Payroll/patches.jar/download
 +
 
 +
3.- Open Terminal command
 +
4.- Change the ADempiere Home directory
 +
    #cd $ADEMPIERE_HOME
 +
5.- Copy the liberoHR.jar file to packages directory
 +
    #cp liberoHR.jar $ADEMPIERE_HOME/packages/liberoHR/lib
 +
6.- Copy the liberozkHR.jar file to packages directory
 +
    #cp liberozkHR.jar $ADEMPIERE_HOME/zkpackages/liberoHR/lib   
 +
7.- Copy the patches.jar file to lib directory
 +
    #cp patches.jar $ADEMPIERE_HOME/lib
 +
8.- Run ADempiere setup
 +
    #RUN_setup.sh or RUN_silentsetup.sh
 +
9.- Login using SuperUser , and execute the System Admin -> General Rules -> Security -> Role Access Update,after you need Login again, now you would see the new option in menu
  
 
== Roadmap Document==
 
== Roadmap Document==
Line 40: Line 67:
  
 
!align="left"  style="background:#EFF5FB; color:#0080FF" |Payment Selection
 
!align="left"  style="background:#EFF5FB; color:#0080FF" |Payment Selection
!style="background:#EFF5FB; color:#0080FF"|Under development
+
!style="background:#EFF5FB; color:#0080FF"|Implemented
 
!style="background:#EFF5FB; color:#0080FF"|[[User:vpj-cd |Victor Perez]]
 
!style="background:#EFF5FB; color:#0080FF"|[[User:vpj-cd |Victor Perez]]
 
!style="background:#EFF5FB; color:#0080FF"|High
 
!style="background:#EFF5FB; color:#0080FF"|High
 
!style="background:#EFF5FB; color:#0080FF"|2.0
 
!style="background:#EFF5FB; color:#0080FF"|2.0
!style="background:#EFF5FB; color:#0080FF"|no defined
+
!style="background:#EFF5FB; color:#0080FF"|last build
 
!style="background:#EFF5FB; color:#0080FF"|...
 
!style="background:#EFF5FB; color:#0080FF"|...
 
|-
 
|-
 
!align="left" style="background:#EFF5FB; color:#0080FF" |Payment Print/Export
 
!align="left" style="background:#EFF5FB; color:#0080FF" |Payment Print/Export
! style="background:#EFF5FB; color:#0080FF"|Under development
+
! style="background:#EFF5FB; color:#0080FF"|Implemented
 
! style="background:#EFF5FB; color:#0080FF"|[[User:vpj-cd |Victor Perez]]
 
! style="background:#EFF5FB; color:#0080FF"|[[User:vpj-cd |Victor Perez]]
 
! style="background:#EFF5FB; color:#0080FF"|High
 
! style="background:#EFF5FB; color:#0080FF"|High
 
! style="background:#EFF5FB; color:#0080FF"|2.0
 
! style="background:#EFF5FB; color:#0080FF"|2.0
! style="background:#EFF5FB; color:#0080FF"|no defined
+
! style="background:#EFF5FB; color:#0080FF"|last build
 
! style="background:#EFF5FB; color:#0080FF"|...
 
! style="background:#EFF5FB; color:#0080FF"|...
 
|-
 
|-
 
!align="left"  style="background:#EFF5FB; color:#0080FF"|Concept to generate AR/AP Invoice
 
!align="left"  style="background:#EFF5FB; color:#0080FF"|Concept to generate AR/AP Invoice
! style="background:#EFF5FB; color:#0080FF"|Under development
+
! style="background:#EFF5FB; color:#0080FF"|Implemented
 
! style="background:#EFF5FB; color:#0080FF"|[[User:vpj-cd|Victor Perez]]
 
! style="background:#EFF5FB; color:#0080FF"|[[User:vpj-cd|Victor Perez]]
 
! style="background:#EFF5FB; color:#0080FF"|High
 
! style="background:#EFF5FB; color:#0080FF"|High
 
! style="background:#EFF5FB; color:#0080FF"|2.0
 
! style="background:#EFF5FB; color:#0080FF"|2.0
! style="background:#EFF5FB; color:#0080FF"|no defined
+
! style="background:#EFF5FB; color:#0080FF"|last build
 
! style="background:#EFF5FB; color:#0080FF"|...
 
! style="background:#EFF5FB; color:#0080FF"|...
 
|-
 
|-
 
!align="left"  style="background:#EFF5FB; color:#0080FF"|Payroll Engine Based on JSR 223 Scripting APIs
 
!align="left"  style="background:#EFF5FB; color:#0080FF"|Payroll Engine Based on JSR 223 Scripting APIs
! style="background:#EFF5FB; color:#0080FF"|Under development
+
! style="background:#EFF5FB; color:#0080FF"|Implemented
 
! style="background:#EFF5FB; color:#0080FF"|[[User:vpj-cd|Victor Perez]]
 
! style="background:#EFF5FB; color:#0080FF"|[[User:vpj-cd|Victor Perez]]
 
! style="background:#EFF5FB; color:#0080FF"|High
 
! style="background:#EFF5FB; color:#0080FF"|High
 
! style="background:#EFF5FB; color:#0080FF"|2.0
 
! style="background:#EFF5FB; color:#0080FF"|2.0
! style="background:#EFF5FB; color:#0080FF"|no defined
+
! style="background:#EFF5FB; color:#0080FF"|last build
 
! style="background:#EFF5FB; color:#0080FF"|...
 
! style="background:#EFF5FB; color:#0080FF"|...
 
|-
 
|-
Line 88: Line 115:
 
|-
 
|-
 
!align="left"  style="background:#EFF5FB; color:#0080FF"|Import Payroll  
 
!align="left"  style="background:#EFF5FB; color:#0080FF"|Import Payroll  
! style="background:#EFF5FB; color:#0080FF"|Under development
+
! style="background:#EFF5FB; color:#0080FF"|Implemented
 
! style="background:#EFF5FB; color:#0080FF"|Contribution from GlobalQSS
 
! style="background:#EFF5FB; color:#0080FF"|Contribution from GlobalQSS
 
! style="background:#EFF5FB; color:#0080FF"|High
 
! style="background:#EFF5FB; color:#0080FF"|High
 
! style="background:#EFF5FB; color:#0080FF"|3.0
 
! style="background:#EFF5FB; color:#0080FF"|3.0
! style="background:#EFF5FB; color:#0080FF"|no defined
+
! style="background:#EFF5FB; color:#0080FF"|last build
 
! style="background:#EFF5FB; color:#0080FF"|...
 
! style="background:#EFF5FB; color:#0080FF"|...
 
|}
 
|}
Line 300: Line 327:
 
[[Category:Features]]
 
[[Category:Features]]
 
[[Category:Documentation]]
 
[[Category:Documentation]]
 +
== Functional team  ==
 +
*Volunteers for reviewing:
 +
** [[User:mar_cal_westf|Mario Calderon]] 01:25, 28 July 2013 (UTC) - Functional Review
 +
=== Result of Functional Review ===
 +
*General observations. San Salvador, July 28th, 2013, 01:25 GMT.
 +
**Libero HR/Payroll is now part of Adempiere; the main difference is that is is implemented as a package (like Libero MFG), which can or cannot be included in the implementation.
 +
**The module reuses whenever possible existing Adempiere objects. A good example is here the usage of windows, scripts and processes.
 +
**Libero HR/Payroll concentrates more on the Payroll than in the Human Resources part.
 +
***IMHO this models right now just basic HR needs, though thanks to its flexibility more advanced solutions -like the one from Walking Tree- can be easily added.
 +
**The module is more tool-kit than a ready-to-use module. This means, the implementors have to develop everything.
 +
**The module enables to manage complex payroll scenarios/situations.
 +
**Downside: the module offers all possibilities, but you have to do it by yourself. There is no solution for a specific country.
 +
**I have tested it with the rules for Nicaragua, El Salvador and Colombia which are with some slight differences similar (Financial and Tax officers come to mind similar ideas). I suppose other countries should behave to a great extent similar. If not, the module offers all possibilities to model it as well.
 +
**I refrained from explaining every window, because they are depicted above and their behavior is self-explanatory.
 +
**I have used extensively Scripts, as they don't need to be installed; the only (and great) disadvantage is that it is not possible to debug scripts: you must run it and "post mortem" guess what it might have happened.
 +
**One way to overcoming the debugging shortage of Scripts is developing a process in java, debugging it, and converting into a Script. You must only be careful to translate variables and parameters. This is a matter of taste.
 +
**The movements process do what it is supposed to do. You can simulate in an easy manner the behavior of a payroll.
 +
**Recursive definitions work well, i.e. you can define a Rule which is based in another Rule and it is resolved well.
 +
== Technical team  ==
 +
*Volunteers for reviewing:
 +
** [[User:mar_cal_westf|Mario Calderon]] 01:25, 28 July 2013 (UTC) - Technical Review
 +
=== Result of Technical Review ===
 +
*General observations San Salvador, July 28th, 2013, 01:25 GMT.
 +
**Libero Production and HR is somehow split: some files are in the actual code, others are in packages.
 +
**ADempiere code now
 +
***All model classes are in the package ''org.eevolution.model'', which is an integral part of ADempiere
 +
****This applies to Libero Manufacturing and Libero HR
 +
****Example: ''X_HR_Attribute'', ''I_HR_Attribute'' (Model for Payroll attributes)
 +
**In the Libero branch are the classes defined which implement the business logic
 +
***No I nor X class
 +
***Almost all M classes (a couple are in the actual ADempiere branch now)
 +
****Example: ''MHRConcept'', ''MHRPayroll'', ''MHRMovement''
 +
***All processes
 +
****Example: ''HRCreatePeriods'', ''HRAttributeEmployee'', ''HRCreateConcept'', ''HRPAySelectionCreateScheck'', ''PayrollProcessing''
 +
**The I and X classes are generated and their nomenclature is OK.
 +
**The same applies to the M classes: they stick to the naming of other ADempiere documents like ''MOrder''.
 +
**Private variables follow the ADempiere convention (m_.... or p_....)
 +
**All class headers I reviewed have JavaDoc comments with Licence documentation.
 +
**Most methods have very short JavaDoc comments.
 +
**Extensive usage of Query and DB classes for accessing the database.
 +
**Model validators are used as otherwise in ADempiere
 +
**Usage of self-explanatory exceptions when important errors encountered
 +
**License headers and ''serialVersionUID'' existent in the "M"classes I reviewed.
 +
**Comments are sparse and could be more explicit, but this is common in ADempiere
 +
**Imports are dedicated
 +
***example: ''import org.compiere.util.Env;''. This is how it is implemented --> OK
 +
***example: ''import org.compiere.model.*''. I haven't found any case like this --> OK
 +
**Usage of static final variables when needed
 +
**Code readable: well formatted.
 +
**Some methods are quite long
 +
**I have debugged ''HRCreateConcept'', ''HRPAySelectionCreateScheck'', ''PayrollProcessing'' and other processes; after "a couple" of tries, the functionality can be understood.
 +
**The code is well readable, but the matter is complex, so you have to take patience and time if you want to understand it completely.

Latest revision as of 06:15, 29 July 2013

Logo e-Evolution.png
DesignIcon.jpg Designer: Victor Perez.
Email.jpg Contact Sponsor e-mail: [victor.perez@e-evolution.com].
Develop.png Developer: [Oscar Gomez].
Sponsor smily.png Sponsor: e-Evolution,SC, located in Mexico, Equador and Venezuela.

This is to introduce Libero's HR Payroll and HR Management modules for integrating into ADempiere ERP Business Suite. The code is preliminarily in version 354 and has its own branch in SVN. The modules reuses the Application Dictionary and Data Models.

Introduction

The Libero Human Resource & Payroll is developed and maintained for [e-Evolution]. Configuring HR module in ADempiere is an easy task. First you have to setup basic data such as HR Contract, HR Employee Job type, and HR Employee. Based on these data, you can start entering the HR Employee information one by one. The screen shots in the following section will explain more about how to configure the ADempiere HR module.

SourceCode

You may access the Mercurial Repository Mercurial Repository

It is licensed under GPLv2.0 copyright of e-Evolution, Mexico.

Procedure to test using Eclipse

  • 1.- Checkout the source code from SVN
  • 2.- Modify the adempiereLiberoHR.launch and change your -DPropertyFile= and -DADEMPIERE_HOME= parameters
  • 3.- Start ADempiere using the adempiereLiberoHR.launch file (you need the adempiereTrunk source code as dependency)

Install the extension into ADempiere Setup

1.- unzip and apply the migration script for Libero HR & Payroll in a new ADempiere Instance based on 360TLS

http://sourceforge.net/projects/adempiere/files/Adempiere%20Packages/Libero%20Human%20Resource%20and%20Payroll/migration_script.zip/download

2.- Download the binary liberoHR.jar, liberozkHR.jar and patches.jar files

http://sourceforge.net/projects/adempiere/files/Adempiere%20Packages/Libero%20Human%20Resource%20and%20Payroll/liberozkHR.jar/download http://sourceforge.net/projects/adempiere/files/Adempiere%20Packages/Libero%20Human%20Resource%20and%20Payroll/liberoHR.jar/download http://sourceforge.net/projects/adempiere/files/Adempiere%20Packages/Libero%20Human%20Resource%20and%20Payroll/patches.jar/download

3.- Open Terminal command 4.- Change the ADempiere Home directory

   #cd $ADEMPIERE_HOME

5.- Copy the liberoHR.jar file to packages directory

   #cp liberoHR.jar $ADEMPIERE_HOME/packages/liberoHR/lib

6.- Copy the liberozkHR.jar file to packages directory

   #cp liberozkHR.jar $ADEMPIERE_HOME/zkpackages/liberoHR/lib    

7.- Copy the patches.jar file to lib directory

   #cp patches.jar $ADEMPIERE_HOME/lib

8.- Run ADempiere setup

   #RUN_setup.sh or RUN_silentsetup.sh

9.- Login using SuperUser , and execute the System Admin -> General Rules -> Security -> Role Access Update,after you need Login again, now you would see the new option in menu

Roadmap Document

Functionality / Feature Status Developer Priority Milestone Release Date Summary
Human Resource & Payroll -> Payroll
Payment Selection Implemented Victor Perez High 2.0 last build ...
Payment Print/Export Implemented Victor Perez High 2.0 last build ...
Concept to generate AR/AP Invoice Implemented Victor Perez High 2.0 last build ...
Payroll Engine Based on JSR 223 Scripting APIs Implemented Victor Perez High 2.0 last build ...
Concept Recurrence Under development Victor Perez High 2.0 no defined ...
Payroll Movement Report Under development Victor Perez High 2.0 no defined ...
Import Payroll Implemented Contribution from GlobalQSS High 3.0 last build ...

Project Lead

Coordinator

[1]


Functional Specs

Key Functionality

  • Payroll Contacts
  • Department
  • Job Position
  • Employes
    • General Data
    • Employe Attribute (Numeric,String,Quantity,Date, Logic)
    • Employe Account Bank
    • Employe Contact
    • Employe Location
    • Employe Interest Area
  • Payroll
    • Concept Category
    • Concept &
    • List Category
    • List and Tables
    • Period Control
    • Payroll Events
    • Payroll Rule Engine (Based in JSR 223 Scripting APIs)
    • Payroll Document Process

Technical Specs

  • Totally integrate with Adempiere

Reference

Developers

Testers

Sponsors

e-Evolution, Mexico

Requirements

A good HR & Payroll Management to Adempiere

Successful Installed Sites

  • Implemented by Consulting firm e-Evolution
    • 1 Customer in Venezuela with 750 employees
    • 1 Customer in Ecuador with 600 employees
    • 1 Customer in Ecuador with 100 employees

Libero Human Resources & Payroll FAQs

Q: How do you calculate tax from a table like this one?

From Michael Judd of Akuna Ltd Screenshot-Payroll Table PAYE1 Michael Judd@Elefire.Elefire Ltd -adempiere.lan-adempiere.lan-adempiere-adempiere--.png

I want to have a monthly gross pay, and then calculate tax using the bands on this table like this:

Gross Pay = 2000

  • 0 - 435 * col_1 (0%) = 0
  • 436.00 - 620.83 * col_1 (10%) = 18.48
  • 620.84 - 2000.00 * col_1 (22%) = 303.42
  • Total 321.90

I expect I need to create a Rule as BeanShell (for example) in the System client and allocate this to Payroll Concept Catalog.

How would I define the rule? Use getConcept to retrieve the values from the table lines?

Employee Staturary Deductions

  • This example is also suitable for employee's contribution similar to Singapore's CPF and Malaysia's Employee Provident Fund (EPF)

Screenshot-Payroll Concept CatalogPAYE Tax.png

Hi Michael!

Here the answer your question and screen shot:

EE02HRPayrollConcept.png

EE02HRPayrollAttribure.png

EE02HRPayrollRule.png


In the class model HRProcess we have some static methods that you can use in Rule Engine:

1.- 2.- 3.-

Screenshots

Payroll Menu

Libero Payroll

Contract

Libero Payroll

Employee Job

Libero Payroll

Department

Libero Payroll

Employee Setup

Libero Payroll

Employee Data

Libero Payroll

Employee Account

Libero Payroll

Employee Attribute

Libero Payroll

Employee Bank Account

Libero Payroll

Employee Location

Libero Payroll

Employee Contact

Libero Payroll

Payroll Setup

Libero Payroll

Payroll: Sequence Calculation Concepts

Libero Payroll

Payroll Year

Libero Payroll

Payroll Periods

Libero Payroll

Concept Category

Libero Payroll

Concept Setup

Libero Payroll

Types of concept

Libero Payroll

Content type of concept

Libero Payroll

Concept Attribute

Libero Payroll

Concept Type Rule Engine

Libero Payroll

Attribute Type Rule Engine

Libero Payroll

Rule Engine: Calculating total income

Libero Payroll

Rule Engine: Calculating Days

Libero Payroll

Rule Engine: Calculating withholding tax

Libero Payroll

List Category

Libero Payroll

List

Libero Payroll

List Version

Libero Payroll

List: Line Detail

Libero Payroll

Payroll Events

Libero Payroll

Process Document Payroll

Libero Payroll

Process

Libero Payroll

Movement

Libero Payroll

Functional team

  • Volunteers for reviewing:

Result of Functional Review

  • General observations. San Salvador, July 28th, 2013, 01:25 GMT.
    • Libero HR/Payroll is now part of Adempiere; the main difference is that is is implemented as a package (like Libero MFG), which can or cannot be included in the implementation.
    • The module reuses whenever possible existing Adempiere objects. A good example is here the usage of windows, scripts and processes.
    • Libero HR/Payroll concentrates more on the Payroll than in the Human Resources part.
      • IMHO this models right now just basic HR needs, though thanks to its flexibility more advanced solutions -like the one from Walking Tree- can be easily added.
    • The module is more tool-kit than a ready-to-use module. This means, the implementors have to develop everything.
    • The module enables to manage complex payroll scenarios/situations.
    • Downside: the module offers all possibilities, but you have to do it by yourself. There is no solution for a specific country.
    • I have tested it with the rules for Nicaragua, El Salvador and Colombia which are with some slight differences similar (Financial and Tax officers come to mind similar ideas). I suppose other countries should behave to a great extent similar. If not, the module offers all possibilities to model it as well.
    • I refrained from explaining every window, because they are depicted above and their behavior is self-explanatory.
    • I have used extensively Scripts, as they don't need to be installed; the only (and great) disadvantage is that it is not possible to debug scripts: you must run it and "post mortem" guess what it might have happened.
    • One way to overcoming the debugging shortage of Scripts is developing a process in java, debugging it, and converting into a Script. You must only be careful to translate variables and parameters. This is a matter of taste.
    • The movements process do what it is supposed to do. You can simulate in an easy manner the behavior of a payroll.
    • Recursive definitions work well, i.e. you can define a Rule which is based in another Rule and it is resolved well.

Technical team

  • Volunteers for reviewing:

Result of Technical Review

  • General observations San Salvador, July 28th, 2013, 01:25 GMT.
    • Libero Production and HR is somehow split: some files are in the actual code, others are in packages.
    • ADempiere code now
      • All model classes are in the package org.eevolution.model, which is an integral part of ADempiere
        • This applies to Libero Manufacturing and Libero HR
        • Example: X_HR_Attribute, I_HR_Attribute (Model for Payroll attributes)
    • In the Libero branch are the classes defined which implement the business logic
      • No I nor X class
      • Almost all M classes (a couple are in the actual ADempiere branch now)
        • Example: MHRConcept, MHRPayroll, MHRMovement
      • All processes
        • Example: HRCreatePeriods, HRAttributeEmployee, HRCreateConcept, HRPAySelectionCreateScheck, PayrollProcessing
    • The I and X classes are generated and their nomenclature is OK.
    • The same applies to the M classes: they stick to the naming of other ADempiere documents like MOrder.
    • Private variables follow the ADempiere convention (m_.... or p_....)
    • All class headers I reviewed have JavaDoc comments with Licence documentation.
    • Most methods have very short JavaDoc comments.
    • Extensive usage of Query and DB classes for accessing the database.
    • Model validators are used as otherwise in ADempiere
    • Usage of self-explanatory exceptions when important errors encountered
    • License headers and serialVersionUID existent in the "M"classes I reviewed.
    • Comments are sparse and could be more explicit, but this is common in ADempiere
    • Imports are dedicated
      • example: import org.compiere.util.Env;. This is how it is implemented --> OK
      • example: import org.compiere.model.*. I haven't found any case like this --> OK
    • Usage of static final variables when needed
    • Code readable: well formatted.
    • Some methods are quite long
    • I have debugged HRCreateConcept, HRPAySelectionCreateScheck, PayrollProcessing and other processes; after "a couple" of tries, the functionality can be understood.
    • The code is well readable, but the matter is complex, so you have to take patience and time if you want to understand it completely.