@dsptch-work/api-client 0.36.0 → 0.37.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.
@@ -288,12 +288,6 @@ export const zProblem = z.object({
288
288
  *
289
289
  * An attachment signed id names no upload this endpoint can read. A signed id is issued for one `resource` and verifies only there, so an id for a different resource is indistinguishable from one that is malformed, expired, or tampered with, and all of them answer alike. The message names the resource the upload needed; upload the file again to the direct-uploads endpoint naming it, and pass the signed id that call returns.
290
290
  *
291
- * ### non_numeric_cents
292
- *
293
- * **Non-Numeric Money Value**
294
- *
295
- * A money parameter is not a numeric value in cents. Send money as a numeric cents value.
296
- *
297
291
  * ### nothing_to_cancel
298
292
  *
299
293
  * **Nothing To Cancel**
@@ -418,7 +412,6 @@ export const zProblemTypeCatalog = z.enum([
418
412
  'invalid_iso8601_duration',
419
413
  'invalid_placement_move',
420
414
  'invalid_signed_id',
421
- 'non_numeric_cents',
422
415
  'nothing_to_cancel',
423
416
  'pagination_failed',
424
417
  'subtype_foreign_keys',
@@ -457,6 +450,7 @@ export const zDirectUploadParameters = z.object({
457
450
  'internal.company_todos',
458
451
  'internal.job_todos',
459
452
  'internal.project_todos',
453
+ 'jobs.documents',
460
454
  'pay_periods.imports.aggregate_times',
461
455
  'pay_periods.imports.dsptch_cprs',
462
456
  'pay_periods.imports.time_entries',
@@ -605,7 +599,7 @@ export const zCompetencyCriterionResponseObject = z.object({
605
599
  number: z.string().nullable(),
606
600
  body: z.string().nullable(),
607
601
  evidence_note: z.string().nullable(),
608
- assessment_method: z.enum([
602
+ assessment_methods: z.array(z.enum([
609
603
  'direct_observation',
610
604
  'simulation',
611
605
  'oral_questioning',
@@ -614,7 +608,7 @@ export const zCompetencyCriterionResponseObject = z.object({
614
608
  'recognized_prior_learning',
615
609
  'witness_testimony',
616
610
  'other'
617
- ]).nullable(),
611
+ ])),
618
612
  created_at: z.iso.datetime(),
619
613
  updated_at: z.iso.datetime()
620
614
  });
@@ -625,7 +619,7 @@ export const zCompetencyCriterionParameters = z.object({
625
619
  number: z.string().nullish(),
626
620
  body: z.string().nullish(),
627
621
  evidence_note: z.string().nullish(),
628
- assessment_method: z.enum([
622
+ assessment_methods: z.array(z.enum([
629
623
  'direct_observation',
630
624
  'simulation',
631
625
  'oral_questioning',
@@ -634,7 +628,7 @@ export const zCompetencyCriterionParameters = z.object({
634
628
  'recognized_prior_learning',
635
629
  'witness_testimony',
636
630
  'other'
637
- ]).nullish()
631
+ ])).optional()
638
632
  });
639
633
  /**
640
634
  * Swap a draft catalog row with its neighbor. The row cannot move past either end of the list.
@@ -721,12 +715,12 @@ export const zCompetencyAssessmentResponseObject = z.object({
721
715
  updated_at: z.iso.datetime()
722
716
  });
723
717
  /**
724
- * One task line on an assessment. decision and qa_feedback are omitted, not null, when the caller is the candidate and the package is not yet decided.
718
+ * One criterion line on an assessment. decision and qa_feedback are omitted, not null, when the caller is the candidate and the package is not yet decided.
725
719
  */
726
- export const zCompetencyAssessmentKeyActivityResponseObject = z.object({
720
+ export const zCompetencyAssessmentCriterionResponseObject = z.object({
727
721
  id: z.string(),
728
722
  competencies_assessment_id: z.string(),
729
- competencies_key_activity_id: z.string(),
723
+ competencies_criterion_id: z.string(),
730
724
  assessment_methods: z.array(z.enum([
731
725
  'direct_observation',
732
726
  'simulation',
@@ -757,7 +751,7 @@ export const zCompetencyAssessmentKeyActivityResponseObject = z.object({
757
751
  */
758
752
  export const zCompetencyEvidenceItemResponseObject = z.object({
759
753
  id: z.string(),
760
- competencies_assessment_key_activity_id: z.string(),
754
+ competencies_assessment_criterion_id: z.string(),
761
755
  kind: z.enum([
762
756
  'upload',
763
757
  'form_submission',
@@ -1040,7 +1034,7 @@ export const zApprenticeshipProgramEmployerUpdateParameters = z.object({
1040
1034
  require_timecard_allocation: z.boolean().optional()
1041
1035
  });
1042
1036
  /**
1043
- * Create a period on a wage schedule; the wage schedule is taken from the URL path. wage_cents and fringe_cents are sent as integer cents. Omitting period_number, wage_percent, or wage_cents answers 400. A wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those leaves it unset, but a period with none of min_minutes, max_minutes, or num_competencies answers 422.
1037
+ * Create a period on a wage schedule; the wage schedule is taken from the URL path. wage_percent and fringe_percent are sent as decimal strings (e.g. "62.5"), and wage_cents and fringe_cents as cents in a decimal string (e.g. "2800" or "2800.0"). Omitting period_number, wage_percent, or wage_cents answers 400. A wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those leaves it unset, but a period with none of min_minutes, max_minutes, or num_competencies answers 422.
1044
1038
  */
1045
1039
  export const zApprenticeshipWageSchedulePeriodParameters = z.object({
1046
1040
  period_number: z.int().gte(0),
@@ -1048,13 +1042,13 @@ export const zApprenticeshipWageSchedulePeriodParameters = z.object({
1048
1042
  max_minutes: z.int().gte(0).nullish(),
1049
1043
  num_competencies: z.int().gte(0).nullish(),
1050
1044
  description: z.string().nullish(),
1051
- wage_percent: z.number().gte(0),
1052
- wage_cents: z.int().gte(0),
1053
- fringe_percent: z.number().gte(0).nullish(),
1054
- fringe_cents: z.int().gte(0).nullish()
1045
+ wage_percent: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
1046
+ wage_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
1047
+ fringe_percent: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1048
+ fringe_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish()
1055
1049
  });
1056
1050
  /**
1057
- * Update a period on a wage schedule. Send only the fields to change; the wage schedule is taken from the URL path, and wage_cents and fringe_cents are sent as integer cents. A wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those clears it, but a period left with none of min_minutes, max_minutes, or num_competencies answers 422.
1051
+ * Update a period on a wage schedule. Send only the fields to change; the wage schedule is taken from the URL path, wage_percent and fringe_percent are sent as decimal strings (e.g. "62.5"), and wage_cents and fringe_cents as cents in a decimal string (e.g. "2800" or "2800.0"). A wrong JSON type, a negative number, or a null for any field but min_minutes, max_minutes, num_competencies, description, fringe_percent, and fringe_cents answers 422 at that field; a null in one of those clears it, but a period left with none of min_minutes, max_minutes, or num_competencies answers 422.
1058
1052
  */
1059
1053
  export const zApprenticeshipWageSchedulePeriodUpdateParameters = z.object({
1060
1054
  period_number: z.int().gte(0).optional(),
@@ -1062,13 +1056,13 @@ export const zApprenticeshipWageSchedulePeriodUpdateParameters = z.object({
1062
1056
  max_minutes: z.int().gte(0).nullish(),
1063
1057
  num_competencies: z.int().gte(0).nullish(),
1064
1058
  description: z.string().nullish(),
1065
- wage_percent: z.number().gte(0).optional(),
1066
- wage_cents: z.int().gte(0).optional(),
1067
- fringe_percent: z.number().gte(0).nullish(),
1068
- fringe_cents: z.int().gte(0).nullish()
1059
+ wage_percent: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1060
+ wage_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1061
+ fringe_percent: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1062
+ fringe_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish()
1069
1063
  });
1070
1064
  /**
1071
- * Create a wage schedule for an occupation; the occupation is taken from the URL path. Money is sent as integer cents; periods may be created inline via periods_attributes. Omitting name, wage_unit, journeyworker_wage_unit, or period_unit answers 400. A blank name, a unit outside its listed values, a wrong JSON type, or a null for any field but description and journeyworker_fringe_cents answers 422; a null in either of those leaves the field unset.
1065
+ * Create a wage schedule for an occupation; the occupation is taken from the URL path. Money is sent as cents in a decimal string (e.g. "2800" or "2800.0"); periods may be created inline via periods_attributes. Omitting name, wage_unit, journeyworker_wage_unit, or period_unit answers 400. A blank name, a unit outside its listed values, a wrong JSON type, or a null for any field but description and journeyworker_fringe_cents answers 422; a null in either of those leaves the field unset.
1072
1066
  */
1073
1067
  export const zApprenticeshipWageScheduleParameters = z.object({
1074
1068
  name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
@@ -1097,9 +1091,9 @@ export const zApprenticeshipWageScheduleParameters = z.object({
1097
1091
  'semi_annual',
1098
1092
  'year'
1099
1093
  ]),
1100
- journeyworker_wage_cents: z.int().optional(),
1101
- journeyworker_fringe_cents: z.int().nullish(),
1102
- end_wage_cents: z.int().optional(),
1094
+ journeyworker_wage_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1095
+ journeyworker_fringe_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1096
+ end_wage_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1103
1097
  periods_attributes: z.array(z.object({
1104
1098
  id: z.string().optional(),
1105
1099
  period_number: z.int().gte(0).optional(),
@@ -1107,15 +1101,15 @@ export const zApprenticeshipWageScheduleParameters = z.object({
1107
1101
  max_minutes: z.int().gte(0).nullish(),
1108
1102
  num_competencies: z.int().gte(0).nullish(),
1109
1103
  description: z.string().nullish(),
1110
- wage_percent: z.number().gte(0).optional(),
1111
- wage_cents: z.int().gte(0).optional(),
1112
- fringe_percent: z.number().gte(0).nullish(),
1113
- fringe_cents: z.int().gte(0).nullish(),
1104
+ wage_percent: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1105
+ wage_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1106
+ fringe_percent: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1107
+ fringe_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1114
1108
  _destroy: z.boolean().optional()
1115
1109
  })).optional()
1116
1110
  });
1117
1111
  /**
1118
- * Update a wage schedule for an occupation. Send only the fields to change; money is sent as integer cents and periods may be created, updated, or removed inline via periods_attributes. A blank name, a unit outside its listed values, a wrong JSON type, or a null for any field but description and journeyworker_fringe_cents answers 422; a null in either of those clears the field.
1112
+ * Update a wage schedule for an occupation. Send only the fields to change; money is sent as cents in a decimal string (e.g. "2800" or "2800.0") and periods may be created, updated, or removed inline via periods_attributes. A blank name, a unit outside its listed values, a wrong JSON type, or a null for any field but description and journeyworker_fringe_cents answers 422; a null in either of those clears the field.
1119
1113
  */
1120
1114
  export const zApprenticeshipWageScheduleUpdateParameters = z.object({
1121
1115
  name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
@@ -1144,9 +1138,9 @@ export const zApprenticeshipWageScheduleUpdateParameters = z.object({
1144
1138
  'semi_annual',
1145
1139
  'year'
1146
1140
  ]).optional(),
1147
- journeyworker_wage_cents: z.int().optional(),
1148
- journeyworker_fringe_cents: z.int().nullish(),
1149
- end_wage_cents: z.int().optional(),
1141
+ journeyworker_wage_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1142
+ journeyworker_fringe_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1143
+ end_wage_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1150
1144
  periods_attributes: z.array(z.object({
1151
1145
  id: z.string().optional(),
1152
1146
  period_number: z.int().gte(0).optional(),
@@ -1154,10 +1148,10 @@ export const zApprenticeshipWageScheduleUpdateParameters = z.object({
1154
1148
  max_minutes: z.int().gte(0).nullish(),
1155
1149
  num_competencies: z.int().gte(0).nullish(),
1156
1150
  description: z.string().nullish(),
1157
- wage_percent: z.number().gte(0).optional(),
1158
- wage_cents: z.int().gte(0).optional(),
1159
- fringe_percent: z.number().gte(0).nullish(),
1160
- fringe_cents: z.int().gte(0).nullish(),
1151
+ wage_percent: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1152
+ wage_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1153
+ fringe_percent: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1154
+ fringe_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1161
1155
  _destroy: z.boolean().optional()
1162
1156
  })).optional()
1163
1157
  });
@@ -1238,16 +1232,16 @@ export const zPeopleEmploymentCreateParameters = z.object({
1238
1232
  payroll_id: z.string().nullish(),
1239
1233
  enrolled_in_t_and_a: z.boolean().optional(),
1240
1234
  compensation_type: z.enum(['hourly', 'salary']).optional(),
1241
- hourly_rate_cents: z.string().nullish(),
1235
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1242
1236
  overtime_eligible: z.boolean().nullish(),
1243
1237
  overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
1244
1238
  worked_annual_minutes: z.int().nullish(),
1245
1239
  pto_annual_minutes: z.int().nullish(),
1246
1240
  holiday_annual_minutes: z.int().nullish(),
1247
1241
  training_annual_minutes: z.int().nullish(),
1248
- training_annual_amount_cents: z.string().nullish(),
1249
- employer_combined_health_amount_cents: z.string().nullish(),
1250
- employer_combined_savings_cents: z.string().nullish()
1242
+ training_annual_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1243
+ employer_combined_health_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1244
+ employer_combined_savings_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish()
1251
1245
  });
1252
1246
  /**
1253
1247
  * Request body for creating one employment boundary. effective_date is required and is interpreted at midnight in the credential company's time zone. Today and past dates must fall inside the family's latest version, before its termination; future dates retain scheduling behavior. Send at least one value to change; omitted values carry forward from the version immediately before the new boundary.
@@ -1255,16 +1249,16 @@ export const zPeopleEmploymentCreateParameters = z.object({
1255
1249
  export const zPeopleEmploymentScheduledChangeCreateParameters = z.object({
1256
1250
  effective_date: z.iso.date(),
1257
1251
  compensation_type: z.enum(['hourly', 'salary']).optional(),
1258
- hourly_rate_cents: z.string().nullish(),
1252
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1259
1253
  overtime_eligible: z.boolean().nullish(),
1260
1254
  overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
1261
1255
  worked_annual_minutes: z.int().nullish(),
1262
1256
  pto_annual_minutes: z.int().nullish(),
1263
1257
  holiday_annual_minutes: z.int().nullish(),
1264
1258
  training_annual_minutes: z.int().nullish(),
1265
- training_annual_amount_cents: z.string().nullish(),
1266
- employer_combined_health_amount_cents: z.string().nullish(),
1267
- employer_combined_savings_cents: z.string().nullish(),
1259
+ training_annual_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1260
+ employer_combined_health_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1261
+ employer_combined_savings_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1268
1262
  companies_department_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
1269
1263
  });
1270
1264
  /**
@@ -1272,16 +1266,16 @@ export const zPeopleEmploymentScheduledChangeCreateParameters = z.object({
1272
1266
  */
1273
1267
  export const zPeopleEmploymentScheduledChangeUpdateParameters = z.object({
1274
1268
  compensation_type: z.enum(['hourly', 'salary']).optional(),
1275
- hourly_rate_cents: z.string().nullish(),
1269
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1276
1270
  overtime_eligible: z.boolean().nullish(),
1277
1271
  overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
1278
1272
  worked_annual_minutes: z.int().nullish(),
1279
1273
  pto_annual_minutes: z.int().nullish(),
1280
1274
  holiday_annual_minutes: z.int().nullish(),
1281
1275
  training_annual_minutes: z.int().nullish(),
1282
- training_annual_amount_cents: z.string().nullish(),
1283
- employer_combined_health_amount_cents: z.string().nullish(),
1284
- employer_combined_savings_cents: z.string().nullish(),
1276
+ training_annual_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1277
+ employer_combined_health_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1278
+ employer_combined_savings_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
1285
1279
  companies_department_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
1286
1280
  });
1287
1281
  /**
@@ -1619,7 +1613,7 @@ export const zPerDiemResponseObject = z.object({
1619
1613
  export const zPerDiemParameters = z.object({
1620
1614
  name: z.string(),
1621
1615
  description: z.string().nullish(),
1622
- rate_cents: z.string(),
1616
+ rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
1623
1617
  currency: z.string(),
1624
1618
  taxable: z.boolean().optional(),
1625
1619
  default: z.boolean().optional(),
@@ -1633,7 +1627,7 @@ export const zPerDiemParameters = z.object({
1633
1627
  export const zPerDiemUpdateParameters = z.object({
1634
1628
  name: z.string().optional(),
1635
1629
  description: z.string().nullish(),
1636
- rate_cents: z.string().optional(),
1630
+ rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
1637
1631
  currency: z.string().optional(),
1638
1632
  taxable: z.boolean().optional(),
1639
1633
  default: z.boolean().optional(),
@@ -2397,6 +2391,183 @@ export const zPwaJobDetailsResponseObject = z.object({
2397
2391
  il_shines_project_id: z.string().nullish(),
2398
2392
  ny_dol_prc_number: z.string().nullish()
2399
2393
  }).nullable();
2394
+ /**
2395
+ * Parameters for creating a job. Sets the job's schedule, work types, address, custom-field values, and optional Prevailing Wage / Apprenticeship (PWA) compliance. `requested_by_company_id` and `created_by_user_id` are required unless `template_id` names a template, whose copy keeps both. Undeclared body keys return 400, and a null for a field that is not nullable or a wrongly typed value returns 422 at its pointer, before any job or relationship is saved.
2396
+ */
2397
+ export const zJobCreateParameters = z.object({
2398
+ created_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
2399
+ template_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2400
+ name: z.string().nullish(),
2401
+ description: z.string().optional(),
2402
+ requested_by_company_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
2403
+ purchase_order_number: z.string().nullish(),
2404
+ project_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2405
+ companies_department_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2406
+ federal_pwa_mode: z.enum([
2407
+ 'all',
2408
+ 'pw_only',
2409
+ 'ap_only',
2410
+ 'none'
2411
+ ]).optional(),
2412
+ regional_pwa_mode: z.enum([
2413
+ 'all',
2414
+ 'pw_only',
2415
+ 'ap_only',
2416
+ 'none'
2417
+ ]).optional(),
2418
+ region: z.string().nullish(),
2419
+ start_time: z.string().nullish(),
2420
+ end_time: z.string().nullish(),
2421
+ tz_name: z.string().optional(),
2422
+ time_card_start_day: z.int().gte(0).lte(6).optional(),
2423
+ clock_in_requirement: z.enum([
2424
+ 'none',
2425
+ 'warning',
2426
+ 'required'
2427
+ ]).optional(),
2428
+ send_geofence_reminders: z.boolean().nullish(),
2429
+ allow_customer_access: z.boolean().optional(),
2430
+ tracks_feature_allocations: z.boolean().optional(),
2431
+ requires_feature_allocation: z.boolean().optional(),
2432
+ max_one_feature_allocation: z.boolean().optional(),
2433
+ production_tracking_kind: z.enum([
2434
+ 'none',
2435
+ 'feature',
2436
+ 'quantity'
2437
+ ]).optional(),
2438
+ manager_user_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2439
+ timekeeping_timecode_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2440
+ job_work_types_attributes: z.array(z.object({
2441
+ primary: z.boolean().optional(),
2442
+ work_type_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional()
2443
+ })).optional(),
2444
+ job_address_attributes: z.object({
2445
+ id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2446
+ sub_address_number: z.string().nullish(),
2447
+ address_number: z.string().nullish(),
2448
+ neighborhood: z.string().nullish(),
2449
+ municipality: z.string().nullish(),
2450
+ sub_region: z.string().nullish(),
2451
+ region: z.string().nullish(),
2452
+ postal_code: z.string().nullish(),
2453
+ country: z.string().nullish(),
2454
+ timezone: z.string().nullish(),
2455
+ verified: z.boolean().optional(),
2456
+ label: z.string().nullish()
2457
+ }).optional(),
2458
+ custom_fields: z.array(z.object({
2459
+ custom_field_config_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
2460
+ value: z.string().nullable()
2461
+ })).optional(),
2462
+ pwa_details: z.object({
2463
+ contractor_type: z.enum(['prime_contractor', 'sub_contractor']).nullish(),
2464
+ pay_full_cash_fringe_by_default: z.boolean().optional(),
2465
+ dir_awarding_body_id: z.string().nullish(),
2466
+ dir_project_id: z.string().nullish(),
2467
+ dir_project_name: z.string().nullish(),
2468
+ dir_contract_id: z.string().nullish(),
2469
+ dir_project_awarding_body_name: z.string().nullish(),
2470
+ dir_project_number: z.string().nullish(),
2471
+ il_dol_project_id: z.string().nullish(),
2472
+ il_dol_state_capital_funds: z.boolean().nullish(),
2473
+ il_dol_public_body_name: z.string().nullish(),
2474
+ il_dol_public_body_contact_id: z.string().nullish(),
2475
+ il_dol_public_body_address_id: z.string().nullish(),
2476
+ il_dol_contract_number: z.string().nullish(),
2477
+ il_shines_project_id: z.string().nullish(),
2478
+ ny_dol_prc_number: z.string().nullish()
2479
+ }).optional()
2480
+ });
2481
+ /**
2482
+ * Parameters for updating an existing job. Every field is optional; omit a field to preserve its current value. The resulting job must still satisfy schedule and PWA validation rules. Accepts every shared job field plus a directly settable status and custom-field changes. Sending `created_by_user_id` returns 400 unknown_key, including when it matches the existing creator or is null. Undeclared body keys return 400, and a null for a field that is not nullable or a wrongly typed value returns 422 at its pointer, before any job or relationship changes.
2483
+ */
2484
+ export const zJobUpdateParameters = z.object({
2485
+ name: z.string().nullish(),
2486
+ description: z.string().optional(),
2487
+ requested_by_company_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
2488
+ purchase_order_number: z.string().nullish(),
2489
+ project_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2490
+ companies_department_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2491
+ federal_pwa_mode: z.enum([
2492
+ 'all',
2493
+ 'pw_only',
2494
+ 'ap_only',
2495
+ 'none'
2496
+ ]).optional(),
2497
+ regional_pwa_mode: z.enum([
2498
+ 'all',
2499
+ 'pw_only',
2500
+ 'ap_only',
2501
+ 'none'
2502
+ ]).optional(),
2503
+ region: z.string().nullish(),
2504
+ start_time: z.string().nullish(),
2505
+ end_time: z.string().nullish(),
2506
+ tz_name: z.string().optional(),
2507
+ time_card_start_day: z.int().gte(0).lte(6).optional(),
2508
+ clock_in_requirement: z.enum([
2509
+ 'none',
2510
+ 'warning',
2511
+ 'required'
2512
+ ]).optional(),
2513
+ send_geofence_reminders: z.boolean().nullish(),
2514
+ allow_customer_access: z.boolean().optional(),
2515
+ tracks_feature_allocations: z.boolean().optional(),
2516
+ requires_feature_allocation: z.boolean().optional(),
2517
+ max_one_feature_allocation: z.boolean().optional(),
2518
+ production_tracking_kind: z.enum([
2519
+ 'none',
2520
+ 'feature',
2521
+ 'quantity'
2522
+ ]).optional(),
2523
+ manager_user_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2524
+ timekeeping_timecode_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2525
+ job_work_types_attributes: z.array(z.object({
2526
+ primary: z.boolean().optional(),
2527
+ work_type_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional()
2528
+ })).optional(),
2529
+ job_address_attributes: z.object({
2530
+ id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2531
+ sub_address_number: z.string().nullish(),
2532
+ address_number: z.string().nullish(),
2533
+ neighborhood: z.string().nullish(),
2534
+ municipality: z.string().nullish(),
2535
+ sub_region: z.string().nullish(),
2536
+ region: z.string().nullish(),
2537
+ postal_code: z.string().nullish(),
2538
+ country: z.string().nullish(),
2539
+ timezone: z.string().nullish(),
2540
+ verified: z.boolean().optional(),
2541
+ label: z.string().nullish()
2542
+ }).optional(),
2543
+ custom_fields: z.array(z.object({
2544
+ custom_field_config_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
2545
+ value: z.string().nullable()
2546
+ })).optional(),
2547
+ pwa_details: z.object({
2548
+ contractor_type: z.enum(['prime_contractor', 'sub_contractor']).nullish(),
2549
+ pay_full_cash_fringe_by_default: z.boolean().optional(),
2550
+ dir_awarding_body_id: z.string().nullish(),
2551
+ dir_project_id: z.string().nullish(),
2552
+ dir_project_name: z.string().nullish(),
2553
+ dir_contract_id: z.string().nullish(),
2554
+ dir_project_awarding_body_name: z.string().nullish(),
2555
+ dir_project_number: z.string().nullish(),
2556
+ il_dol_project_id: z.string().nullish(),
2557
+ il_dol_state_capital_funds: z.boolean().nullish(),
2558
+ il_dol_public_body_name: z.string().nullish(),
2559
+ il_dol_public_body_contact_id: z.string().nullish(),
2560
+ il_dol_public_body_address_id: z.string().nullish(),
2561
+ il_dol_contract_number: z.string().nullish(),
2562
+ il_shines_project_id: z.string().nullish(),
2563
+ ny_dol_prc_number: z.string().nullish()
2564
+ }).optional(),
2565
+ status: z.enum([
2566
+ 'completed',
2567
+ 'cancelled',
2568
+ 'disputed'
2569
+ ]).optional()
2570
+ });
2400
2571
  /**
2401
2572
  * A reusable job template — a saved job pattern for quickly creating new jobs with the same setup. Read-only through the API (listing only).
2402
2573
  */
@@ -2443,6 +2614,140 @@ export const zUserUpdateParameters = z.object({
2443
2614
  dol_apprentice_no: z.string().nullish(),
2444
2615
  avatar_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
2445
2616
  });
2617
+ /**
2618
+ * Request body for onboarding a worker into your company. In one call it creates the person (if new), their employment record and its custom-field values, roles, group memberships, an optional invite, and optional compliance details. first_name and last_name are required, and omitting either answers 400. Unless skip_invite is true, the invite needs a work email or a phone number, and a request with neither answers 422 at both fields. An unlisted key answers 400. A value of the wrong JSON type, a null for a field that is not nullable, or a value outside a listed set answers 422 at its pointer, and nothing is written.
2619
+ */
2620
+ export const zUserParameters = z.object({
2621
+ email: z.string().nullish(),
2622
+ personal_email: z.string().nullish(),
2623
+ phone_number: z.string().nullish(),
2624
+ first_name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
2625
+ last_name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
2626
+ preferred_first_name: z.string().nullish(),
2627
+ preferred_last_name: z.string().nullish(),
2628
+ city: z.string().nullish(),
2629
+ state: z.string().nullish(),
2630
+ birth_date: z.iso.date().nullish(),
2631
+ dol_apprentice_no: z.string().nullish(),
2632
+ winda_id: z.string().nullish(),
2633
+ linkedin_url: z.string().nullish(),
2634
+ roles: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2635
+ avatar_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2636
+ created_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2637
+ last_sent_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2638
+ skip_notify: z.boolean().optional(),
2639
+ skip_invite: z.boolean().optional(),
2640
+ hire_date: z.string().optional(),
2641
+ type: z.enum(['EMPLOYEE', 'CONTRACTOR']).optional(),
2642
+ title: z.string().nullish(),
2643
+ manager_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2644
+ payroll_id: z.string().nullish(),
2645
+ enrolled_in_t_and_a: z.boolean().optional(),
2646
+ compensation_type: z.enum(['hourly', 'salary']).optional(),
2647
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2648
+ training_annual_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2649
+ employer_combined_health_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2650
+ employer_combined_savings_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2651
+ overtime_eligible: z.boolean().optional(),
2652
+ worked_annual_minutes: z.int().nullish(),
2653
+ pto_annual_minutes: z.int().nullish(),
2654
+ holiday_annual_minutes: z.int().nullish(),
2655
+ training_annual_minutes: z.int().nullish(),
2656
+ custom_fields: z.array(z.object({
2657
+ custom_field_config_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
2658
+ value: z.string().nullable()
2659
+ })).optional(),
2660
+ group_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2661
+ company_user_pwa_info: z.object({
2662
+ address1: z.string().nullish(),
2663
+ address2: z.string().nullish(),
2664
+ city: z.string().nullish(),
2665
+ state: z.string().nullish(),
2666
+ zip: z.string().nullish(),
2667
+ race: z.array(z.enum([
2668
+ 'AFRICAN_AMERICAN',
2669
+ 'ASIAN',
2670
+ 'CAUCASIAN',
2671
+ 'NATIVE_AMERICAN',
2672
+ 'NOT_SPECIFIED',
2673
+ 'OTHER'
2674
+ ])).optional(),
2675
+ sex: z.enum([
2676
+ 'female',
2677
+ 'male',
2678
+ 'non_binary',
2679
+ 'not_specified'
2680
+ ]).nullish(),
2681
+ local_business_license: z.string().nullish(),
2682
+ drivers_license_state: z.string().nullish(),
2683
+ drivers_license_number: z.string().nullish(),
2684
+ ssn: z.string().nullish(),
2685
+ veteran_status: z.enum([
2686
+ 'protected_veteran',
2687
+ 'not_protected_veteran',
2688
+ 'reserves',
2689
+ 'guard',
2690
+ 'not_specified'
2691
+ ]).nullish(),
2692
+ hispanic_origin: z.enum([
2693
+ 'yes',
2694
+ 'no',
2695
+ 'not_specified'
2696
+ ]).nullish(),
2697
+ ca_dir_withholding_exemptions: z.int().nullish(),
2698
+ disabled: z.boolean().optional(),
2699
+ il_dol_race: z.enum([
2700
+ 'white',
2701
+ 'black',
2702
+ 'hispanic_or_latino',
2703
+ 'american_indian_or_alaska_native',
2704
+ 'chinese',
2705
+ 'filipino',
2706
+ 'asian_india',
2707
+ 'vietnamese',
2708
+ 'korean',
2709
+ 'japanese',
2710
+ 'native_hawaiian',
2711
+ 'samoan',
2712
+ 'chamorro',
2713
+ 'other_asian',
2714
+ 'other_pacific_islander',
2715
+ 'other'
2716
+ ]).nullish(),
2717
+ il_shines_employment_type: z.enum([
2718
+ 'part_time',
2719
+ 'full_time',
2720
+ 'seasonal_temporary',
2721
+ 'independent_contract'
2722
+ ]).nullish(),
2723
+ il_shines_eep_qualifiers: z.array(z.enum([
2724
+ 'eep_program_completed',
2725
+ 'foster_care',
2726
+ 'formerly_incarcerated',
2727
+ 'equity_investment_eligible_community',
2728
+ 'self_registered_or_unknown'
2729
+ ])).optional(),
2730
+ il_shines_other_programs: z.array(z.enum([
2731
+ 'solar_training_pipeline_program',
2732
+ 'craft_apprenticeship_program',
2733
+ 'multi_cultural_jobs_program',
2734
+ 'clean_jobs_workforce_network_program',
2735
+ 'illinois_climate_works_prep_apprenticeship_program',
2736
+ 'returning_residents_clean_jobs_training_program',
2737
+ 'other'
2738
+ ])).optional(),
2739
+ or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).nullish(),
2740
+ or_boli_race: z.array(z.enum([
2741
+ 'american_indian_or_alaska_native',
2742
+ 'asian',
2743
+ 'hispanic_or_latino',
2744
+ 'black_or_african_american',
2745
+ 'native_hawaiian_or_pacific_islander',
2746
+ 'white',
2747
+ 'portuguese_or_brazilian'
2748
+ ])).optional()
2749
+ }).optional()
2750
+ });
2446
2751
  /**
2447
2752
  * A single time entry: one atomic block of tracked work with its start/end times, optional timecode classification, optional job, pay rate, and manager approval status.
2448
2753
  */
@@ -2518,7 +2823,7 @@ export const zTimeEntryCreateParameters = z.object({
2518
2823
  timekeeping_timecode_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2519
2824
  state: z.string().nullish(),
2520
2825
  description: z.string().nullish(),
2521
- hourly_rate_cents: z.string().nullish(),
2826
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2522
2827
  feature_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2523
2828
  feature_allocation_acknowledged: z.boolean().optional()
2524
2829
  });
@@ -2532,7 +2837,7 @@ export const zTimeEntryUpdateParameters = z.object({
2532
2837
  timekeeping_timecode_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
2533
2838
  state: z.string().nullish(),
2534
2839
  description: z.string().nullish(),
2535
- hourly_rate_cents: z.string().nullish(),
2840
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2536
2841
  feature_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2537
2842
  confirm_allocation_conflict: z.boolean().optional()
2538
2843
  });
@@ -2599,11 +2904,11 @@ export const zUserCompanyCreateParameters = z.object({
2599
2904
  payroll_id: z.string().nullish(),
2600
2905
  enrolled_in_t_and_a: z.boolean().optional(),
2601
2906
  compensation_type: z.enum(['hourly', 'salary']).optional(),
2602
- hourly_rate: z.string().nullish(),
2907
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2908
+ training_annual_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2909
+ employer_combined_health_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2910
+ employer_combined_savings_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2603
2911
  overtime_eligible: z.boolean().optional(),
2604
- training_annual_amount: z.string().nullish(),
2605
- employer_combined_health_amount: z.string().nullish(),
2606
- employer_combined_savings: z.string().nullish(),
2607
2912
  worked_annual_minutes: z.int().nullish(),
2608
2913
  pto_annual_minutes: z.int().nullish(),
2609
2914
  holiday_annual_minutes: z.int().nullish(),
@@ -2618,12 +2923,12 @@ export const zUserCompanyCreateParameters = z.object({
2618
2923
  */
2619
2924
  export const zUserCompanyScheduledChangesParameters = z.object({
2620
2925
  effective_date: z.iso.date(),
2621
- hourly_rate: z.string().nullish(),
2926
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2927
+ training_annual_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2928
+ employer_combined_health_amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2929
+ employer_combined_savings_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
2622
2930
  compensation_type: z.enum(['hourly', 'salary']).optional(),
2623
2931
  overtime_eligible: z.boolean().optional(),
2624
- training_annual_amount: z.string().nullish(),
2625
- employer_combined_health_amount: z.string().nullish(),
2626
- employer_combined_savings: z.string().nullish(),
2627
2932
  worked_annual_minutes: z.int().nullish(),
2628
2933
  pto_annual_minutes: z.int().nullish(),
2629
2934
  holiday_annual_minutes: z.int().nullish(),
@@ -2798,161 +3103,55 @@ export const zCustomFieldConfigParameters = z.object({
2798
3103
  'apprenticeship_apprentice',
2799
3104
  'company',
2800
3105
  'job',
2801
- 'user_company'
2802
- ]),
2803
- visible: z.boolean().optional()
2804
- });
2805
- /**
2806
- * Request body for updating a custom field definition. Every field is optional; omit a field to preserve its current value. `model_type` is fixed at creation, so sending it answers 400. The resulting definition's name must remain unique for its company and model type.
2807
- */
2808
- export const zCustomFieldConfigUpdateParameters = z.object({
2809
- name: z.string().optional(),
2810
- description: z.string().nullish(),
2811
- visible: z.boolean().optional()
2812
- });
2813
- /**
2814
- * A user's membership in a group.
2815
- */
2816
- export const zUserGroupResponse = z.object({
2817
- id: z.string(),
2818
- user_id: z.string()
2819
- });
2820
- /**
2821
- * Request body for adding users to a group. The group is taken from the URL path.
2822
- */
2823
- export const zUserGroupParameters = z.object({
2824
- user_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).min(1)
2825
- });
2826
- /**
2827
- * Day of the week a job's workweek and time cards start on: 0 (Sunday) through 6 (Saturday).
2828
- */
2829
- export const zTimeCardStartDay = z.union([
2830
- z.literal(0),
2831
- z.literal(1),
2832
- z.literal(2),
2833
- z.literal(3),
2834
- z.literal(4),
2835
- z.literal(5),
2836
- z.literal(6)
2837
- ]);
2838
- /**
2839
- * Fields shared by job creation and updates. Updates may omit any field to preserve its current value. The resulting job must still satisfy its schedule and PWA validation rules.
2840
- */
2841
- export const zJobParameters = z.object({
2842
- name: z.string().nullish(),
2843
- description: z.string().optional(),
2844
- requested_by_company_id: z.string().optional(),
2845
- manager_user_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2846
- purchase_order_number: z.string().nullish(),
2847
- project_id: z.string().nullish(),
2848
- companies_department_id: z.string().nullish(),
2849
- federal_pwa_mode: z.enum([
2850
- 'all',
2851
- 'pw_only',
2852
- 'ap_only',
2853
- 'none'
2854
- ]).optional(),
2855
- regional_pwa_mode: z.enum([
2856
- 'all',
2857
- 'pw_only',
2858
- 'ap_only',
2859
- 'none'
2860
- ]).optional(),
2861
- region: z.string().optional(),
2862
- start_time: z.string().nullish(),
2863
- end_time: z.string().nullish(),
2864
- tz_name: z.string().optional(),
2865
- time_card_start_day: zTimeCardStartDay.optional(),
2866
- clock_in_requirement: z.enum([
2867
- 'none',
2868
- 'warning',
2869
- 'required'
2870
- ]).optional(),
2871
- send_geofence_reminders: z.boolean().nullish(),
2872
- allow_customer_access: z.boolean().optional(),
2873
- timekeeping_timecode_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2874
- tracks_feature_allocations: z.boolean().nullish(),
2875
- requires_feature_allocation: z.boolean().nullish(),
2876
- max_one_feature_allocation: z.boolean().nullish(),
2877
- production_tracking_kind: z.enum([
2878
- 'none',
2879
- 'feature',
2880
- 'quantity'
2881
- ]).optional(),
2882
- job_work_types_attributes: z.array(z.object({
2883
- primary: z.boolean().optional(),
2884
- work_type_id: z.string().optional()
2885
- })).nullish(),
2886
- job_address_attributes: z.object({
2887
- id: z.string().nullish(),
2888
- sub_address_number: z.string().nullish(),
2889
- address_number: z.string().nullish(),
2890
- neighborhood: z.string().nullish(),
2891
- municipality: z.string().nullish(),
2892
- sub_region: z.string().nullish(),
2893
- region: z.string().nullish(),
2894
- postal_code: z.string().nullish(),
2895
- country: z.string().nullish(),
2896
- timezone: z.string().nullish(),
2897
- verified: z.boolean().nullish(),
2898
- label: z.string().nullish()
2899
- }).nullish(),
2900
- pwa_details: z.object({
2901
- contractor_type: z.enum(['prime_contractor', 'sub_contractor']).nullish(),
2902
- pay_full_cash_fringe_by_default: z.boolean().optional(),
2903
- dir_awarding_body_id: z.string().nullish(),
2904
- dir_project_id: z.string().nullish(),
2905
- dir_project_name: z.string().nullish(),
2906
- dir_contract_id: z.string().nullish(),
2907
- dir_project_awarding_body_name: z.string().nullish(),
2908
- dir_project_number: z.string().nullish(),
2909
- il_dol_project_id: z.string().nullish(),
2910
- il_dol_state_capital_funds: z.boolean().nullish(),
2911
- il_dol_public_body_name: z.string().nullish(),
2912
- il_dol_public_body_contact_id: z.string().nullish(),
2913
- il_dol_public_body_address_id: z.string().nullish(),
2914
- il_dol_contract_number: z.string().nullish(),
2915
- il_shines_project_id: z.string().nullish(),
2916
- ny_dol_prc_number: z.string().nullish()
2917
- }).optional()
3106
+ 'user_company'
3107
+ ]),
3108
+ visible: z.boolean().optional()
2918
3109
  });
2919
3110
  /**
2920
- * Parameters for creating a job. `requested_by_company_id` and `created_by_user_id` are required. Sets the job's schedule, work types, address, custom-field values, and optional Prevailing Wage / Apprenticeship (PWA) compliance.
3111
+ * Request body for updating a custom field definition. Every field is optional; omit a field to preserve its current value. `model_type` is fixed at creation, so sending it answers 400. The resulting definition's name must remain unique for its company and model type.
2921
3112
  */
2922
- export const zJobCreateParameters = zJobParameters.and(z.object({
2923
- created_by_user_id: z.string(),
2924
- template_id: z.string().nullish(),
2925
- custom_fields: z.array(z.object({
2926
- custom_field_config_id: z.string(),
2927
- value: z.string().nullable()
2928
- })).optional()
2929
- }));
3113
+ export const zCustomFieldConfigUpdateParameters = z.object({
3114
+ name: z.string().optional(),
3115
+ description: z.string().nullish(),
3116
+ visible: z.boolean().optional()
3117
+ });
2930
3118
  /**
2931
- * Parameters for updating an existing job. Every field is optional; omit a field to preserve its current value. The resulting job must still satisfy schedule and PWA validation rules. Accepts every shared job field plus a directly settable status and custom-field changes. Sending `created_by_user_id` returns 400 unknown_key, including when it matches the existing creator or is null.
3119
+ * A user's membership in a group.
2932
3120
  */
2933
- export const zJobUpdateParameters = zJobParameters.and(z.object({
2934
- status: z.enum([
2935
- 'completed',
2936
- 'cancelled',
2937
- 'disputed'
2938
- ]).optional(),
2939
- custom_fields: z.array(z.object({
2940
- custom_field_config_id: z.string(),
2941
- value: z.string().nullable()
2942
- })).optional()
2943
- }));
3121
+ export const zUserGroupResponse = z.object({
3122
+ id: z.string(),
3123
+ user_id: z.string()
3124
+ });
3125
+ /**
3126
+ * Request body for adding users to a group. The group is taken from the URL path.
3127
+ */
3128
+ export const zUserGroupParameters = z.object({
3129
+ user_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).min(1)
3130
+ });
3131
+ /**
3132
+ * Day of the week a job's workweek and time cards start on: 0 (Sunday) through 6 (Saturday).
3133
+ */
3134
+ export const zTimeCardStartDay = z.union([
3135
+ z.literal(0),
3136
+ z.literal(1),
3137
+ z.literal(2),
3138
+ z.literal(3),
3139
+ z.literal(4),
3140
+ z.literal(5),
3141
+ z.literal(6)
3142
+ ]);
2944
3143
  /**
2945
3144
  * One version of a worker's compensation at your company, effective from its start date until the next version begins.
2946
3145
  */
2947
3146
  export const zUserCompanyScheduledChange = z.object({
2948
3147
  id: z.string(),
2949
3148
  start_date: z.string(),
2950
- hourly_rate: z.string().nullable(),
3149
+ hourly_rate_cents: z.string().nullable(),
2951
3150
  compensation_type: z.enum(['hourly', 'salary']),
2952
3151
  overtime_eligible: z.boolean(),
2953
- training_annual_amount: z.string().nullable(),
2954
- employer_combined_health_amount: z.string().nullable(),
2955
- employer_combined_savings: z.string().nullable(),
3152
+ training_annual_amount_cents: z.string().nullable(),
3153
+ employer_combined_health_amount_cents: z.string().nullable(),
3154
+ employer_combined_savings_cents: z.string().nullable(),
2956
3155
  worked_annual_minutes: z.int().nullable(),
2957
3156
  pto_annual_minutes: z.int().nullable(),
2958
3157
  holiday_annual_minutes: z.int().nullable(),
@@ -3140,7 +3339,7 @@ export const zTimeEntryImportResponseObject = z.object({
3140
3339
  updated_at: z.iso.datetime()
3141
3340
  });
3142
3341
  /**
3143
- * Submit a spreadsheet of time entries for a pay period. All seven of payroll_id, start_time, end_time, timecode, job_id, state and description must be present as column headers, or the file is refused naming the ones missing. Of those, payroll_id, start_time, end_time, timecode and state must also carry a value on every row. features, federal_labor_classification and regional_labor_classification are read when present. Header matching ignores case and treats spaces as underscores, and column order does not matter. Any other column is refused: a name this import does not read would be dropped without trace, so the file is rejected naming it rather than applied in part.
3342
+ * Submit a spreadsheet of time entries for a pay period. All six of payroll_id, start_time, end_time, timecode, job_id and description must be present as column headers, or the file is refused naming the ones missing. The payroll_id, start_time, end_time and timecode columns must carry a value on every row. The state column may be omitted, or its cells left blank, when the row's Job resolves a recognized state through its operating region, address, then oldest qualifying Site address. A valid explicit state overrides this fallback; an invalid supplied state fails. Missing or blank state without a Job, unresolved geography, or an unrecognized address region rejects the whole file with row-specific errors. The original file retains omissions and blank values, so background processing resolves current Job geography again. features, federal_labor_classification and regional_labor_classification are read when present. Header matching ignores case and treats spaces as underscores, and column order does not matter. Any other column is refused: a name this import does not read would be dropped without trace, so the file is rejected naming it rather than applied in part.
3144
3343
  *
3145
3344
  * Because acceptance is synchronous but the write happens in the background, only one import at a time is accepted for a pay period: while an earlier one is still `pending` or `processing`, a second answers 409 naming `import_in_progress`, and nothing is written. Poll the earlier import until it reports, then submit again.
3146
3345
  */
@@ -3681,8 +3880,8 @@ export const zProjectResponseObject = z.object({
3681
3880
  administrator_name: z.string().nullable(),
3682
3881
  administrator_email: z.string().nullable(),
3683
3882
  administrator_phone: z.string().nullable(),
3684
- budget_cents: z.string().nullable(),
3685
- budget_currency: z.string().nullable(),
3883
+ budget_cents: z.string().nullish(),
3884
+ budget_currency: z.string().nullish(),
3686
3885
  start_date: z.iso.date().nullable(),
3687
3886
  end_date: z.iso.date().nullable(),
3688
3887
  prevailing_wage_lock_in_date: z.iso.date().nullable(),
@@ -3721,7 +3920,7 @@ export const zProjectParameters = z.object({
3721
3920
  administrator_name: z.string().nullish(),
3722
3921
  administrator_email: z.string().nullish(),
3723
3922
  administrator_phone: z.string().nullish(),
3724
- budget: z.string().nullish(),
3923
+ budget_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
3725
3924
  prevailing_wage_lock_in_date: z.iso.date().nullish(),
3726
3925
  beginning_of_construction_date: z.iso.date().nullish(),
3727
3926
  placed_in_service_date: z.iso.date().nullish(),
@@ -3757,7 +3956,7 @@ export const zProjectUpdateParameters = z.object({
3757
3956
  administrator_name: z.string().nullish(),
3758
3957
  administrator_email: z.string().nullish(),
3759
3958
  administrator_phone: z.string().nullish(),
3760
- budget: z.string().nullish(),
3959
+ budget_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
3761
3960
  prevailing_wage_lock_in_date: z.iso.date().nullish(),
3762
3961
  beginning_of_construction_date: z.iso.date().nullish(),
3763
3962
  placed_in_service_date: z.iso.date().nullish()
@@ -3857,6 +4056,7 @@ export const zSiteCheckInResponseObject = z.object({
3857
4056
  longitude: z.number().nullable(),
3858
4057
  start_time: z.iso.datetime(),
3859
4058
  end_time: z.iso.datetime().nullable(),
4059
+ duration_minutes: z.int().nullable(),
3860
4060
  verified_at: z.iso.datetime().nullable(),
3861
4061
  created_at: z.iso.datetime(),
3862
4062
  updated_at: z.iso.datetime()
@@ -4202,6 +4402,24 @@ export const zTodoInboxTodoResponseObject = z.object({
4202
4402
  created_by_user_id: z.string(),
4203
4403
  updated_by_user_id: z.string(),
4204
4404
  completed: z.boolean(),
4405
+ priority: z.enum([
4406
+ 'critical',
4407
+ 'high',
4408
+ 'medium',
4409
+ 'low'
4410
+ ]).nullable(),
4411
+ category: z.enum([
4412
+ 'apprenticeship',
4413
+ 'certified_payroll',
4414
+ 'company',
4415
+ 'job',
4416
+ 'payroll',
4417
+ 'project',
4418
+ 'regional',
4419
+ 'tax_credit',
4420
+ 'timekeeping',
4421
+ 'worker'
4422
+ ]),
4205
4423
  task_assignee_user_ids: z.array(z.string()),
4206
4424
  description: zRichTextObject,
4207
4425
  time_due: z.iso.datetime().nullable(),
@@ -4395,7 +4613,7 @@ export const zPriorPeriodAdjustmentResponseObject = z.object({
4395
4613
  export const zPriorPeriodAdjustmentParameters = z.object({
4396
4614
  payrolls_paystub_line_item_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4397
4615
  created_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4398
- amount_cents: z.string(),
4616
+ amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
4399
4617
  rationale: z.enum([
4400
4618
  'hours_correction',
4401
4619
  'other',
@@ -4410,7 +4628,7 @@ export const zPriorPeriodAdjustmentParameters = z.object({
4410
4628
  * Request body for updating a prior period adjustment. Send only the fields to change. The time card is the path parent; payrolls_paystub_line_item_id, created_by_user_id, time_card_id, and adjustment_type are rejected.
4411
4629
  */
4412
4630
  export const zPriorPeriodAdjustmentUpdateParameters = z.object({
4413
- amount_cents: z.string().optional(),
4631
+ amount_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
4414
4632
  rationale: z.enum([
4415
4633
  'hours_correction',
4416
4634
  'other',
@@ -4540,22 +4758,22 @@ export const zPaystubLineItemResponseObject = z.object({
4540
4758
  updated_at: z.iso.datetime()
4541
4759
  });
4542
4760
  /**
4543
- * Request body for creating a paystub line item. All four fields are required. Undeclared body keys are rejected with 400; references outside the authenticated company return 404.
4761
+ * Request body for creating a paystub line item. All four fields are required. Undeclared body keys or an omitted field answer 400; a null or blank value, or any wrong-typed value, answers 422; references outside the authenticated company return 404.
4544
4762
  */
4545
4763
  export const zPaystubLineItemParameters = z.object({
4546
- payrolls_paystub_id: z.string(),
4547
- amount_cents: z.string(),
4764
+ payrolls_paystub_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4765
+ amount_cents: z.string().regex(/^-?[0-9]+(\.[0-9]+)?$/),
4548
4766
  contributor: z.enum(['employee', 'employer']),
4549
- payrolls_external_map_id: z.string()
4767
+ payrolls_external_map_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
4550
4768
  });
4551
4769
  /**
4552
- * Request body for updating a paystub line item. Send only the fields to change. Undeclared body keys are rejected with 400; newly supplied references outside the authenticated company return 404.
4770
+ * Request body for updating a paystub line item. Send only the fields to change. Undeclared body keys are rejected with 400; a null or blank value, or any wrong-typed value, answers 422; newly supplied references outside the authenticated company return 404.
4553
4771
  */
4554
4772
  export const zPaystubLineItemUpdateParameters = z.object({
4555
- payrolls_paystub_id: z.string().optional(),
4556
- amount_cents: z.string().optional(),
4773
+ payrolls_paystub_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
4774
+ amount_cents: z.string().regex(/^-?[0-9]+(\.[0-9]+)?$/).optional(),
4557
4775
  contributor: z.enum(['employee', 'employer']).optional(),
4558
- payrolls_external_map_id: z.string().optional()
4776
+ payrolls_external_map_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional()
4559
4777
  });
4560
4778
  /**
4561
4779
  * A job-site join — the Site attached to a Job, plus the subset of that site's features the job is working on. `{id}` is the join row, not the Site.
@@ -4578,6 +4796,61 @@ export const zJobSiteParameters = z.object({
4578
4796
  export const zJobSiteUpdateParameters = z.object({
4579
4797
  feature_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional()
4580
4798
  });
4799
+ /**
4800
+ * A document attached to a job — either an uploaded file or an external URL, never both. Includes PWA documentation when the caller may see it.
4801
+ */
4802
+ export const zJobDocumentResponseObject = z.object({
4803
+ id: z.string(),
4804
+ job_id: z.string(),
4805
+ name: z.string(),
4806
+ type: z.enum([
4807
+ 'CERTIFICATIONS',
4808
+ 'CHECKLIST',
4809
+ 'MAP',
4810
+ 'MSA',
4811
+ 'ONSITE_POSTER',
4812
+ 'OTHER',
4813
+ 'PARTS_INSTRUCTIONS',
4814
+ 'PHOTO',
4815
+ 'PO',
4816
+ 'PWA_DOCUMENTATION',
4817
+ 'RESUME',
4818
+ 'WO'
4819
+ ]),
4820
+ description: z.string().nullable(),
4821
+ admin_only: z.boolean(),
4822
+ url: z.string().nullable(),
4823
+ file: z.object({
4824
+ filename: z.string(),
4825
+ content_type: z.string().nullable(),
4826
+ byte_size: z.int(),
4827
+ url: z.string()
4828
+ }).nullable(),
4829
+ created_at: z.iso.datetime(),
4830
+ updated_at: z.iso.datetime()
4831
+ });
4832
+ /**
4833
+ * Request body for creating a job document. The job is taken from the path and is not part of the body. Supply exactly one of `url` or `file`.
4834
+ */
4835
+ export const zJobDocumentParameters = z.object({
4836
+ type: z.string().optional(),
4837
+ name: z.string().optional(),
4838
+ description: z.string().nullish(),
4839
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
4840
+ admin_only: z.boolean().optional(),
4841
+ url: z.string().nullish()
4842
+ });
4843
+ /**
4844
+ * Request body for updating a job document. Every field is optional; omit a field to preserve its current value. The resulting document must still be exactly one of `url` or `file`.
4845
+ */
4846
+ export const zJobDocumentUpdateParameters = z.object({
4847
+ type: z.string().optional(),
4848
+ name: z.string().optional(),
4849
+ description: z.string().nullish(),
4850
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
4851
+ admin_only: z.boolean().optional(),
4852
+ url: z.string().nullish()
4853
+ });
4581
4854
  /**
4582
4855
  * A good-faith-effort exception on a job — a record that the employer requested apprentices from a registered program and did not receive the full request, or that no qualifying program existed. Read-only. Does not include supporting document slots.
4583
4856
  */
@@ -5113,23 +5386,23 @@ export const zPayRatesRulePackageUpdateParameters = z.object({
5113
5386
  description: z.string().nullish()
5114
5387
  });
5115
5388
  /**
5116
- * Request body for creating or updating a position on a job. The job is taken from the URL path.
5389
+ * Request body for creating or updating a position on a job. The job is taken from the URL path. Send only the fields to set; omitted fields keep their stored values. An undeclared key answers 400; a wrong type, null where it is not accepted, or a blank ID answers 422 at the field's pointer.
5117
5390
  */
5118
5391
  export const zPositionParameters = z.object({
5119
- fulfilled_by_user_id: z.string().nullish(),
5120
- start_time: z.iso.date().nullish(),
5121
- end_time: z.iso.date().nullish(),
5122
- position_function_id: z.string().nullish(),
5123
- per_diem_id: z.string().nullish(),
5124
- per_diem_rate_cents: z.number().nullish(),
5392
+ fulfilled_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
5393
+ start_time: z.iso.date().optional(),
5394
+ end_time: z.iso.date().optional(),
5395
+ position_function_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
5396
+ per_diem_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
5397
+ pay_rates_rule_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
5125
5398
  pwa: z.boolean().optional(),
5126
- cash_fringe_rate_cents: z.number().nullish(),
5127
- hourly_rate_cents: z.number().nullish(),
5128
- pwa_wage_pay_rate_cents: z.number().nullish(),
5129
- wage_adder_rate_cents: z.number().nullish(),
5399
+ cash_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
5400
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
5401
+ pwa_wage_pay_rate_cents: z.string().regex(/^-?[0-9]+(\.[0-9]+)?$/).nullish(),
5402
+ wage_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
5130
5403
  job_wage_determination_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
5131
5404
  pwa_details_attributes: z.object({
5132
- skill_level: z.string().nullish()
5405
+ skill_level: z.enum(['journeyman', 'foreman']).nullable()
5133
5406
  }).optional()
5134
5407
  });
5135
5408
  /**
@@ -5137,7 +5410,7 @@ export const zPositionParameters = z.object({
5137
5410
  */
5138
5411
  export const zProductionJobScopePriceParameters = z.object({
5139
5412
  scope_kind: z.string(),
5140
- unit_price: z.string(),
5413
+ unit_price: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
5141
5414
  contracted_count: z.int().nullish(),
5142
5415
  unit_of_measure: z.string().optional()
5143
5416
  });
@@ -5146,7 +5419,7 @@ export const zProductionJobScopePriceParameters = z.object({
5146
5419
  */
5147
5420
  export const zProductionJobScopePriceUpdateParameters = z.object({
5148
5421
  scope_kind: z.string().optional(),
5149
- unit_price: z.string().optional(),
5422
+ unit_price: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
5150
5423
  contracted_count: z.int().nullish(),
5151
5424
  unit_of_measure: z.string().optional()
5152
5425
  });
@@ -5566,10 +5839,10 @@ export const zUserResponseObject = z.object({
5566
5839
  enrolled_in_t_and_a: z.boolean().nullable(),
5567
5840
  payroll_id: z.string().nullable(),
5568
5841
  compensation_type: z.enum(['hourly', 'salary']).nullable(),
5569
- hourly_rate: z.string().nullish(),
5570
- training_annual_amount: z.string().nullish(),
5571
- employer_combined_health_amount: z.string().nullish(),
5572
- employer_combined_savings: z.string().nullish(),
5842
+ hourly_rate_cents: z.string().nullish(),
5843
+ training_annual_amount_cents: z.string().nullish(),
5844
+ employer_combined_health_amount_cents: z.string().nullish(),
5845
+ employer_combined_savings_cents: z.string().nullish(),
5573
5846
  worked_annual_minutes: z.int().nullable(),
5574
5847
  pto_annual_minutes: z.int().nullable(),
5575
5848
  holiday_annual_minutes: z.int().nullable(),
@@ -5652,147 +5925,6 @@ export const zUserResponseObject = z.object({
5652
5925
  ])).nullable()
5653
5926
  }).nullable()
5654
5927
  });
5655
- export const zUserParameters = z.intersection(z.union([
5656
- z.object({
5657
- email: z.string().min(1)
5658
- }),
5659
- z.object({
5660
- phone_number: z.string().min(1)
5661
- }),
5662
- z.object({
5663
- skip_invite: z.literal(true)
5664
- })
5665
- ]), z.object({
5666
- email: z.string().nullish(),
5667
- personal_email: z.string().nullish(),
5668
- phone_number: z.string().nullish(),
5669
- first_name: z.string(),
5670
- last_name: z.string(),
5671
- preferred_first_name: z.string().nullish(),
5672
- preferred_last_name: z.string().nullish(),
5673
- city: z.string().optional(),
5674
- state: z.string().optional(),
5675
- birth_date: z.string().optional(),
5676
- dol_apprentice_no: z.string().optional(),
5677
- winda_id: z.string().optional(),
5678
- linkedin_url: z.string().optional(),
5679
- roles: z.array(z.string()).nullish(),
5680
- avatar_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
5681
- created_by_user_id: z.string().optional(),
5682
- last_sent_by_user_id: z.string().nullish(),
5683
- skip_notify: z.boolean().optional(),
5684
- skip_invite: z.boolean().optional(),
5685
- type: zUserCompanyType.optional(),
5686
- title: z.string().optional(),
5687
- manager_user_id: z.string().optional(),
5688
- payroll_id: z.string().optional(),
5689
- hourly_rate: z.string().optional(),
5690
- compensation_type: z.enum(['hourly', 'salary']).optional(),
5691
- overtime_eligible: z.string().optional(),
5692
- enrolled_in_t_and_a: z.string().optional(),
5693
- training_annual_amount: z.string().optional(),
5694
- employer_combined_health_amount: z.string().nullish(),
5695
- employer_combined_savings: z.string().nullish(),
5696
- worked_annual_minutes: z.string().optional(),
5697
- pto_annual_minutes: z.string().optional(),
5698
- holiday_annual_minutes: z.string().optional(),
5699
- training_annual_minutes: z.string().optional(),
5700
- hire_date: z.string().optional(),
5701
- group_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
5702
- custom_fields: z.array(z.object({
5703
- custom_field_config_id: z.string(),
5704
- value: z.string().nullable()
5705
- })).optional(),
5706
- company_user_pwa_info: z.object({
5707
- address1: z.string().nullish(),
5708
- address2: z.string().nullish(),
5709
- city: z.string().nullish(),
5710
- state: z.string().nullish(),
5711
- zip: z.string().nullish(),
5712
- race: z.array(z.enum([
5713
- 'AFRICAN_AMERICAN',
5714
- 'ASIAN',
5715
- 'CAUCASIAN',
5716
- 'NATIVE_AMERICAN',
5717
- 'NOT_SPECIFIED',
5718
- 'OTHER'
5719
- ])).optional(),
5720
- sex: z.enum([
5721
- 'female',
5722
- 'male',
5723
- 'non_binary',
5724
- 'not_specified'
5725
- ]).nullish(),
5726
- local_business_license: z.string().nullish(),
5727
- drivers_license_state: z.string().nullish(),
5728
- drivers_license_number: z.string().nullish(),
5729
- ssn: z.string().nullish(),
5730
- veteran_status: z.enum([
5731
- 'protected_veteran',
5732
- 'not_protected_veteran',
5733
- 'reserves',
5734
- 'guard',
5735
- 'not_specified'
5736
- ]).nullish(),
5737
- hispanic_origin: z.enum([
5738
- 'yes',
5739
- 'no',
5740
- 'not_specified'
5741
- ]).nullish(),
5742
- ca_dir_withholding_exemptions: z.int().nullish(),
5743
- disabled: z.boolean().optional(),
5744
- il_dol_race: z.enum([
5745
- 'white',
5746
- 'black',
5747
- 'hispanic_or_latino',
5748
- 'american_indian_or_alaska_native',
5749
- 'chinese',
5750
- 'filipino',
5751
- 'asian_india',
5752
- 'vietnamese',
5753
- 'korean',
5754
- 'japanese',
5755
- 'native_hawaiian',
5756
- 'samoan',
5757
- 'chamorro',
5758
- 'other_asian',
5759
- 'other_pacific_islander',
5760
- 'other'
5761
- ]).nullish(),
5762
- il_shines_employment_type: z.enum([
5763
- 'part_time',
5764
- 'full_time',
5765
- 'seasonal_temporary',
5766
- 'independent_contract'
5767
- ]).nullish(),
5768
- il_shines_eep_qualifiers: z.array(z.enum([
5769
- 'eep_program_completed',
5770
- 'foster_care',
5771
- 'formerly_incarcerated',
5772
- 'equity_investment_eligible_community',
5773
- 'self_registered_or_unknown'
5774
- ])).optional(),
5775
- il_shines_other_programs: z.array(z.enum([
5776
- 'solar_training_pipeline_program',
5777
- 'craft_apprenticeship_program',
5778
- 'multi_cultural_jobs_program',
5779
- 'clean_jobs_workforce_network_program',
5780
- 'illinois_climate_works_prep_apprenticeship_program',
5781
- 'returning_residents_clean_jobs_training_program',
5782
- 'other'
5783
- ])).optional(),
5784
- or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).nullish(),
5785
- or_boli_race: z.array(z.enum([
5786
- 'american_indian_or_alaska_native',
5787
- 'asian',
5788
- 'hispanic_or_latino',
5789
- 'black_or_african_american',
5790
- 'native_hawaiian_or_pacific_islander',
5791
- 'white',
5792
- 'portuguese_or_brazilian'
5793
- ])).optional()
5794
- }).nullish()
5795
- }));
5796
5928
  /**
5797
5929
  * Keyset pagination cursors for the collection.
5798
5930
  */
@@ -5951,6 +6083,14 @@ export const zJobSitesResponseObject = z.object({
5951
6083
  links: zLinks,
5952
6084
  data: z.array(zJobSiteResponseObject)
5953
6085
  });
6086
+ /**
6087
+ * A page of a job's documents, with pagination metadata and navigation links.
6088
+ */
6089
+ export const zJobDocumentsResponseObject = z.object({
6090
+ meta: zMeta,
6091
+ links: zLinks,
6092
+ data: z.array(zJobDocumentResponseObject)
6093
+ });
5954
6094
  /**
5955
6095
  * A page of a job's good-faith-effort exceptions, with pagination metadata and navigation links.
5956
6096
  */
@@ -6336,8 +6476,8 @@ export const zFederalJobWageDeterminationParameters = z.object({
6336
6476
  type: z.enum(['Pwa::JobWageDeterminations::Federal']),
6337
6477
  labor_classification: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
6338
6478
  pwa_trade_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
6339
- hourly_rate_cents: z.string(),
6340
- fringe_rate_cents: z.string(),
6479
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
6480
+ fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
6341
6481
  class_code: z.string().nullish(),
6342
6482
  construction_category: z.enum([
6343
6483
  'building',
@@ -6355,8 +6495,8 @@ export const zRegionalJobWageDeterminationParameters = z.object({
6355
6495
  type: z.enum(['Pwa::JobWageDeterminations::Regional']),
6356
6496
  labor_classification: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
6357
6497
  pwa_trade_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
6358
- hourly_rate_cents: z.string(),
6359
- fringe_rate_cents: z.string().optional(),
6498
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
6499
+ fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6360
6500
  class_code: z.string().nullish(),
6361
6501
  construction_category: z.enum([
6362
6502
  'building',
@@ -6366,15 +6506,15 @@ export const zRegionalJobWageDeterminationParameters = z.object({
6366
6506
  ]).nullish(),
6367
6507
  general_wage_determination: z.string().nullish(),
6368
6508
  regional_fields: z.object({
6369
- combined_health_fringe_rate_cents: z.string().nullish(),
6370
- combined_savings_fringe_rate_cents: z.string().nullish(),
6371
- combined_holiday_pto_fringe_rate_cents: z.string().nullish(),
6372
- training_fringe_rate_cents: z.string().nullish(),
6373
- other_fringe_rate_cents: z.string().nullish(),
6374
- one_five_x_adder_rate_cents: z.string().nullish(),
6375
- two_x_adder_rate_cents: z.string().nullish(),
6376
- one_five_x_fringe_adder_rate_cents: z.string().nullish(),
6377
- two_x_fringe_adder_rate_cents: z.string().nullish()
6509
+ combined_health_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6510
+ combined_savings_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6511
+ combined_holiday_pto_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6512
+ training_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6513
+ other_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6514
+ one_five_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6515
+ two_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6516
+ one_five_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6517
+ two_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish()
6378
6518
  }).optional(),
6379
6519
  overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
6380
6520
  });
@@ -6393,8 +6533,8 @@ export const zJobWageDeterminationUpdateParameters = z.object({
6393
6533
  overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
6394
6534
  labor_classification: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
6395
6535
  pwa_trade_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
6396
- hourly_rate_cents: z.string().optional(),
6397
- fringe_rate_cents: z.string().optional(),
6536
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6537
+ fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6398
6538
  class_code: z.string().nullish(),
6399
6539
  construction_category: z.enum([
6400
6540
  'building',
@@ -6404,15 +6544,15 @@ export const zJobWageDeterminationUpdateParameters = z.object({
6404
6544
  ]).nullish(),
6405
6545
  general_wage_determination: z.string().nullish(),
6406
6546
  regional_fields: z.object({
6407
- combined_health_fringe_rate_cents: z.string().nullish(),
6408
- combined_savings_fringe_rate_cents: z.string().nullish(),
6409
- combined_holiday_pto_fringe_rate_cents: z.string().nullish(),
6410
- training_fringe_rate_cents: z.string().nullish(),
6411
- other_fringe_rate_cents: z.string().nullish(),
6412
- one_five_x_adder_rate_cents: z.string().nullish(),
6413
- two_x_adder_rate_cents: z.string().nullish(),
6414
- one_five_x_fringe_adder_rate_cents: z.string().nullish(),
6415
- two_x_fringe_adder_rate_cents: z.string().nullish()
6547
+ combined_health_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6548
+ combined_savings_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6549
+ combined_holiday_pto_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6550
+ training_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6551
+ other_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6552
+ one_five_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6553
+ two_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6554
+ one_five_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6555
+ two_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish()
6416
6556
  }).optional()
6417
6557
  });
6418
6558
  /**
@@ -6421,8 +6561,8 @@ export const zJobWageDeterminationUpdateParameters = z.object({
6421
6561
  export const zJobWageDeterminationScheduledChangeParameters = z.object({
6422
6562
  effective_date: z.iso.date(),
6423
6563
  labor_classification: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
6424
- hourly_rate_cents: z.string().optional(),
6425
- fringe_rate_cents: z.string().optional(),
6564
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6565
+ fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6426
6566
  class_code: z.string().nullish(),
6427
6567
  construction_category: z.enum([
6428
6568
  'building',
@@ -6432,15 +6572,15 @@ export const zJobWageDeterminationScheduledChangeParameters = z.object({
6432
6572
  ]).nullish(),
6433
6573
  general_wage_determination: z.string().nullish(),
6434
6574
  regional_fields: z.object({
6435
- combined_health_fringe_rate_cents: z.string().nullish(),
6436
- combined_savings_fringe_rate_cents: z.string().nullish(),
6437
- combined_holiday_pto_fringe_rate_cents: z.string().nullish(),
6438
- training_fringe_rate_cents: z.string().nullish(),
6439
- other_fringe_rate_cents: z.string().nullish(),
6440
- one_five_x_adder_rate_cents: z.string().nullish(),
6441
- two_x_adder_rate_cents: z.string().nullish(),
6442
- one_five_x_fringe_adder_rate_cents: z.string().nullish(),
6443
- two_x_fringe_adder_rate_cents: z.string().nullish()
6575
+ combined_health_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6576
+ combined_savings_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6577
+ combined_holiday_pto_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6578
+ training_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6579
+ other_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6580
+ one_five_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6581
+ two_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6582
+ one_five_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6583
+ two_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish()
6444
6584
  }).optional()
6445
6585
  });
6446
6586
  /**
@@ -6615,8 +6755,8 @@ export const zFederalProjectWageDeterminationParameters = z.object({
6615
6755
  type: z.enum(['Pwa::ProjectWageDeterminations::Federal']),
6616
6756
  labor_classification: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
6617
6757
  pwa_trade_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
6618
- hourly_rate_cents: z.string(),
6619
- fringe_rate_cents: z.string(),
6758
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
6759
+ fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
6620
6760
  class_code: z.string().nullish(),
6621
6761
  construction_category: z.enum([
6622
6762
  'building',
@@ -6634,8 +6774,8 @@ export const zRegionalProjectWageDeterminationParameters = z.object({
6634
6774
  type: z.enum(['Pwa::ProjectWageDeterminations::Regional']),
6635
6775
  labor_classification: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
6636
6776
  pwa_trade_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
6637
- hourly_rate_cents: z.string(),
6638
- fringe_rate_cents: z.string().optional(),
6777
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/),
6778
+ fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6639
6779
  class_code: z.string().nullish(),
6640
6780
  construction_category: z.enum([
6641
6781
  'building',
@@ -6645,15 +6785,15 @@ export const zRegionalProjectWageDeterminationParameters = z.object({
6645
6785
  ]).nullish(),
6646
6786
  general_wage_determination: z.string().nullish(),
6647
6787
  regional_fields: z.object({
6648
- combined_health_fringe_rate_cents: z.string().nullish(),
6649
- combined_savings_fringe_rate_cents: z.string().nullish(),
6650
- combined_holiday_pto_fringe_rate_cents: z.string().nullish(),
6651
- training_fringe_rate_cents: z.string().nullish(),
6652
- other_fringe_rate_cents: z.string().nullish(),
6653
- one_five_x_adder_rate_cents: z.string().nullish(),
6654
- two_x_adder_rate_cents: z.string().nullish(),
6655
- one_five_x_fringe_adder_rate_cents: z.string().nullish(),
6656
- two_x_fringe_adder_rate_cents: z.string().nullish()
6788
+ combined_health_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6789
+ combined_savings_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6790
+ combined_holiday_pto_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6791
+ training_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6792
+ other_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6793
+ one_five_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6794
+ two_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6795
+ one_five_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6796
+ two_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish()
6657
6797
  }).optional(),
6658
6798
  overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
6659
6799
  });
@@ -6672,8 +6812,8 @@ export const zProjectWageDeterminationUpdateParameters = z.object({
6672
6812
  overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
6673
6813
  labor_classification: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
6674
6814
  pwa_trade_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
6675
- hourly_rate_cents: z.string().optional(),
6676
- fringe_rate_cents: z.string().optional(),
6815
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6816
+ fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6677
6817
  class_code: z.string().nullish(),
6678
6818
  construction_category: z.enum([
6679
6819
  'building',
@@ -6683,15 +6823,15 @@ export const zProjectWageDeterminationUpdateParameters = z.object({
6683
6823
  ]).nullish(),
6684
6824
  general_wage_determination: z.string().nullish(),
6685
6825
  regional_fields: z.object({
6686
- combined_health_fringe_rate_cents: z.string().nullish(),
6687
- combined_savings_fringe_rate_cents: z.string().nullish(),
6688
- combined_holiday_pto_fringe_rate_cents: z.string().nullish(),
6689
- training_fringe_rate_cents: z.string().nullish(),
6690
- other_fringe_rate_cents: z.string().nullish(),
6691
- one_five_x_adder_rate_cents: z.string().nullish(),
6692
- two_x_adder_rate_cents: z.string().nullish(),
6693
- one_five_x_fringe_adder_rate_cents: z.string().nullish(),
6694
- two_x_fringe_adder_rate_cents: z.string().nullish()
6826
+ combined_health_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6827
+ combined_savings_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6828
+ combined_holiday_pto_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6829
+ training_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6830
+ other_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6831
+ one_five_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6832
+ two_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6833
+ one_five_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6834
+ two_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish()
6695
6835
  }).optional()
6696
6836
  });
6697
6837
  /**
@@ -6700,8 +6840,8 @@ export const zProjectWageDeterminationUpdateParameters = z.object({
6700
6840
  export const zProjectWageDeterminationScheduledChangeParameters = z.object({
6701
6841
  effective_date: z.iso.date(),
6702
6842
  labor_classification: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
6703
- hourly_rate_cents: z.string().optional(),
6704
- fringe_rate_cents: z.string().optional(),
6843
+ hourly_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6844
+ fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).optional(),
6705
6845
  class_code: z.string().nullish(),
6706
6846
  construction_category: z.enum([
6707
6847
  'building',
@@ -6711,15 +6851,15 @@ export const zProjectWageDeterminationScheduledChangeParameters = z.object({
6711
6851
  ]).nullish(),
6712
6852
  general_wage_determination: z.string().nullish(),
6713
6853
  regional_fields: z.object({
6714
- combined_health_fringe_rate_cents: z.string().nullish(),
6715
- combined_savings_fringe_rate_cents: z.string().nullish(),
6716
- combined_holiday_pto_fringe_rate_cents: z.string().nullish(),
6717
- training_fringe_rate_cents: z.string().nullish(),
6718
- other_fringe_rate_cents: z.string().nullish(),
6719
- one_five_x_adder_rate_cents: z.string().nullish(),
6720
- two_x_adder_rate_cents: z.string().nullish(),
6721
- one_five_x_fringe_adder_rate_cents: z.string().nullish(),
6722
- two_x_fringe_adder_rate_cents: z.string().nullish()
6854
+ combined_health_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6855
+ combined_savings_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6856
+ combined_holiday_pto_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6857
+ training_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6858
+ other_fringe_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6859
+ one_five_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6860
+ two_x_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6861
+ one_five_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
6862
+ two_x_fringe_adder_rate_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish()
6723
6863
  }).optional()
6724
6864
  });
6725
6865
  /**
@@ -6739,7 +6879,7 @@ export const zProjectWageDeterminationScheduledTerminationParameters = z.object(
6739
6879
  */
6740
6880
  export const zRateRuleEffect = z.object({
6741
6881
  type: z.enum(['wage_increment', 'fringe_increment']),
6742
- amount_cents: z.string()
6882
+ amount_cents: z.string().regex(/^[0-9]+$/)
6743
6883
  });
6744
6884
  /**
6745
6885
  * Restricts the rule to a time-of-day window.
@@ -6901,7 +7041,7 @@ export const zPayRatesRuleParameters = z.object({
6901
7041
  effective_date: z.iso.date().optional(),
6902
7042
  effect: z.object({
6903
7043
  type: z.enum(['wage_increment', 'fringe_increment']),
6904
- amount_cents: z.string()
7044
+ amount_cents: z.string().regex(/^[0-9]+$/)
6905
7045
  }),
6906
7046
  conditions: z.array(z.union([
6907
7047
  zRateRuleTimeRangeCondition,
@@ -6919,7 +7059,7 @@ export const zPayRatesRuleUpdateParameters = z.object({
6919
7059
  effective_from: z.iso.date().optional(),
6920
7060
  effect: z.object({
6921
7061
  type: z.enum(['wage_increment', 'fringe_increment']),
6922
- amount_cents: z.string()
7062
+ amount_cents: z.string().regex(/^[0-9]+$/)
6923
7063
  }).optional(),
6924
7064
  conditions: z.array(z.union([
6925
7065
  zRateRuleTimeRangeCondition,
@@ -6949,7 +7089,7 @@ export const zPayRatesRuleScheduledChangeParameters = z.object({
6949
7089
  effective_date: z.iso.date(),
6950
7090
  effect: z.object({
6951
7091
  type: z.enum(['wage_increment', 'fringe_increment']),
6952
- amount_cents: z.string()
7092
+ amount_cents: z.string().regex(/^[0-9]+$/)
6953
7093
  }).optional(),
6954
7094
  conditions: z.array(z.union([
6955
7095
  zRateRuleTimeRangeCondition,
@@ -7166,7 +7306,7 @@ export const zRateRuleParameters = z.object({
7166
7306
  effective_date: z.iso.date().nullish(),
7167
7307
  effect: z.object({
7168
7308
  type: z.enum(['wage_increment', 'fringe_increment']),
7169
- amount_cents: z.string()
7309
+ amount_cents: z.string().regex(/^[0-9]+$/)
7170
7310
  }),
7171
7311
  conditions: z.array(z.union([
7172
7312
  zRateRuleTimeRangeCondition,
@@ -7187,7 +7327,7 @@ export const zAssetsItemParameters = z.object({
7187
7327
  serial_number: z.string().nullish(),
7188
7328
  status: z.enum(['available', 'assigned']).optional(),
7189
7329
  purchase_date: z.string().nullish(),
7190
- purchase_price_cents: z.int().nullish(),
7330
+ purchase_price_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
7191
7331
  external_id: z.string().nullish(),
7192
7332
  external_system_url: z.string().nullish(),
7193
7333
  attribute_values: z.array(z.object({
@@ -7216,7 +7356,7 @@ export const zAssetsItemUpdateParameters = z.object({
7216
7356
  serial_number: z.string().nullish(),
7217
7357
  status: z.enum(['available', 'assigned']).optional(),
7218
7358
  purchase_date: z.string().nullish(),
7219
- purchase_price_cents: z.int().nullish(),
7359
+ purchase_price_cents: z.string().regex(/^[0-9]+(\.[0-9]+)?$/).nullish(),
7220
7360
  external_id: z.string().nullish(),
7221
7361
  external_system_url: z.string().nullish(),
7222
7362
  attribute_values: z.array(z.object({
@@ -8898,9 +9038,9 @@ export const zDeleteDocumentPath = z.object({
8898
9038
  id: z.string()
8899
9039
  });
8900
9040
  /**
8901
- * Success
9041
+ * No Content
8902
9042
  */
8903
- export const zDeleteDocumentResponse = zAssetsDocumentResponseObject;
9043
+ export const zDeleteDocumentResponse = z.void();
8904
9044
  export const zGetDocumentPath = z.object({
8905
9045
  item_id: z.string(),
8906
9046
  id: z.string()
@@ -9574,32 +9714,32 @@ export const zGetAssessmentPath = z.object({
9574
9714
  * Success
9575
9715
  */
9576
9716
  export const zGetAssessmentResponse = zCompetencyAssessmentResponseObject;
9577
- export const zListAssessmentKeyActivitiesPath = z.object({
9717
+ export const zListAssessmentCriteriaPath = z.object({
9578
9718
  assessment_id: z.string()
9579
9719
  });
9580
- export const zListAssessmentKeyActivitiesQuery = z.object({
9720
+ export const zListAssessmentCriteriaQuery = z.object({
9581
9721
  filter: z.string().optional(),
9582
9722
  'filter[unexpected]': z.string().optional()
9583
9723
  });
9584
9724
  /**
9585
9725
  * Candidate sees a decided review
9586
9726
  */
9587
- export const zListAssessmentKeyActivitiesResponse = z.object({
9727
+ export const zListAssessmentCriteriaResponse = z.object({
9588
9728
  meta: zMeta,
9589
9729
  links: zLinks,
9590
- data: z.array(zCompetencyAssessmentKeyActivityResponseObject)
9730
+ data: z.array(zCompetencyAssessmentCriterionResponseObject)
9591
9731
  });
9592
- export const zGetAssessmentKeyActivityPath = z.object({
9732
+ export const zGetAssessmentCriterionPath = z.object({
9593
9733
  assessment_id: z.string(),
9594
9734
  id: z.string()
9595
9735
  });
9596
9736
  /**
9597
9737
  * Candidate sees a decided review
9598
9738
  */
9599
- export const zGetAssessmentKeyActivityResponse = zCompetencyAssessmentKeyActivityResponseObject;
9739
+ export const zGetAssessmentCriterionResponse = zCompetencyAssessmentCriterionResponseObject;
9600
9740
  export const zListEvidenceItemsPath = z.object({
9601
9741
  assessment_id: z.string(),
9602
- key_activity_id: z.string()
9742
+ criterion_id: z.string()
9603
9743
  });
9604
9744
  export const zListEvidenceItemsQuery = z.object({
9605
9745
  'filter[kind]': z.enum([
@@ -9620,7 +9760,7 @@ export const zListEvidenceItemsResponse = z.object({
9620
9760
  });
9621
9761
  export const zGetEvidenceItemPath = z.object({
9622
9762
  assessment_id: z.string(),
9623
- key_activity_id: z.string(),
9763
+ criterion_id: z.string(),
9624
9764
  id: z.string()
9625
9765
  });
9626
9766
  /**
@@ -10306,6 +10446,62 @@ export const zUpdateGroupPath = z.object({
10306
10446
  * Success
10307
10447
  */
10308
10448
  export const zUpdateGroupResponse = zGroupResponseObject;
10449
+ export const zListJobDocumentsPath = z.object({
10450
+ job_id: z.string()
10451
+ });
10452
+ export const zListJobDocumentsQuery = z.object({
10453
+ 'filter[type]': z.array(z.enum([
10454
+ 'CERTIFICATIONS',
10455
+ 'CHECKLIST',
10456
+ 'MAP',
10457
+ 'MSA',
10458
+ 'ONSITE_POSTER',
10459
+ 'OTHER',
10460
+ 'PARTS_INSTRUCTIONS',
10461
+ 'PHOTO',
10462
+ 'PO',
10463
+ 'PWA_DOCUMENTATION',
10464
+ 'RESUME',
10465
+ 'WO'
10466
+ ])).optional()
10467
+ });
10468
+ /**
10469
+ * Success
10470
+ */
10471
+ export const zListJobDocumentsResponse = zJobDocumentsResponseObject;
10472
+ export const zCreateJobDocumentBody = zJobDocumentParameters;
10473
+ export const zCreateJobDocumentPath = z.object({
10474
+ job_id: z.string()
10475
+ });
10476
+ /**
10477
+ * Created
10478
+ */
10479
+ export const zCreateJobDocumentResponse = zJobDocumentResponseObject;
10480
+ export const zDeleteJobDocumentPath = z.object({
10481
+ job_id: z.string(),
10482
+ id: z.string()
10483
+ });
10484
+ /**
10485
+ * No Content
10486
+ */
10487
+ export const zDeleteJobDocumentResponse = z.void();
10488
+ export const zGetJobDocumentPath = z.object({
10489
+ job_id: z.string(),
10490
+ id: z.string()
10491
+ });
10492
+ /**
10493
+ * Success
10494
+ */
10495
+ export const zGetJobDocumentResponse = zJobDocumentResponseObject;
10496
+ export const zUpdateJobDocumentBody = zJobDocumentUpdateParameters;
10497
+ export const zUpdateJobDocumentPath = z.object({
10498
+ job_id: z.string(),
10499
+ id: z.string()
10500
+ });
10501
+ /**
10502
+ * Success
10503
+ */
10504
+ export const zUpdateJobDocumentResponse = zJobDocumentResponseObject;
10309
10505
  export const zListJobFormAssignmentTasksPath = z.object({
10310
10506
  job_id: z.string()
10311
10507
  });
@@ -13417,6 +13613,9 @@ export const zCreateCompanyPath = z.object({
13417
13613
  * Created
13418
13614
  */
13419
13615
  export const zCreateCompanyResponse = zUserResponseObject;
13616
+ export const zRemoveUserFromCompanyHeaders = z.object({
13617
+ 'If-Match': z.string()
13618
+ });
13420
13619
  export const zRemoveUserFromCompanyPath = z.object({
13421
13620
  user_id: z.string(),
13422
13621
  id: z.string()