@dsptch-work/api-client 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50,6 +50,12 @@ export const zProblem = z.object({
50
50
  *
51
51
  * A signed token in the request fails signature verification. Re-obtain the token from the endpoint that issued it.
52
52
  *
53
+ * ### malformed_body
54
+ *
55
+ * **Malformed Request Body**
56
+ *
57
+ * The request body could not be parsed in the declared content type — most commonly a body that is not valid JSON. Send a well-formed body matching the `Content-Type` header.
58
+ *
53
59
  * ### non_range_filter_value
54
60
  *
55
61
  * **Range Filter Needs Bounds**
@@ -78,7 +84,7 @@ export const zProblem = z.object({
78
84
  *
79
85
  * **Parameter Must Be An Object**
80
86
  *
81
- * A container query parameter — `filter`, `page`, or `as_of` — arrived as a scalar, array, or blank value instead of a nested object. Use the object syntax, for example `filter[key]=value`.
87
+ * Something that must be an object arrived as something else. Either a container query parameter — `filter`, `page`, or `as_of` — arrived as a scalar, array, or blank value, in which case use the object syntax, for example `filter[key]=value`; or the request body of a write that documents this failure parsed to `null`, an array, or a bare scalar, in which case send a JSON object. An absent or empty body is not this failure.
82
88
  *
83
89
  * ### unknown_axis
84
90
  *
@@ -88,9 +94,9 @@ export const zProblem = z.object({
88
94
  *
89
95
  * ### unknown_key
90
96
  *
91
- * **Unknown Query Parameter**
97
+ * **Unknown Key**
92
98
  *
93
- * The query string carries a top-level key outside the declared containers — typically a misspelled container. Remove or correct it; unknown keys are never silently ignored.
99
+ * The query string carries a top-level key outside the declared containers, or the request body carries a key the operation's contract does not declare — typically a misspelled container or field. Remove or correct the keys the detail names; unknown keys are never silently ignored.
94
100
  *
95
101
  * ### unsupported_axis
96
102
  *
@@ -323,6 +329,7 @@ export const zProblemTypeCatalog = z.enum([
323
329
  'invalid_filter_key',
324
330
  'invalid_limit',
325
331
  'invalid_signature',
332
+ 'malformed_body',
326
333
  'non_range_filter_value',
327
334
  'non_scalar_axis',
328
335
  'non_scalar_filter_value',
@@ -417,7 +424,7 @@ export const zApprenticeshipProgramResponseObject = z.object({
417
424
  program_name: z.string().nullable(),
418
425
  sponsor_name: z.string().nullable(),
419
426
  doing_business_as: z.string().nullable(),
420
- registration_agency_type: z.enum(['federal', 'regional']),
427
+ registration_agency_type: z.enum(['federal', 'regional']).nullable(),
421
428
  created_at: z.iso.datetime(),
422
429
  updated_at: z.iso.datetime()
423
430
  });
@@ -535,7 +542,7 @@ export const zApprenticeshipApprenticeResponseObject = z.object({
535
542
  'in_progress',
536
543
  'failed',
537
544
  'success'
538
- ]),
545
+ ]).nullable(),
539
546
  expected_start_date: z.iso.date(),
540
547
  expected_completion_date: z.iso.date(),
541
548
  operative_start_date: z.iso.date().nullable(),
@@ -574,7 +581,7 @@ export const zApprenticeshipProgramParameters = z.object({
574
581
  program_name: z.string().nullish(),
575
582
  sponsor_name: z.string().nullish(),
576
583
  doing_business_as: z.string().nullish(),
577
- registration_agency_type: z.enum(['federal', 'regional']).optional()
584
+ registration_agency_type: z.enum(['federal', 'regional']).nullish()
578
585
  });
579
586
  /**
580
587
  * Create or update an occupation (trade) within a sponsored program; the program is taken from the URL path.
@@ -682,7 +689,37 @@ export const zTimecodeResponseObject = z.object({
682
689
  'non_job',
683
690
  'job_with_timecode'
684
691
  ]),
685
- default_for_company_id: z.string().nullable(),
692
+ default_for_company_id: z.string(),
693
+ valid_from: z.iso.datetime().nullable(),
694
+ valid_to: z.iso.datetime().nullable(),
695
+ transaction_from: z.iso.datetime(),
696
+ transaction_to: z.iso.datetime().nullable(),
697
+ created_at: z.iso.datetime(),
698
+ updated_at: z.iso.datetime()
699
+ });
700
+ export const zTimecodeHistoryCorrectionObject = z.object({
701
+ timekeeping_timecode_id: z.string(),
702
+ name: z.string(),
703
+ description: z.string().nullable(),
704
+ description_is_required: z.boolean(),
705
+ billable: z.boolean(),
706
+ overtime_eligible: z.boolean(),
707
+ unpaid: z.boolean(),
708
+ holiday: z.boolean(),
709
+ pto: z.boolean(),
710
+ safety: z.boolean(),
711
+ lunch_shortcut: z.boolean(),
712
+ break_shortcut: z.boolean(),
713
+ pwa: z.boolean(),
714
+ rest_and_recovery: z.boolean(),
715
+ incentive_pay_eligible: z.boolean(),
716
+ restricted_to: z.enum([
717
+ 'none',
718
+ 'job',
719
+ 'non_job',
720
+ 'job_with_timecode'
721
+ ]),
722
+ default_for_company_id: z.string(),
686
723
  valid_from: z.iso.datetime().nullable(),
687
724
  valid_to: z.iso.datetime().nullable(),
688
725
  transaction_from: z.iso.datetime(),
@@ -691,7 +728,7 @@ export const zTimecodeResponseObject = z.object({
691
728
  updated_at: z.iso.datetime()
692
729
  });
693
730
  export const zTimecodeHistoryVersionObject = z.object({
694
- id: z.string(),
731
+ timekeeping_timecode_id: z.string(),
695
732
  name: z.string(),
696
733
  description: z.string().nullable(),
697
734
  description_is_required: z.boolean(),
@@ -712,7 +749,7 @@ export const zTimecodeHistoryVersionObject = z.object({
712
749
  'non_job',
713
750
  'job_with_timecode'
714
751
  ]),
715
- default_for_company_id: z.string().nullable(),
752
+ default_for_company_id: z.string(),
716
753
  valid_from: z.iso.datetime().nullable(),
717
754
  valid_to: z.iso.datetime().nullable(),
718
755
  transaction_from: z.iso.datetime(),
@@ -724,7 +761,7 @@ export const zTimecodeHistoryVersionObject = z.object({
724
761
  'current',
725
762
  'historical'
726
763
  ]),
727
- corrections: z.array(zTimecodeResponseObject)
764
+ corrections: z.array(zTimecodeHistoryCorrectionObject)
728
765
  });
729
766
  /**
730
767
  * Request body for creating or updating a timecode; only `name` is required. On create, omitted fields take their model/DB defaults (noted per field). On update the request applies a bitemporal correction, so omitted fields keep the current version's values rather than reverting to defaults.
@@ -991,7 +1028,7 @@ export const zHolidayResponseObject = z.object({
991
1028
  export const zAttestationConfigResponseObject = z.object({
992
1029
  id: z.string(),
993
1030
  timekeeping_pay_period_config_id: z.string(),
994
- content: z.string().nullable(),
1031
+ content: z.string(),
995
1032
  expected_response: z.boolean(),
996
1033
  us_state_id: z.string().nullable(),
997
1034
  deleted_at: z.iso.datetime().nullable(),
@@ -1026,7 +1063,7 @@ export const zPayPeriodConfigResponseObject = z.object({
1026
1063
  'none',
1027
1064
  'base',
1028
1065
  'aggregate'
1029
- ]),
1066
+ ]).nullable(),
1030
1067
  time_mode: z.enum([
1031
1068
  'none',
1032
1069
  'base',
@@ -1037,7 +1074,44 @@ export const zPayPeriodConfigResponseObject = z.object({
1037
1074
  'quickbooks_online',
1038
1075
  'paychex',
1039
1076
  'gusto'
1077
+ ]).nullable(),
1078
+ actuals_enabled: z.boolean().nullable(),
1079
+ requires_external_map_contributor: z.boolean(),
1080
+ paid_after_holiday: z.boolean(),
1081
+ demo: z.boolean().nullable(),
1082
+ valid_from: z.iso.datetime().nullable(),
1083
+ valid_to: z.iso.datetime().nullable(),
1084
+ created_at: z.iso.datetime()
1085
+ });
1086
+ export const zPayPeriodConfigHistoryCorrectionObject = z.object({
1087
+ timekeeping_pay_period_config_id: z.string(),
1088
+ company_id: z.string(),
1089
+ name: z.string(),
1090
+ frequency: z.enum(['weekly', 'biweekly']),
1091
+ start_day_of_week: z.int(),
1092
+ tz_name: z.string(),
1093
+ currency: z.string(),
1094
+ status: z.enum([
1095
+ 'synced',
1096
+ 'pending',
1097
+ 'failed'
1040
1098
  ]),
1099
+ payroll_mode: z.enum([
1100
+ 'none',
1101
+ 'base',
1102
+ 'aggregate'
1103
+ ]).nullable(),
1104
+ time_mode: z.enum([
1105
+ 'none',
1106
+ 'base',
1107
+ 'aggregate'
1108
+ ]),
1109
+ payroll_system: z.enum([
1110
+ 'rippling',
1111
+ 'quickbooks_online',
1112
+ 'paychex',
1113
+ 'gusto'
1114
+ ]).nullable(),
1041
1115
  actuals_enabled: z.boolean().nullable(),
1042
1116
  requires_external_map_contributor: z.boolean(),
1043
1117
  paid_after_holiday: z.boolean(),
@@ -1047,7 +1121,7 @@ export const zPayPeriodConfigResponseObject = z.object({
1047
1121
  created_at: z.iso.datetime()
1048
1122
  });
1049
1123
  export const zPayPeriodConfigHistoryVersionObject = z.object({
1050
- id: z.string(),
1124
+ timekeeping_pay_period_config_id: z.string(),
1051
1125
  company_id: z.string(),
1052
1126
  name: z.string(),
1053
1127
  frequency: z.enum(['weekly', 'biweekly']),
@@ -1063,7 +1137,7 @@ export const zPayPeriodConfigHistoryVersionObject = z.object({
1063
1137
  'none',
1064
1138
  'base',
1065
1139
  'aggregate'
1066
- ]),
1140
+ ]).nullable(),
1067
1141
  time_mode: z.enum([
1068
1142
  'none',
1069
1143
  'base',
@@ -1074,7 +1148,7 @@ export const zPayPeriodConfigHistoryVersionObject = z.object({
1074
1148
  'quickbooks_online',
1075
1149
  'paychex',
1076
1150
  'gusto'
1077
- ]),
1151
+ ]).nullable(),
1078
1152
  actuals_enabled: z.boolean().nullable(),
1079
1153
  requires_external_map_contributor: z.boolean(),
1080
1154
  paid_after_holiday: z.boolean(),
@@ -1087,7 +1161,7 @@ export const zPayPeriodConfigHistoryVersionObject = z.object({
1087
1161
  'current',
1088
1162
  'historical'
1089
1163
  ]),
1090
- corrections: z.array(zPayPeriodConfigResponseObject)
1164
+ corrections: z.array(zPayPeriodConfigHistoryCorrectionObject)
1091
1165
  });
1092
1166
  /**
1093
1167
  * Create or update a holiday on a pay schedule. name, holiday_type, and month are required; mday is required for fixed holidays and wday + week for floating holidays (enforced by model validation).
@@ -1131,7 +1205,7 @@ export const zPwaCompanyUserDetailsResponseObject = z.object({
1131
1205
  'male',
1132
1206
  'non_binary',
1133
1207
  'not_specified'
1134
- ]),
1208
+ ]).nullable(),
1135
1209
  local_business_license: z.string().nullable(),
1136
1210
  drivers_license_state: z.string().nullable(),
1137
1211
  drivers_license_number: z.string().nullable(),
@@ -1142,12 +1216,12 @@ export const zPwaCompanyUserDetailsResponseObject = z.object({
1142
1216
  'reserves',
1143
1217
  'guard',
1144
1218
  'not_specified'
1145
- ]),
1219
+ ]).nullable(),
1146
1220
  hispanic_origin: z.enum([
1147
1221
  'yes',
1148
1222
  'no',
1149
1223
  'not_specified'
1150
- ]),
1224
+ ]).nullable(),
1151
1225
  ca_dir_withholding_exemptions: z.int().nullable(),
1152
1226
  disabled: z.boolean(),
1153
1227
  il_dol_race: z.enum([
@@ -1167,13 +1241,13 @@ export const zPwaCompanyUserDetailsResponseObject = z.object({
1167
1241
  'other_asian',
1168
1242
  'other_pacific_islander',
1169
1243
  'other'
1170
- ]),
1244
+ ]).nullable(),
1171
1245
  il_shines_employment_type: z.enum([
1172
1246
  'part_time',
1173
1247
  'full_time',
1174
1248
  'seasonal_temporary',
1175
1249
  'independent_contract'
1176
- ]),
1250
+ ]).nullable(),
1177
1251
  il_shines_eep_qualifiers: z.array(z.enum([
1178
1252
  'eep_program_completed',
1179
1253
  'foster_care',
@@ -1190,7 +1264,7 @@ export const zPwaCompanyUserDetailsResponseObject = z.object({
1190
1264
  'returning_residents_clean_jobs_training_program',
1191
1265
  'other'
1192
1266
  ])).nullable(),
1193
- or_boli_schedule_type: z.enum(['five_eight', 'four_ten']),
1267
+ or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).nullable(),
1194
1268
  or_boli_race: z.array(z.enum([
1195
1269
  'american_indian_or_alaska_native',
1196
1270
  'asian',
@@ -1225,7 +1299,7 @@ export const zPwaCompanyUserDetailsParameters = z.object({
1225
1299
  'male',
1226
1300
  'non_binary',
1227
1301
  'not_specified'
1228
- ]).optional(),
1302
+ ]).nullish(),
1229
1303
  local_business_license: z.string().nullish(),
1230
1304
  drivers_license_state: z.string().nullish(),
1231
1305
  drivers_license_number: z.string().nullish(),
@@ -1236,12 +1310,12 @@ export const zPwaCompanyUserDetailsParameters = z.object({
1236
1310
  'reserves',
1237
1311
  'guard',
1238
1312
  'not_specified'
1239
- ]).optional(),
1313
+ ]).nullish(),
1240
1314
  hispanic_origin: z.enum([
1241
1315
  'yes',
1242
1316
  'no',
1243
1317
  'not_specified'
1244
- ]).optional(),
1318
+ ]).nullish(),
1245
1319
  ca_dir_withholding_exemptions: z.int().nullish(),
1246
1320
  disabled: z.boolean().optional(),
1247
1321
  il_dol_race: z.enum([
@@ -1261,13 +1335,13 @@ export const zPwaCompanyUserDetailsParameters = z.object({
1261
1335
  'other_asian',
1262
1336
  'other_pacific_islander',
1263
1337
  'other'
1264
- ]).optional(),
1338
+ ]).nullish(),
1265
1339
  il_shines_employment_type: z.enum([
1266
1340
  'part_time',
1267
1341
  'full_time',
1268
1342
  'seasonal_temporary',
1269
1343
  'independent_contract'
1270
- ]).optional(),
1344
+ ]).nullish(),
1271
1345
  il_shines_eep_qualifiers: z.array(z.enum([
1272
1346
  'eep_program_completed',
1273
1347
  'foster_care',
@@ -1284,7 +1358,7 @@ export const zPwaCompanyUserDetailsParameters = z.object({
1284
1358
  'returning_residents_clean_jobs_training_program',
1285
1359
  'other'
1286
1360
  ])).nullish(),
1287
- or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).optional(),
1361
+ or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).nullish(),
1288
1362
  or_boli_race: z.array(z.enum([
1289
1363
  'american_indian_or_alaska_native',
1290
1364
  'asian',
@@ -1394,13 +1468,13 @@ export const zTimeEntryResponseObject = z.object({
1394
1468
  ]),
1395
1469
  hours_worked: z.number(),
1396
1470
  overtime_minutes_worked: z.object({
1397
- 1: z.number().optional(),
1398
- 1.5: z.number().optional(),
1399
- 2: z.number().optional()
1471
+ 1: z.number(),
1472
+ 1.5: z.number(),
1473
+ 2: z.number()
1400
1474
  }),
1401
1475
  incentive_pay_one_five_x_minutes_worked: z.int(),
1402
1476
  hourly_rate_cents: z.string().nullable(),
1403
- currency: z.string().nullable(),
1477
+ currency: z.string(),
1404
1478
  hourly_rate_src_type: z.string().nullable(),
1405
1479
  timekeeping_pay_period_id: z.string(),
1406
1480
  start_time: z.iso.datetime(),
@@ -1409,17 +1483,8 @@ export const zTimeEntryResponseObject = z.object({
1409
1483
  updated_at: z.iso.datetime(),
1410
1484
  feature_ids: z.array(z.string()),
1411
1485
  features: z.array(z.object({
1412
- name: z.string().optional()
1413
- })),
1414
- user: z.object({
1415
- id: z.string().optional(),
1416
- name: z.string().optional()
1417
- }),
1418
- timecode: z.object({
1419
- id: z.string().optional(),
1420
- name: z.string().optional()
1421
- }).nullable(),
1422
- total_hours: z.number()
1486
+ name: z.string()
1487
+ }))
1423
1488
  });
1424
1489
  /**
1425
1490
  * A record of a single approval or decline action taken against a time entry.
@@ -1467,8 +1532,8 @@ export const zTimeEntryParameters = z.object({
1467
1532
  */
1468
1533
  export const zFormSubmissionResponseObject = z.object({
1469
1534
  user: z.object({
1470
- id: z.string().optional(),
1471
- name: z.string().optional()
1535
+ id: z.string(),
1536
+ name: z.string()
1472
1537
  }),
1473
1538
  title: z.string().nullable(),
1474
1539
  json: z.record(z.string(), z.unknown()),
@@ -1722,8 +1787,8 @@ export const zCustomFieldConfigParameters = z.object({
1722
1787
  * A user's membership in a group.
1723
1788
  */
1724
1789
  export const zUserGroupResponse = z.object({
1725
- id: z.string().optional(),
1726
- user_id: z.string().optional()
1790
+ id: z.string(),
1791
+ user_id: z.string()
1727
1792
  });
1728
1793
  /**
1729
1794
  * Request body for adding users to a group. The group is taken from the URL path.
@@ -1750,8 +1815,8 @@ export const zJobParameters = z.object({
1750
1815
  template_id: z.string().nullish(),
1751
1816
  name: z.string().nullish(),
1752
1817
  description: z.string().optional(),
1818
+ requested_by_company_id: z.string(),
1753
1819
  created_by_user_id: z.string(),
1754
- manager_user_id: z.string().nullish(),
1755
1820
  manager_user_ids: z.array(z.string()).nullish(),
1756
1821
  purchase_order_number: z.string().nullish(),
1757
1822
  project_id: z.string().nullish(),
@@ -1834,27 +1899,27 @@ export const zJobUpdateParameters = zJobParameters.and(z.object({
1834
1899
  * One version of a worker's compensation at your company, effective from its start date until the next version begins.
1835
1900
  */
1836
1901
  export const zUserCompanyScheduledChange = z.object({
1837
- id: z.string().optional(),
1838
- start_date: z.string().optional(),
1839
- hourly_rate: z.string().nullish(),
1840
- compensation_type: z.string().optional(),
1841
- overtime_eligible: z.boolean().optional(),
1842
- training_annual_amount: z.string().nullish(),
1843
- employer_combined_health_amount: z.string().nullish(),
1844
- employer_combined_savings: z.string().nullish(),
1845
- worked_annual_minutes: z.int().nullish(),
1846
- pto_annual_minutes: z.int().nullish(),
1847
- holiday_annual_minutes: z.int().nullish(),
1848
- training_annual_minutes: z.int().nullish(),
1849
- companies_department_id: z.string().nullish()
1902
+ id: z.string(),
1903
+ start_date: z.string(),
1904
+ hourly_rate: z.string().nullable(),
1905
+ compensation_type: z.string(),
1906
+ overtime_eligible: z.boolean(),
1907
+ training_annual_amount: z.string().nullable(),
1908
+ employer_combined_health_amount: z.string().nullable(),
1909
+ employer_combined_savings: z.string().nullable(),
1910
+ worked_annual_minutes: z.int().nullable(),
1911
+ pto_annual_minutes: z.int().nullable(),
1912
+ holiday_annual_minutes: z.int().nullable(),
1913
+ training_annual_minutes: z.int().nullable(),
1914
+ companies_department_id: z.string().nullable()
1850
1915
  });
1851
1916
  /**
1852
1917
  * A worker's scheduled compensation timeline at your company — the version currently in effect plus any future-dated versions.
1853
1918
  */
1854
1919
  export const zUserCompanyScheduledChangesResponse = z.object({
1855
- user_id: z.string().optional(),
1856
- current_version: zUserCompanyScheduledChange.optional(),
1857
- scheduled_changes: z.array(zUserCompanyScheduledChange).optional()
1920
+ user_id: z.string(),
1921
+ current_version: zUserCompanyScheduledChange,
1922
+ scheduled_changes: z.array(zUserCompanyScheduledChange)
1858
1923
  });
1859
1924
  /**
1860
1925
  * Request body for scheduling the end of a worker's employment at your company. Sets the employment's end date; cancel the scheduled termination to restore open-ended employment. Deleting the employment record instead (DELETE on the membership) removes it entirely and is not reversible.
@@ -1894,14 +1959,14 @@ export const zTimeCardResponseObject = z.object({
1894
1959
  rest_and_recovery_minutes_worked: z.int(),
1895
1960
  incentive_pay_eligible_minutes_worked: z.int(),
1896
1961
  overtime_minutes_worked: z.object({
1897
- 1: z.number().optional(),
1898
- 1.5: z.number().optional(),
1899
- 2: z.number().optional()
1962
+ 1: z.number(),
1963
+ 1.5: z.number(),
1964
+ 2: z.number()
1900
1965
  }),
1901
1966
  incentive_pay_overtime_minutes_worked: z.object({
1902
- 1: z.number().optional(),
1903
- 1.5: z.number().optional(),
1904
- 2: z.number().optional()
1967
+ 1: z.number(),
1968
+ 1.5: z.number(),
1969
+ 2: z.number()
1905
1970
  }),
1906
1971
  pay_cents: z.string(),
1907
1972
  base_wage_pay_cents: z.string(),
@@ -1930,14 +1995,14 @@ export const zJobTimeCardDayResponseObject = z.object({
1930
1995
  rest_and_recovery_minutes_worked: z.int(),
1931
1996
  incentive_pay_eligible_minutes_worked: z.int(),
1932
1997
  overtime_minutes_worked: z.object({
1933
- 1: z.number().optional(),
1934
- 1.5: z.number().optional(),
1935
- 2: z.number().optional()
1998
+ 1: z.number(),
1999
+ 1.5: z.number(),
2000
+ 2: z.number()
1936
2001
  }),
1937
2002
  incentive_pay_overtime_minutes_worked: z.object({
1938
- 1: z.number().optional(),
1939
- 1.5: z.number().optional(),
1940
- 2: z.number().optional()
2003
+ 1: z.number(),
2004
+ 1.5: z.number(),
2005
+ 2: z.number()
1941
2006
  }),
1942
2007
  pay_cents: z.string(),
1943
2008
  base_wage_pay_cents: z.string(),
@@ -1965,24 +2030,24 @@ export const zJobTimeCardDayResponseObject = z.object({
1965
2030
  consecutive_days_worked: z.int(),
1966
2031
  weekly_consecutive_days_worked: z.int(),
1967
2032
  cumulative_overtime_minutes_worked: z.object({
1968
- 1: z.number().optional(),
1969
- 1.5: z.number().optional(),
1970
- 2: z.number().optional()
2033
+ 1: z.number(),
2034
+ 1.5: z.number(),
2035
+ 2: z.number()
1971
2036
  }),
1972
2037
  weekly_cumulative_overtime_minutes_worked: z.object({
1973
- 1: z.number().optional(),
1974
- 1.5: z.number().optional(),
1975
- 2: z.number().optional()
2038
+ 1: z.number(),
2039
+ 1.5: z.number(),
2040
+ 2: z.number()
1976
2041
  }),
1977
2042
  cumulative_incentive_pay_overtime_minutes_worked: z.object({
1978
- 1: z.number().optional(),
1979
- 1.5: z.number().optional(),
1980
- 2: z.number().optional()
2043
+ 1: z.number(),
2044
+ 1.5: z.number(),
2045
+ 2: z.number()
1981
2046
  }),
1982
2047
  weekly_cumulative_incentive_pay_overtime_minutes_worked: z.object({
1983
- 1: z.number().optional(),
1984
- 1.5: z.number().optional(),
1985
- 2: z.number().optional()
2048
+ 1: z.number(),
2049
+ 1.5: z.number(),
2050
+ 2: z.number()
1986
2051
  }),
1987
2052
  cumulative_pay_cents: z.string(),
1988
2053
  weekly_cumulative_pay_cents: z.string(),
@@ -2097,7 +2162,7 @@ export const zPayrollFringeBenefitPlanResponseObject = z.object({
2097
2162
  'employer_combined_holiday_pto',
2098
2163
  'employer_training',
2099
2164
  'employer_other_contributions'
2100
- ]),
2165
+ ]).nullable(),
2101
2166
  il_jointly_managed: z.boolean(),
2102
2167
  il_fund_name: z.string().nullable(),
2103
2168
  il_fund_address1: z.string().nullable(),
@@ -2158,7 +2223,38 @@ export const zPayrollExternalMapResponseObject = z.object({
2158
2223
  'any',
2159
2224
  'employee',
2160
2225
  'employer'
2226
+ ]).nullable(),
2227
+ annual_periods: z.int(),
2228
+ created_by_user_id: z.string().nullable(),
2229
+ global: z.boolean(),
2230
+ valid_from: z.iso.datetime().nullable(),
2231
+ valid_to: z.iso.datetime().nullable(),
2232
+ transaction_from: z.iso.datetime(),
2233
+ transaction_to: z.iso.datetime().nullable(),
2234
+ created_at: z.iso.datetime(),
2235
+ updated_at: z.iso.datetime()
2236
+ });
2237
+ export const zPayrollExternalMapHistoryCorrectionObject = z.object({
2238
+ payrolls_external_map_id: z.string(),
2239
+ name: z.string(),
2240
+ payrolls_compensation_element_id: z.string(),
2241
+ compensation_element_name: z.string(),
2242
+ compensation_element_category: z.enum([
2243
+ 'tax',
2244
+ 'health',
2245
+ 'retirement',
2246
+ 'insurance',
2247
+ 'earning',
2248
+ 'garnishment',
2249
+ 'other'
2161
2250
  ]),
2251
+ timekeeping_pay_period_config_id: z.string().nullable(),
2252
+ payrolls_fringe_benefit_plan_id: z.string().nullable(),
2253
+ contributor: z.enum([
2254
+ 'any',
2255
+ 'employee',
2256
+ 'employer'
2257
+ ]).nullable(),
2162
2258
  annual_periods: z.int(),
2163
2259
  created_by_user_id: z.string().nullable(),
2164
2260
  global: z.boolean(),
@@ -2170,7 +2266,7 @@ export const zPayrollExternalMapResponseObject = z.object({
2170
2266
  updated_at: z.iso.datetime()
2171
2267
  });
2172
2268
  export const zPayrollExternalMapHistoryVersionObject = z.object({
2173
- id: z.string(),
2269
+ payrolls_external_map_id: z.string(),
2174
2270
  name: z.string(),
2175
2271
  payrolls_compensation_element_id: z.string(),
2176
2272
  compensation_element_name: z.string(),
@@ -2189,7 +2285,7 @@ export const zPayrollExternalMapHistoryVersionObject = z.object({
2189
2285
  'any',
2190
2286
  'employee',
2191
2287
  'employer'
2192
- ]),
2288
+ ]).nullable(),
2193
2289
  annual_periods: z.int(),
2194
2290
  created_by_user_id: z.string().nullable(),
2195
2291
  global: z.boolean(),
@@ -2204,7 +2300,7 @@ export const zPayrollExternalMapHistoryVersionObject = z.object({
2204
2300
  'current',
2205
2301
  'historical'
2206
2302
  ]),
2207
- corrections: z.array(zPayrollExternalMapResponseObject)
2303
+ corrections: z.array(zPayrollExternalMapHistoryCorrectionObject)
2208
2304
  });
2209
2305
  /**
2210
2306
  * A payroll run — a record of one payroll-processing event, synced from an external payroll system or reported to DSPTCH (never a run DSPTCH itself initiates). Paystubs belong to a run.
@@ -2491,7 +2587,7 @@ export const zFeatureResponseObject = z.object({
2491
2587
  address_id: z.string().nullable(),
2492
2588
  created_by_user_id: z.string().nullable(),
2493
2589
  updated_by_user_id: z.string().nullable(),
2494
- geometry: z.record(z.string(), z.unknown()).nullable(),
2590
+ geometry: z.record(z.string(), z.unknown()),
2495
2591
  active_time_begin: z.iso.datetime().nullable(),
2496
2592
  active_time_end: z.iso.datetime().nullable(),
2497
2593
  created_at: z.iso.datetime(),
@@ -2536,7 +2632,7 @@ export const zComplianceCheckResponseObject = z.object({
2536
2632
  timekeeping_time_card_id: z.string().nullable(),
2537
2633
  timekeeping_pay_period_id: z.string().nullable(),
2538
2634
  user_id: z.string().nullable(),
2539
- user_company_uid: z.string().nullable(),
2635
+ employment_id: z.string().nullable(),
2540
2636
  title: z.string(),
2541
2637
  description: z.string(),
2542
2638
  category: z.enum([
@@ -2564,7 +2660,7 @@ export const zComplianceCheckResponseObject = z.object({
2564
2660
  'high',
2565
2661
  'medium',
2566
2662
  'low'
2567
- ]),
2663
+ ]).nullable(),
2568
2664
  checked_at: z.iso.datetime().nullable(),
2569
2665
  passed_at: z.iso.datetime().nullable(),
2570
2666
  time_due: z.iso.datetime().nullable(),
@@ -2689,10 +2785,10 @@ export const zPaystubLineItemResponseObject = z.object({
2689
2785
  timekeeping_pay_period_id: z.string().nullable(),
2690
2786
  user_id: z.string().nullable(),
2691
2787
  external_map: z.object({
2692
- name: z.string().optional(),
2788
+ name: z.string(),
2693
2789
  compensation_element: z.object({
2694
- name: z.string().optional(),
2695
- description: z.string().nullish(),
2790
+ name: z.string(),
2791
+ description: z.string().nullable(),
2696
2792
  category: z.enum([
2697
2793
  'tax',
2698
2794
  'health',
@@ -2701,8 +2797,8 @@ export const zPaystubLineItemResponseObject = z.object({
2701
2797
  'earning',
2702
2798
  'garnishment',
2703
2799
  'other'
2704
- ]).optional()
2705
- }).optional()
2800
+ ])
2801
+ })
2706
2802
  }),
2707
2803
  amount_cents: z.string(),
2708
2804
  contributor: z.enum(['employee', 'employer']),
@@ -2736,7 +2832,7 @@ export const zPositionParameters = z.object({
2736
2832
  wage_adder_rate_cents: z.number().nullish(),
2737
2833
  job_wage_determinations_positions_attributes: z.array(z.object({
2738
2834
  id: z.int().nullish(),
2739
- job_wage_determination_uid: z.string().nullish()
2835
+ job_wage_determination_id: z.string().nullish()
2740
2836
  })).optional(),
2741
2837
  pwa_details_attributes: z.object({
2742
2838
  skill_level: z.string().nullish()
@@ -2846,8 +2942,8 @@ export const zProductionCompletionResponseObject = z.discriminatedUnion('complet
2846
2942
  * The form-assignment tasks created by one request — assigning a form to one or more users, each with a due time and optional recurrence and reminders. Returned as an array because a request can spread the assignment into one task per assignee.
2847
2943
  */
2848
2944
  export const zFormAssignmentTaskResponseObject = z.array(z.object({
2849
- id: z.string().optional(),
2850
- form_definition_id: z.string().optional(),
2945
+ id: z.string(),
2946
+ form_definition_id: z.string(),
2851
2947
  frequency: z.enum([
2852
2948
  'DAILY',
2853
2949
  'WORKDAILY',
@@ -2856,17 +2952,17 @@ export const zFormAssignmentTaskResponseObject = z.array(z.object({
2856
2952
  'BIWEEKLY',
2857
2953
  'MONTHLY',
2858
2954
  'QUARTERLY'
2859
- ]).optional(),
2860
- recurrence_end_time: z.iso.datetime().nullish(),
2861
- time_due: z.iso.datetime().optional(),
2862
- tz_name: z.string().optional(),
2863
- name: z.string().optional(),
2864
- description: z.string().nullish(),
2865
- task_assignee_user_ids: z.array(z.string()).optional(),
2955
+ ]).nullable(),
2956
+ recurrence_end_time: z.iso.datetime().nullable(),
2957
+ time_due: z.iso.datetime(),
2958
+ tz_name: z.string(),
2959
+ name: z.string(),
2960
+ description: z.string().nullable(),
2961
+ task_assignee_user_ids: z.array(z.string()),
2866
2962
  reminders: z.array(z.object({
2867
- offset: z.string().optional(),
2868
- remind_at: z.iso.datetime().optional()
2869
- })).optional()
2963
+ offset: z.string(),
2964
+ remind_at: z.iso.datetime()
2965
+ }))
2870
2966
  }));
2871
2967
  /**
2872
2968
  * Request body for creating or updating a certification — a named qualification a worker can hold. You can only manage your own company's certifications; global (platform) certifications are read-only.
@@ -2956,9 +3052,9 @@ export const zUserCertificationResponseObject = z.object({
2956
3052
  * The function the worker performs in a position (e.g. "Electrician", "Foreman"); null when no function is assigned.
2957
3053
  */
2958
3054
  export const zPositionFunction = z.object({
2959
- id: z.string().optional(),
2960
- value: z.string().optional(),
2961
- description: z.string().optional()
3055
+ id: z.string(),
3056
+ value: z.string(),
3057
+ description: z.string()
2962
3058
  }).nullable();
2963
3059
  /**
2964
3060
  * A job — the primary unit of work in DSPTCH. Workers fill its positions and track time against it; it optionally tracks Prevailing Wage / Apprenticeship (PWA) compliance and optionally belongs to a project. There is no delete endpoint — cancel or complete a job through its status instead.
@@ -3001,47 +3097,35 @@ export const zJobResponseObject = z.object({
3001
3097
  created_by_company_id: z.string(),
3002
3098
  requested_by_company_id: z.string().nullable(),
3003
3099
  project_id: z.string().nullable(),
3004
- created_by_company: z.object({
3005
- id: z.string().optional(),
3006
- name: z.string().optional()
3007
- }),
3008
- requested_by_company: z.object({
3009
- id: z.string().optional(),
3010
- name: z.string().optional()
3011
- }),
3012
- manager_user: z.object({
3013
- id: z.string().optional(),
3014
- name: z.string().optional()
3015
- }).nullable(),
3016
3100
  manager_users: z.array(z.object({
3017
3101
  id: z.string(),
3018
3102
  name: z.string()
3019
3103
  })),
3020
3104
  created_by_user: z.object({
3021
- id: z.string().optional(),
3022
- name: z.string().optional()
3105
+ id: z.string(),
3106
+ name: z.string()
3023
3107
  }),
3024
3108
  sites: z.array(z.object({
3025
- name: z.string().optional(),
3109
+ name: z.string(),
3026
3110
  features: z.array(z.object({
3027
- name: z.string().optional()
3028
- })).nullish()
3029
- })).nullable(),
3111
+ name: z.string()
3112
+ }))
3113
+ })),
3030
3114
  job_address: z.object({
3031
- label: z.string().optional()
3115
+ label: z.string()
3032
3116
  }).nullable(),
3033
3117
  positions: z.array(z.object({
3034
- position_function: zPositionFunction.optional(),
3035
- fulfilled_by_user_id: z.string().nullish()
3036
- })).nullable(),
3118
+ position_function: zPositionFunction,
3119
+ fulfilled_by_user_id: z.string().nullable()
3120
+ })),
3037
3121
  project: z.object({
3038
- name: z.string().optional()
3122
+ name: z.string()
3039
3123
  }).nullable(),
3040
3124
  pwa_details: zPwaJobDetailsResponseObject,
3041
3125
  work_types: z.array(z.object({
3042
- value: z.string().optional()
3043
- })).nullable(),
3044
- timekeeping_timecode_ids: z.array(z.string()).nullable(),
3126
+ value: z.string()
3127
+ })),
3128
+ timekeeping_timecode_ids: z.array(z.string()),
3045
3129
  tracks_feature_allocations: z.boolean(),
3046
3130
  requires_feature_allocation: z.boolean(),
3047
3131
  max_one_feature_allocation: z.boolean()
@@ -3065,11 +3149,11 @@ export const zPositionResponseObject = z.object({
3065
3149
  pwa_wage_pay_rate_src_type: z.string().nullable(),
3066
3150
  wage_adder_rate_cents: z.string().nullable(),
3067
3151
  pwa: z.boolean(),
3068
- federal_wage_determination_uids: z.array(z.string()),
3069
- regional_wage_determination_uids: z.array(z.string()),
3152
+ federal_wage_determination_ids: z.array(z.string()),
3153
+ regional_wage_determination_ids: z.array(z.string()),
3070
3154
  pwa_details: z.object({
3071
3155
  skill_level: z.string().nullable()
3072
- }).nullable(),
3156
+ }),
3073
3157
  start_time: z.iso.datetime().nullable(),
3074
3158
  end_time: z.iso.datetime().nullable(),
3075
3159
  created_at: z.iso.datetime(),
@@ -3093,21 +3177,21 @@ export const zUserRoleRequest = z.object({
3093
3177
  * A role granted to a user within a company's scope — the permissions the user has there. A user can hold several distinct roles per company.
3094
3178
  */
3095
3179
  export const zUserRoleResponse = z.object({
3096
- id: z.string().optional(),
3097
- user_id: z.string().optional(),
3098
- company_id: z.string().optional(),
3180
+ id: z.string(),
3181
+ user_id: z.string(),
3182
+ company_id: z.string(),
3099
3183
  role: z.enum([
3100
3184
  'TECHNICIAN',
3101
3185
  'FIELD_LEAD',
3102
3186
  'MANAGER',
3103
3187
  'SAFETY_MANAGER',
3104
3188
  'ADMIN'
3105
- ]).optional()
3189
+ ])
3106
3190
  });
3107
3191
  /**
3108
3192
  * Employment classification of a worker at a company: EMPLOYEE (W-2) or CONTRACTOR (1099). Null when unset.
3109
3193
  */
3110
- export const zUserCompanyType = z.enum(['EMPLOYEE', 'CONTRACTOR']);
3194
+ export const zUserCompanyType = z.enum(['EMPLOYEE', 'CONTRACTOR']).nullable();
3111
3195
  /**
3112
3196
  * A worker as your company sees them: the cross-company person merged with their employment record at your company (title, pay, benefits, and accruals), their roles at your company, and optional prevailing-wage compliance details. There is no delete — removing a worker terminates their employment at the company (see the user-company endpoints), which sets termination_date and drops them from the default list.
3113
3197
  */
@@ -3130,6 +3214,7 @@ export const zUserResponseObject = z.object({
3130
3214
  updated_at: z.iso.datetime(),
3131
3215
  winda_id: z.string().nullable(),
3132
3216
  linkedin_url: z.string().nullable(),
3217
+ employment_id: z.string(),
3133
3218
  type: zUserCompanyType,
3134
3219
  title: z.string().nullable(),
3135
3220
  overtime_eligible: z.boolean(),
@@ -3153,22 +3238,22 @@ export const zUserResponseObject = z.object({
3153
3238
  manager_user_id: z.string().nullable(),
3154
3239
  roles: z.array(z.string()),
3155
3240
  company_user_pwa_info: z.object({
3156
- id: z.string().optional(),
3157
- address1: z.string().nullish(),
3158
- address2: z.string().nullish(),
3159
- city: z.string().nullish(),
3160
- state: z.string().nullish(),
3161
- zip: z.string().nullish(),
3162
- race: z.array(z.string()).nullish(),
3163
- sex: z.string().nullish(),
3164
- local_business_license: z.string().nullish(),
3165
- drivers_license_state: z.string().nullish(),
3166
- drivers_license_number: z.string().nullish(),
3167
- veteran_status: z.string().nullish(),
3168
- hispanic_origin: z.string().nullish(),
3169
- ssn: z.string().nullish(),
3170
- disabled: z.boolean().nullish(),
3171
- ca_dir_withholding_exemptions: z.int().nullish(),
3241
+ id: z.string(),
3242
+ address1: z.string().nullable(),
3243
+ address2: z.string().nullable(),
3244
+ city: z.string().nullable(),
3245
+ state: z.string().nullable(),
3246
+ zip: z.string().nullable(),
3247
+ race: z.array(z.string()).nullable(),
3248
+ sex: z.string().nullable(),
3249
+ local_business_license: z.string().nullable(),
3250
+ drivers_license_state: z.string().nullable(),
3251
+ drivers_license_number: z.string().nullable(),
3252
+ veteran_status: z.string().nullable(),
3253
+ hispanic_origin: z.string().nullable(),
3254
+ ssn: z.string().nullable(),
3255
+ disabled: z.boolean().nullable(),
3256
+ ca_dir_withholding_exemptions: z.int().nullable(),
3172
3257
  il_dol_race: z.enum([
3173
3258
  'white',
3174
3259
  'black',
@@ -3186,20 +3271,20 @@ export const zUserResponseObject = z.object({
3186
3271
  'other_asian',
3187
3272
  'other_pacific_islander',
3188
3273
  'other'
3189
- ]).optional(),
3274
+ ]).nullable(),
3190
3275
  il_shines_employment_type: z.enum([
3191
3276
  'part_time',
3192
3277
  'full_time',
3193
3278
  'seasonal_temporary',
3194
3279
  'independent_contract'
3195
- ]).optional(),
3280
+ ]).nullable(),
3196
3281
  il_shines_eep_qualifiers: z.array(z.enum([
3197
3282
  'eep_program_completed',
3198
3283
  'foster_care',
3199
3284
  'formerly_incarcerated',
3200
3285
  'equity_investment_eligible_community',
3201
3286
  'self_registered_or_unknown'
3202
- ])).nullish(),
3287
+ ])).nullable(),
3203
3288
  il_shines_other_programs: z.array(z.enum([
3204
3289
  'solar_training_pipeline_program',
3205
3290
  'craft_apprenticeship_program',
@@ -3208,8 +3293,8 @@ export const zUserResponseObject = z.object({
3208
3293
  'illinois_climate_works_prep_apprenticeship_program',
3209
3294
  'returning_residents_clean_jobs_training_program',
3210
3295
  'other'
3211
- ])).nullish(),
3212
- or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).optional(),
3296
+ ])).nullable(),
3297
+ or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).nullable(),
3213
3298
  or_boli_race: z.array(z.enum([
3214
3299
  'american_indian_or_alaska_native',
3215
3300
  'asian',
@@ -3218,7 +3303,7 @@ export const zUserResponseObject = z.object({
3218
3303
  'native_hawaiian_or_pacific_islander',
3219
3304
  'white',
3220
3305
  'portuguese_or_brazilian'
3221
- ])).nullish()
3306
+ ])).nullable()
3222
3307
  }).nullable()
3223
3308
  });
3224
3309
  /**
@@ -3294,13 +3379,13 @@ export const zUserParameters = z.object({
3294
3379
  'other_asian',
3295
3380
  'other_pacific_islander',
3296
3381
  'other'
3297
- ]).optional(),
3382
+ ]).nullish(),
3298
3383
  il_shines_employment_type: z.enum([
3299
3384
  'part_time',
3300
3385
  'full_time',
3301
3386
  'seasonal_temporary',
3302
3387
  'independent_contract'
3303
- ]).optional(),
3388
+ ]).nullish(),
3304
3389
  il_shines_eep_qualifiers: z.array(z.enum([
3305
3390
  'eep_program_completed',
3306
3391
  'foster_care',
@@ -3317,7 +3402,7 @@ export const zUserParameters = z.object({
3317
3402
  'returning_residents_clean_jobs_training_program',
3318
3403
  'other'
3319
3404
  ])).nullish(),
3320
- or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).optional(),
3405
+ or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).nullish(),
3321
3406
  or_boli_race: z.array(z.enum([
3322
3407
  'american_indian_or_alaska_native',
3323
3408
  'asian',
@@ -3365,14 +3450,14 @@ export const zUserCompanyCreateParameters = z.object({
3365
3450
  * Keyset pagination cursors for the collection.
3366
3451
  */
3367
3452
  export const zPage = z.object({
3368
- next_cursor: z.string().nullish(),
3369
- current_cursor: z.string().nullish()
3453
+ next_cursor: z.string().nullable(),
3454
+ current_cursor: z.string().nullable()
3370
3455
  });
3371
3456
  /**
3372
3457
  * Pagination metadata for a paged collection, holding the keyset cursors under `page`.
3373
3458
  */
3374
3459
  export const zMeta = z.object({
3375
- page: zPage.optional()
3460
+ page: zPage
3376
3461
  });
3377
3462
  /**
3378
3463
  * Pagination metadata for a change-feed page, with the feed's safe polling watermark.
@@ -3385,17 +3470,17 @@ export const zDeltaMeta = z.object({
3385
3470
  * Pagination links for navigating a paged collection.
3386
3471
  */
3387
3472
  export const zLinks = z.object({
3388
- self: z.string().optional(),
3389
- first: z.string().nullish(),
3390
- next: z.string().nullish()
3473
+ self: z.string(),
3474
+ first: z.string().nullable(),
3475
+ next: z.string().nullable()
3391
3476
  });
3392
3477
  /**
3393
3478
  * A page of time entries, with pagination metadata and navigation links.
3394
3479
  */
3395
3480
  export const zTimeEntryIndexObject = z.object({
3396
- meta: zMeta.optional(),
3397
- links: zLinks.optional(),
3398
- data: z.array(zTimeEntryResponseObject).optional()
3481
+ meta: zMeta,
3482
+ links: zLinks,
3483
+ data: z.array(zTimeEntryResponseObject)
3399
3484
  });
3400
3485
  /**
3401
3486
  * A page of form definitions. A form definition is a SurveyJS form template built and versioned in the web app's form builder, so this API is read-only.
@@ -3404,35 +3489,35 @@ export const zFormDefinitionResponseObject = z.object({
3404
3489
  meta: zMeta,
3405
3490
  links: zLinks,
3406
3491
  data: z.array(z.object({
3407
- id: z.string().optional(),
3408
- name: z.string().optional(),
3409
- description: z.string().optional(),
3410
- company_id: z.string().optional(),
3411
- modified_by_user_id: z.string().nullish(),
3412
- tags: z.array(z.string()).nullish(),
3413
- title_keys: z.array(z.string()).nullish(),
3414
- editable: z.boolean().optional(),
3415
- always_visible: z.boolean().optional(),
3416
- sensitive_form: z.boolean().optional(),
3417
- allow_carry_forward: z.boolean().optional(),
3418
- current_revision: z.int().optional(),
3419
- json: z.record(z.string(), z.unknown()).optional(),
3420
- created_at: z.iso.datetime().optional()
3492
+ id: z.string(),
3493
+ name: z.string(),
3494
+ description: z.string(),
3495
+ company_id: z.string(),
3496
+ modified_by_user_id: z.string().nullable(),
3497
+ tags: z.array(z.string()).nullable(),
3498
+ title_keys: z.array(z.string()).nullable(),
3499
+ editable: z.boolean(),
3500
+ always_visible: z.boolean(),
3501
+ sensitive_form: z.boolean(),
3502
+ allow_carry_forward: z.boolean(),
3503
+ current_revision: z.int().nullable(),
3504
+ json: z.record(z.string(), z.unknown()),
3505
+ created_at: z.iso.datetime()
3421
3506
  }))
3422
3507
  });
3423
3508
  /**
3424
3509
  * A page of form submissions — the lighter list representation. A submission is a user's completed form; submissions are created in the app, so this API is read-only.
3425
3510
  */
3426
3511
  export const zFormSubmissionIndexObject = z.object({
3427
- meta: zMeta.optional(),
3428
- links: zLinks.optional(),
3512
+ meta: zMeta,
3513
+ links: zLinks,
3429
3514
  data: z.array(z.object({
3430
- id: z.string().optional(),
3431
- user_id: z.string().optional(),
3432
- updated_by_user_id: z.string().optional(),
3433
- created_at: z.iso.datetime().optional(),
3434
- updated_at: z.iso.datetime().optional()
3435
- })).optional()
3515
+ id: z.string(),
3516
+ user_id: z.string(),
3517
+ updated_by_user_id: z.string(),
3518
+ created_at: z.iso.datetime(),
3519
+ updated_at: z.iso.datetime()
3520
+ }))
3436
3521
  });
3437
3522
  /**
3438
3523
  * A page of change events for form submissions, written at archival time; archiving hard-deletes the live row, so this feed is the deletion signal the main index cannot give. Visibility derives from metadata retained at archival time — a subset of the live submission index, never a superset.
@@ -3450,17 +3535,17 @@ export const zFormSubmissionDeltasResponse = z.object({
3450
3535
  * A page of change events (create, update, destroy) for time entries, drawn from version history; scoped by the surviving parent time card, so a destroyed entry's history stays visible.
3451
3536
  */
3452
3537
  export const zTimeEntryDeltasResponse = z.object({
3453
- meta: zDeltaMeta.optional(),
3454
- links: zLinks.optional(),
3538
+ meta: zDeltaMeta,
3539
+ links: zLinks,
3455
3540
  data: z.array(z.object({
3456
3541
  event: z.enum([
3457
3542
  'create',
3458
3543
  'update',
3459
3544
  'destroy'
3460
- ]).optional(),
3461
- id: z.string().optional(),
3462
- timestamp: z.iso.datetime().optional()
3463
- })).optional()
3545
+ ]),
3546
+ id: z.string(),
3547
+ timestamp: z.iso.datetime()
3548
+ }))
3464
3549
  });
3465
3550
  /**
3466
3551
  * A page of pay periods. A pay period is a bounded pay window generated automatically by its pay schedule (PayPeriodConfig), so this API is read-only.
@@ -3469,15 +3554,15 @@ export const zPayPeriodsResponseObject = z.object({
3469
3554
  meta: zMeta,
3470
3555
  links: zLinks,
3471
3556
  data: z.array(z.object({
3472
- id: z.string().optional(),
3473
- timekeeping_pay_period_config_id: z.string().optional(),
3474
- pay_date: z.iso.date().optional(),
3475
- start_time: z.iso.datetime().optional(),
3476
- end_time: z.iso.datetime().optional(),
3477
- pay_run_deadline: z.iso.datetime().optional(),
3478
- approvals_deadline: z.iso.datetime().optional(),
3479
- created_at: z.iso.datetime().optional(),
3480
- updated_at: z.iso.datetime().optional()
3557
+ id: z.string(),
3558
+ timekeeping_pay_period_config_id: z.string(),
3559
+ pay_date: z.iso.date(),
3560
+ start_time: z.iso.datetime(),
3561
+ end_time: z.iso.datetime(),
3562
+ pay_run_deadline: z.iso.datetime(),
3563
+ approvals_deadline: z.iso.datetime(),
3564
+ created_at: z.iso.datetime(),
3565
+ updated_at: z.iso.datetime()
3481
3566
  }))
3482
3567
  });
3483
3568
  /**
@@ -3540,9 +3625,9 @@ export const zCertificationsResponseObject = z.object({
3540
3625
  * A page of certifications held by your company's workers.
3541
3626
  */
3542
3627
  export const zUserCertificationsResponseObj = z.object({
3543
- meta: zMeta.optional(),
3544
- links: zLinks.optional(),
3545
- data: z.array(zUserCertificationResponseObject).optional()
3628
+ meta: zMeta,
3629
+ links: zLinks,
3630
+ data: z.array(zUserCertificationResponseObject)
3546
3631
  });
3547
3632
  /**
3548
3633
  * A timestamp range filter on a date/time field, supplied as `filter[field][gte]` and/or `filter[field][lte]`; omit or null a bound for an open-ended range.
@@ -3556,7 +3641,6 @@ export const zDateTimeFilter = z.object({
3556
3641
  */
3557
3642
  export const zWageDeterminationResponseObject = z.object({
3558
3643
  id: z.string(),
3559
- uid: z.string(),
3560
3644
  general_decision_number: z.string(),
3561
3645
  modification_number: z.int(),
3562
3646
  superseded_by_wage_determination_id: z.string().nullable(),
@@ -3604,7 +3688,6 @@ export const zLaborRatesResponseObject = z.object({
3604
3688
  */
3605
3689
  export const zFederalJobWageDeterminationResponseObject = z.object({
3606
3690
  id: z.string(),
3607
- uid: z.string(),
3608
3691
  job_id: z.string(),
3609
3692
  pwa_trade_id: z.string(),
3610
3693
  type: z.enum(['Pwa::JobWageDeterminations::Federal']),
@@ -3617,7 +3700,28 @@ export const zFederalJobWageDeterminationResponseObject = z.object({
3617
3700
  'heavy',
3618
3701
  'highway',
3619
3702
  'residential'
3620
- ]),
3703
+ ]).nullable(),
3704
+ general_wage_determination: z.string().nullable(),
3705
+ valid_from: z.iso.datetime().nullable(),
3706
+ valid_to: z.iso.datetime().nullable(),
3707
+ created_at: z.iso.datetime(),
3708
+ updated_at: z.iso.datetime()
3709
+ });
3710
+ export const zFederalJobWageDeterminationHistoryCorrectionObject = z.object({
3711
+ job_wage_determination_id: z.string(),
3712
+ job_id: z.string(),
3713
+ pwa_trade_id: z.string(),
3714
+ type: z.enum(['Pwa::JobWageDeterminations::Federal']),
3715
+ labor_classification: z.string(),
3716
+ hourly_rate_cents: z.string(),
3717
+ fringe_rate_cents: z.string(),
3718
+ class_code: z.string().nullable(),
3719
+ construction_category: z.enum([
3720
+ 'building',
3721
+ 'heavy',
3722
+ 'highway',
3723
+ 'residential'
3724
+ ]).nullable(),
3621
3725
  general_wage_determination: z.string().nullable(),
3622
3726
  valid_from: z.iso.datetime().nullable(),
3623
3727
  valid_to: z.iso.datetime().nullable(),
@@ -3626,8 +3730,37 @@ export const zFederalJobWageDeterminationResponseObject = z.object({
3626
3730
  });
3627
3731
  /**
3628
3732
  * State-specific rate fields for a Regional determination, as decimal-string money in cents
3629
- * (e.g. "538.0"). Which keys appear is set by the job's region, not the request, so this object is
3630
- * always a subset of the keys belownever a fixed shape:
3733
+ * (e.g. "538.0"). These nine properties are the whole write vocabulary, but which of them a
3734
+ * request may send is set by the job's region, not the request sending a key the job's
3735
+ * region does not allow returns a 422:
3736
+ *
3737
+ * - Categorized-fringe regions (currently IL) accept `combined_health_fringe_rate_cents`,
3738
+ * `combined_savings_fringe_rate_cents`, `combined_holiday_pto_fringe_rate_cents`,
3739
+ * `training_fringe_rate_cents`, and `other_fringe_rate_cents`.
3740
+ * - Overtime-adder regions (currently IL and NY) accept `one_five_x_adder_rate_cents`,
3741
+ * `two_x_adder_rate_cents`, `one_five_x_fringe_adder_rate_cents`, and
3742
+ * `two_x_fringe_adder_rate_cents`.
3743
+ *
3744
+ * In a categorized-fringe region the five fringe keys are required, not merely accepted —
3745
+ * omitting any of them returns a 422. Categorized-fringe values are non-null when present;
3746
+ * overtime-adder values may be null.
3747
+ *
3748
+ */
3749
+ export const zRegionalWageDeterminationFields = z.object({
3750
+ combined_health_fringe_rate_cents: z.string().optional(),
3751
+ combined_savings_fringe_rate_cents: z.string().optional(),
3752
+ combined_holiday_pto_fringe_rate_cents: z.string().optional(),
3753
+ training_fringe_rate_cents: z.string().optional(),
3754
+ other_fringe_rate_cents: z.string().optional(),
3755
+ one_five_x_adder_rate_cents: z.string().nullish(),
3756
+ two_x_adder_rate_cents: z.string().nullish(),
3757
+ one_five_x_fringe_adder_rate_cents: z.string().nullish(),
3758
+ two_x_fringe_adder_rate_cents: z.string().nullish()
3759
+ });
3760
+ /**
3761
+ * State-specific rate fields recorded on a Regional determination, as decimal-string money in
3762
+ * cents (e.g. "538.0"). Which keys appear is set by the job's region, so this object is always
3763
+ * a region-determined subset of the nine keys the write side accepts — never a fixed shape:
3631
3764
  *
3632
3765
  * - Categorized-fringe regions (currently IL) carry `combined_health_fringe_rate_cents`,
3633
3766
  * `combined_savings_fringe_rate_cents`, `combined_holiday_pto_fringe_rate_cents`,
@@ -3637,18 +3770,15 @@ export const zFederalJobWageDeterminationResponseObject = z.object({
3637
3770
  * `two_x_fringe_adder_rate_cents`.
3638
3771
  * - A region with neither returns an empty object.
3639
3772
  *
3640
- * On write the same applicability governs the request sending a key the job's region does not
3641
- * allow returns a 422. Categorized-fringe values are non-null when present; overtime-adder values
3642
- * may be null.
3773
+ * Categorized-fringe values are non-null when present; overtime-adder values may be null.
3643
3774
  *
3644
3775
  */
3645
- export const zRegionalWageDeterminationFields = z.record(z.string(), z.string().nullable());
3776
+ export const zRegionalWageDeterminationFieldsResponse = z.record(z.string(), z.string().nullable());
3646
3777
  /**
3647
3778
  * A Regional (state prevailing-wage) wage determination on a job.
3648
3779
  */
3649
3780
  export const zRegionalJobWageDeterminationResponseObject = z.object({
3650
3781
  id: z.string(),
3651
- uid: z.string(),
3652
3782
  job_id: z.string(),
3653
3783
  pwa_trade_id: z.string(),
3654
3784
  type: z.enum(['Pwa::JobWageDeterminations::Regional']),
@@ -3656,7 +3786,7 @@ export const zRegionalJobWageDeterminationResponseObject = z.object({
3656
3786
  hourly_rate_cents: z.string(),
3657
3787
  fringe_rate_cents: z.string(),
3658
3788
  general_wage_determination: z.string().nullable(),
3659
- regional_fields: zRegionalWageDeterminationFields,
3789
+ regional_fields: zRegionalWageDeterminationFieldsResponse,
3660
3790
  valid_from: z.iso.datetime().nullable(),
3661
3791
  valid_to: z.iso.datetime().nullable(),
3662
3792
  created_at: z.iso.datetime(),
@@ -3669,9 +3799,27 @@ export const zJobWageDeterminationResponseObject = z.discriminatedUnion('type',
3669
3799
  zFederalJobWageDeterminationResponseObject.extend({ type: z.literal('Pwa::JobWageDeterminations::Federal') }),
3670
3800
  zRegionalJobWageDeterminationResponseObject.extend({ type: z.literal('Pwa::JobWageDeterminations::Regional') })
3671
3801
  ]);
3802
+ export const zRegionalJobWageDeterminationHistoryCorrectionObject = z.object({
3803
+ job_wage_determination_id: z.string(),
3804
+ job_id: z.string(),
3805
+ pwa_trade_id: z.string(),
3806
+ type: z.enum(['Pwa::JobWageDeterminations::Regional']),
3807
+ labor_classification: z.string(),
3808
+ hourly_rate_cents: z.string(),
3809
+ fringe_rate_cents: z.string(),
3810
+ general_wage_determination: z.string().nullable(),
3811
+ regional_fields: zRegionalWageDeterminationFieldsResponse,
3812
+ valid_from: z.iso.datetime().nullable(),
3813
+ valid_to: z.iso.datetime().nullable(),
3814
+ created_at: z.iso.datetime(),
3815
+ updated_at: z.iso.datetime()
3816
+ });
3817
+ export const zJobWageDeterminationHistoryCorrectionObject = z.discriminatedUnion('type', [
3818
+ zFederalJobWageDeterminationHistoryCorrectionObject.extend({ type: z.literal('Pwa::JobWageDeterminations::Federal') }),
3819
+ zRegionalJobWageDeterminationHistoryCorrectionObject.extend({ type: z.literal('Pwa::JobWageDeterminations::Regional') })
3820
+ ]);
3672
3821
  export const zFederalJobWageDeterminationHistoryVersionObject = z.object({
3673
- id: z.string(),
3674
- uid: z.string(),
3822
+ job_wage_determination_id: z.string(),
3675
3823
  job_id: z.string(),
3676
3824
  pwa_trade_id: z.string(),
3677
3825
  type: z.enum(['Pwa::JobWageDeterminations::Federal']),
@@ -3684,7 +3832,7 @@ export const zFederalJobWageDeterminationHistoryVersionObject = z.object({
3684
3832
  'heavy',
3685
3833
  'highway',
3686
3834
  'residential'
3687
- ]),
3835
+ ]).nullable(),
3688
3836
  general_wage_determination: z.string().nullable(),
3689
3837
  valid_from: z.iso.datetime().nullable(),
3690
3838
  valid_to: z.iso.datetime().nullable(),
@@ -3695,11 +3843,10 @@ export const zFederalJobWageDeterminationHistoryVersionObject = z.object({
3695
3843
  'current',
3696
3844
  'historical'
3697
3845
  ]),
3698
- corrections: z.array(zJobWageDeterminationResponseObject)
3846
+ corrections: z.array(zJobWageDeterminationHistoryCorrectionObject)
3699
3847
  });
3700
3848
  export const zRegionalJobWageDeterminationHistoryVersionObject = z.object({
3701
- id: z.string(),
3702
- uid: z.string(),
3849
+ job_wage_determination_id: z.string(),
3703
3850
  job_id: z.string(),
3704
3851
  pwa_trade_id: z.string(),
3705
3852
  type: z.enum(['Pwa::JobWageDeterminations::Regional']),
@@ -3707,7 +3854,7 @@ export const zRegionalJobWageDeterminationHistoryVersionObject = z.object({
3707
3854
  hourly_rate_cents: z.string(),
3708
3855
  fringe_rate_cents: z.string(),
3709
3856
  general_wage_determination: z.string().nullable(),
3710
- regional_fields: zRegionalWageDeterminationFields,
3857
+ regional_fields: zRegionalWageDeterminationFieldsResponse,
3711
3858
  valid_from: z.iso.datetime().nullable(),
3712
3859
  valid_to: z.iso.datetime().nullable(),
3713
3860
  created_at: z.iso.datetime(),
@@ -3717,7 +3864,7 @@ export const zRegionalJobWageDeterminationHistoryVersionObject = z.object({
3717
3864
  'current',
3718
3865
  'historical'
3719
3866
  ]),
3720
- corrections: z.array(zJobWageDeterminationResponseObject)
3867
+ corrections: z.array(zJobWageDeterminationHistoryCorrectionObject)
3721
3868
  });
3722
3869
  export const zJobWageDeterminationHistoryVersionObject = z.discriminatedUnion('type', [
3723
3870
  zFederalJobWageDeterminationHistoryVersionObject.extend({ type: z.literal('Pwa::JobWageDeterminations::Federal') }),
@@ -3738,7 +3885,7 @@ export const zFederalJobWageDeterminationParameters = z.object({
3738
3885
  'heavy',
3739
3886
  'highway',
3740
3887
  'residential'
3741
- ]).optional(),
3888
+ ]).nullish(),
3742
3889
  general_wage_determination: z.string().nullish()
3743
3890
  });
3744
3891
  /**
@@ -3827,7 +3974,17 @@ export const zRateRuleCondition = z.discriminatedUnion('type', [
3827
3974
  */
3828
3975
  export const zRateRuleResponseObject = z.object({
3829
3976
  id: z.string(),
3830
- uid: z.string(),
3977
+ job_wage_determination_id: z.string(),
3978
+ pay_rates_rule_package_id: z.string(),
3979
+ effect: zRateRuleEffect,
3980
+ conditions: z.array(zRateRuleCondition),
3981
+ valid_from: z.iso.datetime().nullable(),
3982
+ valid_to: z.iso.datetime().nullable(),
3983
+ created_at: z.iso.datetime(),
3984
+ updated_at: z.iso.datetime()
3985
+ });
3986
+ export const zRateRuleHistoryCorrectionObject = z.object({
3987
+ pay_rates_rule_id: z.string(),
3831
3988
  job_wage_determination_id: z.string(),
3832
3989
  pay_rates_rule_package_id: z.string(),
3833
3990
  effect: zRateRuleEffect,
@@ -3838,8 +3995,7 @@ export const zRateRuleResponseObject = z.object({
3838
3995
  updated_at: z.iso.datetime()
3839
3996
  });
3840
3997
  export const zRateRuleHistoryVersionObject = z.object({
3841
- id: z.string(),
3842
- uid: z.string(),
3998
+ pay_rates_rule_id: z.string(),
3843
3999
  job_wage_determination_id: z.string(),
3844
4000
  pay_rates_rule_package_id: z.string(),
3845
4001
  effect: zRateRuleEffect,
@@ -3853,7 +4009,7 @@ export const zRateRuleHistoryVersionObject = z.object({
3853
4009
  'current',
3854
4010
  'historical'
3855
4011
  ]),
3856
- corrections: z.array(zRateRuleResponseObject)
4012
+ corrections: z.array(zRateRuleHistoryCorrectionObject)
3857
4013
  });
3858
4014
  /**
3859
4015
  * Create a rate rule on a job wage determination. `effect` is required. `conditions` is optional — an omitted or empty list makes the rule always apply. `effective_date` (YYYY-MM-DD) sets when the rule takes effect; it defaults to today and cannot predate the earliest applicable wage determination.
@@ -3933,7 +4089,7 @@ export const zAssetsFormAssignmentTriggerResponseObject = z.object({
3933
4089
  'BIWEEKLY',
3934
4090
  'MONTHLY',
3935
4091
  'QUARTERLY'
3936
- ]),
4092
+ ]).nullable(),
3937
4093
  first_due_by: z.enum([
3938
4094
  'day_of_event',
3939
4095
  'day_of_week',
@@ -3975,7 +4131,7 @@ export const zAssetsFormAssignmentTriggerParameters = z.object({
3975
4131
  'BIWEEKLY',
3976
4132
  'MONTHLY',
3977
4133
  'QUARTERLY'
3978
- ]).optional(),
4134
+ ]).nullish(),
3979
4135
  day_of_week_due: z.int().nullish(),
3980
4136
  day_of_month_due: z.int().nullish(),
3981
4137
  assigned_user_ids: z.array(z.string()).optional(),
@@ -3988,7 +4144,7 @@ export const zAssetsAttachmentResponseObject = z.object({
3988
4144
  id: z.string(),
3989
4145
  file: z.object({
3990
4146
  filename: z.string(),
3991
- content_type: z.string().nullish(),
4147
+ content_type: z.string().nullable(),
3992
4148
  byte_size: z.int(),
3993
4149
  url: z.string()
3994
4150
  }).nullable(),
@@ -4035,7 +4191,7 @@ export const zAssetsItemResponseObject = z.object({
4035
4191
  'available',
4036
4192
  'assigned',
4037
4193
  'retired'
4038
- ]),
4194
+ ]).nullable(),
4039
4195
  purchase_date: z.iso.datetime().nullable(),
4040
4196
  purchase_price_cents: z.string().nullable(),
4041
4197
  currency: z.string().nullable(),
@@ -4150,7 +4306,7 @@ export const zAssetsDocumentResponseObject = z.object({
4150
4306
  created_by_user_id: z.string(),
4151
4307
  file: z.object({
4152
4308
  filename: z.string(),
4153
- content_type: z.string().nullish(),
4309
+ content_type: z.string().nullable(),
4154
4310
  byte_size: z.int(),
4155
4311
  url: z.string()
4156
4312
  }).nullable(),
@@ -4188,7 +4344,7 @@ export const zAssetsItemFormAssignmentResponseObject = z.object({
4188
4344
  form_definition_id: z.string(),
4189
4345
  name: z.string(),
4190
4346
  description: z.string().nullable(),
4191
- tz_name: z.string().nullable(),
4347
+ tz_name: z.string(),
4192
4348
  time_due: z.iso.datetime().nullable(),
4193
4349
  frequency: z.enum([
4194
4350
  'DAILY',
@@ -4198,12 +4354,12 @@ export const zAssetsItemFormAssignmentResponseObject = z.object({
4198
4354
  'BIWEEKLY',
4199
4355
  'MONTHLY',
4200
4356
  'QUARTERLY'
4201
- ]),
4357
+ ]).nullable(),
4202
4358
  recurrence_end_time: z.iso.datetime().nullable(),
4203
4359
  task_assignee_user_ids: z.array(z.string()),
4204
4360
  reminders: z.array(z.object({
4205
- offset: z.string().optional(),
4206
- remind_at: z.iso.datetime().nullish()
4361
+ offset: z.string(),
4362
+ remind_at: z.iso.datetime()
4207
4363
  }))
4208
4364
  });
4209
4365
  /**
@@ -4227,7 +4383,7 @@ export const zAssetsItemFormAssignmentParameters = z.object({
4227
4383
  'BIWEEKLY',
4228
4384
  'MONTHLY',
4229
4385
  'QUARTERLY'
4230
- ]).optional(),
4386
+ ]).nullish(),
4231
4387
  recurrence_end_time: z.iso.datetime().nullish(),
4232
4388
  task_assignee_user_ids: z.array(z.string()).optional(),
4233
4389
  reminders_attributes: z.array(z.object({
@@ -6047,8 +6203,8 @@ export const zCreateJobTradePath = z.object({
6047
6203
  export const zCreateJobTradeResponse = zPwaTradeResponseObject;
6048
6204
  export const zListRateRuleHistoryPath = z.object({
6049
6205
  job_id: z.string(),
6050
- wage_determination_uid: z.string(),
6051
- rate_rule_uid: z.string()
6206
+ wage_determination_id: z.string(),
6207
+ rate_rule_id: z.string()
6052
6208
  });
6053
6209
  export const zListRateRuleHistoryQuery = z.object({
6054
6210
  'as_of[valid]': z.string().optional()
@@ -6063,7 +6219,7 @@ export const zListRateRuleHistoryResponse = z.object({
6063
6219
  });
6064
6220
  export const zListRateRulesPath = z.object({
6065
6221
  job_id: z.string(),
6066
- wage_determination_uid: z.string()
6222
+ wage_determination_id: z.string()
6067
6223
  });
6068
6224
  export const zListRateRulesQuery = z.object({
6069
6225
  'as_of[valid]': z.iso.datetime().optional(),
@@ -6083,7 +6239,7 @@ export const zListRateRulesResponse = z.object({
6083
6239
  export const zCreateRateRuleBody = zRateRuleParameters;
6084
6240
  export const zCreateRateRulePath = z.object({
6085
6241
  job_id: z.string(),
6086
- wage_determination_uid: z.string()
6242
+ wage_determination_id: z.string()
6087
6243
  });
6088
6244
  /**
6089
6245
  * Created
@@ -6091,8 +6247,8 @@ export const zCreateRateRulePath = z.object({
6091
6247
  export const zCreateRateRuleResponse = zRateRuleResponseObject;
6092
6248
  export const zGetRateRulePath = z.object({
6093
6249
  job_id: z.string(),
6094
- wage_determination_uid: z.string(),
6095
- uid: z.string()
6250
+ wage_determination_id: z.string(),
6251
+ id: z.string()
6096
6252
  });
6097
6253
  export const zGetRateRuleQuery = z.object({
6098
6254
  'as_of[valid]': z.iso.datetime().optional()
@@ -6103,7 +6259,7 @@ export const zGetRateRuleQuery = z.object({
6103
6259
  export const zGetRateRuleResponse = zRateRuleResponseObject;
6104
6260
  export const zListJobWageDeterminationHistoryPath = z.object({
6105
6261
  job_id: z.string(),
6106
- wage_determination_uid: z.string()
6262
+ wage_determination_id: z.string()
6107
6263
  });
6108
6264
  export const zListJobWageDeterminationHistoryQuery = z.object({
6109
6265
  'as_of[valid]': z.string().optional()
@@ -6147,7 +6303,7 @@ export const zDeleteWageDeterminationHeaders = z.object({
6147
6303
  });
6148
6304
  export const zDeleteWageDeterminationPath = z.object({
6149
6305
  job_id: z.string(),
6150
- uid: z.string()
6306
+ id: z.string()
6151
6307
  });
6152
6308
  /**
6153
6309
  * Success
@@ -6155,7 +6311,7 @@ export const zDeleteWageDeterminationPath = z.object({
6155
6311
  export const zDeleteWageDeterminationResponse = zJobWageDeterminationResponseObject;
6156
6312
  export const zGetJobWageDeterminationPath = z.object({
6157
6313
  job_id: z.string(),
6158
- uid: z.string()
6314
+ id: z.string()
6159
6315
  });
6160
6316
  export const zGetJobWageDeterminationQuery = z.object({
6161
6317
  'as_of[valid]': z.iso.datetime().optional()