Payroll is a stream of Case Changes - hire, salary change, bonus, sickness, termination, an address update, and so on. You report what happened; Ason applies the correct payroll logic.
Before reporting anything, you can query which cases you're actually allowed to report: GET .../cases/sets returns every available case, for the company or for a specific employee, based on your assigned regulations. Reporting then always looks the same, no matter which case it is: POST .../cases/sets with the case name and its field values - the same endpoint and shape whether you're reporting a hire, a salary change, or an address update.
The three channels
There are three ways to get data into Ason - all of them end up as the same thing under the hood: a Case Change.
CaseMan (the built-in frontend - see Build your own solution to run it locally) - the guided, no-code way. It shows exactly what's missing (Missing Company Data / Missing Employee Data), walks users through the right case for their situation, and is what most HR users interact with day to day. Available in German, English, French and Italian.
Direct API - your platform reports a case change itself, with exactly the fields it has. See the examples below.
Excel import - for bulk data. You attach a spreadsheet to a case: each column is a case field, each row is an employee (matched by their EmployeeIdentifier). Useful for migrating many employees at once - see Migrating historical data below.
Import cases
Some cases - like CompanyOnboardingData or EmployeeNewEntryData, the ones used in Quickstart steps 4 and 6 - are deliberately large "import" cases: dozens of fields, almost all optional, designed to capture everything at once rather than one fact at a time. You don't have to fill in every field - only send what you actually have, and report the rest later as its own, smaller case change.
Master data vs. variable data
Every case field has a time type that decides how a value you report behaves over time:
- Period - master data. Valid from a
startdate onward until you change it again - noendneeded. Example: address, IBAN, civil status. - Moment - variable data. Tied to a single point in time -
startandendare the same date. Example: hours worked on a day, a one-off bonus. - Timeless - practically never changes (e.g. a fixed configuration value).
This is a property of the field, not of the case - both examples below report through the same case (EmployeeNewEntryData), and you only need to send the field(s) that actually changed, not the full onboarding set again.
Moment values are summed within a payrun period. If you report a CHF 500 bonus on May 2 and a CHF 380 bonus on May 16, both fall inside the May payrun period, so the value used for that period's calculation is CHF 880 - not the last value reported, the total of everything reported.
_
_
The same pattern applies to CH.Swissdec.EmployeeActivityWorkedHours (hours worked on a day) - any Moment field, not just bonuses.
Modeling the same fact different ways
Two companies rarely track the same thing the same way - Ason's regulations provide multiple case fields for the same real-world concept, so you can pick the one that matches how your data already looks. For example:
- Sunday work - report it as a flat amount (
CH.Swissdec.EmployeeActivitySundayBonus, in CHF) or as a rate-based surcharge (CH.Swissdec.EmployeeSundaySurcharge50, hours at a 50% surcharge) - whichever matches your source data. - Meal deductions - the calculation itself can vary by employee type; see this video on meal deduction calculation for hourly-wage restaurant employees as a real example of that complexity.
- Absences - as a number of days, a date range, or with a reduction/percentage applied - depending on what your source system tracks.
- Totals and balances - some customers pre-calculate a total before sending it to Ason; others send the raw components and let Ason calculate. Both are valid - see Embedded Into Your Platform for how to decide which fits your platform.
If you're not sure which variant fits your data, get in touch - matching your existing model to the right case fields is usually a one-time exercise during onboarding.
Migrating historical data
Moving off another payroll system? Historical data is reported through the exact same case changes described above - there's no separate import mode. Two things are specific to migrating rather than reporting as-it-happens:
- Entry date - set an employee's entry date to their original hire date, not the date you migrated them into Ason
- Retroactive calculation - a
startdate in the past is fine; Ason calculates retroactively as needed, but won't re-trigger declarations already sent to authorities for periods before your go-live date
After you report data
Regardless of which channel was used, the same checks apply:
- Missing Company Data / Missing Employee Data - required fields that are still outstanding
- Payroll Control (Lohnkontrolle) - flagged cases worth a human check before closing a period
- Tasks - created automatically to guide whoever needs to act next
FAQ
Do I need to resend the full onboarding case every time something changes?
No - only send the field(s) that actually changed, not the full case again.
What happens if I report the same Moment field twice in one period?
The values are summed, not overwritten - see "Master data vs. variable data" above.
How do I know which channel (CaseMan, API, Excel) to use?
Whichever matches your integration - see "The three channels" above. You can mix channels freely; they all produce the same Case Change underneath.
Can I report data with a start date in the past?
Yes - see "Migrating historical data" above for what's specific to backdated data.
What do I find under "new event" (Ctrl+K)?
The case-change entry point in CaseMan - every case you're allowed to report, for the company or for a specific employee, based on your assigned regulations.
Can I report an event for an employee who has already left?
Yes, as long as the date falls within their employment period and isn't before the payroll's accounting start date - the employee list just hides former employees by default (there's a toggle to show them), it doesn't block reporting events for them.
Can I choose myself which events I see, or turn some off?
No - the case list is driven by your assigned regulation(s), not individually configurable per user.
How do I subscribe to a webhook?
POST /tenants/{tenantId}/webhooks - see Outputs for the full setup example.
Can events only be entered via the frontend, or also imported?
Both, plus the direct API - see "The three channels" above.
How do I import an event/change?
Via Excel import - attach a spreadsheet to a case, where each column is a case field and each row is an employee (matched by EmployeeIdentifier).
Can I delete a case change I already reported?
No delete operation was found - corrections go through reporting a new case change (or a cancellation), not deleting the original one.
API Endpoints
| What | Call |
|---|---|
| List cases available to report (company or employee) | GET /tenants/{orgId}/payrolls/{payrollId}/cases/sets |
| Report a case change | POST /tenants/{orgId}/payrolls/{payrollId}/cases/sets |
| List reported case changes (history) | GET /tenants/{orgId}/payrolls/{payrollId}/changes |
| Get current data values | GET /tenants/{orgId}/payrolls/{payrollId}/cases/values/time |
| Get a field's value history | GET /tenants/{orgId}/payrolls/{payrollId}/changes/values |
| Count data values (e.g. for missing-data checks) | GET /tenants/{orgId}/payrolls/{payrollId}/cases/values/count |
