Performance
Performance is where you run a review round. You decide what people are measured on, set a start and end date, then collect three things for each person: how far their goals got, how they rate themselves, and what colleagues say about them. At the end every employee has one score out of 5.
HR sets the round up, colleagues write the feedback, and the employee rates themselves.
Nothing here touches money. No accounting entry is posted, nobody's pay changes, and payroll never reads a score. GARP itself looks at the Final Score in exactly two places: the Appraisal form, and the Appraisal Overview report. If a score should lead to a bonus or a merit increase, a person has to act on it.
Everything lives at /app/performance. The workspace home page holds only an Appraisal Overview chart, so work from the sidebar: Goal, Appraisal Cycle, Appraisal, Employee Performance Feedback and Employee Promotion, then a Reports group holding Appraisal Overview, and a Setup group holding Appraisal Template, KRA and Employee Feedback Criteria.
What you probably came here to do
- Start a review round for this half-year
- Write down what someone is working towards, and update their progress
- Give feedback on a colleague
- Rate myself
- See everyone's scores and close the round
- Schedule a training session and record who attended
- Send the team a daily "what did you work on today" email
- Work out where a score came from
- Look up a field or an error message
- Check who is allowed to do what
- Check nothing is missing before the round starts
How the pieces fit together
A few words are worth learning before you start.
- KRA — a Key Result Area: the thing being measured, for example "Sales Target Achievement". It is a reusable master with a Title and a Description, nothing more. The Title is also the record's name, so no two KRAs can share one. Weightage does not live here; it lives on the template that uses the KRA.
- Employee Feedback Criteria — the dimensions reviewers rate, such as Collaboration. One field, the criteria name, used for both peer feedback and self appraisal.
- Appraisal Template — a job family's scoring sheet: a title, a KRAs table (
Appraisal Template Goalrows: KRA plus Weightage %) and a Rating Criteria table (Criteria plus Weightage %). Each table must total 100. - Appraisal Cycle — one named review period for one company, with an evaluation method and an Appraisees table; each Appraisee row carries an employee and the template to use.
- Appraisal — one person's scorecard for one cycle, numbered
HR-APR-.YYYY.-. There is one per employee per cycle. You save it as a draft and submit it when the review is over. It has Overview, KRAs, Feedback and Self Appraisal tabs.
Three more names turn up on tables and lists.
- Appraisal KRA is the "KRA vs Goals" table inside the appraisal: KRA, Weightage %, Goal Completion %, Goal Score (weighted), the last two worked out for you. Appraisal Goal is the manual-rating alternative: Goal, Weightage %, Score, Score Earned.
- Goal — one thing an employee is working towards, numbered
HR-GOAL-{YYYY}-{####}. Goals sit in a tree, so a goal can hold sub-goals. Each belongs to one employee and carries Progress, Status and an Appraisal Linking section holding Appraisal Cycle and KRA. - Employee Performance Feedback — one reviewer's written feedback plus their ratings, numbered
HR-PF-{YYYY}-{#####}, saved as a draft and then submitted. Employee Feedback Rating is the shared table (Criteria, Weightage %, Rating) used inside feedback, self ratings and the template alike.
The chain runs like this:
KRA + Employee Feedback Criteria
-> Appraisal Template (KRAs 100%, Rating Criteria 100%)
-> Designation (Appraisal Template field)
-> Appraisal Cycle (Get Employees -> Appraisees)
-> Appraisal, one per employee
KRAs tab <- Goal progress, per KRA
Self Appraisal <- the employee's own ratings
Feedback tab <- one Employee Performance Feedback per reviewer
-> Final Score -> Appraisal Overview report
Set up an appraisal cycle
- As HR Manager, at
/app/kra, create the KRAs you measure against, and at/app/employee-feedback-criteriathe criteria reviewers rate, such as Collaboration or Communication. - At
/app/appraisal-template, build a template per job family. Fill the KRAs table to 100 percent and the Rating Criteria table to 100 percent. - At
/app/designation, set Appraisal Template on each designation. GARP HR adds this field to the standard Designation record, and it is what lets a cycle pick templates automatically. - At
/app/appraisal-cycle, create the cycle: Cycle Name, Company, Start Date, End Date. Choose the KRA Evaluation Method now — it cannot be changed once appraisals exist. - On the Applicable For tab, optionally filter by Branch, Department or Designation, then press Get Employees. Active employees in that company arrive with their designation's template. Fill any blank one by hand; the cycle refuses to create appraisals until every row has a template.
- Press Create Appraisals. Above 30 appraisees the work is handed to a background job.
- Press Start to move the cycle to In Progress.
Get Employees filters on Active status, Company, and whatever Branch, Department and Designation filters you set. It does not look at joining dates or the cycle's date range, so someone who started in May lands in a January-to-June cycle at full weight. Delete those rows before creating appraisals, or delete the appraisals afterwards.
Decide the KRA Evaluation Method before you press Create Appraisals. Once a single appraisal exists on the cycle you will see Evaluation Method cannot be changed as there are existing appraisals created for this cycle, and cancelling those appraisals is not enough — they have to be deleted.
Record goals against a KRA
- Open
/app/goaland switch to the Tree view, or press View Goals on an appraisal to land on the goal tree already filtered by company, employee and cycle — the same button on the cycle filters by company and cycle only. - Enter the Goal, Employee and Start Date. In Appraisal Linking, pick the Appraisal Cycle first, then the KRA — the list only offers KRAs on that employee's appraisal for that cycle.
- Update Progress as work lands. Status follows automatically: 0 percent is Pending, anything between is In Progress, 100 percent is Completed. In the tree, the row toolbar offers Update Progress and Mark as Completed on leaf nodes.
- Use Is Group and Parent Goal for sub-goals. A group goal's progress is the average of its children, and children must share the parent's employee, KRA and cycle.
- Use the Status button, or the Update Status menu on the list, to Archive or Close a goal. Archived goals drop out of the calculation; Closed goals do not.
Record at least one goal per KRA for every appraisee. A KRA with no goals against it scores a hard zero rather than being left out, and that drags the whole Final Score down. There is more on this in How a final score is calculated.
Give feedback on someone
- Open their Appraisal and go to the Feedback tab.
- Press New Feedback. The dialog loads the template's criteria and weightages; write the feedback and set the stars.
- Submitting the dialog creates and submits an Employee Performance Feedback and refreshes the Average Feedback Score.
You can also create the document directly at /app/employee-performance-feedback, where Reviewer defaults to the Employee record linked to your login. You cannot review yourself; the system points you at Self Appraisal instead.
The feedback button only appears if your user is linked to an Employee record. The HR User role has read-only permission on Employee Performance Feedback; HR Manager, System Manager and the Employee role can create and submit it.
The Create User Permission box on the Employee record is ticked by default, and it creates a User Permission restricting that login to its own Employee record. GARP then blocks any record whose Employee link points elsewhere. That is exactly what peer feedback needs to do: For Employee is not exempt from user permissions, so a restricted reviewer cannot open a colleague's Appraisal or save feedback about them. Only Reviewer carries the exemption. Before you announce a 360 cycle, log in as a real non-HR employee and try to file one feedback. If it fails, either add User Permission rows for the people each reviewer must review, or untick Create User Permission on reviewers' Employee records and accept that they can then see all employee records.
Fill in a self appraisal
Open your own Appraisal, go to the Self Appraisal tab, rate each criterion in the Ratings table, write your Reflections, and save. This is a desk screen: the employee self-service app covers attendance, leave, expense claims, advances and salary slips, but has no appraisal, goal or feedback view, so anyone self-appraising needs desk access.
Read the outcome and close the cycle
- On the Appraisal Cycle, four dashboard indicators show Appraisees, Self Appraisal Pending, Employees without Feedback and Employees without Goals. They are listed below.
- Open the Appraisal Overview report from the Performance sidebar. It lists Employee, Employee Name, Designation, Appraisal Cycle, Appraisal, Feedback Count, Avg Feedback Score, Goal Score, Self Score, Final Score and Department, filtered by Company (required), cycle, employee, department or designation. Rows are ordered by cycle then by Final Score descending, cancelled appraisals are excluded and drafts are included, and the chart plots the first ten rows.
- On appraisals that use goal-progress evaluation, the KRAs tab draws Maximum Score against Score Obtained per KRA; a manually rated appraisal has no KRA rows, so it gets no chart. Submit each appraisal once the conversation is done.
- Press Mark as Completed on the cycle. It refuses while any appraisal is still a draft. After completion, goals and feedback linked to that cycle can no longer be created or changed; set it back to In Progress to reopen.
The four dashboard indicators
They appear at the top of a saved cycle and are recounted every time the form refreshes.
| Indicator | Counts |
|---|---|
| Appraisees | Appraisals on this cycle that are not cancelled — not the length of the Appraisees table |
| Self Appraisal Pending | Draft appraisals on this cycle whose Total Self Score is exactly 0 |
| Employees without Feedback | Non-cancelled appraisals whose employee has no submitted Employee Performance Feedback for this cycle |
| Employees without Goals | Non-cancelled appraisals whose employee has no Goal for this cycle other than Archived ones |
Self Appraisal Pending only looks at draft appraisals, so submitting an appraisal makes it drop out of that count whether or not the person ever self-appraised. Read the indicators before you start submitting.
Submitting does not freeze the scores. When a Goal is saved, and when a feedback is submitted or cancelled, GARP writes the recalculated KRA rows, Total Goal Score, Average Feedback Score and Final Score straight to the database, whether or not the appraisal has already been submitted. A submitted appraisal's Final Score can and does move afterwards. The only real freeze is Mark as Completed on the cycle, which blocks the Goal and feedback saves that would trigger it.
The Appraisal Overview chart on the Performance workspace page ships with a saved Company filter naming a demo company that will not exist on your site, so it renders empty. Use the chart's own Filter button on the workspace to set your Company — that is stored per user in Dashboard Settings. Editing the Dashboard Chart record itself is refused with Cannot edit Standard charts outside developer mode. Or ignore the workspace page and open the report from the sidebar.
Training records
Training is a separate chain in the Tenure workspace (/app/tenure), and none of it feeds the appraisal score.
A full session usually runs in this order:
- Create a Training Program if you want related sessions grouped under one heading.
- Create a Training Event and submit it. Submitting emails the attendees.
- Set the event's Event Status to Completed.
- Create a Training Result for the attendees and submit it. Submitting emails them again, asking for feedback.
- Attendees file their own Training Feedback.
Training Program
Training Program (/app/training-program) groups related sessions: the program name, Company, a Status of Scheduled, Completed or Cancelled, trainer details, an optional Supplier and a required Description. Nothing writes that Status — it is a manual label. HR User can read and edit programs but not create them.
Training Event
Training Event (/app/training-event) is saved as a draft and then submitted, and is named by its Event Name.
- Required: Event Name, Event Status (Scheduled, Completed, Cancelled), Type (Seminar, Theory, Workshop, Conference, Exam, Internet, Self-Study), Location, Start Time, End Time, Introduction.
- Level shows for seminars, workshops and exams.
- Has Certificate shows for seminars, workshops, conferences and exams, and is a checkbox with no certificate record behind it.
- The Employees table inside the form (
Training Event Employeerows) carries Employee, Department, Status (Open, Invited, Completed, Feedback Submitted; default Open), Attendance (Present or Absent) and Is Mandatory (ticked by default). - Only Event Status and that table can be edited after submission, and
End time cannot be before start timeis the only thing it refuses.
Submitting emails every attendee the standard Training Scheduled notification with the introduction, location, timing and a link. Setting Event Status to Completed afterwards promotes every Present attendee who is not already Feedback Submitted to Completed; setting it back to Scheduled resets all attendees to Open.
Training Result
Training Result (/app/training-result, HR-TRR-.YYYY.-.#####) is saved as a draft and then submitted, and records Hours, Grade and Comments per attendee. Against a draft event you will see the message Training Event must be submitted. Submitting emails every attendee the Training Feedback notification.
Training Feedback
Training Feedback (/app/training-feedback, HR-TRF-.YYYY.-.#####) is the attendee's own comment. It refuses with Employee {0} not found in Training Event Participants. if the person is not on the attendee table, and with Feedback cannot be recorded for an absent Employee. if their Attendance is Absent. Submitting sets that attendee's row Status to Feedback Submitted; cancelling sets it back to Completed. The Employee role can create and submit it, and it is one of the few documents an Employee Self Service user can file.
Employee Training
Employee Training is not a form of its own. It is the Trainings section inside Employee Skill Map (/app/employee-skill-map), one record per employee holding Skills and Trainings. Nothing fills it in automatically.
Set Event Status to Completed on the Training Event before you submit the Training Result. Training Result's submit step writes to a status field that the Training Event form does not have, so Event Status never changes; and the save it performs re-runs the event's own after-submit step, which — because Event Status is still Scheduled — resets every attendee row back to Open, undoing the Completed statuses the result had just set.
Both training emails are standard notifications. You cannot edit them without developer mode; the message is Cannot edit Standard Notification. To edit, please disable this and duplicate it. Two known rough edges: the Training Scheduled body checks a mandatory flag that exists only on the attendee row and never on the event, so the "this Training Event is mandatory" line never prints; and the Training Feedback body's Details block was written for a Training Event, so the event name, location, times and attendance lines have nothing to fill them when it fires on a Training Result.
Daily Work Summary
A Daily Work Summary Group (/app/daily-work-summary-group) is an email check-in, unrelated to appraisals. Only HR Manager has permission on this record.
To set one up, you are prompted for the group name when you create it, then:
- Tick Enabled (on by default).
- List the Users (required).
- Choose Send Emails At — a whole hour, 00:00 to 23:00.
- Attach a Holiday List to skip.
- Adjust the Subject (default
What did you work on today?) and Message (a default sentence asking people to reply by midnight).
What happens after that runs on its own:
- Every hour, GARP creates a Daily Work Summary (
/app/daily-work-summary) for each enabled group whose Send Emails At matches the current hour and whose Holiday List does not cover today, records the recipients in Email Sent To, and sends the prompt with Reply-To set to the default incoming Email Account. - Replies land as Communication records against that summary.
- Once a day, everyone in the group is mailed a digest plus a No replies from line, and the summary is set to
Sent.
Only still-enabled users are mailed, and replies are matched by exact sender address, so answering from a second address counts as no reply — both in the digest and in the Daily Work Summary Replies report, which needs a Group and a Date Range and returns a reply count per member.
The group will not save unless a default incoming Email Account exists with incoming enabled — without one there is nothing to receive the replies, and you get Please enable default incoming account before creating Daily Work Summary Group. Daily Work Summary Group and the Daily Work Summary Replies report are linked from both the HR Setup workspace (/app/hr-setup) and the Daily Work Summary card on the Tenure workspace; the summaries themselves are on Tenure.
How a final score is calculated
All three components land on a scale of 0 to 5.
Total Goal Score depends on the cycle's KRA Evaluation Method, which is locked once appraisals exist.
- Automated Based on Goal Progress (the default). For each KRA row, Goal Completion is the average Progress of that employee's Goals carrying the same KRA and cycle, excluding Archived goals and goals with a parent — child goals roll up into their parent's progress instead. Goal Score is completion times weightage divided by 100. The rows sum into Goal Score (%) out of 100, which the appraisal divides by 20 to reach Total Goal Score out of 5.
- Manual Rating. A Goals table appears instead. You type a Score of 0 to 5 per row; Score Earned is score times weightage divided by 100, and the rows sum to a total out of 5.
Total Self Score comes from the Ratings table on the Self Appraisal tab. A star control stores a fraction of 1, so four stars out of five is stored as 0.8; that is multiplied by 5 and by the weightage over 100. Four stars at 40 percent weightage therefore contributes 1.6.
Average Feedback Score is the plain average of the Total Score of every submitted Employee Performance Feedback on that appraisal. Each feedback's own total uses the same weighted-stars maths.
Final Score is the average of the three: (Total Goal Score + Average Feedback Score + Total Self Score) / 3. All four figures are rounded to your site's Float Precision (System Settings), which falls back to three decimals when left blank.
Saving a Goal recalculates the linked appraisal's KRA rows and Final Score at once, so numbers move as the cycle runs. Weightages are enforced hard: if the KRAs, Self Ratings or Feedback Ratings on a document do not total exactly 100, GARP refuses to save it.
A missing component counts as zero, not as "not applicable". If nobody files feedback for Sari Dewi, her Average Feedback Score stays 0 and the default formula pulls her Final Score down by a third. The same happens if she never fills in her self ratings. Clear the cycle's dashboard indicators before you read any scores.
Writing a Final Score Formula
Tick Calculate Final Score based on Formula on the Appraisal Cycle and write a Python expression in Final Score Formula. Autocomplete offers goal_score, average_feedback_score and self_appraisal_score, plus every field of Employee, Appraisal Cycle and Appraisal. Nothing ships pre-written; the expression is yours to author.
The evaluator is deliberately narrow, and these limits are not shown on screen:
- The whole thing is joined into one line before it runs, so a multi-line block will not work. Write a single expression, using a conditional expression if you need a branch:
(goal_score + self_appraisal_score + average_feedback_score) / 3 if self_appraisal_score else (goal_score + self_appraisal_score) / 2. - The only functions available are
int,float,longandround. There is nomin, nomax, noabs, nosum. - Lambdas and walrus assignments raise a syntax error.
Worked example: Sari Dewi at PT Maju Jaya
Cycle 2026 H1, company PT Maju Jaya, 1 January to 30 June 2026, evaluation method Automated Based on Goal Progress. Template Sales Executive: KRAs are Sales Target Achievement 50 percent, Customer Retention 30 percent, Reporting Discipline 20 percent; rating criteria are Collaboration 40, Communication 30, Ownership 30.
Sari's goals, all top-level and all tagged to the cycle:
| Goal | KRA | Progress |
|---|---|---|
| Book IDR 1,200,000,000 in new orders | Sales Target Achievement | 80% |
| Open 6 distributors in West Java | Sales Target Achievement | 60% |
| Renew 18 of 20 service contracts | Customer Retention | 90% |
| (none recorded) | Reporting Discipline | — |
The KRAs tab computes:
| KRA | Weightage | Goal Completion | Goal Score |
|---|---|---|---|
| Sales Target Achievement | 50 | (80 + 60) / 2 = 70.00 | 70 × 50 / 100 = 35.00 |
| Customer Retention | 30 | 90.00 | 90 × 30 / 100 = 27.00 |
| Reporting Discipline | 20 | 0.00 | 0.00 |
Goal Score (%) is 62.00, so Total Goal Score is 62 / 20 = 3.10.
Sari rates herself Collaboration 4, Communication 5, Ownership 3: 0.8 × 5 × 0.40 + 1.0 × 5 × 0.30 + 0.6 × 5 × 0.30 = 1.60 + 1.50 + 0.90 = 4.00.
Budi Santoso files feedback rating 4/4/3, total 3.70. Rina Halim files 5/4/4, total 4.40. Average Feedback Score is 4.05.
Final Score = (3.10 + 4.05 + 4.00) / 3 = 11.15 / 3 = 3.717.
An Indonesian HR practitioner reading this by hand would almost certainly drop the un-goaled KRA and score Sari on the 80 percent of weight actually in play: 62 / 80 = 77.5 percent, or 3.875 out of 5, giving a final of 3.975. The product produces 3.10 and 3.717. A KRA with no goals against it is scored as a hard zero, not excluded. There is no setting for this and the Final Score Formula cannot see per-KRA weightage, so the only fixes are to record at least one goal per KRA or to remove that KRA from the template before the cycle starts.
For contrast, under Manual Rating on Budi Santoso's Warehouse Supervisor template — Stock accuracy 40 percent scored 4, Dispatch on time 60 percent scored 3 — Score Earned is 1.60 and 1.80, and Total Goal Score is 3.40 directly, with no division by 20.
Field reference and edge cases
Everything from here down is detail: what sits on each form, what GARP refuses to save, and the behaviour that catches people out. If you have finished the job you came for, you can stop reading here.
The KRA record
Two fields: Title (required, unique, and the record name) and Description. There is no company, no weightage and no logic — weightage lives on the template that uses the KRA.
The HR User role can only pick a KRA from a list. An HR User can choose an existing KRA inside an Appraisal Template but cannot open /app/kra, create one or edit one. Creating KRAs needs HR Manager or System Manager.
The Employee Feedback Criteria record
One field, Criteria, required and unique, and it is the record name. HR User, HR Manager and System Manager all have full create, write and delete here — the permissions are deliberately wider than KRA's.
The Appraisal Template form
| Field | Type | Notes |
|---|---|---|
| Appraisal Template Title | Data, required, unique | The record name |
| Description | Small Text | In a collapsible Description section |
| KRAs | Table inside the form (Appraisal Template Goal rows), required | KRA (link, required) and Weightage (%) (required) |
| Rating Criteria | Table inside the form (Employee Feedback Rating rows) | Criteria (link, required) and Weightage (%) (required). The Rating column is hidden here, because a rating only appears on these rows when they sit on a feedback or a self appraisal, never on a template |
Both tables are checked on every save by the same routine:
| Message | Cause |
|---|---|
Total weightage for all KRAs must add up to 100. Currently, it is {0}% | The KRAs table does not total 100 |
Total weightage for all Criteria must add up to 100. Currently, it is {0}% | The Rating Criteria table does not total 100 |
Both carry the title Incorrect Weightage Allocation. The comparison is exact to two decimals — 30 plus 69.99 is rejected. An empty table is skipped, not rejected, so a template with no Rating Criteria saves happily and every self and feedback score against it will be zero.
Wiring a template to a Designation
GARP HR installs an Appraisal Template link field on the standard Designation record, immediately after Description. That field is the only thing Get Employees reads when it fills the Appraisees table. Set it on every designation you intend to appraise, at /app/designation.
The Appraisal Cycle form
| Field | Type | Notes |
|---|---|---|
| Cycle Name | Data, required, unique | The record name. Not scoped by company, so "2026 H1" can only be used once across the whole site |
| Company | Link, required | Filters which employees Get Employees pulls |
| Status | Select, read-only | Not Started (default), In Progress, Completed. Moved only by the buttons |
| Start Date, End Date | Date, both required | Fetched onto any Goal linked to the cycle |
| Description | Text Editor | Collapsible, informational |
| KRA Evaluation Method | Select | Automated Based on Goal Progress (default) or Manual Rating |
| Calculate Final Score based on Formula | Check, default off | Reveals the formula field |
| Final Score Formula | Code (Python expression), required when the box is ticked | Ships blank |
| Branch, Department, Designation | Link | Optional filters on the Applicable For tab, used only by Get Employees |
| Appraisees | Table inside the form (Appraisee rows) | Employee (link, required and editable) plus Employee Name, Department, Designation and Branch (all fetched and read-only), and an editable Appraisal Template |
The buttons and the status machine
The cycle's primary action moves as the cycle progresses, which is why it can look like buttons are disappearing.
- Get Employees sits inside the Employees section, not the header. It replaces the whole Appraisees table with Active employees of the cycle's Company, narrowed by any Branch, Department and Designation filter, each row's Appraisal Template taken from that employee's designation. A designation without a template gives
Appraisal Template not found for some designations.and a blank template cell; no matches at all givesNo employees found for the selected criteria. - Create Appraisals is the header's primary action until appraisals exist, then a secondary button. Above 30 appraisees it is handed to a background worker with a 10-minute limit and reports
Appraisal creation is queued. It may take a few minutes.; at or below 30 it runs on screen with a progress bar. Duplicates are swallowed silently, so pressing it again only creates what is missing. - Start sets Status to
In Progress. It is purely a label — no validation reads it. - Mark as Completed asks
This action will prevent making changes to the linked appraisal feedback/goals. Are you sure you want to proceed?first. Once Completed, the only action left besides View Goals is Mark as In Progress, and it reopens everything.
What the cycle refuses
| Message | Cause |
|---|---|
End Date must be after Start Date | Reversed dates |
Please select employees to create appraisals for | Create Appraisals on an empty Appraisees table. Title: No Employees Selected |
Appraisal Template not found for some designations. | Create Appraisals with any Appraisee row missing a template |
Evaluation Method cannot be changed as there are existing appraisals created for this cycle | At least one appraisal on the cycle has not been cancelled — drafts and submitted ones both count. Cancelling them is not enough — they must be deleted |
{0} Appraisal(s) are not submitted yet plus Please submit the documents before marking the cycle as Completed | Mark as Completed with draft appraisals outstanding. Title: Unsubmitted Appraisals |
Once Status is Completed, saving any Appraisal, Goal or Employee Performance Feedback attached to that cycle throws Cannot create or change transactions against an Appraisal Cycle with status Completed. followed by Set the status to In Progress if required., titled Not Allowed.
The cycle's four dashboard indicators are described under Read the outcome and close the cycle.
The Appraisal form
| Field | Tab | Notes |
|---|---|---|
| Series | Overview | HR-APR-.YYYY.-, set only once |
| Employee | Overview | Required |
| Employee Name, Department, Designation | Overview | Fetched, read-only |
| Company | Overview | Required |
| Appraisal Cycle | Overview | Required. Changing it re-reads the Appraisee row and rebuilds the tables |
| Start Date, End Date | Overview | Read-only, and nothing ever writes them |
| Final Score | Overview | Read-only, out of 5 |
| Appraisal Template | KRAs | Becomes mandatory the moment the document has been saved once. Changing it wipes and rebuilds the KRAs, Goals and Ratings tables |
| Rate Goals Manually | KRAs | Read-only check, copied from the cycle's evaluation method at creation |
| KRA vs Goals | KRAs | The Appraisal KRA rows. Hidden when Rate Goals Manually is on |
| Goal Score (%) | KRAs | Read-only, out of 100 |
| Goals, Remarks | KRAs | The manual Appraisal Goal rows and a free-text note. Shown only when Rate Goals Manually is on |
| Total Goal Score | KRAs | Read-only, out of 5 |
| Average Feedback Score | Feedback | Read-only and hidden — read it from the Feedback tab's summary widget or the Appraisal Overview report |
| Ratings, Total Self Score | Self Appraisal | The Employee Feedback Rating rows and the total GARP works out |
| Reflections | Self Appraisal | Text Editor, no label of its own |
Start Date and End Date on an Appraisal are read-only and nothing ever fills them. They stay blank forever. That matters because the duplicate check has two arms — same cycle, or overlapping dates — and the date arm can never fire. Two cycles whose dates overlap will each happily produce an Appraisal for the same person.
What an Appraisal refuses
| Message | Cause |
|---|---|
Transactions cannot be created for an Inactive Employee {0}. | Employee status is Inactive. Note that Left and Suspended are not blocked |
Cannot create or change transactions against an Appraisal Cycle with status Completed. | The cycle is closed |
Appraisal {0} already exists for Employee {1} for this Appraisal Cycle or overlapping period | A non-cancelled Appraisal already covers that employee and cycle. Title: Duplicate Entry |
Total weightage for all KRAs must add up to 100. Currently, it is {0}% | The KRA vs Goals table does not total 100 |
Total weightage for all Self Ratings must add up to 100. Currently, it is {0}% | The Ratings table on Self Appraisal does not total 100 |
Row {0}: Goal Score cannot be greater than 5 | Manual rating only: a Score above 5. The browser also resets the cell and shows Score must be less than or equal to 5 |
What submitting does
Nothing. GARP runs no extra work when you submit an Appraisal, and none when you cancel one. Submitting only freezes the form against ordinary edits and takes it out of the Self Appraisal Pending and Unsubmitted counts. It does not freeze the scores either — see the warning under Read the outcome and close the cycle.
The Goal form
| Field | Type | Notes |
|---|---|---|
| Goal | Data, required | The title shown in the tree |
| Is Group | Check, set only once | Cannot be flipped after the first save. Progress is forced to 0 on insert for a group |
| Parent Goal | Link | The link query offers only group goals belonging to the same employee |
| Progress | Percent | Read-only when the goal is a group or its status is Closed |
| Status | Select, read-only | Blank, Pending, In Progress, Completed, Archived, Closed |
| Employee | Link, required, set only once | |
| Employee Name, Company, User | fetched, read-only | User comes from the employee's User ID |
| Start Date | Date, required | Fetched from the cycle's Start Date if empty |
| End Date | Date | Fetched from the cycle's End Date if empty. Shown in the list view as a coloured "in 3 months" pill, red once overdue |
| Appraisal Cycle | Link, set only once | Query excludes Completed cycles and filters on the goal's Company |
| KRA | Link | Required once an Appraisal Cycle is set and there is no parent. Read-only and inherited when there is a parent |
| Description | Text Editor | Collapsible |
Status is worked out on every save unless it is already Archived or Closed: progress 0 gives Pending, 100 gives Completed, anything between gives In Progress. The Status button group offers Archive, Close, and Unarchive or Reopen — the last two clear the status so it is recomputed from progress. The list view adds an Update Status menu for bulk changes, which refuses group goals (Cannot update status of Goal groups) and illegal transitions (Only {0} Goals can be {1}).
Changing the KRA on a group goal asks for confirmation, then rewrites the KRA on every direct child and tells you KRA updated for all child goals.
What a Goal refuses
| Message | Cause |
|---|---|
Goal should be owned by the same employee as its parent goal. | Employee differs from the parent's |
Goal should be aligned with the same KRA as its parent goal. | KRA differs from the parent's |
Goal should belong to the same Appraisal Cycle as its parent goal. | Cycle differs from the parent's |
Goal progress percentage cannot be more than 100. | Progress above 100 |
Please select the Appraisal Cycle first. | Browser message when you touch KRA with no cycle set |
Rollup and the things that surprise people
Saving any goal recomputes its parent's progress as the plain average of that parent's non-Archived children, then saves the parent, which recomputes its parent, and so on to the root. Every level then pushes the result into the appraisal.
- A group's progress is the average of its children including the ones at zero. Adding a second sub-goal to a parent sitting at 100 percent immediately drops it to 50.
- Closed goals still count. Only
Archivedis excluded, both from the parent average and from the KRA average on the appraisal. - Employee, Appraisal Cycle and Is Group are set only once. You cannot move a goal to another cycle, reassign it, or turn a leaf into a group. Delete and recreate.
- Start Date and End Date are not checked against each other. The check never actually compares them, so an End Date before the Start Date saves without complaint.
- The KRA link only offers KRAs that already appear on that employee's Appraisal for that cycle. If the appraisal has not been created yet, the list is empty.
- Under Manual Rating the appraisal has no KRA vs Goals rows at all, so the Goal's KRA field will never offer anything. Goal-to-KRA linking is only meaningful with the automated method.
- The tree view hides Archived goals entirely; the list view still shows them.
The Employee Performance Feedback form
| Field | Type | Notes |
|---|---|---|
| For Employee | Link, required | The person being reviewed |
| Reviewer | Link to Employee, required | Defaults to the Employee record linked to your login. This field is exempt from user permissions |
| Reviewer Name, Designation, User | fetched, read-only | |
| Added On | Datetime, required, defaults to now | Sorts the feedback history |
| Appraisal | Link, required | The link query filters to that employee's appraisals |
| Appraisal Cycle, Company, Department, Designation | fetched, read-only | Cycle comes from the Appraisal |
| Feedback Ratings | Table inside the form (Employee Feedback Rating rows) | Loaded from the appraisal's template when you pick the Appraisal |
| Total Score | Float, read-only | Sum of rating × 5 × weightage / 100 |
| Feedback | Text Editor, required | On its own Feedback tab |
What it refuses
| Message | Cause |
|---|---|
Employees cannot give feedback to themselves. Use Self Appraisal instead: {0} | Reviewer equals For Employee |
Appraisal {0} does not belong to Employee {1} | The linked Appraisal is somebody else's |
Total weightage for all Feedback Ratings must add up to 100. Currently, it is {0}% | The ratings table does not total 100 |
Transactions cannot be created for an Inactive Employee {0}. | Either the employee or the reviewer is Inactive |
Cannot create or change transactions against an Appraisal Cycle with status Completed. | The cycle is closed |
What submitting and cancelling do
Both do the same single thing: reload the linked Appraisal, recompute its Average Feedback Score from all submitted feedback, recompute the Final Score and write both straight to the database. Cancelling a feedback therefore lowers the average immediately, on a submitted appraisal too.
The Feedback tab
The tab renders a widget, not a grid: Average Rating as a number and a star row, a five-bar distribution, "based on N reviews", then one card per feedback with the reviewer's avatar, designation, stars, text and a link. With none it says No feedback has been received yet. Each bar counts totals from a whole number up to that number plus 0.99, so a total below 1.0 counts as a review but shows in no bar.
A New Feedback button appears above the history, but only if your user is linked to an Employee record and you hold create permission on Employee Performance Feedback. Its dialog pre-loads the template's criteria with rows locked, and its Submit button creates and submits the document in one step — no draft stage, no confirmation.
Who can do what
GARP HR adds no extra visibility rules of its own, so who sees what is decided entirely by the role permissions below plus User Permissions.
Masters:
| Document | Read | Create and edit | Delete |
|---|---|---|---|
| KRA | HR Manager, System Manager | HR Manager, System Manager | HR Manager, System Manager |
| Employee Feedback Criteria | HR User, HR Manager, System Manager | HR User, HR Manager, System Manager | HR User, HR Manager, System Manager |
| Appraisal Template | Employee (read only), HR User, HR Manager | HR User, HR Manager | HR Manager |
| Appraisal Cycle | Employee (read only), HR User, HR Manager, System Manager | HR User, HR Manager, System Manager | HR Manager, System Manager |
| Goal | Employee, HR User, HR Manager, System Manager | all four | all four |
Documents you submit:
| Document | Create | Submit | Cancel | Amend |
|---|---|---|---|---|
| Appraisal | Employee, HR User, HR Manager, System Manager | HR User, HR Manager, System Manager | HR User, System Manager | HR User, System Manager |
| Employee Performance Feedback | Employee, HR Manager, System Manager | Employee, HR Manager, System Manager | Employee, HR Manager, System Manager | System Manager |
| Employee Promotion | HR User, HR Manager | HR User, HR Manager | HR Manager | HR Manager |
Two of these rows are easy to trip over. HR Manager cannot cancel or amend an Appraisal — HR User and System Manager can. And the Employee role can create and edit an Appraisal but cannot submit one.
The Create User Permission trap that stops peer feedback is described under Give feedback on someone. Read it before you announce a 360 cycle.
The Employee Self Service user type that GARP HR installs lists exactly which records such a user may touch. Appraisal, Goal and Employee Performance Feedback are not on that list; Training Program (read) and Training Feedback (full) are. Anyone who must self-appraise or give feedback needs a normal System User carrying the Employee role, not an Employee Self Service user.
What runs automatically
GARP runs nothing on a timer against Appraisal, Appraisal Cycle, Goal or Employee Performance Feedback. Scores only move when somebody saves a document. The two scheduled jobs relevant to this page both belong to Daily Work Summary:
| Job | Cadence | What it does |
|---|---|---|
daily_work_summary_group.trigger_emails | Hourly | Creates a Daily Work Summary and mails the prompt for every enabled group whose Send Emails At matches the current hour and whose Holiday List does not cover today |
daily_work_summary_group.send_summary | Daily | Mails the reply digest for every summary still at status Open and marks it Sent |
Creating appraisals for more than 30 appraisees is handed to a background worker with a 10-minute limit. That is the only background work this module generates.
Indonesian practice
Performance management is not statutorily prescribed in Indonesia the way overtime, THR and BPJS are, so there is little for a regional module to encode — and in fact GARP's regional add-ons cover only India and the United Arab Emirates, neither of which touches Performance. Everything on this page behaves identically on an Indonesian install.
What that leaves to you:
- PKWT renewal. Nothing links an appraisal score to a contract end date; Employment Type sits on the Employee record and no appraisal reads it. Track PKWT expiry separately — see Employee lifecycle.
- Merit increases and bonuses. No pay calculation reads the Final Score. A performance bonus is an ordinary Additional Salary; a pay rise is a new Salary Structure Assignment. See Payroll.
- Promotion. Employee Promotion sits on the Performance sidebar but is not part of the appraisal chain — it writes fields onto the Employee record and updates CTC, a reference figure only. See Employee lifecycle.
- Surat peringatan. There is no warning-letter document. Employee Grievance serves a different purpose and its records are not linked to appraisals.
- Sertifikasi. Has Certificate on a Training Event is a checkbox with nothing behind it — no certificate record, no expiry, no BNSP field. The Employee Skill Map's Trainings table is filled by hand.
Setup checklist
- KRAs and Employee Feedback Criteria created — remember KRAs need HR Manager, not HR User.
- An Appraisal Template per job family, both tables totalling 100 percent, and a rating criteria row for every dimension you want scored (an empty table scores zero, silently).
- Appraisal Template set on every Designation you appraise.
- Employees Active and carrying the right Company, Department, Branch and Designation — that is what Get Employees filters on.
- A User linked on the Employee record of anyone who must self-appraise or give feedback, on a System User carrying the Employee role — not an Employee Self Service user.
- Peer feedback tested end to end from a real employee login before you announce the cycle, because Create User Permission blocks it by default.
- The KRA Evaluation Method decided, and a Final Score Formula written as a single expression, before you create appraisals.
- At least one Goal per KRA for every appraisee, or the un-goaled KRAs will score zero.