> ## Documentation Index
> Fetch the complete documentation index at: https://developers.jobhandy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Data types and formats

> Use the exact identifier, timestamp, date, month, country, enum, money, nullability, and file conventions.

## Identifiers

Most resource and reference identifiers use a 24-character hexadecimal string. Treat every ID as opaque and store it exactly as returned.

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
68a000000000000000000001
```

Do not derive creation time, tenant ownership, ordering, or resource type from an identifier.

## Timestamps

Public timestamps use ISO 8601 UTC values ending in `Z`:

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
2026-07-15T11:30:00.000Z
```

* Preserve the instant in UTC in logs and checkpoints.
* Do not remove the trailing `Z`.
* `createdAtFrom` and `createdAtTo` are inclusive bounds.

## Payroll months

Payroll document periods use `YYYY-MM`:

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
2026-01
```

`startMonth` is the first covered month and `endMonth` is the last covered month according to document metadata.

## Country codes

`countryCode` uses an uppercase two-character country or territory code, for example:

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
DE
```

## Monetary values in order products

Order product VAT and pricing values are returned as decimal strings, not as integer-cent fields:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "vatRate": "19.00",
  "grossAmount": "43.90",
  "netAmount": "36.8908",
  "service": false,
  "grossService": null,
  "netService": null
}
```

Apply the following rules:

* Preserve the returned precision.
* Parse monetary values with an exact decimal type when calculations are required; do not use binary floating-point arithmetic.
* `vatRate` is a decimal percentage string.
* `vatRate` and `grossAmount` use two decimal places; `netAmount` uses four decimal places.
* `grossService` and `netService` are nullable decimal strings with two decimal places.
* `service` is nullable; the provider schema uses `null` for an accessory where the service flag does not apply.
* `model`, `manufacturerName`, and `articleGroupName` are nullable strings.
* The former `description`, `rateInCents`, and `serviceRateInCents` fields are no longer part of `OrderProduct`.

## Enums

Enum values are case-sensitive. Examples include:

| Domain          | Values                                                                                                                               |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Order status    | `under_review`, `rejected`, `approved`, `active`, `archived`, `withdrawn`                                                            |
| Incident type   | `temporary`, `permanent`                                                                                                             |
| Incident status | `reported`, `in_progress`, `completed`, `archived`                                                                                   |
| Reporter type   | `user`, `api_key`                                                                                                                    |
| Payroll format  | `sap_hcm`, `personio_csv`, `hrworks_csv`, `diamant_software_diamant_4`, `universal_csv`, `universal_txt`, `datev_lodas`, `datev_lug` |

Clients should not fail merely because a response contains an additive enum value introduced by a compatible contract update. Log and surface unknown values for mapping review.

## Null, omission, and empty string

| Representation         | Meaning in a patch                               |
| ---------------------- | ------------------------------------------------ |
| Property omitted       | Leave the current value unchanged                |
| Property set to `null` | Clear the field only when the schema is nullable |
| Property set to `""`   | Send an empty string; validation may reject it   |

## Files

Incident uploads accept `image/*` or `application/pdf` under the multipart field `uploads`, subject to the documented file-count and complete-body limits. Download endpoints return the media type documented by the response.
