@dsptch-work/api-client 0.13.0 → 0.15.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.
@@ -138,6 +138,12 @@ export const zProblem = z.object({
138
138
  *
139
139
  * The API key lacks the scope grant for this endpoint and verb. Grant the required scope to the key and retry.
140
140
  *
141
+ * ### user_scoped_key_required
142
+ *
143
+ * **User-Scoped Key Required**
144
+ *
145
+ * The endpoint records which person performed the action, so it needs a credential that names one. The presented key is scoped to the company itself. Retry with a user-scoped API key; no additional scope grant makes a company-scoped key acceptable here.
146
+ *
141
147
  * ## 404
142
148
  *
143
149
  * ### not_found
@@ -154,6 +160,12 @@ export const zProblem = z.object({
154
160
  *
155
161
  * The resource's timeline already ends at a scheduled termination, and scheduling a second one would silently move it. Moving an end is two steps on purpose: cancel the standing termination, then schedule the one you want.
156
162
  *
163
+ * ### import_in_progress
164
+ *
165
+ * **Import In Progress**
166
+ *
167
+ * The parent already has an import that has not reported yet. Acceptance is synchronous but the write happens in the background, so a second file would be validated against records the queued import has not written to yet and both would apply. Poll the earlier import until it reports, then submit again.
168
+ *
157
169
  * ### product_archived
158
170
  *
159
171
  * **Product Archived**
@@ -349,8 +361,10 @@ export const zProblemTypeCatalog = z.enum([
349
361
  'company_scoped_key_required',
350
362
  'forbidden',
351
363
  'insufficient_api_key_scope',
364
+ 'user_scoped_key_required',
352
365
  'not_found',
353
366
  'already_terminated',
367
+ 'import_in_progress',
354
368
  'product_archived',
355
369
  'recorded_since_termination',
356
370
  'span_beyond_timeline_end',
@@ -399,6 +413,9 @@ export const zDirectUploadParameters = z.object({
399
413
  'assets.items.service_events',
400
414
  'assets.products',
401
415
  'assets.vendors',
416
+ 'pay_periods.imports.aggregate_times',
417
+ 'pay_periods.imports.dsptch_cprs',
418
+ 'pay_periods.imports.time_entries',
402
419
  'users'
403
420
  ]),
404
421
  blob: z.object({
@@ -1405,25 +1422,61 @@ export const zPwaTradeParameters = z.object({
1405
1422
  name: z.string()
1406
1423
  });
1407
1424
  /**
1408
- * Prevailing-wage / apprenticeship (PWA) compliance details for a job, used in certified-payroll reporting. Fields for every supported state are always present; those outside the job's region come back null. Null on the job when it tracks no PWA compliance.
1425
+ * Parameters for renaming a PWA trade (craft). Renaming edits the display label only the craft's match key and every determination grouped under it are untouched.
1426
+ */
1427
+ export const zPwaTradeUpdateParameters = z.object({
1428
+ name: z.string().optional()
1429
+ });
1430
+ /**
1431
+ * Parameters for merging one PWA trade (craft) into another in the same pool.
1432
+ */
1433
+ export const zPwaTradeMergeParameters = z.object({
1434
+ target_trade_id: z.string()
1435
+ });
1436
+ /**
1437
+ * 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.
1438
+ */
1439
+ export const zPwaTradeApprenticeshipOccupationResponseObject = z.object({
1440
+ id: z.string(),
1441
+ pwa_trade_id: z.string(),
1442
+ apprenticeship_occupation_id: z.string(),
1443
+ scope_status: z.enum(['in_scope', 'out_of_scope']),
1444
+ created_at: z.iso.datetime(),
1445
+ updated_at: z.iso.datetime()
1446
+ });
1447
+ /**
1448
+ * Parameters for recording an apprentice-scope decision on a trade.
1449
+ */
1450
+ export const zPwaTradeApprenticeshipOccupationCreateParameters = z.object({
1451
+ apprenticeship_occupation_id: z.string(),
1452
+ scope_status: z.enum(['in_scope', 'out_of_scope']).nullish()
1453
+ });
1454
+ /**
1455
+ * Parameters for flipping an existing apprentice-scope decision's verdict.
1456
+ */
1457
+ export const zPwaTradeApprenticeshipOccupationUpdateParameters = z.object({
1458
+ scope_status: z.enum(['in_scope', 'out_of_scope']).nullish()
1459
+ });
1460
+ /**
1461
+ * 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.
1409
1462
  */
1410
1463
  export const zPwaJobDetailsResponseObject = z.object({
1411
- dir_awarding_body_id: z.string().nullable(),
1412
- dir_project_id: z.string().nullable(),
1413
- dir_project_name: z.string().nullable(),
1414
- dir_contract_id: z.string().nullable(),
1415
- dir_project_awarding_body_name: z.string().nullable(),
1416
- dir_project_number: z.string().nullable(),
1417
- il_dol_project_id: z.string().nullable(),
1418
- il_dol_state_capital_funds: z.boolean().nullable(),
1419
- il_dol_public_body_name: z.string().nullable(),
1420
- il_dol_public_body_contact_id: z.string().nullable(),
1421
- il_dol_public_body_address_id: z.string().nullable(),
1422
- il_dol_contract_number: z.string().nullable(),
1423
- il_shines_project_id: z.string().nullable(),
1424
- ny_dol_prc_number: z.string().nullable(),
1464
+ contractor_type: z.enum(['prime_contractor', 'sub_contractor']).nullable(),
1425
1465
  pay_full_cash_fringe_by_default: z.boolean(),
1426
- contractor_type: z.string().nullable()
1466
+ dir_awarding_body_id: z.string().nullish(),
1467
+ dir_project_id: z.string().nullish(),
1468
+ dir_project_name: z.string().nullish(),
1469
+ dir_contract_id: z.string().nullish(),
1470
+ dir_project_awarding_body_name: z.string().nullish(),
1471
+ dir_project_number: z.string().nullish(),
1472
+ il_dol_project_id: z.string().nullish(),
1473
+ il_dol_state_capital_funds: z.boolean().nullish(),
1474
+ il_dol_public_body_name: z.string().nullish(),
1475
+ il_dol_public_body_contact_id: z.string().nullish(),
1476
+ il_dol_public_body_address_id: z.string().nullish(),
1477
+ il_dol_contract_number: z.string().nullish(),
1478
+ il_shines_project_id: z.string().nullish(),
1479
+ ny_dol_prc_number: z.string().nullish()
1427
1480
  }).nullable();
1428
1481
  /**
1429
1482
  * A reusable job template — a saved job pattern for quickly creating new jobs with the same setup. Read-only through the API (listing only).
@@ -1899,8 +1952,8 @@ export const zJobParameters = z.object({
1899
1952
  value: z.string().nullish()
1900
1953
  })).nullish(),
1901
1954
  pwa_details: z.object({
1902
- contractor_type: z.string().nullish(),
1903
- pay_full_cash_fringe_by_default: z.boolean().nullish(),
1955
+ contractor_type: z.enum(['prime_contractor', 'sub_contractor']).nullish(),
1956
+ pay_full_cash_fringe_by_default: z.boolean().optional(),
1904
1957
  dir_awarding_body_id: z.string().nullish(),
1905
1958
  dir_project_id: z.string().nullish(),
1906
1959
  dir_project_name: z.string().nullish(),
@@ -1910,12 +1963,12 @@ export const zJobParameters = z.object({
1910
1963
  il_dol_project_id: z.string().nullish(),
1911
1964
  il_dol_state_capital_funds: z.boolean().nullish(),
1912
1965
  il_dol_public_body_name: z.string().nullish(),
1913
- il_dol_contract_number: z.string().nullish(),
1914
- il_shines_project_id: z.string().nullish(),
1915
1966
  il_dol_public_body_contact_id: z.string().nullish(),
1916
1967
  il_dol_public_body_address_id: z.string().nullish(),
1968
+ il_dol_contract_number: z.string().nullish(),
1969
+ il_shines_project_id: z.string().nullish(),
1917
1970
  ny_dol_prc_number: z.string().nullish()
1918
- }).nullish()
1971
+ }).optional()
1919
1972
  });
1920
1973
  /**
1921
1974
  * Parameters for updating an existing job. Accepts every job_parameters field, plus a directly settable status.
@@ -1959,6 +2012,96 @@ export const zUserCompanyScheduledChangesResponse = z.object({
1959
2012
  export const zUserCompanyScheduledTerminationParameters = z.object({
1960
2013
  termination_date: z.string()
1961
2014
  });
2015
+ /**
2016
+ * One problem found while processing an accepted import, whatever its type.
2017
+ */
2018
+ export const zImportProcessingError = z.object({
2019
+ code: z.string(),
2020
+ row: z.int().nullable(),
2021
+ column: z.string().nullable(),
2022
+ context: z.record(z.string(), z.unknown())
2023
+ });
2024
+ /**
2025
+ * One bulk upload of day-level hours against a pay period, and how it turned out.
2026
+ */
2027
+ export const zAggregateTimeImportResponseObject = z.object({
2028
+ id: z.string(),
2029
+ pay_period_id: z.string(),
2030
+ status: z.enum([
2031
+ 'pending',
2032
+ 'processing',
2033
+ 'processed',
2034
+ 'success',
2035
+ 'failed'
2036
+ ]),
2037
+ processed_rows_count: z.int(),
2038
+ processing_errors: z.array(zImportProcessingError),
2039
+ completed_at: z.iso.datetime().nullable(),
2040
+ created_at: z.iso.datetime(),
2041
+ updated_at: z.iso.datetime()
2042
+ });
2043
+ /**
2044
+ * Submit a spreadsheet of day-level hours for a pay period. The pay period's pay schedule must keep time in aggregate mode and take pay in base mode; a schedule that keeps time as entries, or that aggregates pay, is refused. The file carries employee_payroll_id, job_id and week_ending_date, the three wage pay rates one_x_wage_pay_rate, one_five_x_wage_pay_rate and two_x_wage_pay_rate, and one hours column per multiplier per day of the period — seven days each for a weekly schedule, fourteen for a biweekly one. All of them must be present as column headers, or the file is refused naming the ones missing. Of those, employee_payroll_id, job_id and week_ending_date must also carry a value on every row; a rate left blank falls back to the one the employee's position and wage determination already carry. federal_labor_classification and regional_labor_classification are read when present, and are needed only where a position has more than one wage determination in a jurisdiction. Header matching ignores case and treats spaces as underscores, and column order does not matter. Any other column is refused: a name this import does not read would be dropped without trace, so the file is rejected naming it rather than applied in part.
2045
+ *
2046
+ * Submitting the same work twice is refused rather than doubled: an import will not write onto a time card that already holds data, so a retry after a submission that already succeeded answers 422 naming `time_card_has_data`, and nothing is written. The guard is per time card, not per file, so a corrected file for the same worker and period is refused the same way — clear that period's data first.
2047
+ *
2048
+ * 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.
2049
+ */
2050
+ export const zAggregateTimeImportParameters = z.object({
2051
+ file_signed_id: z.string()
2052
+ });
2053
+ /**
2054
+ * One bulk upload of a certified payroll report against a pay period, and how it turned out.
2055
+ */
2056
+ export const zDsptchCprImportResponseObject = z.object({
2057
+ id: z.string(),
2058
+ pay_period_id: z.string(),
2059
+ status: z.enum([
2060
+ 'pending',
2061
+ 'processing',
2062
+ 'processed',
2063
+ 'success',
2064
+ 'failed'
2065
+ ]),
2066
+ processed_rows_count: z.int(),
2067
+ processing_errors: z.array(zImportProcessingError),
2068
+ completed_at: z.iso.datetime().nullable(),
2069
+ created_at: z.iso.datetime(),
2070
+ updated_at: z.iso.datetime()
2071
+ });
2072
+ /**
2073
+ * Submit a certified payroll report for a pay period. The pay period's pay schedule must be in aggregate time mode; a schedule that keeps time as entries is refused. The file carries every column of the DSPTCH CPR template: the payroll, job and employee identifiers, the employer and employee pay, contribution and deduction amounts, the three wage pay rates, and one hours column per multiplier per day of the period — seven days each for a weekly schedule, fourteen for a biweekly one. All of them must be present as column headers, or the file is refused naming the ones missing. Of those, job_id, week_ending_date, employee_payroll_id, one_x_wage_pay_rate and one_five_x_wage_pay_rate must also carry a value on every row, and two_x_wage_pay_rate must whenever any 2x hours column does. federal_labor_classification and regional_labor_classification are read when present, and are needed only where a position has more than one wage determination in a jurisdiction. Header matching ignores case and treats spaces as underscores, and column order does not matter. Any other column is refused: a name this import does not read would be dropped without trace, so the file is rejected naming it rather than applied in part.
2074
+ *
2075
+ * Submitting the same work twice is refused rather than doubled: an import will not write onto a time card that already holds data, so a retry after a submission that already succeeded answers 422 naming `time_card_has_data`, and nothing is written. The guard is per time card, not per file, so a corrected file for the same worker and period is refused the same way — clear that period's data first. Because acceptance is synchronous but the write happens in the background, two submissions racing each other can both be accepted; the second one then fails on the same guard and reports it through `processing_errors`.
2076
+ */
2077
+ export const zDsptchCprImportParameters = z.object({
2078
+ file_signed_id: z.string()
2079
+ });
2080
+ /**
2081
+ * One bulk upload of time entries against a pay period, and how it turned out.
2082
+ */
2083
+ export const zTimeEntryImportResponseObject = z.object({
2084
+ id: z.string(),
2085
+ pay_period_id: z.string(),
2086
+ status: z.enum([
2087
+ 'pending',
2088
+ 'processing',
2089
+ 'processed',
2090
+ 'success',
2091
+ 'failed'
2092
+ ]),
2093
+ processed_rows_count: z.int(),
2094
+ processing_errors: z.array(zImportProcessingError),
2095
+ completed_at: z.iso.datetime().nullable(),
2096
+ created_at: z.iso.datetime(),
2097
+ updated_at: z.iso.datetime()
2098
+ });
2099
+ /**
2100
+ * Submit a spreadsheet of time entries for a pay period. All seven of payroll_id, start_time, end_time, timecode, job_id, state and description must be present as column headers, or the file is refused naming the ones missing. Of those, payroll_id, start_time, end_time, timecode and state must also carry a value on every row. features, federal_labor_classification and regional_labor_classification are read when present. Header matching ignores case and treats spaces as underscores, and column order does not matter. Any other column is refused: a name this import does not read would be dropped without trace, so the file is rejected naming it rather than applied in part.
2101
+ */
2102
+ export const zTimeEntryImportParameters = z.object({
2103
+ file_signed_id: z.string()
2104
+ });
1962
2105
  /**
1963
2106
  * 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.
1964
2107
  */
@@ -4046,6 +4189,7 @@ export const zRegionalJobWageDeterminationParameters = z.object({
4046
4189
  hourly_rate_cents: z.string(),
4047
4190
  fringe_rate_cents: z.string().optional(),
4048
4191
  general_wage_determination: z.string().nullish(),
4192
+ overtime_package_id: z.string().nullish(),
4049
4193
  regional_fields: zRegionalWageDeterminationFields.optional()
4050
4194
  });
4051
4195
  /**
@@ -4060,6 +4204,7 @@ export const zJobWageDeterminationParameters = z.discriminatedUnion('type', [
4060
4204
  */
4061
4205
  export const zJobWageDeterminationUpdateParameters = z.object({
4062
4206
  effective_from: z.iso.date().optional(),
4207
+ overtime_package_id: z.string().nullish(),
4063
4208
  labor_classification: z.string().optional(),
4064
4209
  pwa_trade_id: z.string().optional(),
4065
4210
  hourly_rate_cents: z.string().optional(),
@@ -4080,7 +4225,6 @@ export const zJobWageDeterminationUpdateParameters = z.object({
4080
4225
  export const zJobWageDeterminationScheduledChangeParameters = z.object({
4081
4226
  effective_date: z.iso.date(),
4082
4227
  labor_classification: z.string().optional(),
4083
- pwa_trade_id: z.string().optional(),
4084
4228
  hourly_rate_cents: z.string().optional(),
4085
4229
  fringe_rate_cents: z.string().optional(),
4086
4230
  class_code: z.string().nullish(),
@@ -4209,6 +4353,177 @@ export const zRateRuleHistoryVersionObject = z.object({
4209
4353
  ]),
4210
4354
  corrections: z.array(zRateRuleHistoryCorrectionObject)
4211
4355
  });
4356
+ /**
4357
+ * An overtime rule (daily or weekly) belonging to an overtime package. It sets a pay multiplier that applies once a worked-hours threshold — and any day or date qualifier — is met. `valid_from`/`valid_to` bound the window this version is in effect.
4358
+ */
4359
+ export const zOvertimeRuleResponseObject = z.object({
4360
+ id: z.string(),
4361
+ overtime_package_id: z.string(),
4362
+ type: z.enum(['DailyOvertimeRule', 'WeeklyOvertimeRule']),
4363
+ rate_multiplier: z.enum([
4364
+ 'one_x',
4365
+ 'one_five_x',
4366
+ 'two_x'
4367
+ ]),
4368
+ region_id: z.string().nullable(),
4369
+ eligible_hours_worked: z.int().nullable(),
4370
+ specific_day_of_week: z.enum([
4371
+ 'sunday',
4372
+ 'monday',
4373
+ 'tuesday',
4374
+ 'wednesday',
4375
+ 'thursday',
4376
+ 'friday',
4377
+ 'saturday'
4378
+ ]).nullable(),
4379
+ specific_date: z.iso.date().nullable(),
4380
+ valid_from: z.iso.datetime().nullable(),
4381
+ valid_to: z.iso.datetime().nullable(),
4382
+ created_at: z.iso.datetime().nullable(),
4383
+ updated_at: z.iso.datetime().nullable()
4384
+ });
4385
+ export const zOvertimeRuleHistoryCorrectionObject = z.object({
4386
+ overtime_rule_id: z.string(),
4387
+ overtime_package_id: z.string(),
4388
+ type: z.enum(['DailyOvertimeRule', 'WeeklyOvertimeRule']),
4389
+ rate_multiplier: z.enum([
4390
+ 'one_x',
4391
+ 'one_five_x',
4392
+ 'two_x'
4393
+ ]),
4394
+ region_id: z.string().nullable(),
4395
+ eligible_hours_worked: z.int().nullable(),
4396
+ specific_day_of_week: z.enum([
4397
+ 'sunday',
4398
+ 'monday',
4399
+ 'tuesday',
4400
+ 'wednesday',
4401
+ 'thursday',
4402
+ 'friday',
4403
+ 'saturday'
4404
+ ]).nullable(),
4405
+ specific_date: z.iso.date().nullable(),
4406
+ valid_from: z.iso.datetime().nullable(),
4407
+ valid_to: z.iso.datetime().nullable(),
4408
+ created_at: z.iso.datetime().nullable(),
4409
+ updated_at: z.iso.datetime().nullable()
4410
+ });
4411
+ export const zOvertimeRuleHistoryVersionObject = z.object({
4412
+ overtime_rule_id: z.string(),
4413
+ overtime_package_id: z.string(),
4414
+ type: z.enum(['DailyOvertimeRule', 'WeeklyOvertimeRule']),
4415
+ rate_multiplier: z.enum([
4416
+ 'one_x',
4417
+ 'one_five_x',
4418
+ 'two_x'
4419
+ ]),
4420
+ region_id: z.string().nullable(),
4421
+ eligible_hours_worked: z.int().nullable(),
4422
+ specific_day_of_week: z.enum([
4423
+ 'sunday',
4424
+ 'monday',
4425
+ 'tuesday',
4426
+ 'wednesday',
4427
+ 'thursday',
4428
+ 'friday',
4429
+ 'saturday'
4430
+ ]).nullable(),
4431
+ specific_date: z.iso.date().nullable(),
4432
+ valid_from: z.iso.datetime().nullable(),
4433
+ valid_to: z.iso.datetime().nullable(),
4434
+ created_at: z.iso.datetime().nullable(),
4435
+ updated_at: z.iso.datetime().nullable(),
4436
+ version_status: z.enum([
4437
+ 'scheduled',
4438
+ 'current',
4439
+ 'historical'
4440
+ ]),
4441
+ corrections: z.array(zOvertimeRuleHistoryCorrectionObject)
4442
+ });
4443
+ /**
4444
+ * Create an overtime rule on the package. `type` and `rate_multiplier` are required; the qualifiers below are optional and describe when the multiplier applies.
4445
+ */
4446
+ export const zOvertimeRuleParameters = z.object({
4447
+ effective_date: z.iso.date().optional(),
4448
+ type: z.enum(['DailyOvertimeRule', 'WeeklyOvertimeRule']),
4449
+ rate_multiplier: z.enum([
4450
+ 'one_x',
4451
+ 'one_five_x',
4452
+ 'two_x'
4453
+ ]),
4454
+ region_id: z.string().nullish(),
4455
+ eligible_hours_worked: z.int().nullish(),
4456
+ specific_day_of_week: z.enum([
4457
+ 'sunday',
4458
+ 'monday',
4459
+ 'tuesday',
4460
+ 'wednesday',
4461
+ 'thursday',
4462
+ 'friday',
4463
+ 'saturday'
4464
+ ]).nullish(),
4465
+ specific_date: z.iso.date().nullish()
4466
+ });
4467
+ /**
4468
+ * Edit the rule from a point in valid time forward. `type` is required, since it selects how the rule is compiled, and `rate_multiplier` carries forward when omitted. Everything describing *when* the multiplier applies — `region_id`, `eligible_hours_worked`, `specific_day_of_week`, `specific_date` — is recompiled from the body on every write, so omitting one drops it rather than keeping it. State the whole set of qualifiers you want, not just the ones you are changing.
4469
+ */
4470
+ export const zOvertimeRuleUpdateParameters = z.object({
4471
+ effective_from: z.iso.date().optional(),
4472
+ type: z.enum(['DailyOvertimeRule', 'WeeklyOvertimeRule']),
4473
+ rate_multiplier: z.enum([
4474
+ 'one_x',
4475
+ 'one_five_x',
4476
+ 'two_x'
4477
+ ]).optional(),
4478
+ region_id: z.string().nullish(),
4479
+ eligible_hours_worked: z.int().nullish(),
4480
+ specific_day_of_week: z.enum([
4481
+ 'sunday',
4482
+ 'monday',
4483
+ 'tuesday',
4484
+ 'wednesday',
4485
+ 'thursday',
4486
+ 'friday',
4487
+ 'saturday'
4488
+ ]).nullish(),
4489
+ specific_date: z.iso.date().nullish()
4490
+ });
4491
+ /**
4492
+ * Schedule an effective-dated change to the rule, applying from a calendar date forward. `type` is required, since it selects how the rule is compiled, and `rate_multiplier` carries forward when omitted. Everything describing *when* the multiplier applies — `region_id`, `eligible_hours_worked`, `specific_day_of_week`, `specific_date` — is recompiled from the body on every write, so omitting one drops it rather than keeping it. State the whole set of qualifiers you want, not just the ones you are changing.
4493
+ */
4494
+ export const zOvertimeRuleScheduledChangeParameters = z.object({
4495
+ effective_date: z.iso.date(),
4496
+ type: z.enum(['DailyOvertimeRule', 'WeeklyOvertimeRule']),
4497
+ rate_multiplier: z.enum([
4498
+ 'one_x',
4499
+ 'one_five_x',
4500
+ 'two_x'
4501
+ ]).optional(),
4502
+ region_id: z.string().nullish(),
4503
+ eligible_hours_worked: z.int().nullish(),
4504
+ specific_day_of_week: z.enum([
4505
+ 'sunday',
4506
+ 'monday',
4507
+ 'tuesday',
4508
+ 'wednesday',
4509
+ 'thursday',
4510
+ 'friday',
4511
+ 'saturday'
4512
+ ]).nullish(),
4513
+ specific_date: z.iso.date().nullish()
4514
+ });
4515
+ /**
4516
+ * Parameters for moving where an overtime rule's timeline begins.
4517
+ */
4518
+ export const zOvertimeRuleGenesisParameters = z.object({
4519
+ effective_date: z.iso.date()
4520
+ });
4521
+ /**
4522
+ * Schedule when the overtime rule stops being valid.
4523
+ */
4524
+ export const zOvertimeRuleScheduledTerminationParameters = z.object({
4525
+ effective_date: z.iso.date()
4526
+ });
4212
4527
  /**
4213
4528
  * Create a rate rule on a job wage determination. `effect` is required. `conditions` is optional — an omitted or empty list makes the rule always apply. `effective_date` (YYYY-MM-DD) sets when the rule takes effect; it defaults to today and cannot predate the earliest applicable wage determination.
4214
4529
  */
@@ -6790,6 +7105,19 @@ export const zUpdateJobPath = z.object({
6790
7105
  * Success
6791
7106
  */
6792
7107
  export const zUpdateJobResponse = zJobResponseObject;
7108
+ /**
7109
+ * Success
7110
+ */
7111
+ export const zGetOpenapiDocumentResponse = z.object({
7112
+ openapi: z.string(),
7113
+ info: z.record(z.string(), z.unknown()),
7114
+ externalDocs: z.record(z.string(), z.unknown()),
7115
+ tags: z.array(z.record(z.string(), z.unknown())),
7116
+ 'x-tagGroups': z.array(z.record(z.string(), z.unknown())),
7117
+ paths: z.record(z.string(), z.unknown()),
7118
+ servers: z.array(z.record(z.string(), z.unknown())),
7119
+ components: z.record(z.string(), z.unknown())
7120
+ });
6793
7121
  export const zListSiteCheckInsPath = z.object({
6794
7122
  site_id: z.string()
6795
7123
  });
@@ -6823,6 +7151,275 @@ export const zGetSiteCheckInPath = z.object({
6823
7151
  * Success
6824
7152
  */
6825
7153
  export const zGetSiteCheckInResponse = zSiteCheckInResponseObject;
7154
+ export const zShiftOvertimeRuleGenesisBody = zOvertimeRuleGenesisParameters;
7155
+ export const zShiftOvertimeRuleGenesisHeaders = z.object({
7156
+ 'If-Match': z.string()
7157
+ });
7158
+ export const zShiftOvertimeRuleGenesisPath = z.object({
7159
+ overtime_package_id: z.string(),
7160
+ overtime_rule_id: z.string()
7161
+ });
7162
+ /**
7163
+ * Success
7164
+ */
7165
+ export const zShiftOvertimeRuleGenesisResponse = zOvertimeRuleResponseObject;
7166
+ export const zListOvertimeRuleHistoryPath = z.object({
7167
+ overtime_package_id: z.string(),
7168
+ overtime_rule_id: z.string()
7169
+ });
7170
+ export const zListOvertimeRuleHistoryQuery = z.object({
7171
+ 'as_of[valid]': z.string().optional()
7172
+ });
7173
+ /**
7174
+ * Success
7175
+ */
7176
+ export const zListOvertimeRuleHistoryResponse = z.object({
7177
+ meta: zMeta,
7178
+ links: zLinks,
7179
+ data: z.array(zOvertimeRuleHistoryVersionObject)
7180
+ });
7181
+ export const zCancelOvertimeRuleScheduledChangesHeaders = z.object({
7182
+ 'If-Match': z.string()
7183
+ });
7184
+ export const zCancelOvertimeRuleScheduledChangesPath = z.object({
7185
+ overtime_package_id: z.string(),
7186
+ overtime_rule_id: z.string()
7187
+ });
7188
+ /**
7189
+ * Success
7190
+ */
7191
+ export const zCancelOvertimeRuleScheduledChangesResponse = zOvertimeRuleResponseObject;
7192
+ export const zListOvertimeRuleScheduledChangesPath = z.object({
7193
+ overtime_package_id: z.string(),
7194
+ overtime_rule_id: z.string()
7195
+ });
7196
+ /**
7197
+ * Success with scheduled changes
7198
+ */
7199
+ export const zListOvertimeRuleScheduledChangesResponse = z.array(zOvertimeRuleResponseObject);
7200
+ export const zScheduleOvertimeRuleChangeBody = zOvertimeRuleScheduledChangeParameters;
7201
+ export const zScheduleOvertimeRuleChangeHeaders = z.object({
7202
+ 'If-Match': z.string()
7203
+ });
7204
+ export const zScheduleOvertimeRuleChangePath = z.object({
7205
+ overtime_package_id: z.string(),
7206
+ overtime_rule_id: z.string()
7207
+ });
7208
+ /**
7209
+ * Success (already scheduled)
7210
+ */
7211
+ export const zScheduleOvertimeRuleChangeResponse = zOvertimeRuleResponseObject;
7212
+ export const zCancelOvertimeRuleScheduledTerminationHeaders = z.object({
7213
+ 'If-Match': z.string()
7214
+ });
7215
+ export const zCancelOvertimeRuleScheduledTerminationPath = z.object({
7216
+ overtime_package_id: z.string(),
7217
+ overtime_rule_id: z.string()
7218
+ });
7219
+ /**
7220
+ * Success
7221
+ */
7222
+ export const zCancelOvertimeRuleScheduledTerminationResponse = zOvertimeRuleResponseObject;
7223
+ export const zScheduleOvertimeRuleTerminationBody = zOvertimeRuleScheduledTerminationParameters;
7224
+ export const zScheduleOvertimeRuleTerminationHeaders = z.object({
7225
+ 'If-Match': z.string()
7226
+ });
7227
+ export const zScheduleOvertimeRuleTerminationPath = z.object({
7228
+ overtime_package_id: z.string(),
7229
+ overtime_rule_id: z.string()
7230
+ });
7231
+ /**
7232
+ * Created
7233
+ */
7234
+ export const zScheduleOvertimeRuleTerminationResponse = zOvertimeRuleResponseObject;
7235
+ export const zListOvertimeRulesPath = z.object({
7236
+ overtime_package_id: z.string()
7237
+ });
7238
+ export const zListOvertimeRulesQuery = z.object({
7239
+ 'as_of[valid]': z.iso.datetime().optional(),
7240
+ as_of: z.string().optional(),
7241
+ 'as_of[bogus_axis]': z.string().optional(),
7242
+ 'as_of[valid][gte]': z.string().optional(),
7243
+ 'as_of[transaction]': z.string().optional(),
7244
+ filter: z.string().optional(),
7245
+ 'filter[unexpected]': z.string().optional(),
7246
+ 'page[cursor]': z.string().optional(),
7247
+ 'page[limit]': z.int().gte(1).optional().default(20),
7248
+ page: z.string().optional()
7249
+ });
7250
+ /**
7251
+ * Success
7252
+ */
7253
+ export const zListOvertimeRulesResponse = z.object({
7254
+ meta: zMeta,
7255
+ links: zLinks,
7256
+ data: z.array(zOvertimeRuleResponseObject)
7257
+ });
7258
+ export const zCreateOvertimeRuleBody = zOvertimeRuleParameters;
7259
+ export const zCreateOvertimeRulePath = z.object({
7260
+ overtime_package_id: z.string()
7261
+ });
7262
+ /**
7263
+ * Created
7264
+ */
7265
+ export const zCreateOvertimeRuleResponse = zOvertimeRuleResponseObject;
7266
+ export const zDeleteOvertimeRuleHeaders = z.object({
7267
+ 'If-Match': z.string()
7268
+ });
7269
+ export const zDeleteOvertimeRulePath = z.object({
7270
+ overtime_package_id: z.string(),
7271
+ id: z.string()
7272
+ });
7273
+ /**
7274
+ * Success
7275
+ */
7276
+ export const zDeleteOvertimeRuleResponse = zOvertimeRuleResponseObject;
7277
+ export const zGetOvertimeRulePath = z.object({
7278
+ overtime_package_id: z.string(),
7279
+ id: z.string()
7280
+ });
7281
+ export const zGetOvertimeRuleQuery = z.object({
7282
+ 'as_of[valid]': z.iso.datetime().optional()
7283
+ });
7284
+ /**
7285
+ * Success
7286
+ */
7287
+ export const zGetOvertimeRuleResponse = zOvertimeRuleResponseObject;
7288
+ export const zUpdateOvertimeRuleBody = zOvertimeRuleUpdateParameters;
7289
+ export const zUpdateOvertimeRuleHeaders = z.object({
7290
+ 'If-Match': z.string()
7291
+ });
7292
+ export const zUpdateOvertimeRulePath = z.object({
7293
+ overtime_package_id: z.string(),
7294
+ id: z.string()
7295
+ });
7296
+ /**
7297
+ * Success
7298
+ */
7299
+ export const zUpdateOvertimeRuleResponse = zOvertimeRuleResponseObject;
7300
+ export const zListAggregateTimeImportsPath = z.object({
7301
+ pay_period_id: z.string()
7302
+ });
7303
+ export const zListAggregateTimeImportsQuery = z.object({
7304
+ 'filter[status]': z.string().optional(),
7305
+ filter: z.string().optional(),
7306
+ 'filter[unexpected]': z.string().optional(),
7307
+ 'filter[completed_at][gte]': z.iso.datetime().optional(),
7308
+ 'filter[completed_at][lte]': z.iso.datetime().optional(),
7309
+ 'filter[created_at][gte]': z.iso.datetime().optional(),
7310
+ 'filter[created_at][lte]': z.iso.datetime().optional(),
7311
+ 'filter[updated_at][gte]': z.iso.datetime().optional(),
7312
+ 'filter[updated_at][lte]': z.iso.datetime().optional(),
7313
+ 'page[cursor]': z.string().optional(),
7314
+ 'page[limit]': z.int().gte(1).optional().default(20),
7315
+ page: z.string().optional()
7316
+ });
7317
+ /**
7318
+ * Success
7319
+ */
7320
+ export const zListAggregateTimeImportsResponse = z.object({
7321
+ meta: zMeta,
7322
+ links: zLinks,
7323
+ data: z.array(zAggregateTimeImportResponseObject)
7324
+ });
7325
+ export const zCreateAggregateTimeImportBody = zAggregateTimeImportParameters;
7326
+ export const zCreateAggregateTimeImportPath = z.object({
7327
+ pay_period_id: z.string()
7328
+ });
7329
+ /**
7330
+ * Created
7331
+ */
7332
+ export const zCreateAggregateTimeImportResponse = zAggregateTimeImportResponseObject;
7333
+ export const zGetAggregateTimeImportPath = z.object({
7334
+ pay_period_id: z.string(),
7335
+ id: z.string()
7336
+ });
7337
+ /**
7338
+ * Success
7339
+ */
7340
+ export const zGetAggregateTimeImportResponse = zAggregateTimeImportResponseObject;
7341
+ export const zListDsptchCprImportsPath = z.object({
7342
+ pay_period_id: z.string()
7343
+ });
7344
+ export const zListDsptchCprImportsQuery = z.object({
7345
+ 'filter[status]': z.string().optional(),
7346
+ filter: z.string().optional(),
7347
+ 'filter[unexpected]': z.string().optional(),
7348
+ 'filter[completed_at][gte]': z.iso.datetime().optional(),
7349
+ 'filter[completed_at][lte]': z.iso.datetime().optional(),
7350
+ 'filter[created_at][gte]': z.iso.datetime().optional(),
7351
+ 'filter[created_at][lte]': z.iso.datetime().optional(),
7352
+ 'filter[updated_at][gte]': z.iso.datetime().optional(),
7353
+ 'filter[updated_at][lte]': z.iso.datetime().optional(),
7354
+ 'page[cursor]': z.string().optional(),
7355
+ 'page[limit]': z.int().gte(1).optional().default(20),
7356
+ page: z.string().optional()
7357
+ });
7358
+ /**
7359
+ * Success
7360
+ */
7361
+ export const zListDsptchCprImportsResponse = z.object({
7362
+ meta: zMeta,
7363
+ links: zLinks,
7364
+ data: z.array(zDsptchCprImportResponseObject)
7365
+ });
7366
+ export const zCreateDsptchCprImportBody = zDsptchCprImportParameters;
7367
+ export const zCreateDsptchCprImportPath = z.object({
7368
+ pay_period_id: z.string()
7369
+ });
7370
+ /**
7371
+ * Created
7372
+ */
7373
+ export const zCreateDsptchCprImportResponse = zDsptchCprImportResponseObject;
7374
+ export const zGetDsptchCprImportPath = z.object({
7375
+ pay_period_id: z.string(),
7376
+ id: z.string()
7377
+ });
7378
+ /**
7379
+ * Success
7380
+ */
7381
+ export const zGetDsptchCprImportResponse = zDsptchCprImportResponseObject;
7382
+ export const zListTimeEntryImportsPath = z.object({
7383
+ pay_period_id: z.string()
7384
+ });
7385
+ export const zListTimeEntryImportsQuery = z.object({
7386
+ 'filter[status]': z.string().optional(),
7387
+ filter: z.string().optional(),
7388
+ 'filter[unexpected]': z.string().optional(),
7389
+ 'filter[completed_at][gte]': z.iso.datetime().optional(),
7390
+ 'filter[completed_at][lte]': z.iso.datetime().optional(),
7391
+ 'filter[created_at][gte]': z.iso.datetime().optional(),
7392
+ 'filter[created_at][lte]': z.iso.datetime().optional(),
7393
+ 'filter[updated_at][gte]': z.iso.datetime().optional(),
7394
+ 'filter[updated_at][lte]': z.iso.datetime().optional(),
7395
+ 'page[cursor]': z.string().optional(),
7396
+ 'page[limit]': z.int().gte(1).optional().default(20),
7397
+ page: z.string().optional()
7398
+ });
7399
+ /**
7400
+ * Success
7401
+ */
7402
+ export const zListTimeEntryImportsResponse = z.object({
7403
+ meta: zMeta,
7404
+ links: zLinks,
7405
+ data: z.array(zTimeEntryImportResponseObject)
7406
+ });
7407
+ export const zCreateTimeEntryImportBody = zTimeEntryImportParameters;
7408
+ export const zCreateTimeEntryImportPath = z.object({
7409
+ pay_period_id: z.string()
7410
+ });
7411
+ /**
7412
+ * Created
7413
+ */
7414
+ export const zCreateTimeEntryImportResponse = zTimeEntryImportResponseObject;
7415
+ export const zGetTimeEntryImportPath = z.object({
7416
+ pay_period_id: z.string(),
7417
+ id: z.string()
7418
+ });
7419
+ /**
7420
+ * Success
7421
+ */
7422
+ export const zGetTimeEntryImportResponse = zTimeEntryImportResponseObject;
6826
7423
  export const zListPayPeriodsQuery = z.object({
6827
7424
  'filter[start_time][gte]': z.iso.datetime().optional(),
6828
7425
  'filter[start_time][lte]': z.iso.datetime().optional(),
@@ -7288,9 +7885,65 @@ export const zUpdateCompanyUserDetailPath = z.object({
7288
7885
  * Success
7289
7886
  */
7290
7887
  export const zUpdateCompanyUserDetailResponse = zPwaCompanyUserDetailsResponseObject;
7888
+ export const zListApprenticeshipOccupationsPath = z.object({
7889
+ trade_id: z.string()
7890
+ });
7891
+ export const zListApprenticeshipOccupationsQuery = z.object({
7892
+ 'filter[apprenticeship_occupation_id]': z.string().optional(),
7893
+ 'filter[scope_status]': z.enum(['in_scope', 'out_of_scope']).optional(),
7894
+ 'page[cursor]': z.string().optional(),
7895
+ 'page[limit]': z.int().gte(1).optional().default(20),
7896
+ page: z.string().optional(),
7897
+ 'filter[created_at][gte]': z.iso.datetime().optional(),
7898
+ 'filter[created_at][lte]': z.iso.datetime().optional(),
7899
+ filter: z.string().optional(),
7900
+ 'filter[unexpected]': z.string().optional()
7901
+ });
7902
+ /**
7903
+ * Success
7904
+ */
7905
+ export const zListApprenticeshipOccupationsResponse = z.object({
7906
+ meta: zMeta,
7907
+ links: zLinks,
7908
+ data: z.array(zPwaTradeApprenticeshipOccupationResponseObject)
7909
+ });
7910
+ export const zCreateApprenticeshipOccupationBody = zPwaTradeApprenticeshipOccupationCreateParameters;
7911
+ export const zCreateApprenticeshipOccupationPath = z.object({
7912
+ trade_id: z.string()
7913
+ });
7914
+ /**
7915
+ * Created
7916
+ */
7917
+ export const zCreateApprenticeshipOccupationResponse = zPwaTradeApprenticeshipOccupationResponseObject;
7918
+ export const zDeleteApprenticeshipOccupationPath = z.object({
7919
+ trade_id: z.string(),
7920
+ id: z.string()
7921
+ });
7922
+ /**
7923
+ * Success
7924
+ */
7925
+ export const zDeleteApprenticeshipOccupationResponse = zPwaTradeApprenticeshipOccupationResponseObject;
7926
+ export const zUpdateApprenticeshipOccupationBody = zPwaTradeApprenticeshipOccupationUpdateParameters;
7927
+ export const zUpdateApprenticeshipOccupationPath = z.object({
7928
+ trade_id: z.string(),
7929
+ id: z.string()
7930
+ });
7931
+ /**
7932
+ * Success
7933
+ */
7934
+ export const zUpdateApprenticeshipOccupationResponse = zPwaTradeApprenticeshipOccupationResponseObject;
7935
+ export const zCreateMergeBody = zPwaTradeMergeParameters;
7936
+ export const zCreateMergePath = z.object({
7937
+ trade_id: z.string()
7938
+ });
7939
+ /**
7940
+ * Success
7941
+ */
7942
+ export const zCreateMergeResponse = zPwaTradeResponseObject;
7291
7943
  export const zListTradesQuery = z.object({
7292
7944
  'filter[project_id]': z.string().optional(),
7293
7945
  'filter[job_id]': z.string().optional(),
7946
+ 'filter[name]': z.string().optional(),
7294
7947
  'filter[created_at][gte]': z.iso.datetime().optional(),
7295
7948
  'filter[created_at][lte]': z.iso.datetime().optional(),
7296
7949
  'filter[updated_at][gte]': z.iso.datetime().optional(),
@@ -7309,6 +7962,13 @@ export const zListTradesResponse = z.object({
7309
7962
  links: zLinks,
7310
7963
  data: z.array(zPwaTradeResponseObject)
7311
7964
  });
7965
+ export const zDeleteTradePath = z.object({
7966
+ id: z.string()
7967
+ });
7968
+ /**
7969
+ * Success
7970
+ */
7971
+ export const zDeleteTradeResponse = zPwaTradeResponseObject;
7312
7972
  export const zGetTradePath = z.object({
7313
7973
  id: z.string()
7314
7974
  });
@@ -7316,6 +7976,14 @@ export const zGetTradePath = z.object({
7316
7976
  * Success
7317
7977
  */
7318
7978
  export const zGetTradeResponse = zPwaTradeResponseObject;
7979
+ export const zUpdateTradeBody = zPwaTradeUpdateParameters;
7980
+ export const zUpdateTradePath = z.object({
7981
+ id: z.string()
7982
+ });
7983
+ /**
7984
+ * Success
7985
+ */
7986
+ export const zUpdateTradeResponse = zPwaTradeResponseObject;
7319
7987
  export const zCreateFormAssignmentTaskBody = z.object({
7320
7988
  form_definition_id: z.string(),
7321
7989
  spread_assignees: z.boolean().optional(),