payroll

Put Payroll Settings

Patch semantics: an omitted key keeps its value, an explicit null clears it.

⚠️ exclude_unset is load-bearing (ZCT-518). ApiModel does not set it, so a plain model_dump() emits all four account keys with None for the ones the caller omitted, and update_settings writes every key it is handed (setattr(row, key, value or None)). A partial PUT — say {"payroll_clearing_account_code": "2265"}, which is exactly how the ZCT-518 reporter unblocked their tenant, and exactly what the payroll_clearing_unconfigured work item now sends people to do — therefore wiped an explicitly configured salary_payable_account_code back to its catalog default, silently. The SPA happened to submit all four, so only the raw API and MCP were exposed. The non-account keys in the same body already had keep-semantics (DELIVERY_MODE_KEY/AUTO_RUN_KEY/QST_THIRTEENTH_KEY/ SALARY_PRORATION_KEY, None = keep); this makes the four account keys agree with them.

put/companies/{company_id}/payroll/settings

Request

  • Base URL: https://app.zeno-works.ch (the document declares no server; this is the origin it was published from)
  • URL: https://app.zeno-works.ch/companies/{company_id}/payroll/settings
  • Auth: none declared

Path parameters

company_idstring required

Headers

authorizationstring nullable

Cookies

access_tokenstring nullable

Request body

salary_payable_account_codestring nullable
payroll_clearing_account_codestring nullable
qst_liability_account_codestring nullable
employee_receivable_account_codestring nullable
payslip_delivery_mode'download' | 'email'

How a company delivers payslips (workflow gap #6 — H9/H11).

download (default) = the accountant downloads/hands out the PDFs; email = the post handler's best-effort phase emails each rendered slip to gl_employee.email (skips without an address are surfaced, never fatal — the retry endpoint covers stragglers).

payroll_auto_run_enabledboolean nullable
qst_thirteenth_method'ks45_frequency' | 'swissdec_periodic'

How the QST rate-determining income treats a 13th salary (F2644; plan D4).

ks45_frequency (default) = KS 45 §6.3 / §6.6: an annual 13th is converted to the 360-day period it is paid for (13th / insured days YTD × 360) and a monthly accrual is part of the month's gross; swissdec_periodic = ELM 6.0 §10.6.1.2: the 13th is a periodic item, extrapolated with the month's other periodic pay (declared Swissdec-certified software; the Swissdec worked examples M17–M22). The two differ by up to 2,500 of rate-determining income on the M17 facts.

salary_proration'calendar' | '30' | 'working'

The day basis a derived monthly salary is prorated on (F2752).

calendar (default, what the product always did) = actual calendar days (act/act: 15 of 31 days is 15/31); 30 = the 30/360 convention of the ELM insured days and KS 45 §6.6 (a whole month is 30 days, the 31st and 28/29 February count as the 30th: 15 of 31 days is 15/30); working = Monday-to-Friday working days of the employed window over those of the month (no holiday calendar). One company-wide choice: it prorates hire/exit months and the salary days an unpaid-leave or EO event removes.

Response

Successful Response

payslip_delivery_mode'download' | 'email' required

How a company delivers payslips (workflow gap #6 — H9/H11).

download (default) = the accountant downloads/hands out the PDFs; email = the post handler's best-effort phase emails each rendered slip to gl_employee.email (skips without an address are surfaced, never fatal — the retry endpoint covers stragglers).

payroll_auto_run_enabledboolean
qst_thirteenth_method'ks45_frequency' | 'swissdec_periodic'

How the QST rate-determining income treats a 13th salary (F2644; plan D4).

ks45_frequency (default) = KS 45 §6.3 / §6.6: an annual 13th is converted to the 360-day period it is paid for (13th / insured days YTD × 360) and a monthly accrual is part of the month's gross; swissdec_periodic = ELM 6.0 §10.6.1.2: the 13th is a periodic item, extrapolated with the month's other periodic pay (declared Swissdec-certified software; the Swissdec worked examples M17–M22). The two differ by up to 2,500 of rate-determining income on the M17 facts.

salary_proration'calendar' | '30' | 'working'

The day basis a derived monthly salary is prorated on (F2752).

calendar (default, what the product always did) = actual calendar days (act/act: 15 of 31 days is 15/31); 30 = the 30/360 convention of the ELM insured days and KS 45 §6.6 (a whole month is 30 days, the 31st and 28/29 February count as the 30th: 15 of 31 days is 15/30); working = Monday-to-Friday working days of the employed window over those of the month (no holiday calendar). One company-wide choice: it prorates hire/exit months and the salary days an unpaid-leave or EO event removes.

resolved_fiscal_year_idstring nullable
resolved_fiscal_yearinteger nullable

Changes

No recorded changes to this operation across all 1 revision of this API.