Skip to main content

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​

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 Goal rows: 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​

  1. As HR Manager, at /app/kra, create the KRAs you measure against, and at /app/employee-feedback-criteria the criteria reviewers rate, such as Collaboration or Communication.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Press Create Appraisals. Above 30 appraisees the work is handed to a background job.
  7. Press Start to move the cycle to In Progress.
note

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.

warning

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​

  1. Open /app/goal and 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
warning

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​

  1. Open their Appraisal and go to the Feedback tab.
  2. Press New Feedback. The dialog loads the template's criteria and weightages; write the feedback and set the stars.
  3. 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.

note

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.

warning

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​

  1. On the Appraisal Cycle, four dashboard indicators show Appraisees, Self Appraisal Pending, Employees without Feedback and Employees without Goals. They are listed below.
  2. 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.
  3. 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.
  4. 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.

IndicatorCounts
AppraiseesAppraisals on this cycle that are not cancelled — not the length of the Appraisees table
Self Appraisal PendingDraft appraisals on this cycle whose Total Self Score is exactly 0
Employees without FeedbackNon-cancelled appraisals whose employee has no submitted Employee Performance Feedback for this cycle
Employees without GoalsNon-cancelled appraisals whose employee has no Goal for this cycle other than Archived ones
note

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.

warning

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.

warning

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:

  1. Create a Training Program if you want related sessions grouped under one heading.
  2. Create a Training Event and submit it. Submitting emails the attendees.
  3. Set the event's Event Status to Completed.
  4. Create a Training Result for the attendees and submit it. Submitting emails them again, asking for feedback.
  5. 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 Employee rows) 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 time is 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.

warning

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.

note

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.

note

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.

warning

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, long and round. There is no min, no max, no abs, no sum.
  • 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:

GoalKRAProgress
Book IDR 1,200,000,000 in new ordersSales Target Achievement80%
Open 6 distributors in West JavaSales Target Achievement60%
Renew 18 of 20 service contractsCustomer Retention90%
(none recorded)Reporting Discipline—

The KRAs tab computes:

KRAWeightageGoal CompletionGoal Score
Sales Target Achievement50(80 + 60) / 2 = 70.0070 × 50 / 100 = 35.00
Customer Retention3090.0090 × 30 / 100 = 27.00
Reporting Discipline200.000.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.

warning

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​

FieldTypeNotes
Appraisal Template TitleData, required, uniqueThe record name
DescriptionSmall TextIn a collapsible Description section
KRAsTable inside the form (Appraisal Template Goal rows), requiredKRA (link, required) and Weightage (%) (required)
Rating CriteriaTable 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:

MessageCause
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​

FieldTypeNotes
Cycle NameData, required, uniqueThe record name. Not scoped by company, so "2026 H1" can only be used once across the whole site
CompanyLink, requiredFilters which employees Get Employees pulls
StatusSelect, read-onlyNot Started (default), In Progress, Completed. Moved only by the buttons
Start Date, End DateDate, both requiredFetched onto any Goal linked to the cycle
DescriptionText EditorCollapsible, informational
KRA Evaluation MethodSelectAutomated Based on Goal Progress (default) or Manual Rating
Calculate Final Score based on FormulaCheck, default offReveals the formula field
Final Score FormulaCode (Python expression), required when the box is tickedShips blank
Branch, Department, DesignationLinkOptional filters on the Applicable For tab, used only by Get Employees
AppraiseesTable 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.

  1. 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 gives No employees found for the selected criteria.
  2. 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.
  3. Start sets Status to In Progress. It is purely a label — no validation reads it.
  4. 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​

MessageCause
End Date must be after Start DateReversed dates
Please select employees to create appraisals forCreate 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 cycleAt 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 CompletedMark 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​

FieldTabNotes
SeriesOverviewHR-APR-.YYYY.-, set only once
EmployeeOverviewRequired
Employee Name, Department, DesignationOverviewFetched, read-only
CompanyOverviewRequired
Appraisal CycleOverviewRequired. Changing it re-reads the Appraisee row and rebuilds the tables
Start Date, End DateOverviewRead-only, and nothing ever writes them
Final ScoreOverviewRead-only, out of 5
Appraisal TemplateKRAsBecomes mandatory the moment the document has been saved once. Changing it wipes and rebuilds the KRAs, Goals and Ratings tables
Rate Goals ManuallyKRAsRead-only check, copied from the cycle's evaluation method at creation
KRA vs GoalsKRAsThe Appraisal KRA rows. Hidden when Rate Goals Manually is on
Goal Score (%)KRAsRead-only, out of 100
Goals, RemarksKRAsThe manual Appraisal Goal rows and a free-text note. Shown only when Rate Goals Manually is on
Total Goal ScoreKRAsRead-only, out of 5
Average Feedback ScoreFeedbackRead-only and hidden — read it from the Feedback tab's summary widget or the Appraisal Overview report
Ratings, Total Self ScoreSelf AppraisalThe Employee Feedback Rating rows and the total GARP works out
ReflectionsSelf AppraisalText Editor, no label of its own
warning

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​

MessageCause
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 periodA 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 5Manual 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​

FieldTypeNotes
GoalData, requiredThe title shown in the tree
Is GroupCheck, set only onceCannot be flipped after the first save. Progress is forced to 0 on insert for a group
Parent GoalLinkThe link query offers only group goals belonging to the same employee
ProgressPercentRead-only when the goal is a group or its status is Closed
StatusSelect, read-onlyBlank, Pending, In Progress, Completed, Archived, Closed
EmployeeLink, required, set only once
Employee Name, Company, Userfetched, read-onlyUser comes from the employee's User ID
Start DateDate, requiredFetched from the cycle's Start Date if empty
End DateDateFetched from the cycle's End Date if empty. Shown in the list view as a coloured "in 3 months" pill, red once overdue
Appraisal CycleLink, set only onceQuery excludes Completed cycles and filters on the goal's Company
KRALinkRequired once an Appraisal Cycle is set and there is no parent. Read-only and inherited when there is a parent
DescriptionText EditorCollapsible

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​

MessageCause
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 Archived is 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​

FieldTypeNotes
For EmployeeLink, requiredThe person being reviewed
ReviewerLink to Employee, requiredDefaults to the Employee record linked to your login. This field is exempt from user permissions
Reviewer Name, Designation, Userfetched, read-only
Added OnDatetime, required, defaults to nowSorts the feedback history
AppraisalLink, requiredThe link query filters to that employee's appraisals
Appraisal Cycle, Company, Department, Designationfetched, read-onlyCycle comes from the Appraisal
Feedback RatingsTable inside the form (Employee Feedback Rating rows)Loaded from the appraisal's template when you pick the Appraisal
Total ScoreFloat, read-onlySum of rating × 5 × weightage / 100
FeedbackText Editor, requiredOn its own Feedback tab

What it refuses​

MessageCause
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:

DocumentReadCreate and editDelete
KRAHR Manager, System ManagerHR Manager, System ManagerHR Manager, System Manager
Employee Feedback CriteriaHR User, HR Manager, System ManagerHR User, HR Manager, System ManagerHR User, HR Manager, System Manager
Appraisal TemplateEmployee (read only), HR User, HR ManagerHR User, HR ManagerHR Manager
Appraisal CycleEmployee (read only), HR User, HR Manager, System ManagerHR User, HR Manager, System ManagerHR Manager, System Manager
GoalEmployee, HR User, HR Manager, System Managerall fourall four

Documents you submit:

DocumentCreateSubmitCancelAmend
AppraisalEmployee, HR User, HR Manager, System ManagerHR User, HR Manager, System ManagerHR User, System ManagerHR User, System Manager
Employee Performance FeedbackEmployee, HR Manager, System ManagerEmployee, HR Manager, System ManagerEmployee, HR Manager, System ManagerSystem Manager
Employee PromotionHR User, HR ManagerHR User, HR ManagerHR ManagerHR 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.

note

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:

JobCadenceWhat it does
daily_work_summary_group.trigger_emailsHourlyCreates 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_summaryDailyMails 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.