Skip to content
Automation
Skill

/merit-palk-employees

How to onboard employees and maintain contracts, contacts, and base salary agreements in Merit Palk via `elnora-merit palk`. Covers the sendemployees-vs-sendpayterms distinction, required import codes, and reading the employee / agreement lists. Use when: adding a new employee,

From plugin
merit-aktiva-workspace
818 skills3 agents5 commands1 MCP
Install
$ npx -y skills add Elnora-AI/elnora-merit-aktiva --skill merit-palk-employees --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/merit-palk-employees

Context preview

The summary Claude sees to decide when to auto-load this skill.

How to onboard employees and maintain contracts, contacts, and base salary agreements in Merit Palk via `elnora-merit palk`. Covers the sendemployees-vs-sendpayterms distinction, required import codes, and reading the employee / agreement lists. Use when: adding a new employee,

SKILL.md

merit-palk-employees.SKILL.md
name: merit-palk-employees
version: 1.0.0
description: >
  How to onboard employees and maintain contracts, contacts, and base salary agreements in
  Merit Palk via `elnora-merit palk`. Covers the sendemployees-vs-sendpayterms distinction,
  required import codes, and reading the employee / agreement lists.
  Use when: adding a new employee, creating a first contract, setting or updating a base
  salary agreement, adding an employee's bank/contact details, or listing employees/agreements.
  TRIGGERS: "add employee", "onboard employee", "new hire", "create contract", "tööleping",
  "base salary agreement", "palgakokkulepe", "change salary", "update salary agreement",
  "employee bank account", "employee contact", "list employees", "employee list".

Merit Palk — Employees, Contracts & Agreements

Endpoints: `palk employees create` (sendemployees), `palk base-salary create` (sendpayterms), `palk contacts add` (sendcontacts), `palk employees list` (getemployees), `palk base-salary list` (getpayterms). All POST. **No API delete/update** — corrections are manual in Merit Palk.

> If your workspace keeps a company books reference (the GL account, department/cost-centre > codes, salary-type import IDs actually configured in Merit Palk), load it from the > references dir (`MERIT_REFERENCES_DIR`) before building a payload. Note: `profile sync` > covers Aktiva reference data only — Palk import IDs are not in `company-profile.json`.

sendemployees vs sendpayterms — pick the right one

  • **New person joining** → `palk employees create` (sendemployees). Adds the employee, their

**first contract**, AND their **first base salary agreement** in one call.

  • **Changing pay for someone already in Merit** → `palk base-salary create` (sendpayterms).

Adds a NEW base salary agreement (new `StartDate`) to an existing contract.

  • You **cannot** use sendpayterms to add the first agreement at the contract's start date — that

one is auto-created with the contract. Two agreements can never share the same `StartDate`.

Add a new employee (sendemployees)

Required (\*): `PersonalCode`, `SurName`, `FirstName`, `TypeId`, `StartDate`, `SalaryTypeImpCode`. `SalaryTypeImpCode` must already exist on the Base Salary type card in Merit Palk (numeric).

elnora-merit palk employees create --data '{
  "PersonalCode": "39001011234",
  "FirstName": "Mari", "SurName": "Maasikas",
  "TypeId": 1,
  "StartDate": "2026-07-01",
  "SalaryTypeImpCode": 100,
  "Hours": 8.00, "Amount": 12.0000,
  "AutoTimeKeeping": true, "FullWorkingTime": true,
  "GLAccountCode": "5000", "DepartmentCode": "ADMIN"
}'
  • `TypeId`: 1 Employment contract · 2 Board member · 3 Other · 5 Contract of services · 4 No contract.
  • `Hours` = hours/day (8.00 full-time, 4.00 half). `Amount` = base salary tariff (the rate; e.g.

the hourly amount for hourly pay, or the monthly amount for monthly pay).

  • `AutoTimeKeeping`: `true` lets Merit auto-reduce hours for absences. Set `false` if you import

or hand-enter hours each month.

  • `GLAccountCode` / `DepartmentCode` / `CCCode` / `ProjectCode` are optional but recommended;

each must already exist in Merit Palk or it is ignored. (Posted-register fields: `NRStartDate`, `NREndDate`, `NRState` ISO2, `NRHasCert` — for the TÖR employment registration.)

Unpaid work & volunteers (TÖR type 501)

Registering someone who works for the company without pay is a **töötamise register (TÖR)** matter, not a payroll run — there is no salary to calculate in Palk. Register it directly in e-MTA before the person starts.

  • The TÖR has a dedicated employment type **501 "Tasuta töötamine"** (unpaid work), defined by

EMTA as *work in the economic interests of a company or sole proprietor (FIE) without remuneration* (Maksukorralduse seadus § 251(3) p1). No TSD/payroll taxes follow, because nothing is paid.

  • **It must be exceptional and short.** EMTA: unpaid work in the profit-oriented sector "can

still be only exceptional… not realistic for anyone to work for a longer period without being paid for it."

  • **You cannot disguise an employment relationship.** Töölepingu seadus § 1 defines a tööleping

as work done *for remuneration*; if the work is of a kind normally expected against pay, it is legally presumed to be an employment contract — triggering minimum wage and social tax retroactively. A "volunteer" label gives no protection if the substance is ordinary work.

  • **Genuine volunteering is different.** Public-benefit volunteer work is for non-profits and

foundations (which by nature have no economic interest) and is **not** registered in the TÖR at all. A for-profit OÜ has no true volunteers in that sense.

  • **Consequence:** type 501 carries no social tax, therefore **no health insurance**

(ravikindlustus) for the person.

  • For real, ongoing work use a proper contract instead: `TypeId` 1 (employment) or 5 (services).

Update a base salary agreement (sendpayterms)

elnora-merit palk base-salary create --data '{
  "ContractId": "39001011234",
  "StartDate": "2026-09-01",
  "Hours": 8.00, "Amount": 15.0000,
  "AutoTimeKeeping": true, "FullWorkingTime": true,
  "SalaryTypeImpCode": 100, "GLAccountCode": "5000"
}'
  • `ContractId` (required, non-empty, not `0`) = the contract import code **or** the employee's

Personal ID code. `StartDate` must differ from every existing agreement's start date.

Add / set contact details (sendcontacts)

Required: `PersonalCode`. Then any of `Address`, `PhoneNo`, `Email`, `BankAccountNo` (IBAN), `BankAccountHolderName`, `Language` (`et`/`en`/`ru`, default `et` — drives payslip language).

elnora-merit palk contacts add --data '{
  "PersonalCode": "39001011234",
  "Email": "mari@example.ee", "BankAccountNo": "EE471000001020145685",
  "BankAccountHolderName": "Mari Maasikas", "Language": "et"
}'

Read employees and agreements

elnora-merit palk employees list                                  # all (max 100)
elnora-m
Read more
Ships withmerit-aktiva-workspace

Do your Merit Aktiva accounting from the command line — or let Claude Code do it for you. Merit Aktiva is Estonia's cloud accounting platform.

Get the whole plugin

Other skills on merit-aktiva-workspace.