@dsptch-work/api-client 0.30.0 → 0.32.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.
@@ -58,7 +58,7 @@ export const zProblem = z.object({
58
58
  *
59
59
  * **Malformed Request Body**
60
60
  *
61
- * 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.
61
+ * 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. A JSON object that repeats a key, at any depth, is refused too rather than resolved to one of its values; send each key once per object.
62
62
  *
63
63
  * ### non_range_filter_value
64
64
  *
@@ -82,7 +82,7 @@ export const zProblem = z.object({
82
82
  *
83
83
  * **Required Parameter Missing**
84
84
  *
85
- * A required request parameter is absent or empty. The message names it; supply the parameter and retry.
85
+ * A required request parameter is absent. Some older endpoints also treat an empty value as absent. The message names the parameter; supply it and retry.
86
86
  *
87
87
  * ### parameter_not_object
88
88
  *
@@ -164,6 +164,12 @@ export const zProblem = z.object({
164
164
  *
165
165
  * ## 409
166
166
  *
167
+ * ### already_subscribed
168
+ *
169
+ * **Already Subscribed**
170
+ *
171
+ * The user already holds this subscription, with other delivery methods than the request names. Subscribing again never changes a held subscription: delete it, then subscribe with the delivery methods you want.
172
+ *
167
173
  * ### already_terminated
168
174
  *
169
175
  * **Termination Already Scheduled**
@@ -380,6 +386,7 @@ export const zProblemTypeCatalog = z.enum([
380
386
  'insufficient_api_key_scope',
381
387
  'user_scoped_key_required',
382
388
  'not_found',
389
+ 'already_subscribed',
383
390
  'already_terminated',
384
391
  'import_in_progress',
385
392
  'pay_schedule_already_exists',
@@ -471,6 +478,102 @@ export const zDirectUploadResponseObject = z.object({
471
478
  headers: z.record(z.string(), z.string())
472
479
  })
473
480
  });
481
+ /**
482
+ * A durable standing. The candidate passed the standard at level_sort_order. There is no level id, so the standing survives the next revision. This API does not create or update qualifications.
483
+ */
484
+ export const zCompetencyQualificationResponseObject = z.object({
485
+ id: z.string(),
486
+ candidate_user_id: z.string(),
487
+ competencies_standard_id: z.string(),
488
+ level_sort_order: z.int(),
489
+ awarded_at: z.iso.datetime(),
490
+ last_verified_at: z.iso.datetime(),
491
+ created_at: z.iso.datetime(),
492
+ updated_at: z.iso.datetime()
493
+ });
494
+ /**
495
+ * An assessment pinned to one level on one revision. competencies_standard_version_id is that revision, not whatever revision is active now. outcome is null until the assessment is decided. Submit, claim, return, and decide are web-only.
496
+ */
497
+ export const zCompetencyAssessmentResponseObject = z.object({
498
+ id: z.string(),
499
+ candidate_user_id: z.string(),
500
+ competencies_level_id: z.string(),
501
+ level_sort_order: z.int(),
502
+ competencies_standard_version_id: z.string(),
503
+ competencies_standard_id: z.string(),
504
+ predecessor_assessment_id: z.string().nullable(),
505
+ status: z.enum([
506
+ 'evidence_collection',
507
+ 'submitted',
508
+ 'in_review',
509
+ 'decided'
510
+ ]),
511
+ outcome: z.enum(['competent', 'not_yet_competent']).nullable(),
512
+ requested_by_user_id: z.string(),
513
+ requested_at: z.iso.datetime(),
514
+ submitted_by_user_id: z.string().nullable(),
515
+ submitted_at: z.iso.datetime().nullable(),
516
+ claimed_by_user_id: z.string().nullable(),
517
+ claimed_at: z.iso.datetime().nullable(),
518
+ decided_by_user_id: z.string().nullable(),
519
+ decided_at: z.iso.datetime().nullable(),
520
+ created_at: z.iso.datetime(),
521
+ updated_at: z.iso.datetime()
522
+ });
523
+ /**
524
+ * 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.
525
+ */
526
+ export const zCompetencyAssessmentKeyActivityResponseObject = z.object({
527
+ id: z.string(),
528
+ competencies_assessment_id: z.string(),
529
+ competencies_key_activity_id: z.string(),
530
+ assessment_methods: z.array(z.enum([
531
+ 'direct_observation',
532
+ 'simulation',
533
+ 'oral_questioning',
534
+ 'written_questioning',
535
+ 'products_of_work',
536
+ 'recognized_prior_learning',
537
+ 'witness_testimony',
538
+ 'other'
539
+ ])),
540
+ aa_feedback: z.string().nullable(),
541
+ evidence_submitted_on: z.iso.date().nullable(),
542
+ assessed_by_user_id: z.string().nullable(),
543
+ assessed_at: z.iso.datetime().nullable(),
544
+ carried_from_id: z.string().nullable(),
545
+ decided_at: z.iso.datetime().nullable(),
546
+ decision: z.enum([
547
+ 'pending',
548
+ 'competent',
549
+ 'not_yet_competent'
550
+ ]).optional(),
551
+ qa_feedback: z.string().nullish(),
552
+ created_at: z.iso.datetime(),
553
+ updated_at: z.iso.datetime()
554
+ });
555
+ /**
556
+ * One piece of evidence on an assessment line. File bytes are not served. file_name, file_byte_size, and file_content_type describe an upload and are null for other kinds.
557
+ */
558
+ export const zCompetencyEvidenceItemResponseObject = z.object({
559
+ id: z.string(),
560
+ competencies_assessment_key_activity_id: z.string(),
561
+ kind: z.enum([
562
+ 'upload',
563
+ 'form_submission',
564
+ 'certification'
565
+ ]),
566
+ description: z.string().nullable(),
567
+ captured_on: z.iso.date(),
568
+ form_submission_id: z.string().nullable(),
569
+ user_certification_id: z.string().nullable(),
570
+ added_by_user_id: z.string(),
571
+ file_name: z.string().nullable(),
572
+ file_byte_size: z.int().nullable(),
573
+ file_content_type: z.string().nullable(),
574
+ created_at: z.iso.datetime(),
575
+ updated_at: z.iso.datetime()
576
+ });
474
577
  /**
475
578
  * A DOL-registered apprenticeship program, sponsored by a company and visible to its sponsor and enrolled employers.
476
579
  */
@@ -629,27 +732,27 @@ export const zApprenticeshipAllocationResponseObject = z.object({
629
732
  * Record hours toward an apprentice's wage progression. Creation requires a user-scoped API key, since the row attributes the hours to the person who recorded them. Omit timekeeping_time_card_id for a standalone allocation entered outside the time card system, or supply it to link the allocation to one of the apprentice's own time cards; the effective timestamp then derives from the card's pay period and cannot be overridden. Recording the allocation rebuilds progression and requests wage repricing in the background.
630
733
  */
631
734
  export const zApprenticeshipAllocationCreateParameters = z.object({
632
- apprenticeship_work_process_category_id: z.string().optional(),
633
- timekeeping_time_card_id: z.string().optional(),
735
+ timekeeping_time_card_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
736
+ apprenticeship_work_process_category_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
634
737
  minutes: z.int(),
635
- description: z.string().optional(),
636
- allocated_at: z.iso.datetime().optional()
738
+ description: z.string().nullish(),
739
+ allocated_at: z.string().optional()
637
740
  });
638
741
  /**
639
742
  * Correct an existing allocation's hours, work process category, description, or (for a standalone allocation) effective timestamp. The time card an allocation is linked to cannot be changed after creation. Any change that shifts progression rebuilds it and requests historical wage repricing in the background, including locked time cards.
640
743
  */
641
744
  export const zApprenticeshipAllocationUpdateParameters = z.object({
642
- apprenticeship_work_process_category_id: z.string().nullish(),
745
+ apprenticeship_work_process_category_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
643
746
  minutes: z.int().optional(),
644
747
  description: z.string().nullish(),
645
- allocated_at: z.iso.datetime().optional()
748
+ allocated_at: z.string().optional()
646
749
  });
647
750
  /**
648
- * Enroll a user as an apprentice under an employer in a program; the employing program-employer record is derived from the enrolling company and the program in the URL path. Apprentices cannot be updated through the API, only created.
751
+ * Enroll a user as an apprentice under an employer in a program; the employing program-employer record is derived from the enrolling company and the program in the URL path. Apprentices cannot be updated through the API, only created. Omitting a required field answers 400; a null for a non-nullable field, a blank ID, a wrong JSON type, an unlisted status, or a date that is not a YYYY-MM-DD calendar date answers 422.
649
752
  */
650
753
  export const zApprenticeshipApprenticeParameters = z.object({
651
- apprenticeship_wage_schedule_id: z.string(),
652
- user_id: z.string(),
754
+ apprenticeship_wage_schedule_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
755
+ user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
653
756
  status: z.enum([
654
757
  'active',
655
758
  'pending',
@@ -667,7 +770,7 @@ export const zApprenticeshipApprenticeParameters = z.object({
667
770
  operative_end_date: z.iso.date().nullish()
668
771
  });
669
772
  /**
670
- * Create an apprenticeship program sponsored by your company; the sponsor is always your company and is never taken from the request body.
773
+ * Create an apprenticeship program sponsored by your company; the sponsor is always your company and is never taken from the request body. Omitting program_number answers 400; a null for a non-nullable field, a wrong JSON type, or an unlisted registration_agency_type answers 422.
671
774
  */
672
775
  export const zApprenticeshipProgramParameters = z.object({
673
776
  program_number: z.string(),
@@ -677,7 +780,7 @@ export const zApprenticeshipProgramParameters = z.object({
677
780
  registration_agency_type: z.enum(['federal', 'regional']).nullish()
678
781
  });
679
782
  /**
680
- * Update an apprenticeship program sponsored by your company. Send only the fields to change; the sponsor is fixed to your company.
783
+ * Update an apprenticeship program sponsored by your company. Send only the fields to change; the sponsor is fixed to your company. A null for a non-nullable field, a wrong JSON type, or an unlisted registration_agency_type answers 422.
681
784
  */
682
785
  export const zApprenticeshipProgramUpdateParameters = z.object({
683
786
  program_number: z.string().optional(),
@@ -687,7 +790,7 @@ export const zApprenticeshipProgramUpdateParameters = z.object({
687
790
  registration_agency_type: z.enum(['federal', 'regional']).nullish()
688
791
  });
689
792
  /**
690
- * Create an occupation (trade) within a sponsored program; the program is taken from the URL path.
793
+ * Create an occupation (trade) within a sponsored program; the program is taken from the URL path. Omitting a required field answers 400; a null for a non-nullable field, a wrong JSON type, or an unlisted occupation_type answers 422.
691
794
  */
692
795
  export const zApprenticeshipOccupationParameters = z.object({
693
796
  rapids_code: z.string(),
@@ -705,7 +808,7 @@ export const zApprenticeshipOccupationParameters = z.object({
705
808
  num_journeyworkers: z.int()
706
809
  });
707
810
  /**
708
- * Update an occupation (trade) within a sponsored program. Send only the fields to change; the program is taken from the URL path.
811
+ * Update an occupation (trade) within a sponsored program. Send only the fields to change; the program is taken from the URL path. A null for a non-nullable field, a wrong JSON type, or an unlisted occupation_type answers 422.
709
812
  */
710
813
  export const zApprenticeshipOccupationUpdateParameters = z.object({
711
814
  rapids_code: z.string().optional(),
@@ -726,14 +829,14 @@ export const zApprenticeshipOccupationUpdateParameters = z.object({
726
829
  * Create an authorization for an employer to employ apprentices in a program; only the program's sponsor may manage this roster.
727
830
  */
728
831
  export const zApprenticeshipProgramEmployerParameters = z.object({
729
- company_id: z.string(),
832
+ company_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
730
833
  require_timecard_allocation: z.boolean().optional()
731
834
  });
732
835
  /**
733
836
  * Update an employer authorization in a program. Send only the fields to change; only the program's sponsor may manage this roster, and a company-scoped key may change only the row naming its own company.
734
837
  */
735
838
  export const zApprenticeshipProgramEmployerUpdateParameters = z.object({
736
- company_id: z.string().optional(),
839
+ company_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
737
840
  require_timecard_allocation: z.boolean().optional()
738
841
  });
739
842
  /**
@@ -943,17 +1046,17 @@ export const zPeopleEmploymentResponseObject = z.object({
943
1046
  * Create a distinct employment stint for an existing user in the credential company. Only user_id and hire_date are required; omitted optional fields use the defaults or null values described below. This does not create a user, invitation, role, group, or login identity.
944
1047
  */
945
1048
  export const zPeopleEmploymentCreateParameters = z.object({
946
- user_id: z.string(),
1049
+ user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
947
1050
  hire_date: z.iso.date(),
948
1051
  type: z.enum(['EMPLOYEE', 'CONTRACTOR']).optional(),
949
1052
  title: z.string().nullish(),
950
- manager_user_id: z.string().nullish(),
1053
+ manager_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
951
1054
  payroll_id: z.string().nullish(),
952
1055
  enrolled_in_t_and_a: z.boolean().optional(),
953
1056
  compensation_type: z.enum(['hourly', 'salary']).optional(),
954
1057
  hourly_rate_cents: z.string().nullish(),
955
1058
  overtime_eligible: z.boolean().nullish(),
956
- overtime_package_id: z.string().nullish(),
1059
+ overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
957
1060
  worked_annual_minutes: z.int().nullish(),
958
1061
  pto_annual_minutes: z.int().nullish(),
959
1062
  holiday_annual_minutes: z.int().nullish(),
@@ -966,10 +1069,11 @@ export const zPeopleEmploymentCreateParameters = z.object({
966
1069
  * 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.
967
1070
  */
968
1071
  export const zPeopleEmploymentScheduledChangeCreateParameters = z.object({
1072
+ effective_date: z.iso.date(),
969
1073
  compensation_type: z.enum(['hourly', 'salary']).optional(),
970
1074
  hourly_rate_cents: z.string().nullish(),
971
1075
  overtime_eligible: z.boolean().nullish(),
972
- overtime_package_id: z.string().nullish(),
1076
+ overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
973
1077
  worked_annual_minutes: z.int().nullish(),
974
1078
  pto_annual_minutes: z.int().nullish(),
975
1079
  holiday_annual_minutes: z.int().nullish(),
@@ -977,8 +1081,7 @@ export const zPeopleEmploymentScheduledChangeCreateParameters = z.object({
977
1081
  training_annual_amount_cents: z.string().nullish(),
978
1082
  employer_combined_health_amount_cents: z.string().nullish(),
979
1083
  employer_combined_savings_cents: z.string().nullish(),
980
- companies_department_id: z.string().nullish(),
981
- effective_date: z.iso.date()
1084
+ companies_department_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
982
1085
  });
983
1086
  /**
984
1087
  * Request body for changing values at one exact employment boundary. Today and past dates must name the latest version's start; future exact boundaries remain editable. Send only the fields to change; omitted values remain as recorded at that boundary. The boundary date cannot move.
@@ -987,7 +1090,7 @@ export const zPeopleEmploymentScheduledChangeUpdateParameters = z.object({
987
1090
  compensation_type: z.enum(['hourly', 'salary']).optional(),
988
1091
  hourly_rate_cents: z.string().nullish(),
989
1092
  overtime_eligible: z.boolean().nullish(),
990
- overtime_package_id: z.string().nullish(),
1093
+ overtime_package_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
991
1094
  worked_annual_minutes: z.int().nullish(),
992
1095
  pto_annual_minutes: z.int().nullish(),
993
1096
  holiday_annual_minutes: z.int().nullish(),
@@ -995,13 +1098,13 @@ export const zPeopleEmploymentScheduledChangeUpdateParameters = z.object({
995
1098
  training_annual_amount_cents: z.string().nullish(),
996
1099
  employer_combined_health_amount_cents: z.string().nullish(),
997
1100
  employer_combined_savings_cents: z.string().nullish(),
998
- companies_department_id: z.string().nullish()
1101
+ companies_department_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
999
1102
  });
1000
1103
  /**
1001
1104
  * Parameters for moving where an employment stint's valid-time timeline begins.
1002
1105
  */
1003
1106
  export const zPeopleEmploymentGenesisParameters = z.object({
1004
- effective_date: z.iso.date().optional()
1107
+ effective_date: z.iso.date()
1005
1108
  });
1006
1109
  /**
1007
1110
  * Parameters for scheduling when an employment stint stops being valid.
@@ -1015,7 +1118,7 @@ export const zPeopleEmploymentScheduledTerminationParameters = z.object({
1015
1118
  export const zPeopleEmploymentUpdateParameters = z.object({
1016
1119
  type: z.enum(['EMPLOYEE', 'CONTRACTOR']).optional(),
1017
1120
  title: z.string().nullish(),
1018
- manager_user_id: z.string().nullish(),
1121
+ manager_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
1019
1122
  payroll_id: z.string().nullish(),
1020
1123
  enrolled_in_t_and_a: z.boolean().optional()
1021
1124
  });
@@ -1267,7 +1370,7 @@ export const zPerDiemResponseObject = z.object({
1267
1370
  updated_at: z.iso.datetime()
1268
1371
  });
1269
1372
  /**
1270
- * Request body for creating a per diem. name, currency, and rate_cents are required.
1373
+ * Request body for creating a per diem. Send fields in JSON; the per diem belongs to the company that owns the API key. name, currency, and rate_cents are required.
1271
1374
  */
1272
1375
  export const zPerDiemParameters = z.object({
1273
1376
  name: z.string(),
@@ -1277,11 +1380,11 @@ export const zPerDiemParameters = z.object({
1277
1380
  taxable: z.boolean().optional(),
1278
1381
  default: z.boolean().nullish(),
1279
1382
  active: z.boolean().nullish(),
1280
- work_type_ids: z.array(z.string()).optional(),
1281
- timekeeping_timecode_ids: z.array(z.string()).optional()
1383
+ work_type_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
1384
+ timekeeping_timecode_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional()
1282
1385
  });
1283
1386
  /**
1284
- * Request body for updating a per diem. Send only the fields to change.
1387
+ * Request body for updating a per diem. Send only fields to change in JSON; omitted fields remain unchanged.
1285
1388
  */
1286
1389
  export const zPerDiemUpdateParameters = z.object({
1287
1390
  name: z.string().optional(),
@@ -1291,8 +1394,8 @@ export const zPerDiemUpdateParameters = z.object({
1291
1394
  taxable: z.boolean().optional(),
1292
1395
  default: z.boolean().nullish(),
1293
1396
  active: z.boolean().nullish(),
1294
- work_type_ids: z.array(z.string()).optional(),
1295
- timekeeping_timecode_ids: z.array(z.string()).optional()
1397
+ work_type_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
1398
+ timekeeping_timecode_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional()
1296
1399
  });
1297
1400
  /**
1298
1401
  * The filled attribute values of a product or item — one entry per attribute its category makes fillable on that record.
@@ -1423,17 +1526,17 @@ export const zDepartmentResponseObject = z.object({
1423
1526
  updated_at: z.iso.datetime()
1424
1527
  });
1425
1528
  /**
1426
- * Request body for creating a department.
1529
+ * Request body for creating a department. Send fields in JSON; the department belongs to the company that owns the API key.
1427
1530
  */
1428
1531
  export const zDepartmentParameters = z.object({
1429
- name: z.string().min(1),
1532
+ name: z.string(),
1430
1533
  description: z.string().nullish()
1431
1534
  });
1432
1535
  /**
1433
- * Request body for updating a department. Send only the fields to change.
1536
+ * Request body for updating a department. Send only fields to change in JSON; omitted fields remain unchanged.
1434
1537
  */
1435
1538
  export const zDepartmentUpdateParameters = z.object({
1436
- name: z.string().min(1).optional(),
1539
+ name: z.string().optional(),
1437
1540
  description: z.string().nullish()
1438
1541
  });
1439
1542
  /**
@@ -1456,16 +1559,16 @@ export const zTimeCardPerDiemResponseObject = z.object({
1456
1559
  */
1457
1560
  export const zTimeCardPerDiemParameters = z.object({
1458
1561
  date: z.iso.date(),
1459
- approver_user_id: z.string(),
1460
- per_diem_id: z.string().optional()
1562
+ approver_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
1563
+ per_diem_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
1461
1564
  });
1462
1565
  /**
1463
1566
  * Request body for updating a per diem recorded on a time card. Send only the fields to change; the time card comes from the URL path.
1464
1567
  */
1465
1568
  export const zTimeCardPerDiemUpdateParameters = z.object({
1466
1569
  date: z.iso.date().optional(),
1467
- approver_user_id: z.string().optional(),
1468
- per_diem_id: z.string().optional()
1570
+ approver_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
1571
+ per_diem_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
1469
1572
  });
1470
1573
  /**
1471
1574
  * A holiday on a pay schedule's holiday calendar — a fixed (month + day) or floating (nth weekday of a month) date that gets holiday-pay treatment when a time entry's timecode opts into holiday handling.
@@ -1502,12 +1605,12 @@ export const zAttestationConfigResponseObject = z.object({
1502
1605
  updated_at: z.iso.datetime()
1503
1606
  });
1504
1607
  /**
1505
- * Create an attestation config on a pay schedule; content and expected_response are required. The pay schedule is taken from the URL path.
1608
+ * Create an attestation config on a pay schedule; content and expected_response are required, and omitting either answers 400. A null or wrong-typed value answers 422. The pay schedule is taken from the URL path.
1506
1609
  */
1507
1610
  export const zAttestationConfigParameters = z.object({
1508
1611
  content: z.string(),
1509
1612
  expected_response: z.boolean(),
1510
- us_state_id: z.string().nullish()
1613
+ us_state_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
1511
1614
  });
1512
1615
  /**
1513
1616
  * Create the company's first pay schedule. Time and payroll modes inherit company defaults.
@@ -1525,15 +1628,15 @@ export const zPayPeriodConfigParameters = z.object({
1525
1628
  z.literal(6)
1526
1629
  ]),
1527
1630
  tz_name: z.string(),
1528
- currency: z.string().optional().default('USD'),
1529
- rounding_interval: z.union([z.literal(1), z.literal(15)]).optional().default(1),
1631
+ currency: z.string().optional(),
1632
+ rounding_interval: z.union([z.literal(1), z.literal(15)]).optional(),
1530
1633
  payroll_system: z.enum([
1531
1634
  'rippling',
1532
1635
  'quickbooks_online',
1533
1636
  'paychex',
1534
1637
  'gusto'
1535
1638
  ]).nullish(),
1536
- paid_after_holiday: z.boolean().optional().default(true),
1639
+ paid_after_holiday: z.boolean().optional(),
1537
1640
  arrear_days: z.int().gte(0),
1538
1641
  pay_run_deadline_days: z.int().gte(1),
1539
1642
  pay_run_deadline_clock_time: z.string().regex(/^([01][0-9]|2[0-3]):[0-5][0-9]$/),
@@ -1662,13 +1765,13 @@ export const zPayPeriodConfigHistoryVersionObject = z.object({
1662
1765
  corrections: z.array(zPayPeriodConfigHistoryCorrectionObject)
1663
1766
  });
1664
1767
  /**
1665
- * Create 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.
1768
+ * Create a holiday on a pay schedule. name is required. Send date alone for a fixed holiday on that date, or holiday_type and month with mday (fixed) or wday + week (floating).
1666
1769
  */
1667
1770
  export const zHolidayParameters = z.object({
1668
1771
  name: z.string(),
1669
1772
  date: z.iso.date().optional(),
1670
- holiday_type: z.enum(['fixed', 'floating']),
1671
- month: z.int(),
1773
+ holiday_type: z.enum(['fixed', 'floating']).optional(),
1774
+ month: z.int().optional(),
1672
1775
  mday: z.int().optional(),
1673
1776
  wday: z.int().optional(),
1674
1777
  week: z.int().optional(),
@@ -2003,7 +2106,7 @@ export const zPwaTradeUpdateParameters = z.object({
2003
2106
  * Parameters for merging one PWA trade (craft) into another in the same pool.
2004
2107
  */
2005
2108
  export const zPwaTradeMergeParameters = z.object({
2006
- target_trade_id: z.string()
2109
+ target_trade_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
2007
2110
  });
2008
2111
  /**
2009
2112
  * A reviewed apprentice-scope decision pairing a registered apprenticeship occupation with a craft (trade). The row's existence means the pair was reviewed; scope_status carries the verdict. A pair with no row is undecided and denies apprentice treatment.
@@ -2020,14 +2123,14 @@ export const zPwaTradeApprenticeshipOccupationResponseObject = z.object({
2020
2123
  * Parameters for recording an apprentice-scope decision on a trade.
2021
2124
  */
2022
2125
  export const zPwaTradeApprenticeshipOccupationCreateParameters = z.object({
2023
- apprenticeship_occupation_id: z.string(),
2024
- scope_status: z.enum(['in_scope', 'out_of_scope']).nullish()
2126
+ apprenticeship_occupation_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
2127
+ scope_status: z.enum(['in_scope', 'out_of_scope']).optional()
2025
2128
  });
2026
2129
  /**
2027
2130
  * Parameters for flipping an existing apprentice-scope decision's verdict.
2028
2131
  */
2029
2132
  export const zPwaTradeApprenticeshipOccupationUpdateParameters = z.object({
2030
- scope_status: z.enum(['in_scope', 'out_of_scope']).nullish()
2133
+ scope_status: z.enum(['in_scope', 'out_of_scope']).optional()
2031
2134
  });
2032
2135
  /**
2033
2136
  * Prevailing-wage / apprenticeship (PWA) compliance details for a job, used in certified-payroll reporting. Common fields are always present when this object exists; regional fields appear only when applicable to the job's region and regional PWA mode. The property is null when no PWA details have been configured; PWA tracking modes alone do not materialize it.
@@ -2068,13 +2171,13 @@ export const zGroupResponseObject = z.object({
2068
2171
  updated_at: z.iso.datetime()
2069
2172
  });
2070
2173
  /**
2071
- * Request body for creating a group.
2174
+ * Request body for creating a group. Send fields in JSON; the group belongs to the company that owns the API key.
2072
2175
  */
2073
2176
  export const zGroupParameters = z.object({
2074
2177
  name: z.string()
2075
2178
  });
2076
2179
  /**
2077
- * Request body for updating a group. Send only the fields to change.
2180
+ * Request body for updating a group. Send only fields to change in JSON; omitted fields remain unchanged.
2078
2181
  */
2079
2182
  export const zGroupUpdateParameters = z.object({
2080
2183
  name: z.string().optional()
@@ -2094,7 +2197,7 @@ export const zUserUpdateParameters = z.object({
2094
2197
  state: z.string().nullish(),
2095
2198
  birth_date: z.string().nullish(),
2096
2199
  dol_apprentice_no: z.string().nullish(),
2097
- avatar_signed_id: z.string().nullish()
2200
+ avatar_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
2098
2201
  });
2099
2202
  /**
2100
2203
  * 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.
@@ -2158,7 +2261,7 @@ export const zManagerTimeEntryApprovalParameters = z.object({
2158
2261
  'approved',
2159
2262
  'declined'
2160
2263
  ]),
2161
- approver_user_id: z.string()
2264
+ approver_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
2162
2265
  });
2163
2266
  /**
2164
2267
  * The time-entry body fields shared by the create and update bodies; each of those declares its own requiredness.
@@ -2227,7 +2330,7 @@ export const zFormSubmissionResponseObject = z.object({
2227
2330
  * Request body for scheduling a future-dated compensation change. effective_date sets when the new values take effect; earlier history is preserved as its own version. Covers the pay, benefit, accrual, and department fields.
2228
2331
  */
2229
2332
  export const zUserCompanyScheduledChangesParameters = z.object({
2230
- effective_date: z.string(),
2333
+ effective_date: z.iso.date(),
2231
2334
  hourly_rate: z.string().nullish(),
2232
2335
  compensation_type: z.enum(['hourly', 'salary']).optional(),
2233
2336
  overtime_eligible: z.boolean().optional(),
@@ -2238,7 +2341,7 @@ export const zUserCompanyScheduledChangesParameters = z.object({
2238
2341
  pto_annual_minutes: z.int().nullish(),
2239
2342
  holiday_annual_minutes: z.int().nullish(),
2240
2343
  training_annual_minutes: z.int().nullish(),
2241
- companies_department_id: z.string().nullish()
2344
+ companies_department_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
2242
2345
  });
2243
2346
  /**
2244
2347
  * A work type: a named category of job activity, either a shared global default (no owning company) or an entry scoped to a specific company.
@@ -2264,18 +2367,18 @@ export const zPositionFunctionResponseObject = z.object({
2264
2367
  updated_at: z.iso.datetime()
2265
2368
  });
2266
2369
  /**
2267
- * Request body for creating a position function.
2370
+ * Request body for creating a position function. Send fields in JSON; the function belongs to the company that owns the API key.
2268
2371
  */
2269
2372
  export const zPositionFunctionParameters = z.object({
2270
- value: z.string().min(1),
2271
- description: z.string().min(1)
2373
+ value: z.string(),
2374
+ description: z.string()
2272
2375
  });
2273
2376
  /**
2274
- * Request body for updating a position function. Send only the fields to change.
2377
+ * Request body for updating a position function. Send only fields to change in JSON; omitted fields remain unchanged.
2275
2378
  */
2276
2379
  export const zPositionFunctionUpdateParameters = z.object({
2277
- value: z.string().min(1).optional(),
2278
- description: z.string().min(1).optional()
2380
+ value: z.string().optional(),
2381
+ description: z.string().optional()
2279
2382
  });
2280
2383
  export const zCompanyResponseObject = z.object({
2281
2384
  id: z.string(),
@@ -2327,79 +2430,10 @@ export const zCompanyResponseObject = z.object({
2327
2430
  created_at: z.iso.datetime(),
2328
2431
  updated_at: z.iso.datetime()
2329
2432
  });
2330
- export const zCompanyParameters = z.intersection(z.union([
2331
- z.object({
2332
- name: z.string()
2333
- }),
2334
- z.object({
2335
- legal_name: z.string().nullable()
2336
- }),
2337
- z.object({
2338
- description: z.string().nullable()
2339
- }),
2340
- z.object({
2341
- address: z.string().nullable()
2342
- }),
2343
- z.object({
2344
- website: z.string().nullable()
2345
- }),
2346
- z.object({
2347
- phone_number: z.string().nullable()
2348
- }),
2349
- z.object({
2350
- email: z.string().nullable()
2351
- }),
2352
- z.object({
2353
- color_hex: z.string()
2354
- }),
2355
- z.object({
2356
- tagline: z.string().nullable()
2357
- }),
2358
- z.object({
2359
- founding_year: z.int().nullable()
2360
- }),
2361
- z.object({
2362
- corporate_structure: z.enum([
2363
- 'corporation',
2364
- 'llc',
2365
- 'partnership',
2366
- 'sole_proprietorship',
2367
- 's_corporation'
2368
- ]).nullable()
2369
- }),
2370
- z.object({
2371
- employee_count_range: z.enum([
2372
- 'one_to_ten',
2373
- 'eleven_to_fifty',
2374
- 'fifty_one_to_two_hundred',
2375
- 'two_hundred_one_to_five_hundred',
2376
- 'five_hundred_one_to_one_thousand',
2377
- 'one_thousand_one_to_five_thousand',
2378
- 'five_thousand_one_to_ten_thousand',
2379
- 'ten_thousand_one_plus'
2380
- ]).nullable()
2381
- }),
2382
- z.object({
2383
- revenue_range: z.enum([
2384
- 'zero_to_one_million',
2385
- 'one_to_ten_million',
2386
- 'ten_to_twenty_five_million',
2387
- 'twenty_five_to_fifty_million',
2388
- 'fifty_to_one_hundred_million',
2389
- 'one_hundred_to_two_fifty_million',
2390
- 'two_fifty_to_five_hundred_million',
2391
- 'five_hundred_to_one_billion',
2392
- 'one_billion_to_ten_billion',
2393
- 'ten_billion_plus'
2394
- ]).nullable()
2395
- }),
2396
- z.object({
2397
- naics_code: z.string().nullable()
2398
- }),
2399
- z.object({
2400
- linkedin_url: z.string().nullable()
2401
- })
2402
- ]), z.object({
2433
+ /**
2434
+ * Request body for updating your own company's public profile. Send only fields to change in JSON; omitted fields remain unchanged. A value of the wrong JSON type, or null for a field that does not take it, answers 422. Other company settings are edited in the web app.
2435
+ */
2436
+ export const zCompanyParameters = z.object({
2403
2437
  name: z.string().optional(),
2404
2438
  legal_name: z.string().nullish(),
2405
2439
  description: z.string().nullish(),
@@ -2441,7 +2475,7 @@ export const zCompanyParameters = z.intersection(z.union([
2441
2475
  ]).nullish(),
2442
2476
  naics_code: z.string().nullish(),
2443
2477
  linkedin_url: z.string().nullish()
2444
- }));
2478
+ });
2445
2479
  /**
2446
2480
  * A custom-field value stored on a record, addressed by the configuration it belongs to.
2447
2481
  */
@@ -2463,7 +2497,7 @@ export const zCustomFieldConfigsResponseObject = z.object({
2463
2497
  updated_at: z.iso.datetime()
2464
2498
  });
2465
2499
  /**
2466
- * Request body for creating a custom field definition. `name` and `model_type` are required.
2500
+ * Request body for creating a custom field definition; it belongs to the company that owns the API key. `name` and `model_type` are required, and omitting either answers 400.
2467
2501
  */
2468
2502
  export const zCustomFieldConfigParameters = z.object({
2469
2503
  name: z.string(),
@@ -2651,7 +2685,7 @@ export const zUserCompanyScheduledChangesResponse = z.object({
2651
2685
  * 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.
2652
2686
  */
2653
2687
  export const zUserCompanyScheduledTerminationParameters = z.object({
2654
- termination_date: z.string()
2688
+ termination_date: z.iso.date()
2655
2689
  });
2656
2690
  /**
2657
2691
  * One problem found while processing an accepted import, whatever its type.
@@ -2691,7 +2725,7 @@ export const zAggregateTimeImportResponseObject = z.object({
2691
2725
  * 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`, a second answers 409 naming `import_in_progress`, and nothing is written. Poll the earlier import until it reports, then submit again.
2692
2726
  */
2693
2727
  export const zAggregateTimeImportParameters = z.object({
2694
- file_signed_id: z.string()
2728
+ file_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
2695
2729
  });
2696
2730
  /**
2697
2731
  * One bulk upload of a certified payroll report against a pay period, and how it turned out.
@@ -2722,7 +2756,7 @@ export const zDsptchCprImportResponseObject = z.object({
2722
2756
  * 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.
2723
2757
  */
2724
2758
  export const zDsptchCprImportParameters = z.object({
2725
- file_signed_id: z.string()
2759
+ file_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
2726
2760
  });
2727
2761
  /**
2728
2762
  * One bulk upload of paystub amounts against a payroll run, and how it turned out.
@@ -2753,7 +2787,7 @@ export const zPaystubImportResponseObject = z.object({
2753
2787
  * Because acceptance is synchronous but the write happens in the background, only one import at a time is accepted for a payroll run: while an earlier one is still `pending`, a second answers 409 naming `import_in_progress`, and nothing is written. Poll the earlier import until it reports, then submit again.
2754
2788
  */
2755
2789
  export const zPaystubImportParameters = z.object({
2756
- file_signed_id: z.string()
2790
+ file_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
2757
2791
  });
2758
2792
  /**
2759
2793
  * One bulk upload of wide paystub amounts against a payroll run, and how it turned out.
@@ -2782,7 +2816,7 @@ export const zWidePaystubImportResponseObject = z.object({
2782
2816
  * Because acceptance is synchronous but the write happens in the background, only one wide paystub import at a time is accepted for a payroll run: 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.
2783
2817
  */
2784
2818
  export const zWidePaystubImportParameters = z.object({
2785
- file_signed_id: z.string()
2819
+ file_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
2786
2820
  });
2787
2821
  /**
2788
2822
  * One bulk upload of time entries against a pay period, and how it turned out.
@@ -2811,7 +2845,7 @@ export const zTimeEntryImportResponseObject = z.object({
2811
2845
  * 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.
2812
2846
  */
2813
2847
  export const zTimeEntryImportParameters = z.object({
2814
- file_signed_id: z.string()
2848
+ file_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
2815
2849
  });
2816
2850
  /**
2817
2851
  * A worker's time card for one pay period — the aggregation root for their tracked time, carrying approval and lock status alongside the period's rolled-up minutes and pay totals. One per worker per pay period.
@@ -2971,13 +3005,17 @@ export const zManagerTimeCardApprovalParameters = z.object({
2971
3005
  'approved',
2972
3006
  'declined'
2973
3007
  ]),
2974
- approver_user_id: z.string()
3008
+ approver_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
2975
3009
  });
2976
3010
  /**
2977
3011
  * Request body for a worker's self-attestation of their own time card. The approver is always the card's own worker, so it is not supplied here.
2978
3012
  */
2979
3013
  export const zWorkerTimeCardApprovalParameters = z.object({
2980
- status: z.enum(['pending', 'approved'])
3014
+ status: z.enum([
3015
+ 'pending',
3016
+ 'approved',
3017
+ 'declined'
3018
+ ])
2981
3019
  });
2982
3020
  /**
2983
3021
  * One clock-in by a worker — open (`active`) from clock-in until clock-out, and retained afterwards as the record that the session happened. A worker holds at most one active session at a time.
@@ -3109,7 +3147,7 @@ export const zPayrollFringeBenefitPlanResponseObject = z.object({
3109
3147
  * Request body for creating a fringe-benefit plan. timekeeping_pay_period_config_id, name, plan_number, and benefit_category are required.
3110
3148
  */
3111
3149
  export const zPayrollFringeBenefitPlanParameters = z.object({
3112
- timekeeping_pay_period_config_id: z.string(),
3150
+ timekeeping_pay_period_config_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
3113
3151
  name: z.string(),
3114
3152
  plan_number: z.string(),
3115
3153
  funded: z.boolean().optional(),
@@ -3281,9 +3319,9 @@ export const zPayrollRunResponseObject = z.object({
3281
3319
  * Create a payroll run. Company-scoped keys and company-admin user-scoped keys accept the same fields. Manager and technician user keys cannot create runs. company_id, run_type, and run_date are required; an on-cycle run additionally requires timekeeping_pay_period_id.
3282
3320
  */
3283
3321
  export const zPayrollRunParameters = z.object({
3284
- company_id: z.string(),
3285
- timekeeping_pay_period_id: z.string().nullish(),
3286
- payrolls_credential_id: z.string().nullish(),
3322
+ company_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
3323
+ timekeeping_pay_period_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
3324
+ payrolls_credential_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
3287
3325
  run_type: z.enum([
3288
3326
  'CORRECTION',
3289
3327
  'ON_CYCLE',
@@ -3299,8 +3337,8 @@ export const zPayrollRunParameters = z.object({
3299
3337
  * Update a payroll run. Company-scoped keys and company-admin user-scoped keys accept the same fields. Manager and technician user keys cannot update runs. Every field is optional — send only what changes. The run's company is fixed at creation.
3300
3338
  */
3301
3339
  export const zPayrollRunUpdateParameters = z.object({
3302
- timekeeping_pay_period_id: z.string().nullish(),
3303
- payrolls_credential_id: z.string().nullish(),
3340
+ timekeeping_pay_period_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
3341
+ payrolls_credential_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
3304
3342
  run_type: z.enum([
3305
3343
  'CORRECTION',
3306
3344
  'ON_CYCLE',
@@ -3436,14 +3474,14 @@ export const zProjectSiteResponseObject = z.object({
3436
3474
  * Request body for attaching a site to a project. `site_id` is required; `feature_ids` is optional. The project is taken from the path and is not part of the body.
3437
3475
  */
3438
3476
  export const zProjectSiteParameters = z.object({
3439
- site_id: z.string(),
3440
- feature_ids: z.array(z.string()).optional()
3477
+ site_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
3478
+ feature_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional()
3441
3479
  });
3442
3480
  /**
3443
3481
  * Request body for replacing which of the site's features apply to this project. Every field is optional; omit a field to preserve its current value. `site_id` is create-only and an update that names it is rejected.
3444
3482
  */
3445
3483
  export const zProjectSiteUpdateParameters = z.object({
3446
- feature_ids: z.array(z.string()).optional()
3484
+ feature_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional()
3447
3485
  });
3448
3486
  export const zSiteCheckInResponseObject = z.object({
3449
3487
  id: z.string(),
@@ -3786,7 +3824,7 @@ export const zComplianceCheckParameters = z.object({
3786
3824
  status: z.enum(['dismissed', 'pending']).optional(),
3787
3825
  time_due: z.iso.datetime().nullish(),
3788
3826
  assignee_user_ids: z.array(z.string()).optional(),
3789
- file_signed_id: z.string().optional()
3827
+ file_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional()
3790
3828
  });
3791
3829
  export const zRichTextObject = z.object({
3792
3830
  text: z.string(),
@@ -3961,9 +3999,9 @@ export const zPaystubResponseObject = z.object({
3961
3999
  * Request body for creating a paystub. payrolls_payroll_run_id and user_id are required; timekeeping_time_card_id is required for an on-cycle run and disallowed for an off-cycle run.
3962
4000
  */
3963
4001
  export const zPaystubParameters = z.object({
3964
- user_id: z.string(),
3965
- payrolls_payroll_run_id: z.string(),
3966
- timekeeping_time_card_id: z.string().nullish(),
4002
+ user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4003
+ payrolls_payroll_run_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4004
+ timekeeping_time_card_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
3967
4005
  external_id: z.string().nullish(),
3968
4006
  check_number: z.string().nullish()
3969
4007
  });
@@ -3971,8 +4009,8 @@ export const zPaystubParameters = z.object({
3971
4009
  * Request body for updating a paystub. Send only the fields to change; the resulting paystub must still match its payroll run type.
3972
4010
  */
3973
4011
  export const zPaystubUpdateParameters = z.object({
3974
- payrolls_payroll_run_id: z.string().optional(),
3975
- timekeeping_time_card_id: z.string().nullish(),
4012
+ payrolls_payroll_run_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
4013
+ timekeeping_time_card_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
3976
4014
  external_id: z.string().nullish(),
3977
4015
  check_number: z.string().nullish()
3978
4016
  });
@@ -4003,8 +4041,8 @@ export const zPriorPeriodAdjustmentResponseObject = z.object({
4003
4041
  * Request body for allocating part of a retroactive-pay line item to an earlier time card. The time card comes from the path; the adjustment is always a retroactive increase.
4004
4042
  */
4005
4043
  export const zPriorPeriodAdjustmentParameters = z.object({
4006
- payrolls_paystub_line_item_id: z.string(),
4007
- created_by_user_id: z.string(),
4044
+ payrolls_paystub_line_item_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4045
+ created_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4008
4046
  amount_cents: z.string(),
4009
4047
  rationale: z.enum([
4010
4048
  'hours_correction',
@@ -4012,7 +4050,7 @@ export const zPriorPeriodAdjustmentParameters = z.object({
4012
4050
  'pwa_compliance',
4013
4051
  'rate_correction'
4014
4052
  ]),
4015
- job_id: z.string().nullish(),
4053
+ job_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
4016
4054
  notes: z.string().nullish(),
4017
4055
  pwa_compliance_eligible: z.boolean().optional()
4018
4056
  });
@@ -4027,7 +4065,7 @@ export const zPriorPeriodAdjustmentUpdateParameters = z.object({
4027
4065
  'pwa_compliance',
4028
4066
  'rate_correction'
4029
4067
  ]).optional(),
4030
- job_id: z.string().nullish(),
4068
+ job_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
4031
4069
  notes: z.string().nullish(),
4032
4070
  pwa_compliance_eligible: z.boolean().optional()
4033
4071
  });
@@ -4179,14 +4217,37 @@ export const zJobSiteResponseObject = z.object({
4179
4217
  * Request body for attaching a site to a job. `site_id` is required; `feature_ids` is optional and defaults to none.
4180
4218
  */
4181
4219
  export const zJobSiteParameters = z.object({
4182
- site_id: z.string(),
4183
- feature_ids: z.array(z.string()).optional()
4220
+ site_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4221
+ feature_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional()
4184
4222
  });
4185
4223
  /**
4186
4224
  * Request body for replacing the features on an existing job-site join. `site_id` cannot be changed; send a new join to attach a different site.
4187
4225
  */
4188
4226
  export const zJobSiteUpdateParameters = z.object({
4189
- feature_ids: z.array(z.string()).optional()
4227
+ feature_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional()
4228
+ });
4229
+ /**
4230
+ * 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.
4231
+ */
4232
+ export const zJobGoodFaithEffortExceptionResponseObject = z.object({
4233
+ id: z.string(),
4234
+ job_id: z.string(),
4235
+ program_unavailable: z.boolean(),
4236
+ num_apprentices_requested: z.int().nullable(),
4237
+ num_apprentices_provided: z.int().nullable(),
4238
+ minutes_per_apprentice: z.int().nullable(),
4239
+ requested_on_date: z.iso.date().nullable(),
4240
+ request_start_date: z.iso.date().nullable(),
4241
+ request_end_date: z.iso.date().nullable(),
4242
+ occupation: z.string().nullable(),
4243
+ program_name: z.string().nullable(),
4244
+ response: z.enum([
4245
+ 'no_response',
4246
+ 'denied',
4247
+ 'partial'
4248
+ ]).nullable(),
4249
+ created_at: z.iso.datetime(),
4250
+ updated_at: z.iso.datetime()
4190
4251
  });
4191
4252
  /**
4192
4253
  * A form-completion task attached to a job — a SurveyJS form assigned to users with a due time, optional recurrence, and reminders. Path `{id}` is the `Tasks::JobFormAssignmentTask` id, not the web show `Task#uid`.
@@ -4215,6 +4276,22 @@ export const zJobFormAssignmentResponseObject = z.object({
4215
4276
  remind_at: z.iso.datetime()
4216
4277
  }))
4217
4278
  });
4279
+ /**
4280
+ * A corrective payment recorded against a job's PWA obligations. Read-only. Does not include attestation files, pretty type, currency, or a Money amount.
4281
+ */
4282
+ export const zJobCurePaymentResponseObject = z.object({
4283
+ id: z.string(),
4284
+ job_id: z.string(),
4285
+ type: z.enum(['Pwa::CurePayments::Federal', 'Pwa::CurePayments::Regional']),
4286
+ amount_cents: z.string(),
4287
+ paid_on_date: z.iso.date(),
4288
+ cures_from_date: z.iso.date(),
4289
+ cures_to_date: z.iso.date(),
4290
+ notes: z.string().nullable(),
4291
+ created_by_user_id: z.string(),
4292
+ created_at: z.iso.datetime(),
4293
+ updated_at: z.iso.datetime()
4294
+ });
4218
4295
  /**
4219
4296
  * A form-completion task attached to a site — a SurveyJS form assigned to users with a due time, optional recurrence, and reminders. Path `{id}` is the `Tasks::SiteFormAssignmentTask` id, not the web show `Task#uid`. Sites are shared across companies; another company's assignment on the same site is not found. An empty assignee list is valid.
4220
4297
  */
@@ -4704,7 +4781,7 @@ export const zPositionParameters = z.object({
4704
4781
  }).optional()
4705
4782
  });
4706
4783
  /**
4707
- * Parameters for creating a per-unit scope price on a job. `scope_kind` and `unit_price` are required.
4784
+ * Parameters for creating a per-unit scope price on a job. `scope_kind` and `unit_price` are required; omitting either answers 400, and a null or wrong-typed value answers 422.
4708
4785
  */
4709
4786
  export const zProductionJobScopePriceParameters = z.object({
4710
4787
  scope_kind: z.string(),
@@ -4713,7 +4790,7 @@ export const zProductionJobScopePriceParameters = z.object({
4713
4790
  unit_of_measure: z.string().optional()
4714
4791
  });
4715
4792
  /**
4716
- * Parameters for updating a per-unit scope price on a job. Every field is optional; omit a field to preserve its current value. The resulting price must retain a scope kind and non-negative unit price.
4793
+ * Parameters for updating a per-unit scope price on a job. Every field is optional; omit a field to preserve its current value, or send null for `contracted_count` to clear it. A null or wrong-typed value for any other field answers 422. The resulting price must retain a scope kind and non-negative unit price.
4717
4794
  */
4718
4795
  export const zProductionJobScopePriceUpdateParameters = z.object({
4719
4796
  scope_kind: z.string().optional(),
@@ -4750,7 +4827,7 @@ export const zProductionCompletionUpdateParameters = z.object({
4750
4827
  */
4751
4828
  export const zProductionCompletionBaseParameters = z.object({
4752
4829
  production_job_scope_price_id: z.string().optional(),
4753
- performed_by_user_id: z.string().optional(),
4830
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4754
4831
  notes: z.string().nullish(),
4755
4832
  work_date: z.iso.date().optional(),
4756
4833
  position_ids: z.array(z.string()).optional()
@@ -4883,22 +4960,22 @@ export const zCertificationPackageResponseObject = z.object({
4883
4960
  updated_at: z.iso.datetime()
4884
4961
  });
4885
4962
  /**
4886
- * Request body for creating a certification package — a named set of certifications a company requires together. The package belongs to the company that owns the API key.
4963
+ * Request body for creating a certification package. Send fields in JSON; query parameters cannot supply write fields or the filing user. The package belongs to the company that owns the API key.
4887
4964
  */
4888
4965
  export const zCertificationPackageParameters = z.object({
4889
4966
  name: z.string(),
4890
4967
  description: z.string().nullish(),
4891
- certification_ids: z.array(z.string()).optional(),
4892
- performed_by_user_id: z.string()
4968
+ certification_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
4969
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
4893
4970
  });
4894
4971
  /**
4895
- * Request body for updating a certification package — a named set of certifications a company requires together. Include only the fields to change.
4972
+ * Request body for updating a certification package. Send only fields to change in JSON; omitted fields remain unchanged. The filing user is required in the body.
4896
4973
  */
4897
4974
  export const zCertificationPackageUpdateParameters = z.object({
4898
4975
  name: z.string().optional(),
4899
4976
  description: z.string().nullish(),
4900
- certification_ids: z.array(z.string()).optional(),
4901
- performed_by_user_id: z.string()
4977
+ certification_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
4978
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
4902
4979
  });
4903
4980
  /**
4904
4981
  * A certification — a named qualification a worker can hold, either owned by your company or a global (platform) credential type (company_id null).
@@ -5089,18 +5166,18 @@ export const zPositionResponseObject = z.object({
5089
5166
  updated_at: z.iso.datetime()
5090
5167
  });
5091
5168
  /**
5092
- * Request body for granting a user a role in a company.
5169
+ * Request body for granting a user a role in a company. All three fields are required; omitting one answers 400.
5093
5170
  */
5094
5171
  export const zUserRoleRequest = z.object({
5095
- user_id: z.string().optional(),
5096
- company_id: z.string().optional(),
5172
+ company_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
5173
+ user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
5097
5174
  role: z.enum([
5098
5175
  'TECHNICIAN',
5099
5176
  'FIELD_LEAD',
5100
5177
  'MANAGER',
5101
5178
  'SAFETY_MANAGER',
5102
5179
  'ADMIN'
5103
- ]).optional()
5180
+ ])
5104
5181
  });
5105
5182
  /**
5106
5183
  * 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.
@@ -5267,7 +5344,7 @@ export const zUserParameters = z.intersection(z.union([
5267
5344
  winda_id: z.string().optional(),
5268
5345
  linkedin_url: z.string().optional(),
5269
5346
  roles: z.array(z.string()).nullish(),
5270
- avatar_signed_id: z.string().optional(),
5347
+ avatar_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
5271
5348
  created_by_user_id: z.string().optional(),
5272
5349
  last_sent_by_user_id: z.string().nullish(),
5273
5350
  skip_notify: z.boolean().optional(),
@@ -5569,6 +5646,22 @@ export const zJobSitesResponseObject = z.object({
5569
5646
  links: zLinks,
5570
5647
  data: z.array(zJobSiteResponseObject)
5571
5648
  });
5649
+ /**
5650
+ * A page of a job's good-faith-effort exceptions, with pagination metadata and navigation links.
5651
+ */
5652
+ export const zJobGoodFaithEffortExceptionsResponseObject = z.object({
5653
+ meta: zMeta,
5654
+ links: zLinks,
5655
+ data: z.array(zJobGoodFaithEffortExceptionResponseObject)
5656
+ });
5657
+ /**
5658
+ * A page of a job's PWA cure payments, with pagination metadata and navigation links.
5659
+ */
5660
+ export const zJobCurePaymentsResponseObject = z.object({
5661
+ meta: zMeta,
5662
+ links: zLinks,
5663
+ data: z.array(zJobCurePaymentResponseObject)
5664
+ });
5572
5665
  /**
5573
5666
  * A page of a job's positions, with pagination metadata and navigation links.
5574
5667
  */
@@ -6052,98 +6145,342 @@ export const zJobWageDeterminationScheduledTerminationParameters = z.object({
6052
6145
  effective_date: z.iso.date()
6053
6146
  });
6054
6147
  /**
6055
- * The adjustment applied when a rule matches — an addition to the wage or fringe rate.
6056
- */
6057
- export const zRateRuleEffect = z.object({
6058
- type: z.enum(['wage_increment', 'fringe_increment']),
6059
- amount_cents: z.string()
6060
- });
6061
- /**
6062
- * Restricts the rule to a time-of-day window.
6063
- */
6064
- export const zRateRuleTimeRangeCondition = z.object({
6065
- type: z.enum(['time_range']),
6066
- start_time: z.string(),
6067
- end_time: z.string()
6068
- });
6069
- /**
6070
- * Restricts the rule to specific days of the week.
6071
- */
6072
- export const zRateRuleDaysCondition = z.object({
6073
- type: z.enum(['days']),
6074
- days: z.array(z.int())
6075
- });
6076
- /**
6077
- * Restricts the rule to a single calendar date.
6078
- */
6079
- export const zRateRuleSpecificDateCondition = z.object({
6080
- type: z.enum(['specific_date']),
6081
- date: z.iso.date()
6082
- });
6083
- /**
6084
- * Restricts the rule to a given apprenticeship wage-schedule period.
6085
- */
6086
- export const zRateRuleApprenticePeriodCondition = z.object({
6087
- type: z.enum(['apprentice_period']),
6088
- period: z.int()
6089
- });
6090
- /**
6091
- * Restricts the rule to a cumulative-apprentice-hours band.
6092
- */
6093
- export const zRateRuleApprenticeHoursCondition = z.object({
6094
- type: z.enum(['apprentice_hours']),
6095
- min_hours: z.int(),
6096
- max_hours: z.int()
6097
- });
6098
- /**
6099
- * Restricts the rule to a specific overtime tier.
6100
- */
6101
- export const zRateRuleOvertimeMultiplierCondition = z.object({
6102
- type: z.enum(['overtime_multiplier']),
6103
- multiplier: z.enum(['1.5', '2.0'])
6104
- });
6105
- /**
6106
- * A single match condition. At most one condition per category may appear on a rule — time (time_range), day-selection (days or specific_date), apprentice (apprentice_period or apprentice_hours), and overtime (overtime_multiplier). The `type` field selects the shape.
6107
- */
6108
- export const zRateRuleCondition = z.discriminatedUnion('type', [
6109
- zRateRuleTimeRangeCondition.extend({ type: z.literal('time_range') }),
6110
- zRateRuleDaysCondition.extend({ type: z.literal('days') }),
6111
- zRateRuleSpecificDateCondition.extend({ type: z.literal('specific_date') }),
6112
- zRateRuleApprenticePeriodCondition.extend({ type: z.literal('apprentice_period') }),
6113
- zRateRuleApprenticeHoursCondition.extend({ type: z.literal('apprentice_hours') }),
6114
- zRateRuleOvertimeMultiplierCondition.extend({ type: z.literal('overtime_multiplier') })
6115
- ]);
6116
- /**
6117
- * A conditional rate-modification rule on a job wage determination — it adds wage or fringe cents when its conditions match. `valid_from` and `valid_to` bound the window over which this version of the rule is in effect.
6148
+ * A Federal (Davis-Bacon) wage determination on a project.
6118
6149
  */
6119
- export const zRateRuleResponseObject = z.object({
6150
+ export const zFederalProjectWageDeterminationResponseObject = z.object({
6120
6151
  id: z.string(),
6121
- job_wage_determination_id: z.string(),
6122
- pay_rates_rule_package_id: z.string(),
6123
- effect: zRateRuleEffect,
6124
- conditions: z.array(zRateRuleCondition),
6152
+ project_id: z.string(),
6153
+ pwa_trade_id: z.string(),
6154
+ overtime_package_id: z.string().nullable(),
6155
+ pay_rates_rule_package_id: z.string().nullable(),
6156
+ type: z.enum(['Pwa::ProjectWageDeterminations::Federal']),
6157
+ labor_classification: z.string(),
6158
+ hourly_rate_cents: z.string(),
6159
+ fringe_rate_cents: z.string(),
6160
+ class_code: z.string().nullable(),
6161
+ construction_category: z.enum([
6162
+ 'building',
6163
+ 'heavy',
6164
+ 'highway',
6165
+ 'residential'
6166
+ ]).nullable(),
6167
+ general_wage_determination: z.string().nullable(),
6125
6168
  valid_from: z.iso.datetime().nullable(),
6126
6169
  valid_to: z.iso.datetime().nullable(),
6127
6170
  created_at: z.iso.datetime(),
6128
6171
  updated_at: z.iso.datetime()
6129
6172
  });
6130
- export const zRateRuleHistoryCorrectionObject = z.object({
6131
- pay_rates_rule_id: z.string(),
6132
- job_wage_determination_id: z.string(),
6133
- pay_rates_rule_package_id: z.string(),
6134
- effect: zRateRuleEffect,
6135
- conditions: z.array(zRateRuleCondition),
6173
+ /**
6174
+ * A Regional (state prevailing-wage) wage determination on a project.
6175
+ */
6176
+ export const zRegionalProjectWageDeterminationResponseObject = z.object({
6177
+ id: z.string(),
6178
+ project_id: z.string(),
6179
+ pwa_trade_id: z.string(),
6180
+ overtime_package_id: z.string().nullable(),
6181
+ pay_rates_rule_package_id: z.string().nullable(),
6182
+ type: z.enum(['Pwa::ProjectWageDeterminations::Regional']),
6183
+ labor_classification: z.string(),
6184
+ hourly_rate_cents: z.string(),
6185
+ fringe_rate_cents: z.string(),
6186
+ general_wage_determination: z.string().nullable(),
6187
+ regional_fields: zRegionalWageDeterminationFieldsResponse,
6136
6188
  valid_from: z.iso.datetime().nullable(),
6137
6189
  valid_to: z.iso.datetime().nullable(),
6138
6190
  created_at: z.iso.datetime(),
6139
6191
  updated_at: z.iso.datetime()
6140
6192
  });
6141
- export const zRateRuleHistoryVersionObject = z.object({
6142
- pay_rates_rule_id: z.string(),
6143
- job_wage_determination_id: z.string(),
6144
- pay_rates_rule_package_id: z.string(),
6145
- effect: zRateRuleEffect,
6146
- conditions: z.array(zRateRuleCondition),
6193
+ /**
6194
+ * A wage determination applied to a project — the prevailing-wage and fringe rates for one labor classification. The type discriminator selects the Federal or Regional representation.
6195
+ */
6196
+ export const zProjectWageDeterminationResponseObject = z.discriminatedUnion('type', [
6197
+ zFederalProjectWageDeterminationResponseObject.extend({ type: z.literal('Pwa::ProjectWageDeterminations::Federal') }),
6198
+ zRegionalProjectWageDeterminationResponseObject.extend({ type: z.literal('Pwa::ProjectWageDeterminations::Regional') })
6199
+ ]);
6200
+ export const zFederalProjectWageDeterminationHistoryCorrectionObject = z.object({
6201
+ project_wage_determination_id: z.string(),
6202
+ project_id: z.string(),
6203
+ pwa_trade_id: z.string(),
6204
+ overtime_package_id: z.string().nullable(),
6205
+ pay_rates_rule_package_id: z.string().nullable(),
6206
+ type: z.enum(['Pwa::ProjectWageDeterminations::Federal']),
6207
+ labor_classification: z.string(),
6208
+ hourly_rate_cents: z.string(),
6209
+ fringe_rate_cents: z.string(),
6210
+ class_code: z.string().nullable(),
6211
+ construction_category: z.enum([
6212
+ 'building',
6213
+ 'heavy',
6214
+ 'highway',
6215
+ 'residential'
6216
+ ]).nullable(),
6217
+ general_wage_determination: z.string().nullable(),
6218
+ valid_from: z.iso.datetime().nullable(),
6219
+ valid_to: z.iso.datetime().nullable(),
6220
+ created_at: z.iso.datetime(),
6221
+ updated_at: z.iso.datetime()
6222
+ });
6223
+ export const zRegionalProjectWageDeterminationHistoryCorrectionObject = z.object({
6224
+ project_wage_determination_id: z.string(),
6225
+ project_id: z.string(),
6226
+ pwa_trade_id: z.string(),
6227
+ overtime_package_id: z.string().nullable(),
6228
+ pay_rates_rule_package_id: z.string().nullable(),
6229
+ type: z.enum(['Pwa::ProjectWageDeterminations::Regional']),
6230
+ labor_classification: z.string(),
6231
+ hourly_rate_cents: z.string(),
6232
+ fringe_rate_cents: z.string(),
6233
+ general_wage_determination: z.string().nullable(),
6234
+ regional_fields: zRegionalWageDeterminationFieldsResponse,
6235
+ valid_from: z.iso.datetime().nullable(),
6236
+ valid_to: z.iso.datetime().nullable(),
6237
+ created_at: z.iso.datetime(),
6238
+ updated_at: z.iso.datetime()
6239
+ });
6240
+ export const zProjectWageDeterminationHistoryCorrectionObject = z.discriminatedUnion('type', [
6241
+ zFederalProjectWageDeterminationHistoryCorrectionObject.extend({ type: z.literal('Pwa::ProjectWageDeterminations::Federal') }),
6242
+ zRegionalProjectWageDeterminationHistoryCorrectionObject.extend({ type: z.literal('Pwa::ProjectWageDeterminations::Regional') })
6243
+ ]);
6244
+ export const zFederalProjectWageDeterminationHistoryVersionObject = z.object({
6245
+ project_wage_determination_id: z.string(),
6246
+ project_id: z.string(),
6247
+ pwa_trade_id: z.string(),
6248
+ overtime_package_id: z.string().nullable(),
6249
+ pay_rates_rule_package_id: z.string().nullable(),
6250
+ type: z.enum(['Pwa::ProjectWageDeterminations::Federal']),
6251
+ labor_classification: z.string(),
6252
+ hourly_rate_cents: z.string(),
6253
+ fringe_rate_cents: z.string(),
6254
+ class_code: z.string().nullable(),
6255
+ construction_category: z.enum([
6256
+ 'building',
6257
+ 'heavy',
6258
+ 'highway',
6259
+ 'residential'
6260
+ ]).nullable(),
6261
+ general_wage_determination: z.string().nullable(),
6262
+ valid_from: z.iso.datetime().nullable(),
6263
+ valid_to: z.iso.datetime().nullable(),
6264
+ created_at: z.iso.datetime(),
6265
+ updated_at: z.iso.datetime(),
6266
+ version_status: z.enum([
6267
+ 'scheduled',
6268
+ 'current',
6269
+ 'historical'
6270
+ ]),
6271
+ corrections: z.array(zProjectWageDeterminationHistoryCorrectionObject)
6272
+ });
6273
+ export const zRegionalProjectWageDeterminationHistoryVersionObject = z.object({
6274
+ project_wage_determination_id: z.string(),
6275
+ project_id: z.string(),
6276
+ pwa_trade_id: z.string(),
6277
+ overtime_package_id: z.string().nullable(),
6278
+ pay_rates_rule_package_id: z.string().nullable(),
6279
+ type: z.enum(['Pwa::ProjectWageDeterminations::Regional']),
6280
+ labor_classification: z.string(),
6281
+ hourly_rate_cents: z.string(),
6282
+ fringe_rate_cents: z.string(),
6283
+ general_wage_determination: z.string().nullable(),
6284
+ regional_fields: zRegionalWageDeterminationFieldsResponse,
6285
+ valid_from: z.iso.datetime().nullable(),
6286
+ valid_to: z.iso.datetime().nullable(),
6287
+ created_at: z.iso.datetime(),
6288
+ updated_at: z.iso.datetime(),
6289
+ version_status: z.enum([
6290
+ 'scheduled',
6291
+ 'current',
6292
+ 'historical'
6293
+ ]),
6294
+ corrections: z.array(zProjectWageDeterminationHistoryCorrectionObject)
6295
+ });
6296
+ export const zProjectWageDeterminationHistoryVersionObject = z.discriminatedUnion('type', [
6297
+ zFederalProjectWageDeterminationHistoryVersionObject.extend({ type: z.literal('Pwa::ProjectWageDeterminations::Federal') }),
6298
+ zRegionalProjectWageDeterminationHistoryVersionObject.extend({ type: z.literal('Pwa::ProjectWageDeterminations::Regional') })
6299
+ ]);
6300
+ /**
6301
+ * Parameters for creating a Federal (Davis-Bacon) wage determination on a project.
6302
+ */
6303
+ export const zFederalProjectWageDeterminationParameters = z.object({
6304
+ type: z.enum(['Pwa::ProjectWageDeterminations::Federal']),
6305
+ labor_classification: z.string(),
6306
+ pwa_trade_id: z.string(),
6307
+ hourly_rate_cents: z.string(),
6308
+ fringe_rate_cents: z.string(),
6309
+ class_code: z.string().nullish(),
6310
+ construction_category: z.enum([
6311
+ 'building',
6312
+ 'heavy',
6313
+ 'highway',
6314
+ 'residential'
6315
+ ]).nullish(),
6316
+ general_wage_determination: z.string().nullish(),
6317
+ pay_rates_rule_package_id: z.string().nullish()
6318
+ });
6319
+ /**
6320
+ * Parameters for creating a Regional (state prevailing-wage) wage determination on a project.
6321
+ */
6322
+ export const zRegionalProjectWageDeterminationParameters = z.object({
6323
+ type: z.enum(['Pwa::ProjectWageDeterminations::Regional']),
6324
+ labor_classification: z.string(),
6325
+ pwa_trade_id: z.string(),
6326
+ hourly_rate_cents: z.string(),
6327
+ fringe_rate_cents: z.string().optional(),
6328
+ general_wage_determination: z.string().nullish(),
6329
+ overtime_package_id: z.string().nullish(),
6330
+ pay_rates_rule_package_id: z.string().nullish(),
6331
+ regional_fields: zRegionalWageDeterminationFields.optional()
6332
+ });
6333
+ /**
6334
+ * Parameters for creating a project wage determination. Provide the Federal or Regional shape; the type discriminator selects which. Editing an existing determination uses the update parameters, which take an `effective_from` instead of a type.
6335
+ */
6336
+ export const zProjectWageDeterminationParameters = z.discriminatedUnion('type', [
6337
+ zFederalProjectWageDeterminationParameters.extend({ type: z.literal('Pwa::ProjectWageDeterminations::Federal') }),
6338
+ zRegionalProjectWageDeterminationParameters.extend({ type: z.literal('Pwa::ProjectWageDeterminations::Regional') })
6339
+ ]);
6340
+ /**
6341
+ * Parameters for editing a project wage determination from a point in valid time forward. The type is fixed by the determination the id names and is not sent.
6342
+ */
6343
+ export const zProjectWageDeterminationUpdateParameters = z.object({
6344
+ effective_from: z.iso.date().optional(),
6345
+ overtime_package_id: z.string().nullish(),
6346
+ pay_rates_rule_package_id: z.string().nullish(),
6347
+ labor_classification: z.string().optional(),
6348
+ pwa_trade_id: z.string().optional(),
6349
+ hourly_rate_cents: z.string().optional(),
6350
+ fringe_rate_cents: z.string().optional(),
6351
+ class_code: z.string().nullish(),
6352
+ construction_category: z.enum([
6353
+ 'building',
6354
+ 'heavy',
6355
+ 'highway',
6356
+ 'residential'
6357
+ ]).nullish(),
6358
+ general_wage_determination: z.string().nullish(),
6359
+ regional_fields: zRegionalWageDeterminationFields.optional()
6360
+ });
6361
+ /**
6362
+ * Parameters for an effective-dated change to a project wage determination, applying from a calendar date forward. The type is fixed by the determination the id names and is not sent.
6363
+ */
6364
+ export const zProjectWageDeterminationScheduledChangeParameters = z.object({
6365
+ effective_date: z.iso.date(),
6366
+ labor_classification: z.string().optional(),
6367
+ hourly_rate_cents: z.string().optional(),
6368
+ fringe_rate_cents: z.string().optional(),
6369
+ class_code: z.string().nullish(),
6370
+ construction_category: z.enum([
6371
+ 'building',
6372
+ 'heavy',
6373
+ 'highway',
6374
+ 'residential'
6375
+ ]).nullish(),
6376
+ general_wage_determination: z.string().nullish(),
6377
+ regional_fields: zRegionalWageDeterminationFields.optional()
6378
+ });
6379
+ /**
6380
+ * Parameters for moving where a project wage determination's timeline begins.
6381
+ */
6382
+ export const zProjectWageDeterminationGenesisParameters = z.object({
6383
+ effective_date: z.iso.date()
6384
+ });
6385
+ /**
6386
+ * Parameters for scheduling when a project wage determination stops being valid.
6387
+ */
6388
+ export const zProjectWageDeterminationScheduledTerminationParameters = z.object({
6389
+ effective_date: z.iso.date()
6390
+ });
6391
+ /**
6392
+ * The adjustment applied when a rule matches — an addition to the wage or fringe rate.
6393
+ */
6394
+ export const zRateRuleEffect = z.object({
6395
+ type: z.enum(['wage_increment', 'fringe_increment']),
6396
+ amount_cents: z.string()
6397
+ });
6398
+ /**
6399
+ * Restricts the rule to a time-of-day window.
6400
+ */
6401
+ export const zRateRuleTimeRangeCondition = z.object({
6402
+ type: z.enum(['time_range']),
6403
+ start_time: z.string(),
6404
+ end_time: z.string()
6405
+ });
6406
+ /**
6407
+ * Restricts the rule to specific days of the week.
6408
+ */
6409
+ export const zRateRuleDaysCondition = z.object({
6410
+ type: z.enum(['days']),
6411
+ days: z.array(z.int())
6412
+ });
6413
+ /**
6414
+ * Restricts the rule to a single calendar date.
6415
+ */
6416
+ export const zRateRuleSpecificDateCondition = z.object({
6417
+ type: z.enum(['specific_date']),
6418
+ date: z.iso.date()
6419
+ });
6420
+ /**
6421
+ * Restricts the rule to a given apprenticeship wage-schedule period.
6422
+ */
6423
+ export const zRateRuleApprenticePeriodCondition = z.object({
6424
+ type: z.enum(['apprentice_period']),
6425
+ period: z.int()
6426
+ });
6427
+ /**
6428
+ * Restricts the rule to a cumulative-apprentice-hours band.
6429
+ */
6430
+ export const zRateRuleApprenticeHoursCondition = z.object({
6431
+ type: z.enum(['apprentice_hours']),
6432
+ min_hours: z.int(),
6433
+ max_hours: z.int()
6434
+ });
6435
+ /**
6436
+ * Restricts the rule to a specific overtime tier.
6437
+ */
6438
+ export const zRateRuleOvertimeMultiplierCondition = z.object({
6439
+ type: z.enum(['overtime_multiplier']),
6440
+ multiplier: z.enum(['1.5', '2.0'])
6441
+ });
6442
+ /**
6443
+ * A single match condition. At most one condition per category may appear on a rule — time (time_range), day-selection (days or specific_date), apprentice (apprentice_period or apprentice_hours), and overtime (overtime_multiplier). The `type` field selects the shape.
6444
+ */
6445
+ export const zRateRuleCondition = z.discriminatedUnion('type', [
6446
+ zRateRuleTimeRangeCondition.extend({ type: z.literal('time_range') }),
6447
+ zRateRuleDaysCondition.extend({ type: z.literal('days') }),
6448
+ zRateRuleSpecificDateCondition.extend({ type: z.literal('specific_date') }),
6449
+ zRateRuleApprenticePeriodCondition.extend({ type: z.literal('apprentice_period') }),
6450
+ zRateRuleApprenticeHoursCondition.extend({ type: z.literal('apprentice_hours') }),
6451
+ zRateRuleOvertimeMultiplierCondition.extend({ type: z.literal('overtime_multiplier') })
6452
+ ]);
6453
+ /**
6454
+ * A conditional rate-modification rule on a job wage determination — it adds wage or fringe cents when its conditions match. `valid_from` and `valid_to` bound the window over which this version of the rule is in effect.
6455
+ */
6456
+ export const zRateRuleResponseObject = z.object({
6457
+ id: z.string(),
6458
+ job_wage_determination_id: z.string(),
6459
+ pay_rates_rule_package_id: z.string(),
6460
+ effect: zRateRuleEffect,
6461
+ conditions: z.array(zRateRuleCondition),
6462
+ valid_from: z.iso.datetime().nullable(),
6463
+ valid_to: z.iso.datetime().nullable(),
6464
+ created_at: z.iso.datetime(),
6465
+ updated_at: z.iso.datetime()
6466
+ });
6467
+ export const zRateRuleHistoryCorrectionObject = z.object({
6468
+ pay_rates_rule_id: z.string(),
6469
+ job_wage_determination_id: z.string(),
6470
+ pay_rates_rule_package_id: z.string(),
6471
+ effect: zRateRuleEffect,
6472
+ conditions: z.array(zRateRuleCondition),
6473
+ valid_from: z.iso.datetime().nullable(),
6474
+ valid_to: z.iso.datetime().nullable(),
6475
+ created_at: z.iso.datetime(),
6476
+ updated_at: z.iso.datetime()
6477
+ });
6478
+ export const zRateRuleHistoryVersionObject = z.object({
6479
+ pay_rates_rule_id: z.string(),
6480
+ job_wage_determination_id: z.string(),
6481
+ pay_rates_rule_package_id: z.string(),
6482
+ effect: zRateRuleEffect,
6483
+ conditions: z.array(zRateRuleCondition),
6147
6484
  valid_from: z.iso.datetime().nullable(),
6148
6485
  valid_to: z.iso.datetime().nullable(),
6149
6486
  created_at: z.iso.datetime(),
@@ -6155,6 +6492,48 @@ export const zRateRuleHistoryVersionObject = z.object({
6155
6492
  ]),
6156
6493
  corrections: z.array(zRateRuleHistoryCorrectionObject)
6157
6494
  });
6495
+ /**
6496
+ * A conditional rate-modification rule on a project wage determination — it adds wage or fringe cents when its conditions match. `valid_from` and `valid_to` bound the window over which this version of the rule is in effect.
6497
+ */
6498
+ export const zProjectRateRuleResponseObject = z.object({
6499
+ id: z.string(),
6500
+ project_wage_determination_id: z.string(),
6501
+ pay_rates_rule_package_id: z.string(),
6502
+ effect: zRateRuleEffect,
6503
+ conditions: z.array(zRateRuleCondition),
6504
+ valid_from: z.iso.datetime().nullable(),
6505
+ valid_to: z.iso.datetime().nullable(),
6506
+ created_at: z.iso.datetime(),
6507
+ updated_at: z.iso.datetime()
6508
+ });
6509
+ export const zProjectRateRuleHistoryCorrectionObject = z.object({
6510
+ pay_rates_rule_id: z.string(),
6511
+ project_wage_determination_id: z.string(),
6512
+ pay_rates_rule_package_id: z.string(),
6513
+ effect: zRateRuleEffect,
6514
+ conditions: z.array(zRateRuleCondition),
6515
+ valid_from: z.iso.datetime().nullable(),
6516
+ valid_to: z.iso.datetime().nullable(),
6517
+ created_at: z.iso.datetime(),
6518
+ updated_at: z.iso.datetime()
6519
+ });
6520
+ export const zProjectRateRuleHistoryVersionObject = z.object({
6521
+ pay_rates_rule_id: z.string(),
6522
+ project_wage_determination_id: z.string(),
6523
+ pay_rates_rule_package_id: z.string(),
6524
+ effect: zRateRuleEffect,
6525
+ conditions: z.array(zRateRuleCondition),
6526
+ valid_from: z.iso.datetime().nullable(),
6527
+ valid_to: z.iso.datetime().nullable(),
6528
+ created_at: z.iso.datetime(),
6529
+ updated_at: z.iso.datetime(),
6530
+ version_status: z.enum([
6531
+ 'scheduled',
6532
+ 'current',
6533
+ 'historical'
6534
+ ]),
6535
+ corrections: z.array(zProjectRateRuleHistoryCorrectionObject)
6536
+ });
6158
6537
  /**
6159
6538
  * A conditional wage or fringe adjustment owned by a pay-rate rule package, with the selected version's valid-time window.
6160
6539
  */
@@ -6331,7 +6710,7 @@ export const zOvertimeRuleParameters = z.object({
6331
6710
  'one_five_x',
6332
6711
  'two_x'
6333
6712
  ]),
6334
- region_id: z.string().nullish(),
6713
+ region_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
6335
6714
  eligible_hours_worked: z.int().nullish(),
6336
6715
  specific_day_of_week: z.enum([
6337
6716
  'sunday',
@@ -6355,7 +6734,7 @@ export const zOvertimeRuleUpdateParameters = z.object({
6355
6734
  'one_five_x',
6356
6735
  'two_x'
6357
6736
  ]).optional(),
6358
- region_id: z.string().nullish(),
6737
+ region_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
6359
6738
  eligible_hours_worked: z.int().nullish(),
6360
6739
  specific_day_of_week: z.enum([
6361
6740
  'sunday',
@@ -6379,7 +6758,7 @@ export const zOvertimeRuleScheduledChangeParameters = z.object({
6379
6758
  'one_five_x',
6380
6759
  'two_x'
6381
6760
  ]).optional(),
6382
- region_id: z.string().nullish(),
6761
+ region_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
6383
6762
  eligible_hours_worked: z.int().nullish(),
6384
6763
  specific_day_of_week: z.enum([
6385
6764
  'sunday',
@@ -6424,18 +6803,18 @@ export const zAssetsVendorResponseObject = z.object({
6424
6803
  updated_at: z.iso.datetime()
6425
6804
  });
6426
6805
  /**
6427
- * Create or update a vendor. Only name is required.
6806
+ * Create a vendor. Only name is required; omitting it answers 400, and a null or wrong-typed value answers 422.
6428
6807
  */
6429
6808
  export const zAssetsVendorParameters = z.object({
6430
- name: z.string().min(1),
6431
- logo_signed_id: z.string().optional()
6809
+ name: z.string(),
6810
+ logo_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
6432
6811
  });
6433
6812
  /**
6434
- * Update a vendor. All fields are optional — send only what changes.
6813
+ * Update a vendor. All fields are optional — send only what changes. A null name or a wrong-typed value answers 422.
6435
6814
  */
6436
6815
  export const zAssetsVendorUpdateParameters = z.object({
6437
- name: z.string().min(1).optional(),
6438
- logo_signed_id: z.string().optional()
6816
+ name: z.string().optional(),
6817
+ logo_signed_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
6439
6818
  });
6440
6819
  /**
6441
6820
  * A location that holds a company's assets and inventory — a warehouse or yard, optionally backed by a site on the Atlas map.
@@ -6450,25 +6829,21 @@ export const zAssetsSiteResponseObject = z.object({
6450
6829
  created_at: z.iso.datetime(),
6451
6830
  updated_at: z.iso.datetime()
6452
6831
  });
6453
- export const zAssetsSiteParameters = z.intersection(z.union([
6454
- z.object({
6455
- site_id: z.string().min(1)
6456
- }),
6457
- z.object({
6458
- name: z.string().min(1)
6459
- })
6460
- ]), z.object({
6832
+ /**
6833
+ * Create a site. kind is required; provide a site_id to back the location with a site on the Atlas map, or a name for a standalone location. At least one of site_id or name is required.
6834
+ */
6835
+ export const zAssetsSiteParameters = z.object({
6836
+ site_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
6461
6837
  kind: z.enum(['warehouse', 'yard']),
6462
- site_id: z.string().nullish(),
6463
- name: z.string().nullish()
6464
- }));
6838
+ name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
6839
+ });
6465
6840
  /**
6466
6841
  * Request body for updating an asset location. Every field is optional; send only the fields to change. The saved location must still have a name or a backing `site_id`.
6467
6842
  */
6468
6843
  export const zAssetsSiteUpdateParameters = z.object({
6844
+ site_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
6469
6845
  kind: z.enum(['warehouse', 'yard']).optional(),
6470
- site_id: z.string().nullish(),
6471
- name: z.string().nullish()
6846
+ name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
6472
6847
  });
6473
6848
  /**
6474
6849
  * A company-level rule that auto-generates asset form assignments. When an item of one of its products changes custody (an assignment or unassignment), the rule creates or refreshes a form task for the chosen users, due on the configured schedule.
@@ -6678,7 +7053,7 @@ export const zAssetsProductParameters = z.object({
6678
7053
  assets_attribute_option_id: z.string().nullish()
6679
7054
  })).optional(),
6680
7055
  images_attributes: z.array(zAssetsAttachmentParameters).optional(),
6681
- performed_by_user_id: z.string()
7056
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
6682
7057
  });
6683
7058
  /**
6684
7059
  * Update a catalog product. All fields are optional — send only what changes. `type` is immutable and `performed_by_user_id` is create-only, so neither is accepted here. `attribute_values` upserts the product's category-attribute values.
@@ -6728,7 +7103,7 @@ export const zAssetsItemParameters = z.object({
6728
7103
  user_id: z.string().optional(),
6729
7104
  container_item_id: z.string().optional(),
6730
7105
  assets_sub_location_id: z.string().optional(),
6731
- performed_by_user_id: z.string()
7106
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
6732
7107
  });
6733
7108
  /**
6734
7109
  * Update an asset item. All item fields are optional — send only what changes — but performed_by_user_id is required to record the updater. Omitted attributes retain their existing values. `attribute_values` upserts the item-level attributes of the product's category.
@@ -6749,7 +7124,7 @@ export const zAssetsItemUpdateParameters = z.object({
6749
7124
  assets_attribute_option_id: z.string().nullish()
6750
7125
  })).optional(),
6751
7126
  images_attributes: z.array(zAssetsAttachmentParameters).optional(),
6752
- performed_by_user_id: z.string()
7127
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
6753
7128
  });
6754
7129
  /**
6755
7130
  * A file attached to an asset item — a document such as a manual, warranty, or certificate. Uploaded through the direct-upload flow and optionally marked as a certified copy.
@@ -6775,15 +7150,16 @@ export const zAssetsDocumentResponseObject = z.object({
6775
7150
  * Attach a file to an asset item as a document. file is required and takes a signed_id from the direct-upload endpoint.
6776
7151
  */
6777
7152
  export const zAssetsDocumentParameters = z.object({
6778
- file: z.string(),
7153
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
6779
7154
  filename: z.string().nullish(),
6780
- description: z.string().nullish()
7155
+ description: z.string().nullish(),
7156
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
6781
7157
  });
6782
7158
  /**
6783
- * Update an asset-item document. All fields are optional — send only what changes. Omit file to retain the existing attachment, or supply a new signed_id to replace it.
7159
+ * Update an asset-item document. All fields are optional — send only what changes. Omit file to retain the existing attachment, or supply a new signed_id to replace it. A document always holds a file, so null answers 422, as does a blank string.
6784
7160
  */
6785
7161
  export const zAssetsDocumentUpdateParameters = z.object({
6786
- file: z.string().optional(),
7162
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
6787
7163
  filename: z.string().nullish(),
6788
7164
  description: z.string().nullish()
6789
7165
  });
@@ -7076,7 +7452,7 @@ export const zAssetsServiceScheduleParameters = z.object({
7076
7452
  ]),
7077
7453
  interval_count: z.int().gte(1),
7078
7454
  last_serviced_on: z.iso.date().nullish(),
7079
- performed_by_user_id: z.string()
7455
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7080
7456
  });
7081
7457
  /**
7082
7458
  * Update a service schedule. Cadence and last_serviced_on fields are optional — send only what changes — but performed_by_user_id is required to record the updater. next_due_date is recomputed.
@@ -7092,7 +7468,7 @@ export const zAssetsServiceScheduleUpdateParameters = z.object({
7092
7468
  ]).optional(),
7093
7469
  interval_count: z.int().gte(1).optional(),
7094
7470
  last_serviced_on: z.iso.date().nullish(),
7095
- performed_by_user_id: z.string()
7471
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7096
7472
  });
7097
7473
  /**
7098
7474
  * A service performed on a serial item — scheduled (satisfying a service schedule) or ad-hoc. Recording one advances the linked schedule's next_due_date.
@@ -7126,7 +7502,7 @@ export const zAssetsServiceEventParameters = z.object({
7126
7502
  notes: z.string().nullish(),
7127
7503
  performed_on: z.iso.date(),
7128
7504
  assets_service_schedule_id: z.string().nullish(),
7129
- performed_by_user_id: z.string(),
7505
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7130
7506
  attachments_attributes: z.array(zAssetsAttachmentParameters).optional()
7131
7507
  });
7132
7508
  /**
@@ -7141,7 +7517,7 @@ export const zAssetsServiceEventUpdateParameters = z.object({
7141
7517
  notes: z.string().nullish(),
7142
7518
  performed_on: z.iso.date().optional(),
7143
7519
  assets_service_schedule_id: z.string().nullish(),
7144
- performed_by_user_id: z.string(),
7520
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7145
7521
  attachments_attributes: z.array(zAssetsAttachmentParameters).optional()
7146
7522
  });
7147
7523
  /**
@@ -7176,7 +7552,7 @@ export const zAssetsServiceScheduleTemplateParameters = z.object({
7176
7552
  'day'
7177
7553
  ]),
7178
7554
  interval_count: z.int().gte(1),
7179
- performed_by_user_id: z.string()
7555
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7180
7556
  });
7181
7557
  /**
7182
7558
  * Update a service schedule template. Cadence fields are optional — send only what changes — but performed_by_user_id is required to record the updater. Changing defining fields reconciles linked item schedules in the background.
@@ -7191,7 +7567,7 @@ export const zAssetsServiceScheduleTemplateUpdateParameters = z.object({
7191
7567
  'day'
7192
7568
  ]).optional(),
7193
7569
  interval_count: z.int().gte(1).optional(),
7194
- performed_by_user_id: z.string()
7570
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7195
7571
  });
7196
7572
  /**
7197
7573
  * A node of fixed storage structure inside a site or a container item — a zone, aisle, rack, shelf, bin, or drawer. Nodes form a tree per holder, and each carries a scannable path_code composed from its ancestors' codes.
@@ -7220,9 +7596,9 @@ export const zAssetsSubLocationResponseObject = z.object({
7220
7596
  * Create a storage location. name and code are required. A top-level node names its holder (assets_site_id or container_item_id, exactly one); a nested node names parent_id and inherits the parent's holder. The holder cannot change after creation.
7221
7597
  */
7222
7598
  export const zAssetsSubLocationParameters = z.object({
7223
- assets_site_id: z.string().optional(),
7224
- container_item_id: z.string().optional(),
7225
- parent_id: z.string().nullish(),
7599
+ assets_site_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
7600
+ container_item_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
7601
+ parent_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
7226
7602
  kind: z.enum([
7227
7603
  'zone',
7228
7604
  'aisle',
@@ -7230,7 +7606,7 @@ export const zAssetsSubLocationParameters = z.object({
7230
7606
  'shelf',
7231
7607
  'bin',
7232
7608
  'drawer'
7233
- ]).optional(),
7609
+ ]).nullish(),
7234
7610
  name: z.string().min(1),
7235
7611
  code: z.string().min(1)
7236
7612
  });
@@ -7238,7 +7614,7 @@ export const zAssetsSubLocationParameters = z.object({
7238
7614
  * Update a storage location. All fields are optional — send only what changes. Sending assets_site_id or container_item_id on update returns 400 unknown_key. Holder fields are accepted only on create; renaming code cascades new path codes through the node's subtree.
7239
7615
  */
7240
7616
  export const zAssetsSubLocationUpdateParameters = z.object({
7241
- parent_id: z.string().nullish(),
7617
+ parent_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
7242
7618
  kind: z.enum([
7243
7619
  'zone',
7244
7620
  'aisle',
@@ -7246,7 +7622,7 @@ export const zAssetsSubLocationUpdateParameters = z.object({
7246
7622
  'shelf',
7247
7623
  'bin',
7248
7624
  'drawer'
7249
- ]).optional(),
7625
+ ]).nullish(),
7250
7626
  name: z.string().min(1).optional(),
7251
7627
  code: z.string().min(1).optional()
7252
7628
  });
@@ -7292,7 +7668,7 @@ export const zAssetsTransferParameters = z.object({
7292
7668
  to_container_item_id: z.string().optional(),
7293
7669
  from_assets_sub_location_id: z.string().optional(),
7294
7670
  to_assets_sub_location_id: z.string().optional(),
7295
- performed_by_user_id: z.string(),
7671
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7296
7672
  line_items: z.array(z.object({
7297
7673
  assets_item_id: z.string(),
7298
7674
  quantity: z.int().gte(1)
@@ -7302,25 +7678,39 @@ export const zAssetsTransferParameters = z.object({
7302
7678
  * Add stock of a bulk product at a site, recording a receive transaction. Bulk products only.
7303
7679
  */
7304
7680
  export const zAssetsRestockParameters = z.object({
7305
- assets_site_id: z.string(),
7306
- assets_sub_location_id: z.string().optional(),
7681
+ assets_site_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7682
+ assets_sub_location_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
7307
7683
  quantity: z.int().gte(1),
7308
- performed_by_user_id: z.string()
7684
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7309
7685
  });
7310
7686
  /**
7311
7687
  * Set the on-hand count of a bulk product at a site to a specific number, recording the difference as an adjustment transaction. The site must already stock the product. Bulk products only.
7312
7688
  */
7313
7689
  export const zAssetsAdjustmentParameters = z.object({
7314
- assets_site_id: z.string(),
7315
- assets_sub_location_id: z.string().optional(),
7690
+ assets_site_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7691
+ assets_sub_location_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish(),
7316
7692
  new_quantity: z.int().gte(0),
7317
- performed_by_user_id: z.string()
7693
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7694
+ });
7695
+ /**
7696
+ * Archive or unarchive a product or item. Archiving takes it out of circulation without deleting it — history is preserved and it is hidden from listings unless requested with filter[state]. Archiving a product cascades to its items; item operations apply to serial items only.
7697
+ */
7698
+ export const zAssetsArchiveParameters = z.object({
7699
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7700
+ });
7701
+ /**
7702
+ * Create the template's schedule on the product's serial items that don't have one yet. Items whose matching schedule has a different cadence are blocked and never seeded.
7703
+ */
7704
+ export const zAssetsServiceScheduleSeedParameters = z.object({
7705
+ assets_item_ids: z.array(z.string()).min(1).optional(),
7706
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7318
7707
  });
7319
7708
  /**
7320
- * Archive or unarchive a product or item. Archiving takes it out of circulation without deleting it — history is preserved and it is hidden from listings unless requested with filter[state]. Archiving a product cascades to its items; item operations apply to serial items only.
7709
+ * Rewrite blocked schedules — those sharing the template's name and kind with a different interval — to the template's cadence, which links them to it.
7321
7710
  */
7322
- export const zAssetsArchiveParameters = z.object({
7323
- performed_by_user_id: z.string()
7711
+ export const zAssetsServiceScheduleSyncParameters = z.object({
7712
+ schedule_ids: z.array(z.string()).min(1).optional(),
7713
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7324
7714
  });
7325
7715
  /**
7326
7716
  * A certification held by a worker — the record that a worker earned a certification, with its receipt date, optional expiry, and verification state.
@@ -8322,10 +8712,7 @@ export const zUpdateServiceScheduleTemplatePath = z.object({
8322
8712
  * Success
8323
8713
  */
8324
8714
  export const zUpdateServiceScheduleTemplateResponse = zAssetsServiceScheduleTemplateResponseObject;
8325
- export const zSeedServiceScheduleTemplateBody = z.object({
8326
- assets_item_ids: z.array(z.string()).optional(),
8327
- performed_by_user_id: z.string()
8328
- });
8715
+ export const zSeedServiceScheduleTemplateBody = zAssetsServiceScheduleSeedParameters;
8329
8716
  export const zSeedServiceScheduleTemplatePath = z.object({
8330
8717
  product_id: z.string(),
8331
8718
  service_schedule_template_id: z.string()
@@ -8337,10 +8724,7 @@ export const zSeedServiceScheduleTemplateResponse = z.object({
8337
8724
  count: z.int(),
8338
8725
  data: z.array(zAssetsServiceScheduleResponseObject)
8339
8726
  });
8340
- export const zSyncServiceScheduleTemplateBody = z.object({
8341
- schedule_ids: z.array(z.string()).optional(),
8342
- performed_by_user_id: z.string()
8343
- });
8727
+ export const zSyncServiceScheduleTemplateBody = zAssetsServiceScheduleSyncParameters;
8344
8728
  export const zSyncServiceScheduleTemplatePath = z.object({
8345
8729
  product_id: z.string(),
8346
8730
  service_schedule_template_id: z.string()
@@ -8811,6 +9195,112 @@ export const zUpdateCompanyProfilePath = z.object({
8811
9195
  * Success
8812
9196
  */
8813
9197
  export const zUpdateCompanyProfileResponse = zCompanyResponseObject;
9198
+ export const zListAssessmentsQuery = z.object({
9199
+ 'filter[candidate_user_id]': z.string().optional(),
9200
+ 'filter[competencies_level_id]': z.string().optional(),
9201
+ 'filter[status]': z.enum([
9202
+ 'evidence_collection',
9203
+ 'submitted',
9204
+ 'in_review',
9205
+ 'decided'
9206
+ ]).optional(),
9207
+ 'filter[outcome]': z.enum(['competent', 'not_yet_competent']).nullish(),
9208
+ filter: z.string().optional(),
9209
+ 'filter[unexpected]': z.string().optional()
9210
+ });
9211
+ /**
9212
+ * Success
9213
+ */
9214
+ export const zListAssessmentsResponse = z.object({
9215
+ meta: zMeta,
9216
+ links: zLinks,
9217
+ data: z.array(zCompetencyAssessmentResponseObject)
9218
+ });
9219
+ export const zGetAssessmentPath = z.object({
9220
+ id: z.string()
9221
+ });
9222
+ /**
9223
+ * Success
9224
+ */
9225
+ export const zGetAssessmentResponse = zCompetencyAssessmentResponseObject;
9226
+ export const zListAssessmentKeyActivitiesPath = z.object({
9227
+ assessment_id: z.string()
9228
+ });
9229
+ export const zListAssessmentKeyActivitiesQuery = z.object({
9230
+ filter: z.string().optional(),
9231
+ 'filter[unexpected]': z.string().optional()
9232
+ });
9233
+ /**
9234
+ * Candidate sees a decided review
9235
+ */
9236
+ export const zListAssessmentKeyActivitiesResponse = z.object({
9237
+ meta: zMeta,
9238
+ links: zLinks,
9239
+ data: z.array(zCompetencyAssessmentKeyActivityResponseObject)
9240
+ });
9241
+ export const zGetAssessmentKeyActivityPath = z.object({
9242
+ assessment_id: z.string(),
9243
+ id: z.string()
9244
+ });
9245
+ /**
9246
+ * Candidate sees a decided review
9247
+ */
9248
+ export const zGetAssessmentKeyActivityResponse = zCompetencyAssessmentKeyActivityResponseObject;
9249
+ export const zListEvidenceItemsPath = z.object({
9250
+ assessment_id: z.string(),
9251
+ key_activity_id: z.string()
9252
+ });
9253
+ export const zListEvidenceItemsQuery = z.object({
9254
+ 'filter[kind]': z.enum([
9255
+ 'upload',
9256
+ 'form_submission',
9257
+ 'certification'
9258
+ ]).optional(),
9259
+ filter: z.string().optional(),
9260
+ 'filter[unexpected]': z.string().optional()
9261
+ });
9262
+ /**
9263
+ * Success
9264
+ */
9265
+ export const zListEvidenceItemsResponse = z.object({
9266
+ meta: zMeta,
9267
+ links: zLinks,
9268
+ data: z.array(zCompetencyEvidenceItemResponseObject)
9269
+ });
9270
+ export const zGetEvidenceItemPath = z.object({
9271
+ assessment_id: z.string(),
9272
+ key_activity_id: z.string(),
9273
+ id: z.string()
9274
+ });
9275
+ /**
9276
+ * Success
9277
+ */
9278
+ export const zGetEvidenceItemResponse = zCompetencyEvidenceItemResponseObject;
9279
+ export const zListQualificationsQuery = z.object({
9280
+ 'filter[candidate_user_id]': z.string().optional(),
9281
+ 'filter[competencies_standard_id]': z.string().optional(),
9282
+ 'filter[level_sort_order]': z.int().optional(),
9283
+ filter: z.string().optional(),
9284
+ 'filter[unexpected]': z.string().optional(),
9285
+ 'page[cursor]': z.string().optional(),
9286
+ 'page[limit]': z.int().gte(1).optional().default(20),
9287
+ page: z.string().optional()
9288
+ });
9289
+ /**
9290
+ * Success
9291
+ */
9292
+ export const zListQualificationsResponse = z.object({
9293
+ meta: zMeta,
9294
+ links: zLinks,
9295
+ data: z.array(zCompetencyQualificationResponseObject)
9296
+ });
9297
+ export const zGetQualificationPath = z.object({
9298
+ id: z.string()
9299
+ });
9300
+ /**
9301
+ * Success
9302
+ */
9303
+ export const zGetQualificationResponse = zCompetencyQualificationResponseObject;
8814
9304
  export const zListChecksQuery = z.object({
8815
9305
  'filter[status]': z.enum([
8816
9306
  'passed',
@@ -9165,6 +9655,50 @@ export const zUpdateJobScopePricePath = z.object({
9165
9655
  * Success
9166
9656
  */
9167
9657
  export const zUpdateJobScopePriceResponse = zProductionJobScopePriceResponseObject;
9658
+ export const zListGoodFaithEffortExceptionsPath = z.object({
9659
+ job_id: z.string()
9660
+ });
9661
+ export const zListGoodFaithEffortExceptionsQuery = z.object({
9662
+ filter: z.string().optional(),
9663
+ 'filter[unexpected]': z.string().optional(),
9664
+ 'page[cursor]': z.string().optional(),
9665
+ 'page[limit]': z.int().gte(1).optional().default(20),
9666
+ page: z.string().optional()
9667
+ });
9668
+ /**
9669
+ * Success
9670
+ */
9671
+ export const zListGoodFaithEffortExceptionsResponse = zJobGoodFaithEffortExceptionsResponseObject;
9672
+ export const zGetGoodFaithEffortExceptionPath = z.object({
9673
+ job_id: z.string(),
9674
+ id: z.string()
9675
+ });
9676
+ /**
9677
+ * Success
9678
+ */
9679
+ export const zGetGoodFaithEffortExceptionResponse = zJobGoodFaithEffortExceptionResponseObject;
9680
+ export const zListCurePaymentsPath = z.object({
9681
+ job_id: z.string()
9682
+ });
9683
+ export const zListCurePaymentsQuery = z.object({
9684
+ filter: z.string().optional(),
9685
+ 'filter[unexpected]': z.string().optional(),
9686
+ 'page[cursor]': z.string().optional(),
9687
+ 'page[limit]': z.int().gte(1).optional().default(20),
9688
+ page: z.string().optional()
9689
+ });
9690
+ /**
9691
+ * Success
9692
+ */
9693
+ export const zListCurePaymentsResponse = zJobCurePaymentsResponseObject;
9694
+ export const zGetCurePaymentPath = z.object({
9695
+ job_id: z.string(),
9696
+ id: z.string()
9697
+ });
9698
+ /**
9699
+ * Success
9700
+ */
9701
+ export const zGetCurePaymentResponse = zJobCurePaymentResponseObject;
9168
9702
  export const zCreateJobTradeBody = zPwaTradeParameters;
9169
9703
  export const zCreateJobTradePath = z.object({
9170
9704
  job_id: z.string()
@@ -9423,6 +9957,7 @@ export const zListJobsQuery = z.object({
9423
9957
  'filter[project_id]': z.string().optional(),
9424
9958
  'filter[companies_department_id]': z.string().optional(),
9425
9959
  'filter[companies_department_id][null]': z.boolean().optional(),
9960
+ 'filter[requested_by_company_id]': z.string().optional(),
9426
9961
  'filter[status]': z.string().optional(),
9427
9962
  'filter[production_tracking_kind]': z.enum([
9428
9963
  'none',
@@ -10762,6 +11297,62 @@ export const zCreateProjectTradePath = z.object({
10762
11297
  * Created
10763
11298
  */
10764
11299
  export const zCreateProjectTradeResponse = zPwaTradeResponseObject;
11300
+ export const zListProjectWageDeterminationRateRuleHistoryPath = z.object({
11301
+ project_id: z.string(),
11302
+ wage_determination_id: z.string(),
11303
+ rate_rule_id: z.string()
11304
+ });
11305
+ export const zListProjectWageDeterminationRateRuleHistoryQuery = z.object({
11306
+ 'as_of[valid]': z.string().optional()
11307
+ });
11308
+ /**
11309
+ * Success
11310
+ */
11311
+ export const zListProjectWageDeterminationRateRuleHistoryResponse = z.object({
11312
+ meta: zMeta,
11313
+ links: zLinks,
11314
+ data: z.array(zProjectRateRuleHistoryVersionObject)
11315
+ });
11316
+ export const zListProjectWageDeterminationRateRulesPath = z.object({
11317
+ project_id: z.string(),
11318
+ wage_determination_id: z.string()
11319
+ });
11320
+ export const zListProjectWageDeterminationRateRulesQuery = z.object({
11321
+ 'as_of[valid]': z.iso.datetime().optional(),
11322
+ as_of: z.string().optional(),
11323
+ 'as_of[bogus_axis]': z.string().optional(),
11324
+ 'as_of[valid][gte]': z.string().optional(),
11325
+ 'as_of[transaction]': z.string().optional()
11326
+ });
11327
+ /**
11328
+ * Success
11329
+ */
11330
+ export const zListProjectWageDeterminationRateRulesResponse = z.object({
11331
+ meta: zMeta,
11332
+ links: zLinks,
11333
+ data: z.array(zProjectRateRuleResponseObject)
11334
+ });
11335
+ export const zCreateProjectWageDeterminationRateRuleBody = zRateRuleParameters;
11336
+ export const zCreateProjectWageDeterminationRateRulePath = z.object({
11337
+ project_id: z.string(),
11338
+ wage_determination_id: z.string()
11339
+ });
11340
+ /**
11341
+ * Created
11342
+ */
11343
+ export const zCreateProjectWageDeterminationRateRuleResponse = zProjectRateRuleResponseObject;
11344
+ export const zGetProjectWageDeterminationRateRulePath = z.object({
11345
+ project_id: z.string(),
11346
+ wage_determination_id: z.string(),
11347
+ id: z.string()
11348
+ });
11349
+ export const zGetProjectWageDeterminationRateRuleQuery = z.object({
11350
+ 'as_of[valid]': z.iso.datetime().optional()
11351
+ });
11352
+ /**
11353
+ * Success
11354
+ */
11355
+ export const zGetProjectWageDeterminationRateRuleResponse = zProjectRateRuleResponseObject;
10765
11356
  export const zListProjectSitesPath = z.object({
10766
11357
  project_id: z.string()
10767
11358
  });
@@ -10811,6 +11402,147 @@ export const zUpdateProjectSitePath = z.object({
10811
11402
  * Success
10812
11403
  */
10813
11404
  export const zUpdateProjectSiteResponse = zProjectSiteResponseObject;
11405
+ export const zShiftProjectWageDeterminationGenesisBody = zProjectWageDeterminationGenesisParameters;
11406
+ export const zShiftProjectWageDeterminationGenesisHeaders = z.object({
11407
+ 'If-Match': z.string()
11408
+ });
11409
+ export const zShiftProjectWageDeterminationGenesisPath = z.object({
11410
+ project_id: z.string(),
11411
+ wage_determination_id: z.string()
11412
+ });
11413
+ /**
11414
+ * Success
11415
+ */
11416
+ export const zShiftProjectWageDeterminationGenesisResponse = zProjectWageDeterminationResponseObject;
11417
+ export const zListProjectWageDeterminationHistoryPath = z.object({
11418
+ project_id: z.string(),
11419
+ wage_determination_id: z.string()
11420
+ });
11421
+ export const zListProjectWageDeterminationHistoryQuery = z.object({
11422
+ 'as_of[valid]': z.string().optional()
11423
+ });
11424
+ /**
11425
+ * Success
11426
+ */
11427
+ export const zListProjectWageDeterminationHistoryResponse = z.object({
11428
+ meta: zMeta,
11429
+ links: zLinks,
11430
+ data: z.array(zProjectWageDeterminationHistoryVersionObject)
11431
+ });
11432
+ export const zCancelProjectWageDeterminationScheduledChangesHeaders = z.object({
11433
+ 'If-Match': z.string()
11434
+ });
11435
+ export const zCancelProjectWageDeterminationScheduledChangesPath = z.object({
11436
+ project_id: z.string(),
11437
+ wage_determination_id: z.string()
11438
+ });
11439
+ /**
11440
+ * Success
11441
+ */
11442
+ export const zCancelProjectWageDeterminationScheduledChangesResponse = zProjectWageDeterminationResponseObject;
11443
+ export const zListProjectWageDeterminationScheduledChangesPath = z.object({
11444
+ project_id: z.string(),
11445
+ wage_determination_id: z.string()
11446
+ });
11447
+ /**
11448
+ * Success with scheduled changes
11449
+ */
11450
+ export const zListProjectWageDeterminationScheduledChangesResponse = z.array(zProjectWageDeterminationResponseObject);
11451
+ export const zScheduleProjectWageDeterminationChangeBody = zProjectWageDeterminationScheduledChangeParameters;
11452
+ export const zScheduleProjectWageDeterminationChangeHeaders = z.object({
11453
+ 'If-Match': z.string()
11454
+ });
11455
+ export const zScheduleProjectWageDeterminationChangePath = z.object({
11456
+ project_id: z.string(),
11457
+ wage_determination_id: z.string()
11458
+ });
11459
+ /**
11460
+ * Created
11461
+ */
11462
+ export const zScheduleProjectWageDeterminationChangeResponse = zProjectWageDeterminationResponseObject;
11463
+ export const zCancelProjectWageDeterminationScheduledTerminationHeaders = z.object({
11464
+ 'If-Match': z.string()
11465
+ });
11466
+ export const zCancelProjectWageDeterminationScheduledTerminationPath = z.object({
11467
+ project_id: z.string(),
11468
+ wage_determination_id: z.string()
11469
+ });
11470
+ /**
11471
+ * Success
11472
+ */
11473
+ export const zCancelProjectWageDeterminationScheduledTerminationResponse = zProjectWageDeterminationResponseObject;
11474
+ export const zScheduleProjectWageDeterminationTerminationBody = zProjectWageDeterminationScheduledTerminationParameters;
11475
+ export const zScheduleProjectWageDeterminationTerminationHeaders = z.object({
11476
+ 'If-Match': z.string()
11477
+ });
11478
+ export const zScheduleProjectWageDeterminationTerminationPath = z.object({
11479
+ project_id: z.string(),
11480
+ wage_determination_id: z.string()
11481
+ });
11482
+ /**
11483
+ * Created
11484
+ */
11485
+ export const zScheduleProjectWageDeterminationTerminationResponse = zProjectWageDeterminationResponseObject;
11486
+ export const zListProjectWageDeterminationsPath = z.object({
11487
+ project_id: z.string()
11488
+ });
11489
+ export const zListProjectWageDeterminationsQuery = z.object({
11490
+ 'as_of[valid]': z.iso.datetime().optional(),
11491
+ as_of: z.string().optional(),
11492
+ 'as_of[bogus_axis]': z.string().optional(),
11493
+ 'as_of[valid][gte]': z.string().optional(),
11494
+ 'as_of[transaction]': z.string().optional()
11495
+ });
11496
+ /**
11497
+ * Success
11498
+ */
11499
+ export const zListProjectWageDeterminationsResponse = z.object({
11500
+ meta: zMeta,
11501
+ links: zLinks,
11502
+ data: z.array(zProjectWageDeterminationResponseObject)
11503
+ });
11504
+ export const zCreateProjectWageDeterminationBody = zProjectWageDeterminationParameters;
11505
+ export const zCreateProjectWageDeterminationPath = z.object({
11506
+ project_id: z.string()
11507
+ });
11508
+ /**
11509
+ * Created
11510
+ */
11511
+ export const zCreateProjectWageDeterminationResponse = zProjectWageDeterminationResponseObject;
11512
+ export const zDeleteProjectWageDeterminationHeaders = z.object({
11513
+ 'If-Match': z.string()
11514
+ });
11515
+ export const zDeleteProjectWageDeterminationPath = z.object({
11516
+ project_id: z.string(),
11517
+ id: z.string()
11518
+ });
11519
+ /**
11520
+ * Success
11521
+ */
11522
+ export const zDeleteProjectWageDeterminationResponse = zProjectWageDeterminationResponseObject;
11523
+ export const zGetProjectWageDeterminationPath = z.object({
11524
+ project_id: z.string(),
11525
+ id: z.string()
11526
+ });
11527
+ export const zGetProjectWageDeterminationQuery = z.object({
11528
+ 'as_of[valid]': z.iso.datetime().optional()
11529
+ });
11530
+ /**
11531
+ * Success
11532
+ */
11533
+ export const zGetProjectWageDeterminationResponse = zProjectWageDeterminationResponseObject;
11534
+ export const zUpdateProjectWageDeterminationBody = zProjectWageDeterminationUpdateParameters;
11535
+ export const zUpdateProjectWageDeterminationHeaders = z.object({
11536
+ 'If-Match': z.string()
11537
+ });
11538
+ export const zUpdateProjectWageDeterminationPath = z.object({
11539
+ project_id: z.string(),
11540
+ id: z.string()
11541
+ });
11542
+ /**
11543
+ * Success
11544
+ */
11545
+ export const zUpdateProjectWageDeterminationResponse = zProjectWageDeterminationResponseObject;
10814
11546
  export const zListProjectsQuery = z.object({
10815
11547
  'filter[federal_pwa_mode]': z.enum([
10816
11548
  'all',
@@ -10826,6 +11558,9 @@ export const zListProjectsQuery = z.object({
10826
11558
  ]).optional(),
10827
11559
  'filter[external_id]': z.string().optional(),
10828
11560
  'filter[name]': z.string().optional(),
11561
+ 'filter[owned_by_company_id]': z.string().optional(),
11562
+ 'filter[job_id]': z.string().optional(),
11563
+ 'filter[site_id]': z.string().optional(),
10829
11564
  'filter[created_at][gte]': z.iso.datetime().optional(),
10830
11565
  'filter[created_at][lte]': z.iso.datetime().optional(),
10831
11566
  'filter[updated_at][gte]': z.iso.datetime().optional(),
@@ -11282,6 +12017,22 @@ export const zListTimeCardsQuery = z.object({
11282
12017
  'filter[timekeeping_pay_period_id]': z.string().optional(),
11283
12018
  'filter[user_id]': z.string().optional(),
11284
12019
  'filter[job_id]': z.string().optional(),
12020
+ 'filter[federal_pwa]': z.boolean().optional(),
12021
+ 'filter[regional_pwa]': z.boolean().optional(),
12022
+ 'filter[apprentice]': z.boolean().optional(),
12023
+ 'filter[employment_type]': z.array(z.enum(['EMPLOYEE', 'CONTRACTOR'])).optional(),
12024
+ 'filter[compensation_type]': z.array(z.enum(['hourly', 'salary'])).optional(),
12025
+ 'filter[department_id]': z.string().optional(),
12026
+ 'filter[worker_approval_status]': z.array(z.enum([
12027
+ 'PENDING',
12028
+ 'APPROVED',
12029
+ 'DECLINED'
12030
+ ])).optional(),
12031
+ 'filter[manager_approval_status]': z.array(z.enum([
12032
+ 'PENDING',
12033
+ 'APPROVED',
12034
+ 'DECLINED'
12035
+ ])).optional(),
11285
12036
  'filter[start_time][gte]': z.iso.datetime().optional(),
11286
12037
  'filter[start_time][lte]': z.iso.datetime().optional(),
11287
12038
  filter: z.string().optional(),
@@ -11868,6 +12619,12 @@ export const zListUsersQuery = z.object({
11868
12619
  'filter[name]': z.string().optional(),
11869
12620
  'filter[manager_user_id]': z.string().optional(),
11870
12621
  'filter[department_id]': z.string().optional(),
12622
+ 'filter[invite_status]': z.array(z.enum([
12623
+ 'pending',
12624
+ 'accepted',
12625
+ 'declined',
12626
+ 'revoked'
12627
+ ])).optional(),
11871
12628
  'page[cursor]': z.string().optional(),
11872
12629
  'page[limit]': z.int().gte(1).optional().default(20),
11873
12630
  page: z.string().optional(),