<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at
   
http://www.apache.org/licenses/LICENSE-2.0
   
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<chapter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="5.0" xmlns:xl="http://www.w3.org/1999/xlink" 
    xmlns:xi="http://www.w3.org/2001/XInclude"
    xsi:schemaLocation="http://docbook.org/ns/docbook ../../content/dtd/docbook.xsd"
    xmlns="http://docbook.org/ns/docbook">
    <title>The Human Resource Application.</title>
  <para>
    The human resource application is supporting you to ...WIP, to be completed...
  </para>
  
  <section>
    <title>Human resource in Apache OFBiz, an overview.</title>
    <para>
      WIP, to be completed...
    </para>
    
  </section>
  
   <xi:include href="../data/helpdata/HELP_HR.xml" />
   <xi:include href="../data/helpdata/HELP_HR_main.xml" />
   <xi:include href="../data/helpdata/HELP_HR_training.xml" />
     
    <!-- xi:include href="../data/helpdata/HELP_HUMANRES_employees.xml" />
    <xi:include href="../data/helpdata/HELP_HUMANRES_employees_positions.xml" />
    <xi:include href="../data/helpdata/HELP_HUMANRES_performance_review.xml" />
    <xi:include href="../data/helpdata/HELP_HUMANRES_skills.xml" />
    <xi:include href="../data/helpdata/HELP_HUMANRES_recruitment.xml" /-->
    <!--xi:include href="../data/helpdata/HELP_HUMANRES_employment_applications.xml" />
    <xi:include href="../data/helpdata/HELP_HUMANRES_resumes.xml" />
    <xi:include href="../data/helpdata/HELP_HUMANRES_leave.xml" />
    <xi:include href="../data/helpdata/HELP_HUMANRES_global_HR_settings.xml" /-->
</chapter>
