@dsptch-work/api-client 0.33.0 → 0.35.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.
@@ -216,7 +216,7 @@ export const zProblem = z.object({
216
216
  *
217
217
  * **Version Overlap**
218
218
  *
219
- * The write conflicts with what is already recorded for the resource — another version occupies the same span, or the write contradicts the resource's recorded identity. Re-read the current state and retry on top of it.
219
+ * The write collides with another version of the same resource — another version occupies the same span, or the write contradicts the identity the resource's versions record. Re-read the current state and retry on top of it.
220
220
  *
221
221
  * ## 412
222
222
  *
@@ -310,7 +310,7 @@ export const zProblem = z.object({
310
310
  *
311
311
  * **Foreign Subtype Attributes**
312
312
  *
313
- * A nested-attributes write carries keys the record's resolved subtype does not accept. Send only the keys valid for that subtype; the message names the offending ones.
313
+ * A write carries keys the record's resolved subtype does not accept, whether nested or beside the record's own fields (a serial item's fields sent for a bulk item). Send only the keys valid for that subtype; the message names the offending ones, and each one's entry in `errors` points at it. Nothing is written.
314
314
  *
315
315
  * ### synced_determination
316
316
  *
@@ -492,6 +492,155 @@ export const zDirectUploadResponseObject = z.object({
492
492
  headers: z.record(z.string(), z.string())
493
493
  })
494
494
  });
495
+ /**
496
+ * A competence standard owned by your company. Content lives on named revisions, not a valid-time history. current_version_id is the active revision and draft_version_id is the in-progress revision; either is null when absent.
497
+ */
498
+ export const zCompetencyStandardResponseObject = z.object({
499
+ id: z.string(),
500
+ name: z.string(),
501
+ companies_department_id: z.string().nullable(),
502
+ archived_at: z.iso.datetime().nullable(),
503
+ current_version_id: z.string().nullable(),
504
+ draft_version_id: z.string().nullable(),
505
+ created_at: z.iso.datetime(),
506
+ updated_at: z.iso.datetime()
507
+ });
508
+ /**
509
+ * Archive a competence standard. The body takes no fields; send an empty object or no body. Archiving an archived standard returns it unchanged.
510
+ */
511
+ export const zCompetencyStandardArchiveParameters = z.record(z.string(), z.never());
512
+ /**
513
+ * Create a competence standard. Revision 1 is opened as a draft. sort_order and revision are server-assigned and are not accepted.
514
+ */
515
+ export const zCompetencyStandardParameters = z.object({
516
+ name: z.string(),
517
+ companies_department_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
518
+ });
519
+ /**
520
+ * Update a competence standard's name or department. Send only the fields to change. Revisions are not edited here.
521
+ */
522
+ export const zCompetencyStandardUpdateParameters = z.object({
523
+ name: z.string().optional(),
524
+ companies_department_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).nullish()
525
+ });
526
+ /**
527
+ * One named revision of a competence standard. revision is a positive integer and status is draft, active, or superseded. This is not a temporal history entry.
528
+ */
529
+ export const zCompetencyStandardVersionResponseObject = z.object({
530
+ id: z.string(),
531
+ competencies_standard_id: z.string(),
532
+ revision: z.int(),
533
+ status: z.enum([
534
+ 'draft',
535
+ 'active',
536
+ 'superseded'
537
+ ]),
538
+ change_notes: z.string().nullable(),
539
+ approved_by_user_id: z.string().nullable(),
540
+ approved_at: z.iso.datetime().nullable(),
541
+ controlled_pdf_attached: z.boolean(),
542
+ created_at: z.iso.datetime(),
543
+ updated_at: z.iso.datetime()
544
+ });
545
+ /**
546
+ * Notes for a new draft revision, or a replacement of the notes on an existing draft. Cutting a revision copies the active level, key-activity, and criterion tree and does not copy the controlled PDF.
547
+ */
548
+ export const zCompetencyStandardVersionParameters = z.object({
549
+ change_notes: z.string().nullish()
550
+ });
551
+ /**
552
+ * Promote a draft revision to active. A user key promotes as its user and must omit approved_by_user_id. A company key must name an admin or safety manager.
553
+ */
554
+ export const zCompetencyStandardVersionPromotionParameters = z.object({
555
+ approved_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional()
556
+ });
557
+ /**
558
+ * A proficiency tier on one standard revision. sort_order is the durable tier qualifications record, and it is server-assigned.
559
+ */
560
+ export const zCompetencyLevelResponseObject = z.object({
561
+ id: z.string(),
562
+ competencies_standard_version_id: z.string(),
563
+ sort_order: z.int(),
564
+ name: z.string().nullable(),
565
+ description: z.string().nullable(),
566
+ created_at: z.iso.datetime(),
567
+ updated_at: z.iso.datetime()
568
+ });
569
+ /**
570
+ * Create or update a level on a draft revision. sort_order is server-assigned and is rejected if sent.
571
+ */
572
+ export const zCompetencyLevelParameters = z.object({
573
+ name: z.string().nullish(),
574
+ description: z.string().nullish()
575
+ });
576
+ /**
577
+ * A task on a level. Catalog text is editable only while the parent revision is a draft. sort_order is server-assigned.
578
+ */
579
+ export const zCompetencyKeyActivityResponseObject = z.object({
580
+ id: z.string(),
581
+ competencies_level_id: z.string(),
582
+ sort_order: z.int(),
583
+ number: z.string().nullable(),
584
+ title: z.string().nullable(),
585
+ notes: z.string().nullable(),
586
+ created_at: z.iso.datetime(),
587
+ updated_at: z.iso.datetime()
588
+ });
589
+ /**
590
+ * Create or update a key activity on a draft revision. sort_order is server-assigned and is rejected if sent.
591
+ */
592
+ export const zCompetencyKeyActivityParameters = z.object({
593
+ number: z.string().nullish(),
594
+ title: z.string().nullish(),
595
+ notes: z.string().nullish()
596
+ });
597
+ /**
598
+ * One evidence criterion on a key activity. Editable only while the parent revision is a draft. sort_order is server-assigned.
599
+ */
600
+ export const zCompetencyCriterionResponseObject = z.object({
601
+ id: z.string(),
602
+ competencies_key_activity_id: z.string(),
603
+ sort_order: z.int(),
604
+ number: z.string().nullable(),
605
+ body: z.string().nullable(),
606
+ evidence_note: z.string().nullable(),
607
+ assessment_method: z.enum([
608
+ 'direct_observation',
609
+ 'simulation',
610
+ 'oral_questioning',
611
+ 'written_questioning',
612
+ 'products_of_work',
613
+ 'recognized_prior_learning',
614
+ 'witness_testimony',
615
+ 'other'
616
+ ]).nullable(),
617
+ created_at: z.iso.datetime(),
618
+ updated_at: z.iso.datetime()
619
+ });
620
+ /**
621
+ * Create or update a criterion on a draft revision. sort_order is server-assigned and is rejected if sent.
622
+ */
623
+ export const zCompetencyCriterionParameters = z.object({
624
+ number: z.string().nullish(),
625
+ body: z.string().nullish(),
626
+ evidence_note: z.string().nullish(),
627
+ assessment_method: z.enum([
628
+ 'direct_observation',
629
+ 'simulation',
630
+ 'oral_questioning',
631
+ 'written_questioning',
632
+ 'products_of_work',
633
+ 'recognized_prior_learning',
634
+ 'witness_testimony',
635
+ 'other'
636
+ ]).nullish()
637
+ });
638
+ /**
639
+ * Swap a draft catalog row with its neighbor. The row cannot move past either end of the list.
640
+ */
641
+ export const zCompetencySortOrderMoveParameters = z.object({
642
+ direction: z.enum(['up', 'down'])
643
+ });
495
644
  /**
496
645
  * One assessor-registry grant for one standard. Department scope is informational. revoked_at is null while the grant is active.
497
646
  */
@@ -1402,6 +1551,66 @@ export const zTimecodeScheduledChangeParameters = z.object({
1402
1551
  'job_with_timecode'
1403
1552
  ]).optional()
1404
1553
  });
1554
+ /**
1555
+ * Create a catalog product. `type` (serial or bulk) is required and immutable. `attribute_values` upserts the product's category-attribute values.
1556
+ */
1557
+ export const zAssetsProductParameters = z.object({
1558
+ name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
1559
+ description: z.string().nullish(),
1560
+ make: z.string().nullish(),
1561
+ model: z.string().nullish(),
1562
+ upc: z.string().nullish(),
1563
+ internal_sku: z.string().nullish(),
1564
+ default_minimum_quantity: z.int().nullish(),
1565
+ counted_by: z.enum([
1566
+ 'each',
1567
+ 'pair',
1568
+ 'pack'
1569
+ ]).optional(),
1570
+ assets_category_id: z.string().nullish(),
1571
+ container: z.boolean().optional(),
1572
+ attribute_values: z.array(z.object({
1573
+ assets_attribute_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
1574
+ value: z.string().nullish(),
1575
+ assets_attribute_option_id: z.string().nullish()
1576
+ })).optional(),
1577
+ images_attributes: z.array(z.object({
1578
+ id: z.string().optional(),
1579
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
1580
+ _destroy: z.boolean().optional()
1581
+ })).optional(),
1582
+ type: z.enum(['serial', 'bulk']),
1583
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
1584
+ });
1585
+ /**
1586
+ * 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.
1587
+ */
1588
+ export const zAssetsProductUpdateParameters = z.object({
1589
+ name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
1590
+ description: z.string().nullish(),
1591
+ make: z.string().nullish(),
1592
+ model: z.string().nullish(),
1593
+ upc: z.string().nullish(),
1594
+ internal_sku: z.string().nullish(),
1595
+ default_minimum_quantity: z.int().nullish(),
1596
+ counted_by: z.enum([
1597
+ 'each',
1598
+ 'pair',
1599
+ 'pack'
1600
+ ]).optional(),
1601
+ assets_category_id: z.string().nullish(),
1602
+ container: z.boolean().optional(),
1603
+ attribute_values: z.array(z.object({
1604
+ assets_attribute_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
1605
+ value: z.string().nullish(),
1606
+ assets_attribute_option_id: z.string().nullish()
1607
+ })).optional(),
1608
+ images_attributes: z.array(z.object({
1609
+ id: z.string().optional(),
1610
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
1611
+ _destroy: z.boolean().optional()
1612
+ })).optional()
1613
+ });
1405
1614
  /**
1406
1615
  * A named daily allowance (meals, lodging, travel, and the like) that a company can attach to time.
1407
1616
  */
@@ -1535,30 +1744,30 @@ export const zAssetsCategoryResponseObject = z.object({
1535
1744
  updated_at: z.iso.datetime()
1536
1745
  });
1537
1746
  /**
1538
- * Create or update a category; only name is required. `category_attributes` sets this category's direct attribute assignments.
1747
+ * Create a category. Only name is required; omitting it answers 400, and a blank or null name or any wrong-typed value answers 422. A null or blank parent_id files the category at the root. `category_attributes` sets this category's direct attribute assignments.
1539
1748
  */
1540
1749
  export const zAssetsCategoryParameters = z.object({
1541
- name: z.string().min(1),
1750
+ name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
1542
1751
  parent_id: z.string().nullish(),
1543
1752
  category_attributes: z.array(z.object({
1544
1753
  id: z.string().optional(),
1545
- assets_attribute_id: z.string(),
1546
- fillable_on: z.enum(['product', 'item']),
1754
+ assets_attribute_id: z.string().optional(),
1755
+ fillable_on: z.enum(['product', 'item']).optional(),
1547
1756
  required: z.boolean().optional(),
1548
1757
  position: z.int().optional(),
1549
1758
  _destroy: z.boolean().optional()
1550
1759
  })).optional()
1551
1760
  });
1552
1761
  /**
1553
- * Update a category. All fields are optional — send only what changes. `category_attributes` sets this category's direct attribute assignments.
1762
+ * Update a category. All fields are optional — send only what changes. A blank or null name or any wrong-typed value answers 422, and a null or blank parent_id moves the category to the root. `category_attributes` sets this category's direct attribute assignments.
1554
1763
  */
1555
1764
  export const zAssetsCategoryUpdateParameters = z.object({
1556
- name: z.string().min(1).optional(),
1765
+ name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
1557
1766
  parent_id: z.string().nullish(),
1558
1767
  category_attributes: z.array(z.object({
1559
1768
  id: z.string().optional(),
1560
- assets_attribute_id: z.string(),
1561
- fillable_on: z.enum(['product', 'item']),
1769
+ assets_attribute_id: z.string().optional(),
1770
+ fillable_on: z.enum(['product', 'item']).optional(),
1562
1771
  required: z.boolean().optional(),
1563
1772
  position: z.int().optional(),
1564
1773
  _destroy: z.boolean().optional()
@@ -1947,7 +2156,7 @@ export const zPwaCompanyUserDetailsResponseObject = z.object({
1947
2156
  * Create a worker's PWA compliance details at a company. The company is taken from the API key. user_id names the worker and is required; every other field is optional — send whichever your jurisdiction's certified-payroll export requires.
1948
2157
  */
1949
2158
  export const zPwaCompanyUserDetailsParameters = z.object({
1950
- user_id: z.string(),
2159
+ user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
1951
2160
  address1: z.string().nullish(),
1952
2161
  address2: z.string().nullish(),
1953
2162
  city: z.string().nullish(),
@@ -1960,7 +2169,7 @@ export const zPwaCompanyUserDetailsParameters = z.object({
1960
2169
  'NATIVE_AMERICAN',
1961
2170
  'NOT_SPECIFIED',
1962
2171
  'OTHER'
1963
- ])).nullish(),
2172
+ ])).optional(),
1964
2173
  sex: z.enum([
1965
2174
  'female',
1966
2175
  'male',
@@ -2015,7 +2224,7 @@ export const zPwaCompanyUserDetailsParameters = z.object({
2015
2224
  'formerly_incarcerated',
2016
2225
  'equity_investment_eligible_community',
2017
2226
  'self_registered_or_unknown'
2018
- ])).nullish(),
2227
+ ])).optional(),
2019
2228
  il_shines_other_programs: z.array(z.enum([
2020
2229
  'solar_training_pipeline_program',
2021
2230
  'craft_apprenticeship_program',
@@ -2024,7 +2233,7 @@ export const zPwaCompanyUserDetailsParameters = z.object({
2024
2233
  'illinois_climate_works_prep_apprenticeship_program',
2025
2234
  'returning_residents_clean_jobs_training_program',
2026
2235
  'other'
2027
- ])).nullish(),
2236
+ ])).optional(),
2028
2237
  or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).nullish(),
2029
2238
  or_boli_race: z.array(z.enum([
2030
2239
  'american_indian_or_alaska_native',
@@ -2034,7 +2243,7 @@ export const zPwaCompanyUserDetailsParameters = z.object({
2034
2243
  'native_hawaiian_or_pacific_islander',
2035
2244
  'white',
2036
2245
  'portuguese_or_brazilian'
2037
- ])).nullish()
2246
+ ])).optional()
2038
2247
  });
2039
2248
  /**
2040
2249
  * Update a worker's PWA compliance details. The company is taken from the API key. Every field is optional — send only what changes, and omitted fields are left unchanged. The company/user pair is fixed at creation.
@@ -2052,7 +2261,7 @@ export const zPwaCompanyUserDetailsUpdateParameters = z.object({
2052
2261
  'NATIVE_AMERICAN',
2053
2262
  'NOT_SPECIFIED',
2054
2263
  'OTHER'
2055
- ])).nullish(),
2264
+ ])).optional(),
2056
2265
  sex: z.enum([
2057
2266
  'female',
2058
2267
  'male',
@@ -2107,7 +2316,7 @@ export const zPwaCompanyUserDetailsUpdateParameters = z.object({
2107
2316
  'formerly_incarcerated',
2108
2317
  'equity_investment_eligible_community',
2109
2318
  'self_registered_or_unknown'
2110
- ])).nullish(),
2319
+ ])).optional(),
2111
2320
  il_shines_other_programs: z.array(z.enum([
2112
2321
  'solar_training_pipeline_program',
2113
2322
  'craft_apprenticeship_program',
@@ -2116,7 +2325,7 @@ export const zPwaCompanyUserDetailsUpdateParameters = z.object({
2116
2325
  'illinois_climate_works_prep_apprenticeship_program',
2117
2326
  'returning_residents_clean_jobs_training_program',
2118
2327
  'other'
2119
- ])).nullish(),
2328
+ ])).optional(),
2120
2329
  or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).nullish(),
2121
2330
  or_boli_race: z.array(z.enum([
2122
2331
  'american_indian_or_alaska_native',
@@ -2126,7 +2335,7 @@ export const zPwaCompanyUserDetailsUpdateParameters = z.object({
2126
2335
  'native_hawaiian_or_pacific_islander',
2127
2336
  'white',
2128
2337
  'portuguese_or_brazilian'
2129
- ])).nullish()
2338
+ ])).optional()
2130
2339
  });
2131
2340
  /**
2132
2341
  * A craft grouping used for prevailing-wage / apprenticeship (PWA) compliance — the unit an apprenticeship ratio is measured against. Owned by either a project (pooling the craft across the project's jobs) or a standalone job, never both.
@@ -2605,7 +2814,7 @@ export const zJobParameters = z.object({
2605
2814
  name: z.string().nullish(),
2606
2815
  description: z.string().optional(),
2607
2816
  requested_by_company_id: z.string().optional(),
2608
- manager_user_ids: z.array(z.string()).nullish(),
2817
+ manager_user_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2609
2818
  purchase_order_number: z.string().nullish(),
2610
2819
  project_id: z.string().nullish(),
2611
2820
  companies_department_id: z.string().nullish(),
@@ -2633,7 +2842,7 @@ export const zJobParameters = z.object({
2633
2842
  ]).optional(),
2634
2843
  send_geofence_reminders: z.boolean().nullish(),
2635
2844
  allow_customer_access: z.boolean().optional(),
2636
- timekeeping_timecode_ids: z.array(z.string()).nullish(),
2845
+ timekeeping_timecode_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
2637
2846
  tracks_feature_allocations: z.boolean().nullish(),
2638
2847
  requires_feature_allocation: z.boolean().nullish(),
2639
2848
  max_one_feature_allocation: z.boolean().nullish(),
@@ -3449,7 +3658,7 @@ export const zProjectParameters = z.object({
3449
3658
  description: z.string().nullish(),
3450
3659
  created_by_user_id: z.string(),
3451
3660
  parent_id: z.string().nullish(),
3452
- participating_company_ids: z.array(z.string()).optional(),
3661
+ participating_company_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
3453
3662
  start_date: z.iso.date().nullish(),
3454
3663
  end_date: z.iso.date().nullish(),
3455
3664
  tz_name: z.string().nullish(),
@@ -3484,7 +3693,7 @@ export const zProjectUpdateParameters = z.object({
3484
3693
  name: z.string().optional(),
3485
3694
  description: z.string().nullish(),
3486
3695
  parent_id: z.string().nullish(),
3487
- participating_company_ids: z.array(z.string()).optional(),
3696
+ participating_company_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
3488
3697
  start_date: z.iso.date().nullish(),
3489
3698
  end_date: z.iso.date().nullish(),
3490
3699
  tz_name: z.string().nullish(),
@@ -4816,8 +5025,8 @@ export const zPayRatesRulePackageUpdateParameters = z.object({
4816
5025
  */
4817
5026
  export const zPositionParameters = z.object({
4818
5027
  fulfilled_by_user_id: z.string().nullish(),
4819
- start_time: z.iso.datetime().nullish(),
4820
- end_time: z.iso.datetime().nullish(),
5028
+ start_time: z.iso.date().nullish(),
5029
+ end_time: z.iso.date().nullish(),
4821
5030
  position_function_id: z.string().nullish(),
4822
5031
  per_diem_id: z.string().nullish(),
4823
5032
  per_diem_rate_cents: z.number().nullish(),
@@ -4826,7 +5035,7 @@ export const zPositionParameters = z.object({
4826
5035
  hourly_rate_cents: z.number().nullish(),
4827
5036
  pwa_wage_pay_rate_cents: z.number().nullish(),
4828
5037
  wage_adder_rate_cents: z.number().nullish(),
4829
- job_wage_determination_ids: z.array(z.string()).optional(),
5038
+ job_wage_determination_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
4830
5039
  pwa_details_attributes: z.object({
4831
5040
  skill_level: z.string().nullish()
4832
5041
  }).optional()
@@ -4863,49 +5072,30 @@ export const zProductionJobScopePriceResponseObject = z.object({
4863
5072
  updated_at: z.iso.datetime()
4864
5073
  });
4865
5074
  /**
4866
- * Update a completion. Send only the fields to change. The scope price, filer, and feature reference are fixed at creation. Sending production_job_scope_price_id or performed_by_user_id on update returns 400 unknown_key. Feature completions accept no completable changes; quantity completions accept quantity_completed. A key for the other subtype returns 422.
5075
+ * Record a completion against a scope price. The server takes the completable subtype from the production tracking kind of the scope price's job, never from the request: a feature-tracked job records which feature was completed, and a quantity-tracked job how many units were completed. completable_attributes declares both kinds' keys; sending the other kind's key answers 422 subtype_foreign_keys with an entry pointing at it, and nothing is written.
4867
5076
  */
4868
- export const zProductionCompletionUpdateParameters = z.object({
5077
+ export const zProductionCompletionParameters = z.object({
5078
+ production_job_scope_price_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
5079
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
4869
5080
  notes: z.string().nullish(),
4870
5081
  work_date: z.iso.date().optional(),
4871
- position_ids: z.array(z.string()).optional(),
5082
+ position_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
4872
5083
  completable_attributes: z.object({
4873
- quantity_completed: z.int().optional()
5084
+ feature_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
5085
+ quantity_completed: z.int().gte(1).optional()
4874
5086
  }).optional()
4875
5087
  });
4876
5088
  /**
4877
- * Fields shared by both completion payload kinds.
5089
+ * Update a completion. Send only the fields to change. The scope price, filer, and feature reference are fixed at creation. Sending production_job_scope_price_id or performed_by_user_id on update returns 400 unknown_key. Feature completions accept no completable changes, so quantity_completed on one answers 422 subtype_foreign_keys with an entry pointing at it; quantity completions accept quantity_completed.
4878
5090
  */
4879
- export const zProductionCompletionBaseParameters = z.object({
4880
- production_job_scope_price_id: z.string(),
4881
- performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
5091
+ export const zProductionCompletionUpdateParameters = z.object({
4882
5092
  notes: z.string().nullish(),
4883
5093
  work_date: z.iso.date().optional(),
4884
- position_ids: z.array(z.string()).optional()
4885
- });
4886
- /**
4887
- * Payload for completions on feature-tracked jobs (the scope price's job tracks production by feature). quantity_completed is not accepted; the feature reference is immutable after create, so update accepts no completable_attributes at all.
4888
- */
4889
- export const zProductionFeatureCompletionParameters = zProductionCompletionBaseParameters.and(z.object({
4890
- completable_attributes: z.object({
4891
- feature_id: z.string().optional()
4892
- }).optional()
4893
- }));
4894
- /**
4895
- * Payload for completions on quantity-tracked jobs (the scope price's job tracks production by quantity). feature_id is not accepted.
4896
- */
4897
- export const zProductionQuantityCompletionParameters = zProductionCompletionBaseParameters.and(z.object({
5094
+ position_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).optional(),
4898
5095
  completable_attributes: z.object({
4899
- quantity_completed: z.int().optional()
5096
+ quantity_completed: z.int().gte(1).optional()
4900
5097
  }).optional()
4901
- }));
4902
- /**
4903
- * A completion's payload shape follows the production tracking kind of the scope price's job — the server derives the completable subtype from the job, never from the request. Feature-tracked jobs record which feature was completed (feature payload); quantity-tracked jobs record how many units were completed (quantity payload). The two payloads are mutually exclusive: sending the other kind's completable key returns 422.
4904
- */
4905
- export const zProductionCompletionParameters = z.union([
4906
- zProductionFeatureCompletionParameters,
4907
- zProductionQuantityCompletionParameters
4908
- ]);
5098
+ });
4909
5099
  /**
4910
5100
  * A completion recorded on a feature-tracked job — a unit of scoped work finished by a crew, identifying which feature was completed.
4911
5101
  */
@@ -5211,8 +5401,8 @@ export const zPositionResponseObject = z.object({
5211
5401
  pwa_details: z.object({
5212
5402
  skill_level: z.string().nullable()
5213
5403
  }),
5214
- start_time: z.iso.datetime().nullable(),
5215
- end_time: z.iso.datetime().nullable(),
5404
+ start_time: z.iso.date().nullable(),
5405
+ end_time: z.iso.date().nullable(),
5216
5406
  created_at: z.iso.datetime(),
5217
5407
  updated_at: z.iso.datetime()
5218
5408
  });
@@ -5427,16 +5617,38 @@ export const zUserParameters = z.intersection(z.union([
5427
5617
  city: z.string().nullish(),
5428
5618
  state: z.string().nullish(),
5429
5619
  zip: z.string().nullish(),
5430
- race: z.array(z.string()).nullish(),
5431
- sex: z.string().nullish(),
5620
+ race: z.array(z.enum([
5621
+ 'AFRICAN_AMERICAN',
5622
+ 'ASIAN',
5623
+ 'CAUCASIAN',
5624
+ 'NATIVE_AMERICAN',
5625
+ 'NOT_SPECIFIED',
5626
+ 'OTHER'
5627
+ ])).optional(),
5628
+ sex: z.enum([
5629
+ 'female',
5630
+ 'male',
5631
+ 'non_binary',
5632
+ 'not_specified'
5633
+ ]).nullish(),
5432
5634
  local_business_license: z.string().nullish(),
5433
5635
  drivers_license_state: z.string().nullish(),
5434
5636
  drivers_license_number: z.string().nullish(),
5435
- veteran_status: z.string().nullish(),
5436
- hispanic_origin: z.string().nullish(),
5437
5637
  ssn: z.string().nullish(),
5438
- disabled: z.boolean().nullish(),
5638
+ veteran_status: z.enum([
5639
+ 'protected_veteran',
5640
+ 'not_protected_veteran',
5641
+ 'reserves',
5642
+ 'guard',
5643
+ 'not_specified'
5644
+ ]).nullish(),
5645
+ hispanic_origin: z.enum([
5646
+ 'yes',
5647
+ 'no',
5648
+ 'not_specified'
5649
+ ]).nullish(),
5439
5650
  ca_dir_withholding_exemptions: z.int().nullish(),
5651
+ disabled: z.boolean().optional(),
5440
5652
  il_dol_race: z.enum([
5441
5653
  'white',
5442
5654
  'black',
@@ -5467,7 +5679,7 @@ export const zUserParameters = z.intersection(z.union([
5467
5679
  'formerly_incarcerated',
5468
5680
  'equity_investment_eligible_community',
5469
5681
  'self_registered_or_unknown'
5470
- ])).nullish(),
5682
+ ])).optional(),
5471
5683
  il_shines_other_programs: z.array(z.enum([
5472
5684
  'solar_training_pipeline_program',
5473
5685
  'craft_apprenticeship_program',
@@ -5476,7 +5688,7 @@ export const zUserParameters = z.intersection(z.union([
5476
5688
  'illinois_climate_works_prep_apprenticeship_program',
5477
5689
  'returning_residents_clean_jobs_training_program',
5478
5690
  'other'
5479
- ])).nullish(),
5691
+ ])).optional(),
5480
5692
  or_boli_schedule_type: z.enum(['five_eight', 'four_ten']).nullish(),
5481
5693
  or_boli_race: z.array(z.enum([
5482
5694
  'american_indian_or_alaska_native',
@@ -5486,7 +5698,7 @@ export const zUserParameters = z.intersection(z.union([
5486
5698
  'native_hawaiian_or_pacific_islander',
5487
5699
  'white',
5488
5700
  'portuguese_or_brazilian'
5489
- ])).nullish()
5701
+ ])).optional()
5490
5702
  }).nullish()
5491
5703
  }));
5492
5704
  /**
@@ -6120,8 +6332,7 @@ export const zFederalJobWageDeterminationParameters = z.object({
6120
6332
  'highway',
6121
6333
  'residential'
6122
6334
  ]).nullish(),
6123
- general_wage_determination: z.string().nullish(),
6124
- pay_rates_rule_package_id: z.string().nullish()
6335
+ general_wage_determination: z.string().nullish()
6125
6336
  });
6126
6337
  /**
6127
6338
  * Parameters for creating a Regional (state prevailing-wage) wage determination on a job.
@@ -6134,7 +6345,6 @@ export const zRegionalJobWageDeterminationParameters = z.object({
6134
6345
  fringe_rate_cents: z.string().optional(),
6135
6346
  general_wage_determination: z.string().nullish(),
6136
6347
  overtime_package_id: z.string().nullish(),
6137
- pay_rates_rule_package_id: z.string().nullish(),
6138
6348
  regional_fields: zRegionalWageDeterminationFields.optional()
6139
6349
  });
6140
6350
  /**
@@ -6150,7 +6360,6 @@ export const zJobWageDeterminationParameters = z.discriminatedUnion('type', [
6150
6360
  export const zJobWageDeterminationUpdateParameters = z.object({
6151
6361
  effective_from: z.iso.date().optional(),
6152
6362
  overtime_package_id: z.string().nullish(),
6153
- pay_rates_rule_package_id: z.string().nullish(),
6154
6363
  labor_classification: z.string().optional(),
6155
6364
  pwa_trade_id: z.string().optional(),
6156
6365
  hourly_rate_cents: z.string().optional(),
@@ -6364,8 +6573,7 @@ export const zFederalProjectWageDeterminationParameters = z.object({
6364
6573
  'highway',
6365
6574
  'residential'
6366
6575
  ]).nullish(),
6367
- general_wage_determination: z.string().nullish(),
6368
- pay_rates_rule_package_id: z.string().nullish()
6576
+ general_wage_determination: z.string().nullish()
6369
6577
  });
6370
6578
  /**
6371
6579
  * Parameters for creating a Regional (state prevailing-wage) wage determination on a project.
@@ -6378,7 +6586,6 @@ export const zRegionalProjectWageDeterminationParameters = z.object({
6378
6586
  fringe_rate_cents: z.string().optional(),
6379
6587
  general_wage_determination: z.string().nullish(),
6380
6588
  overtime_package_id: z.string().nullish(),
6381
- pay_rates_rule_package_id: z.string().nullish(),
6382
6589
  regional_fields: zRegionalWageDeterminationFields.optional()
6383
6590
  });
6384
6591
  /**
@@ -6394,7 +6601,6 @@ export const zProjectWageDeterminationParameters = z.discriminatedUnion('type',
6394
6601
  export const zProjectWageDeterminationUpdateParameters = z.object({
6395
6602
  effective_from: z.iso.date().optional(),
6396
6603
  overtime_package_id: z.string().nullish(),
6397
- pay_rates_rule_package_id: z.string().nullish(),
6398
6604
  labor_classification: z.string().optional(),
6399
6605
  pwa_trade_id: z.string().optional(),
6400
6606
  hourly_rate_cents: z.string().optional(),
@@ -6451,15 +6657,15 @@ export const zRateRuleEffect = z.object({
6451
6657
  */
6452
6658
  export const zRateRuleTimeRangeCondition = z.object({
6453
6659
  type: z.enum(['time_range']),
6454
- start_time: z.string(),
6455
- end_time: z.string()
6660
+ start_time: z.string().regex(/^([01][0-9]|2[0-3]):[0-5][0-9]$/),
6661
+ end_time: z.string().regex(/^([01][0-9]|2[0-3]):[0-5][0-9]$/)
6456
6662
  });
6457
6663
  /**
6458
6664
  * Restricts the rule to specific days of the week.
6459
6665
  */
6460
6666
  export const zRateRuleDaysCondition = z.object({
6461
6667
  type: z.enum(['days']),
6462
- days: z.array(z.int())
6668
+ days: z.array(z.int().gte(0).lte(6)).min(1)
6463
6669
  });
6464
6670
  /**
6465
6671
  * Restricts the rule to a single calendar date.
@@ -6473,15 +6679,15 @@ export const zRateRuleSpecificDateCondition = z.object({
6473
6679
  */
6474
6680
  export const zRateRuleApprenticePeriodCondition = z.object({
6475
6681
  type: z.enum(['apprentice_period']),
6476
- period: z.int()
6682
+ period: z.int().gte(1).lte(100)
6477
6683
  });
6478
6684
  /**
6479
6685
  * Restricts the rule to a cumulative-apprentice-hours band.
6480
6686
  */
6481
6687
  export const zRateRuleApprenticeHoursCondition = z.object({
6482
6688
  type: z.enum(['apprentice_hours']),
6483
- min_hours: z.int(),
6484
- max_hours: z.int()
6689
+ min_hours: z.int().gte(0).lte(100000),
6690
+ max_hours: z.int().gte(0).lte(100000)
6485
6691
  });
6486
6692
  /**
6487
6693
  * Restricts the rule to a specific overtime tier.
@@ -6603,17 +6809,37 @@ export const zPayRatesRuleResponseObject = z.object({
6603
6809
  * Parameters for creating a conditional wage or fringe adjustment in a pay-rate rule package.
6604
6810
  */
6605
6811
  export const zPayRatesRuleParameters = z.object({
6606
- effect: zRateRuleEffect,
6607
- conditions: z.array(zRateRuleCondition).optional(),
6608
- effective_date: z.iso.date().optional()
6812
+ effective_date: z.iso.date().optional(),
6813
+ effect: z.object({
6814
+ type: z.enum(['wage_increment', 'fringe_increment']),
6815
+ amount_cents: z.string()
6816
+ }),
6817
+ conditions: z.array(z.union([
6818
+ zRateRuleTimeRangeCondition,
6819
+ zRateRuleDaysCondition,
6820
+ zRateRuleSpecificDateCondition,
6821
+ zRateRuleApprenticePeriodCondition,
6822
+ zRateRuleApprenticeHoursCondition,
6823
+ zRateRuleOvertimeMultiplierCondition
6824
+ ])).optional()
6609
6825
  });
6610
6826
  /**
6611
6827
  * Change a rule from an effective date forward. Omitted effect or conditions keep that part of the targeted version. When the targeted recipe changes, the resulting complete recipe applies from that coordinate across later scheduled versions; an unchanged recipe does not alter later scheduled versions. An empty conditions list makes the rule unconditional. Omit effective_from to correct the selected version from its exact existing start. A rule with an unbounded lower limit requires effective_from.
6612
6828
  */
6613
6829
  export const zPayRatesRuleUpdateParameters = z.object({
6614
- effect: zRateRuleEffect.optional(),
6615
- conditions: z.array(zRateRuleCondition).optional(),
6616
- effective_from: z.iso.date().optional()
6830
+ effective_from: z.iso.date().optional(),
6831
+ effect: z.object({
6832
+ type: z.enum(['wage_increment', 'fringe_increment']),
6833
+ amount_cents: z.string()
6834
+ }).optional(),
6835
+ conditions: z.array(z.union([
6836
+ zRateRuleTimeRangeCondition,
6837
+ zRateRuleDaysCondition,
6838
+ zRateRuleSpecificDateCondition,
6839
+ zRateRuleApprenticePeriodCondition,
6840
+ zRateRuleApprenticeHoursCondition,
6841
+ zRateRuleOvertimeMultiplierCondition
6842
+ ])).optional()
6617
6843
  });
6618
6844
  /**
6619
6845
  * Parameters for moving where a pay-rate rule family's valid-time timeline begins.
@@ -6628,12 +6854,22 @@ export const zPayRatesRuleScheduledTerminationParameters = z.object({
6628
6854
  effective_date: z.iso.date()
6629
6855
  });
6630
6856
  /**
6631
- * Schedule a rule recipe change from a company-local effective date.
6857
+ * Schedule a rule recipe change from an effective date in the package's timezone, which is that of the project or job holding the package, else its company's.
6632
6858
  */
6633
6859
  export const zPayRatesRuleScheduledChangeParameters = z.object({
6634
6860
  effective_date: z.iso.date(),
6635
- effect: zRateRuleEffect.optional(),
6636
- conditions: z.array(zRateRuleCondition).optional()
6861
+ effect: z.object({
6862
+ type: z.enum(['wage_increment', 'fringe_increment']),
6863
+ amount_cents: z.string()
6864
+ }).optional(),
6865
+ conditions: z.array(z.union([
6866
+ zRateRuleTimeRangeCondition,
6867
+ zRateRuleDaysCondition,
6868
+ zRateRuleSpecificDateCondition,
6869
+ zRateRuleApprenticePeriodCondition,
6870
+ zRateRuleApprenticeHoursCondition,
6871
+ zRateRuleOvertimeMultiplierCondition
6872
+ ])).optional()
6637
6873
  });
6638
6874
  export const zPayRatesRuleHistoryCorrectionObject = z.object({
6639
6875
  pay_rates_rule_id: z.string(),
@@ -6839,8 +7075,72 @@ export const zOvertimeRuleScheduledTerminationParameters = z.object({
6839
7075
  */
6840
7076
  export const zRateRuleParameters = z.object({
6841
7077
  effective_date: z.iso.date().nullish(),
6842
- effect: zRateRuleEffect,
6843
- conditions: z.array(zRateRuleCondition).optional()
7078
+ effect: z.object({
7079
+ type: z.enum(['wage_increment', 'fringe_increment']),
7080
+ amount_cents: z.string()
7081
+ }),
7082
+ conditions: z.array(z.union([
7083
+ zRateRuleTimeRangeCondition,
7084
+ zRateRuleDaysCondition,
7085
+ zRateRuleSpecificDateCondition,
7086
+ zRateRuleApprenticePeriodCondition,
7087
+ zRateRuleApprenticeHoursCondition,
7088
+ zRateRuleOvertimeMultiplierCondition
7089
+ ])).optional()
7090
+ });
7091
+ /**
7092
+ * Create an asset item. The write API creates serial items only; assets_product_id and serial_number identify the product and serial number. `attribute_values` fills the item-level attributes of the product's category. On create you may also place the item — assets_site_id to stock it at a site, or user_id to assign it to a user (the two are mutually exclusive). performed_by_user_id is required.
7093
+ */
7094
+ export const zAssetsItemParameters = z.object({
7095
+ name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7096
+ description: z.string().nullish(),
7097
+ assets_product_id: z.string(),
7098
+ serial_number: z.string().nullish(),
7099
+ status: z.enum(['available', 'assigned']).optional(),
7100
+ purchase_date: z.string().nullish(),
7101
+ purchase_price_cents: z.int().nullish(),
7102
+ external_id: z.string().nullish(),
7103
+ external_system_url: z.string().nullish(),
7104
+ attribute_values: z.array(z.object({
7105
+ assets_attribute_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7106
+ value: z.string().nullish(),
7107
+ assets_attribute_option_id: z.string().nullish()
7108
+ })).optional(),
7109
+ images_attributes: z.array(z.object({
7110
+ id: z.string().optional(),
7111
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
7112
+ _destroy: z.boolean().optional()
7113
+ })).optional(),
7114
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7115
+ assets_site_id: z.string().nullish(),
7116
+ user_id: z.string().nullish(),
7117
+ container_item_id: z.string().nullish(),
7118
+ assets_sub_location_id: z.string().nullish()
7119
+ });
7120
+ /**
7121
+ * 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. The serial-only fields (serial_number, status, purchase_date, purchase_price_cents, external_id, external_system_url) apply to a serial item; sending one for a bulk item answers 422 subtype_foreign_keys with an entry pointing at each such field, and nothing is written.
7122
+ */
7123
+ export const zAssetsItemUpdateParameters = z.object({
7124
+ name: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
7125
+ description: z.string().nullish(),
7126
+ assets_product_id: z.string().optional(),
7127
+ serial_number: z.string().nullish(),
7128
+ status: z.enum(['available', 'assigned']).optional(),
7129
+ purchase_date: z.string().nullish(),
7130
+ purchase_price_cents: z.int().nullish(),
7131
+ external_id: z.string().nullish(),
7132
+ external_system_url: z.string().nullish(),
7133
+ attribute_values: z.array(z.object({
7134
+ assets_attribute_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7135
+ value: z.string().nullish(),
7136
+ assets_attribute_option_id: z.string().nullish()
7137
+ })).optional(),
7138
+ images_attributes: z.array(z.object({
7139
+ id: z.string().optional(),
7140
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
7141
+ _destroy: z.boolean().optional()
7142
+ })).optional(),
7143
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
6844
7144
  });
6845
7145
  /**
6846
7146
  * A vendor in the company's asset catalog — a supplier or manufacturer that products are sourced from.
@@ -7072,137 +7372,31 @@ export const zAssetsItemResponseObject = z.object({
7072
7372
  updated_at: z.iso.datetime()
7073
7373
  });
7074
7374
  /**
7075
- * One attachment in a nested collection. Send file with a signed_id to add one; send id (with _destroy) to remove an existing one.
7375
+ * 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.
7076
7376
  */
7077
- export const zAssetsAttachmentParameters = z.object({
7078
- id: z.string().optional(),
7079
- file: z.string().optional(),
7080
- _destroy: z.boolean().optional()
7377
+ export const zAssetsDocumentResponseObject = z.object({
7378
+ id: z.string(),
7379
+ assets_item_id: z.string(),
7380
+ name: z.string(),
7381
+ filename: z.string().nullable(),
7382
+ description: z.string().nullable(),
7383
+ certified: z.boolean(),
7384
+ created_by_user_id: z.string(),
7385
+ file: z.object({
7386
+ filename: z.string(),
7387
+ content_type: z.string().nullable(),
7388
+ byte_size: z.int(),
7389
+ url: z.string()
7390
+ }).nullable(),
7391
+ created_at: z.iso.datetime(),
7392
+ updated_at: z.iso.datetime()
7081
7393
  });
7082
7394
  /**
7083
- * Create a catalog product. `type` (serial or bulk) is required and immutable. `attribute_values` upserts the product's category-attribute values.
7395
+ * Attach a file to an asset item as a document. file is required and takes a signed_id from the direct-upload endpoint.
7084
7396
  */
7085
- export const zAssetsProductParameters = z.object({
7086
- type: z.enum(['serial', 'bulk']),
7087
- name: z.string().min(1),
7088
- description: z.string().nullish(),
7089
- assets_category_id: z.string().nullish(),
7090
- upc: z.string().nullish(),
7091
- internal_sku: z.string().nullish(),
7092
- default_minimum_quantity: z.int().nullish(),
7093
- make: z.string().nullish(),
7094
- model: z.string().nullish(),
7095
- counted_by: z.enum([
7096
- 'each',
7097
- 'pair',
7098
- 'pack'
7099
- ]).optional(),
7100
- container: z.boolean().optional(),
7101
- attribute_values: z.array(z.object({
7102
- assets_attribute_id: z.string(),
7103
- value: z.string().nullish(),
7104
- assets_attribute_option_id: z.string().nullish()
7105
- })).optional(),
7106
- images_attributes: z.array(zAssetsAttachmentParameters).optional(),
7107
- performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7108
- });
7109
- /**
7110
- * 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.
7111
- */
7112
- export const zAssetsProductUpdateParameters = z.object({
7113
- name: z.string().min(1).optional(),
7114
- description: z.string().nullish(),
7115
- assets_category_id: z.string().nullish(),
7116
- upc: z.string().nullish(),
7117
- internal_sku: z.string().nullish(),
7118
- default_minimum_quantity: z.int().nullish(),
7119
- make: z.string().nullish(),
7120
- model: z.string().nullish(),
7121
- counted_by: z.enum([
7122
- 'each',
7123
- 'pair',
7124
- 'pack'
7125
- ]).optional(),
7126
- container: z.boolean().optional(),
7127
- attribute_values: z.array(z.object({
7128
- assets_attribute_id: z.string(),
7129
- value: z.string().nullish(),
7130
- assets_attribute_option_id: z.string().nullish()
7131
- })).optional(),
7132
- images_attributes: z.array(zAssetsAttachmentParameters).optional()
7133
- });
7134
- /**
7135
- * Create an asset item. The write API creates serial items only; assets_product_id and serial_number identify the product and serial number. `attribute_values` fills the item-level attributes of the product's category. On create you may also place the item — assets_site_id to stock it at a site, or user_id to assign it to a user (the two are mutually exclusive). performed_by_user_id is required.
7136
- */
7137
- export const zAssetsItemParameters = z.object({
7138
- name: z.string().min(1),
7139
- description: z.string().optional(),
7140
- assets_product_id: z.string(),
7141
- serial_number: z.string(),
7142
- status: z.enum(['available', 'assigned']).optional(),
7143
- purchase_date: z.iso.datetime().optional(),
7144
- purchase_price_cents: z.int().optional(),
7145
- external_id: z.string().optional(),
7146
- external_system_url: z.string().optional(),
7147
- attribute_values: z.array(z.object({
7148
- assets_attribute_id: z.string(),
7149
- value: z.string().nullish(),
7150
- assets_attribute_option_id: z.string().nullish()
7151
- })).optional(),
7152
- images_attributes: z.array(zAssetsAttachmentParameters).optional(),
7153
- assets_site_id: z.string().optional(),
7154
- user_id: z.string().optional(),
7155
- container_item_id: z.string().optional(),
7156
- assets_sub_location_id: z.string().optional(),
7157
- performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7158
- });
7159
- /**
7160
- * 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.
7161
- */
7162
- export const zAssetsItemUpdateParameters = z.object({
7163
- name: z.string().min(1).optional(),
7164
- description: z.string().optional(),
7165
- assets_product_id: z.string().optional(),
7166
- serial_number: z.string().optional(),
7167
- status: z.enum(['available', 'assigned']).optional(),
7168
- purchase_date: z.iso.datetime().optional(),
7169
- purchase_price_cents: z.int().optional(),
7170
- external_id: z.string().optional(),
7171
- external_system_url: z.string().optional(),
7172
- attribute_values: z.array(z.object({
7173
- assets_attribute_id: z.string(),
7174
- value: z.string().nullish(),
7175
- assets_attribute_option_id: z.string().nullish()
7176
- })).optional(),
7177
- images_attributes: z.array(zAssetsAttachmentParameters).optional(),
7178
- performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7179
- });
7180
- /**
7181
- * 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.
7182
- */
7183
- export const zAssetsDocumentResponseObject = z.object({
7184
- id: z.string(),
7185
- assets_item_id: z.string(),
7186
- name: z.string(),
7187
- filename: z.string().nullable(),
7188
- description: z.string().nullable(),
7189
- certified: z.boolean(),
7190
- created_by_user_id: z.string(),
7191
- file: z.object({
7192
- filename: z.string(),
7193
- content_type: z.string().nullable(),
7194
- byte_size: z.int(),
7195
- url: z.string()
7196
- }).nullable(),
7197
- created_at: z.iso.datetime(),
7198
- updated_at: z.iso.datetime()
7199
- });
7200
- /**
7201
- * Attach a file to an asset item as a document. file is required and takes a signed_id from the direct-upload endpoint.
7202
- */
7203
- export const zAssetsDocumentParameters = z.object({
7204
- file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7205
- filename: z.string().nullish(),
7397
+ export const zAssetsDocumentParameters = z.object({
7398
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7399
+ filename: z.string().nullish(),
7206
7400
  description: z.string().nullish(),
7207
7401
  performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7208
7402
  });
@@ -7553,8 +7747,12 @@ export const zAssetsServiceEventParameters = z.object({
7553
7747
  notes: z.string().nullish(),
7554
7748
  performed_on: z.iso.date(),
7555
7749
  assets_service_schedule_id: z.string().nullish(),
7556
- performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7557
- attachments_attributes: z.array(zAssetsAttachmentParameters).optional()
7750
+ attachments_attributes: z.array(z.object({
7751
+ id: z.string().optional(),
7752
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
7753
+ _destroy: z.boolean().optional()
7754
+ })).optional(),
7755
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7558
7756
  });
7559
7757
  /**
7560
7758
  * Update a service event. Event fields are optional — send only what changes — but performed_by_user_id is required to record the updater. A linked schedule dictates kind, and changing or removing the link recomputes affected due dates.
@@ -7568,8 +7766,12 @@ export const zAssetsServiceEventUpdateParameters = z.object({
7568
7766
  notes: z.string().nullish(),
7569
7767
  performed_on: z.iso.date().optional(),
7570
7768
  assets_service_schedule_id: z.string().nullish(),
7571
- performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/),
7572
- attachments_attributes: z.array(zAssetsAttachmentParameters).optional()
7769
+ attachments_attributes: z.array(z.object({
7770
+ id: z.string().optional(),
7771
+ file: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/).optional(),
7772
+ _destroy: z.boolean().optional()
7773
+ })).optional(),
7774
+ performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7573
7775
  });
7574
7776
  /**
7575
7777
  * A product-level service cadence that seeds and syncs the matching schedules on that product's items. Changing its defining fields (name, kind, interval) reconciles linked item schedules in the background.
@@ -7763,6 +7965,10 @@ export const zAssetsServiceScheduleSyncParameters = z.object({
7763
7965
  schedule_ids: z.array(z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)).min(1).optional(),
7764
7966
  performed_by_user_id: z.string().regex(/[^\x09-\x0D\x20…   - ‧-‪   ]|[‧‪]/)
7765
7967
  });
7968
+ /**
7969
+ * Archive a competence standard. The body takes no fields; send an empty object or no body. Archiving an archived standard returns it unchanged.
7970
+ */
7971
+ export const zCompetencyStandardArchiveParametersWritable = z.record(z.string(), z.never());
7766
7972
  /**
7767
7973
  * Revoke an active grant. The body takes no fields; send an empty object or no body. Revocation sets revoked_at and keeps the row; revoking it again answers 409 authorization_revoked.
7768
7974
  */
@@ -9392,6 +9598,213 @@ export const zRevokeAssessorAuthorizationPath = z.object({
9392
9598
  * Created
9393
9599
  */
9394
9600
  export const zRevokeAssessorAuthorizationResponse = zCompetencyAssessorAuthorizationResponseObject;
9601
+ export const zListLevelsPath = z.object({
9602
+ standard_id: z.string(),
9603
+ version_id: z.string()
9604
+ });
9605
+ export const zListLevelsQuery = z.object({
9606
+ filter: z.string().optional(),
9607
+ 'filter[unexpected]': z.string().optional()
9608
+ });
9609
+ /**
9610
+ * Success
9611
+ */
9612
+ export const zListLevelsResponse = z.object({
9613
+ meta: zMeta,
9614
+ links: zLinks,
9615
+ data: z.array(zCompetencyLevelResponseObject)
9616
+ });
9617
+ export const zCreateLevelBody = zCompetencyLevelParameters;
9618
+ export const zCreateLevelPath = z.object({
9619
+ standard_id: z.string(),
9620
+ version_id: z.string()
9621
+ });
9622
+ /**
9623
+ * Created
9624
+ */
9625
+ export const zCreateLevelResponse = zCompetencyLevelResponseObject;
9626
+ export const zDeleteLevelPath = z.object({
9627
+ standard_id: z.string(),
9628
+ version_id: z.string(),
9629
+ id: z.string()
9630
+ });
9631
+ /**
9632
+ * No Content
9633
+ */
9634
+ export const zDeleteLevelResponse = z.void();
9635
+ export const zGetLevelPath = z.object({
9636
+ standard_id: z.string(),
9637
+ version_id: z.string(),
9638
+ id: z.string()
9639
+ });
9640
+ /**
9641
+ * Success
9642
+ */
9643
+ export const zGetLevelResponse = zCompetencyLevelResponseObject;
9644
+ export const zUpdateLevelBody = zCompetencyLevelParameters;
9645
+ export const zUpdateLevelPath = z.object({
9646
+ standard_id: z.string(),
9647
+ version_id: z.string(),
9648
+ id: z.string()
9649
+ });
9650
+ /**
9651
+ * Success
9652
+ */
9653
+ export const zUpdateLevelResponse = zCompetencyLevelResponseObject;
9654
+ export const zMoveCompetencyLevelBody = zCompetencySortOrderMoveParameters;
9655
+ export const zMoveCompetencyLevelPath = z.object({
9656
+ standard_id: z.string(),
9657
+ version_id: z.string(),
9658
+ level_id: z.string()
9659
+ });
9660
+ /**
9661
+ * Success
9662
+ */
9663
+ export const zMoveCompetencyLevelResponse = zCompetencyLevelResponseObject;
9664
+ export const zListKeyActivitiesPath = z.object({
9665
+ standard_id: z.string(),
9666
+ version_id: z.string(),
9667
+ level_id: z.string()
9668
+ });
9669
+ export const zListKeyActivitiesQuery = z.object({
9670
+ filter: z.string().optional(),
9671
+ 'filter[unexpected]': z.string().optional()
9672
+ });
9673
+ /**
9674
+ * Success
9675
+ */
9676
+ export const zListKeyActivitiesResponse = z.object({
9677
+ meta: zMeta,
9678
+ links: zLinks,
9679
+ data: z.array(zCompetencyKeyActivityResponseObject)
9680
+ });
9681
+ export const zCreateKeyActivityBody = zCompetencyKeyActivityParameters;
9682
+ export const zCreateKeyActivityPath = z.object({
9683
+ standard_id: z.string(),
9684
+ version_id: z.string(),
9685
+ level_id: z.string()
9686
+ });
9687
+ /**
9688
+ * Created
9689
+ */
9690
+ export const zCreateKeyActivityResponse = zCompetencyKeyActivityResponseObject;
9691
+ export const zDeleteKeyActivityPath = z.object({
9692
+ standard_id: z.string(),
9693
+ version_id: z.string(),
9694
+ level_id: z.string(),
9695
+ id: z.string()
9696
+ });
9697
+ /**
9698
+ * No Content
9699
+ */
9700
+ export const zDeleteKeyActivityResponse = z.void();
9701
+ export const zGetKeyActivityPath = z.object({
9702
+ standard_id: z.string(),
9703
+ version_id: z.string(),
9704
+ level_id: z.string(),
9705
+ id: z.string()
9706
+ });
9707
+ /**
9708
+ * Success
9709
+ */
9710
+ export const zGetKeyActivityResponse = zCompetencyKeyActivityResponseObject;
9711
+ export const zUpdateKeyActivityBody = zCompetencyKeyActivityParameters;
9712
+ export const zUpdateKeyActivityPath = z.object({
9713
+ standard_id: z.string(),
9714
+ version_id: z.string(),
9715
+ level_id: z.string(),
9716
+ id: z.string()
9717
+ });
9718
+ /**
9719
+ * Success
9720
+ */
9721
+ export const zUpdateKeyActivityResponse = zCompetencyKeyActivityResponseObject;
9722
+ export const zMoveCompetencyKeyActivityBody = zCompetencySortOrderMoveParameters;
9723
+ export const zMoveCompetencyKeyActivityPath = z.object({
9724
+ standard_id: z.string(),
9725
+ version_id: z.string(),
9726
+ level_id: z.string(),
9727
+ key_activity_id: z.string()
9728
+ });
9729
+ /**
9730
+ * Success
9731
+ */
9732
+ export const zMoveCompetencyKeyActivityResponse = zCompetencyKeyActivityResponseObject;
9733
+ export const zListCriteriaPath = z.object({
9734
+ standard_id: z.string(),
9735
+ version_id: z.string(),
9736
+ level_id: z.string(),
9737
+ key_activity_id: z.string()
9738
+ });
9739
+ export const zListCriteriaQuery = z.object({
9740
+ filter: z.string().optional(),
9741
+ 'filter[unexpected]': z.string().optional()
9742
+ });
9743
+ /**
9744
+ * Success
9745
+ */
9746
+ export const zListCriteriaResponse = z.object({
9747
+ meta: zMeta,
9748
+ links: zLinks,
9749
+ data: z.array(zCompetencyCriterionResponseObject)
9750
+ });
9751
+ export const zCreateCriterionBody = zCompetencyCriterionParameters;
9752
+ export const zCreateCriterionPath = z.object({
9753
+ standard_id: z.string(),
9754
+ version_id: z.string(),
9755
+ level_id: z.string(),
9756
+ key_activity_id: z.string()
9757
+ });
9758
+ /**
9759
+ * Created
9760
+ */
9761
+ export const zCreateCriterionResponse = zCompetencyCriterionResponseObject;
9762
+ export const zDeleteCriterionPath = z.object({
9763
+ standard_id: z.string(),
9764
+ version_id: z.string(),
9765
+ level_id: z.string(),
9766
+ key_activity_id: z.string(),
9767
+ id: z.string()
9768
+ });
9769
+ /**
9770
+ * No Content
9771
+ */
9772
+ export const zDeleteCriterionResponse = z.void();
9773
+ export const zGetCriterionPath = z.object({
9774
+ standard_id: z.string(),
9775
+ version_id: z.string(),
9776
+ level_id: z.string(),
9777
+ key_activity_id: z.string(),
9778
+ id: z.string()
9779
+ });
9780
+ /**
9781
+ * Success
9782
+ */
9783
+ export const zGetCriterionResponse = zCompetencyCriterionResponseObject;
9784
+ export const zUpdateCriterionBody = zCompetencyCriterionParameters;
9785
+ export const zUpdateCriterionPath = z.object({
9786
+ standard_id: z.string(),
9787
+ version_id: z.string(),
9788
+ level_id: z.string(),
9789
+ key_activity_id: z.string(),
9790
+ id: z.string()
9791
+ });
9792
+ /**
9793
+ * Success
9794
+ */
9795
+ export const zUpdateCriterionResponse = zCompetencyCriterionResponseObject;
9796
+ export const zMoveCompetencyCriterionBody = zCompetencySortOrderMoveParameters;
9797
+ export const zMoveCompetencyCriterionPath = z.object({
9798
+ standard_id: z.string(),
9799
+ version_id: z.string(),
9800
+ level_id: z.string(),
9801
+ key_activity_id: z.string(),
9802
+ criterion_id: z.string()
9803
+ });
9804
+ /**
9805
+ * Success
9806
+ */
9807
+ export const zMoveCompetencyCriterionResponse = zCompetencyCriterionResponseObject;
9395
9808
  export const zListQualificationsQuery = z.object({
9396
9809
  'filter[candidate_user_id]': z.string().optional(),
9397
9810
  'filter[competencies_standard_id]': z.string().optional(),
@@ -9417,6 +9830,136 @@ export const zGetQualificationPath = z.object({
9417
9830
  * Success
9418
9831
  */
9419
9832
  export const zGetQualificationResponse = zCompetencyQualificationResponseObject;
9833
+ export const zListStandardsQuery = z.object({
9834
+ 'filter[name]': z.string().optional(),
9835
+ 'filter[companies_department_id]': z.string().optional(),
9836
+ 'filter[catalog_status]': z.enum([
9837
+ 'active',
9838
+ 'draft',
9839
+ 'archived'
9840
+ ]).optional(),
9841
+ 'filter[created_at][gte]': z.iso.datetime().optional(),
9842
+ 'filter[created_at][lte]': z.iso.datetime().optional(),
9843
+ 'filter[updated_at][gte]': z.iso.datetime().optional(),
9844
+ 'filter[updated_at][lte]': z.iso.datetime().optional(),
9845
+ filter: z.string().optional(),
9846
+ 'filter[unexpected]': z.string().optional(),
9847
+ 'page[cursor]': z.string().optional(),
9848
+ 'page[limit]': z.int().gte(1).optional().default(20),
9849
+ page: z.string().optional()
9850
+ });
9851
+ /**
9852
+ * Success
9853
+ */
9854
+ export const zListStandardsResponse = z.object({
9855
+ meta: zMeta,
9856
+ links: zLinks,
9857
+ data: z.array(zCompetencyStandardResponseObject)
9858
+ });
9859
+ export const zCreateStandardBody = zCompetencyStandardParameters;
9860
+ /**
9861
+ * Created
9862
+ */
9863
+ export const zCreateStandardResponse = zCompetencyStandardResponseObject;
9864
+ export const zGetStandardPath = z.object({
9865
+ id: z.string()
9866
+ });
9867
+ /**
9868
+ * Success
9869
+ */
9870
+ export const zGetStandardResponse = zCompetencyStandardResponseObject;
9871
+ export const zUpdateStandardBody = zCompetencyStandardUpdateParameters;
9872
+ export const zUpdateStandardPath = z.object({
9873
+ id: z.string()
9874
+ });
9875
+ /**
9876
+ * Success
9877
+ */
9878
+ export const zUpdateStandardResponse = zCompetencyStandardResponseObject;
9879
+ export const zUnarchiveCompetencyStandardPath = z.object({
9880
+ standard_id: z.string()
9881
+ });
9882
+ /**
9883
+ * Success
9884
+ */
9885
+ export const zUnarchiveCompetencyStandardResponse = zCompetencyStandardResponseObject;
9886
+ export const zArchiveCompetencyStandardBody = zCompetencyStandardArchiveParametersWritable;
9887
+ export const zArchiveCompetencyStandardPath = z.object({
9888
+ standard_id: z.string()
9889
+ });
9890
+ /**
9891
+ * Created
9892
+ */
9893
+ export const zArchiveCompetencyStandardResponse = zCompetencyStandardResponseObject;
9894
+ export const zListCompetencyStandardVersionsPath = z.object({
9895
+ standard_id: z.string()
9896
+ });
9897
+ export const zListCompetencyStandardVersionsQuery = z.object({
9898
+ 'filter[status]': z.enum([
9899
+ 'draft',
9900
+ 'active',
9901
+ 'superseded'
9902
+ ]).optional(),
9903
+ 'filter[created_at][gte]': z.iso.datetime().optional(),
9904
+ 'filter[created_at][lte]': z.iso.datetime().optional(),
9905
+ 'filter[updated_at][gte]': z.iso.datetime().optional(),
9906
+ 'filter[updated_at][lte]': z.iso.datetime().optional(),
9907
+ filter: z.string().optional(),
9908
+ 'filter[unexpected]': z.string().optional(),
9909
+ 'page[cursor]': z.string().optional(),
9910
+ 'page[limit]': z.int().gte(1).optional().default(20),
9911
+ page: z.string().optional()
9912
+ });
9913
+ /**
9914
+ * Success
9915
+ */
9916
+ export const zListCompetencyStandardVersionsResponse = z.object({
9917
+ meta: zMeta,
9918
+ links: zLinks,
9919
+ data: z.array(zCompetencyStandardVersionResponseObject)
9920
+ });
9921
+ export const zCreateCompetencyStandardVersionBody = zCompetencyStandardVersionParameters;
9922
+ export const zCreateCompetencyStandardVersionPath = z.object({
9923
+ standard_id: z.string()
9924
+ });
9925
+ /**
9926
+ * Created
9927
+ */
9928
+ export const zCreateCompetencyStandardVersionResponse = zCompetencyStandardVersionResponseObject;
9929
+ export const zDeleteCompetencyStandardVersionPath = z.object({
9930
+ standard_id: z.string(),
9931
+ id: z.string()
9932
+ });
9933
+ /**
9934
+ * No Content
9935
+ */
9936
+ export const zDeleteCompetencyStandardVersionResponse = z.void();
9937
+ export const zGetCompetencyStandardVersionPath = z.object({
9938
+ standard_id: z.string(),
9939
+ id: z.string()
9940
+ });
9941
+ /**
9942
+ * Success
9943
+ */
9944
+ export const zGetCompetencyStandardVersionResponse = zCompetencyStandardVersionResponseObject;
9945
+ export const zUpdateCompetencyStandardVersionBody = zCompetencyStandardVersionParameters;
9946
+ export const zUpdateCompetencyStandardVersionPath = z.object({
9947
+ standard_id: z.string(),
9948
+ id: z.string()
9949
+ });
9950
+ /**
9951
+ * Success
9952
+ */
9953
+ export const zUpdateCompetencyStandardVersionResponse = zCompetencyStandardVersionResponseObject;
9954
+ export const zPromoteCompetencyStandardVersionBody = zCompetencyStandardVersionPromotionParameters;
9955
+ export const zPromoteCompetencyStandardVersionPath = z.object({
9956
+ standard_id: z.string(),
9957
+ version_id: z.string()
9958
+ });
9959
+ /**
9960
+ * Created
9961
+ */
9962
+ export const zPromoteCompetencyStandardVersionResponse = zCompetencyStandardVersionResponseObject;
9420
9963
  export const zListChecksQuery = z.object({
9421
9964
  'filter[status]': z.enum([
9422
9965
  'passed',